{"version":3,"sources":["../node_modules/resolve-pathname/esm/resolve-pathname.js","../node_modules/value-equal/esm/value-equal.js","../node_modules/history/esm/history.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/v4.js","sdk/src/utils/logger.ts","utils/automation-helpers.ts","utils/string-helpers.ts","../node_modules/mobx-react-lite/es/utils.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/get.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/superPropBase.js","utils/array-helper.ts","app-react/components/base-components/orbit-component/orbit-component.ts","../node_modules/mobx-react-lite/es/assertEnvironment.js","../node_modules/mobx-react-lite/es/observerBatching.js","../node_modules/mobx-react-lite/es/staticRendering.js","../node_modules/mobx-react-lite/es/printDebugValue.js","../node_modules/mobx-react-lite/es/reactionCleanupTracking.js","../node_modules/mobx-react-lite/es/useQueuedForceUpdate.js","../node_modules/mobx-react-lite/es/useObserver.js","../node_modules/mobx-react-lite/es/observer.js","../node_modules/mobx-react-lite/es/ObserverComponent.js","../node_modules/mobx-react-lite/es/useAsObservableSource.js","../node_modules/mobx-react-lite/es/index.js","common/utils/time-functions.ts","sdk/src/utils/underscore.ts","app-react/components/tap-handler/tap-handler.component.tsx","sdk/src/utils/device/detection/feature.ts","sdk/src/utils/device/detection/os.ts","sdk/src/utils/device/detection/viewport.ts","sdk/src/utils/device/detection/model.ts","sdk/src/utils/device/detection/browser.ts","sdk/src/utils/device/detection/hybrid.ts","sdk/src/utils/device/device.ts","sdk/src/utils/dom.ts","app-react/orbit-context.ts","app-react/services/dom/dom.service.ts","utils/Lazy.ts","app-react/services/routing/routing-utils.ts","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","app-react/services/routing/route/fallback-route.ts","app-react/services/routing/route/route-base.ts","app-react/services/splash/splash.service.ts","app-react/components/raw-components/image/image.tsx","sdk/src/utils/store.ts","app-react/components/base-components/orbit-component-with-state/orbit-component-with-state.ts","../node_modules/assign-deep/index.js","../node_modules/is-primitive/index.js","../node_modules/assign-deep/node_modules/assign-symbols/index.js","../node_modules/assign-deep/node_modules/kind-of/index.js","../node_modules/js-logger/src/logger.js","../node_modules/mini-create-react-context/dist/esm/index.js","../node_modules/@babel/runtime/helpers/inheritsLoose.js","../node_modules/gud/index.js","../node_modules/path-to-regexp/index.js","../node_modules/isarray/index.js","../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/webpack/buildin/amd-options.js","../node_modules/@888webteam/iframe-allow-camera/dist/index.js","sdk/src/utils/strings.ts"],"names":["isAbsolute","pathname","charAt","spliceOne","list","index","i","k","n","length","pop","resolvePathname","to","from","undefined","hasTrailingSlash","toParts","split","fromParts","isToAbs","isFromAbs","mustEndAbs","concat","last","up","part","unshift","result","join","substr","valueOf","obj","Object","prototype","call","valueEqual","a","b","Array","isArray","every","item","aValue","bValue","keys","assign","key","createPath","location","search","hash","path","createLocation","state","currentLocation","hashIndex","indexOf","searchIndex","parsePath","_extends","decodeURI","e","URIError","locationsAreEqual","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","action","getUserConfirmation","callback","appendListener","fn","isActive","listener","apply","arguments","push","filter","notifyListeners","_len","args","_key","forEach","window","document","createElement","clamp","lowerBound","upperBound","Math","min","max","createMemoryHistory","props","_props","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","_props$keyLength","keyLength","transitionManager","setState","nextState","history","entries","createKey","random","toString","map","entry","createHref","go","nextIndex","ok","nextEntries","slice","splice","replace","goBack","goForward","canGo","block","listen","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","validate","uuid","REGEX","test","byteToHex","stringify","arr","offset","toLowerCase","TypeError","v4","options","buf","rnds","logger","useDefaults","Logger","name","_logger","logLevel","this","_getQueryParameters","get","setLevel","SET_LOG_LEVEL","log","_log","severity","_isConsoleEnabled","console","str","level","toUpperCase","DEBUG","INFO","WARN","ERROR","OFF","NamedIntervalType","isInsideAutomation","Check","isNullOrUndefined","mockApplicationStartupConfigs","configs","getCypressToOrbitHooks","onAppStartupConfigs","matchAllWords","text","words","match","removeSpaces","removeSpecialCharacters","extractWordsRegularExpressions","word","trim","RegExp","convertStringArrayToString","messages","joinCharacters","__read","o","m","Symbol","iterator","r","ar","next","done","value","error","useForceUpdate","setTick","useState","useCallback","tick","isPlainObject","proto","getPrototypeOf","getSymbol","for","mockGlobal","getGlobal","global","self","target","property","receiver","Reflect","base","object","hasOwnProperty","desc","getOwnPropertyDescriptor","splitArrayToChunks","originalArray","chunkSize","arraysEqual","arr1","arr2","shuffle","array","t","floor","OrbitComponent","OrbitComponentWithState","spy","observerBatchingConfiguredSymbol","defaultNoopBatch","globalIsUsingStaticRendering","isUsingStaticRendering","printDebugValue","v","getDependencyTree","reactionCleanupHandle","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","uncommittedReactionRefs","Set","ensureCleanupTimerRunning","setTimeout","cleanUncommittedReactions","now","Date","ref","tracking","current","cleanAt","reaction","dispose","delete","size","insideRender","forceUpdateQueue","EMPTY_OBJECT","observerComponentNameFor","baseComponentName","useObserver","queuedForceUpdate","forceUpdate","useQueuedForceUpdate","reactionTrackingRef","React","useRef","newReaction_1","Reaction","trackingData_1","mounted","createTrackingData","add","useDebugValue","useEffect","reactionRef","Infinity","queue_1","useLayoutEffect","x","useQueuedForceUpdateBlock","rendering","exception","track","__assign","s","p","observer","baseComponent","memoComponent","realOptions","forwardRef","displayName","wrappedComponent","memo","hoistBlackList","defineProperty","$$typeof","render","compare","type","ObserverComponent","_a","children","component","ObserverPropsCheck","componentName","propFullName","extraKey","hasProp","hasExtraProp","propTypes","reactionScheduler","batch","configure","namedTimer","handler","interval","intervalType","javascriptFunction","timeSpan","isNumber","TimeSpan","fromMilliseconds","convertToTimeSpan","response","onTimeIntervalCreation","ignoreJavaScriptImplementation","timerId","totalMilliseconds","namedSetInterval","setInterval","namedSetTimeout","Underscore","input","isNaN","expectedArray","isNull","isUndefined","propChain","properties","shift","constructor","defaultValue","Number","expectedNodeList","stringRepr","nodeType","expectedElement","HTMLElement","src","id","Promise","resolve","reject","onload","onerror","body","appendChild","s4","substring","possible","link","url","isString","URL","err","isFullScreen","closeFullScreen","openFullScreen","documentElement","Element","DOM","hasClass","addClass","removeClass","event","charCode","which","keyCode","shiftOn","shiftKey","modifiers","source","curr","xmlStr","xmlDoc","ActiveXObject","async","loadXML","DOMParser","parseFromString","_createXmlDoc","pairs","pair","pairMatch","decodeURIComponent","JSON","parse","json","isEmpty","encodeURIComponent","getBody","toParse","defaultInException","ex","val","strFunction","startFunctionParams","endFunctionParams","strFunctionName","strFunctionParams","arrayFunctionParams","rawStringFunction","functionName","functionStringParams","functionArrayParams","removeUndefined","removeNull","cleanObject","Boolean","direction","scrollSize","duration","container","smoothLevel","res","stepInterval","ceil","restSize","scrollStepSize","scrollStepFn","scrollLeft","scrollTop","reduce","accum","prop","areItemsEqual","num","digits","formatMap","symbol","toFixed","context","TapHandlerLogic","_element","_timeoutRef","_onClickHandler","classList","ORBIT_TAP","remove","addEventListener","clearTimeout","removeEventListener","TapHandler","_tapHandlerLogic","enabled","elementRef","DeviceFeatureDetection","DocumentTouch","navigator","maxTouchPoints","DeviceOSDetection","parser","os","getOS","parseInt","version","isMobileOS","isIOS","isAndroid","DeviceViewportDetection","innerWidth","innerHeight","screen","height","width","ratio","systemXDPI","logicalXDPI","devicePixelRatio","matchMedia","matches","DeviceModelDetection","device","getDevice","vendor","model","DeviceBrowserDetection","browser","getBrowser","allowAttrValue","getAllowAttr","NATIVE_TYPE","DeviceHybridDetection","_hybrid","_inCasino","_inPoker","_inSport","_embedded","CLASS","buildHybridInfo","genericHybridEmbedded","inPokerHybrid","build_isInPokerHybrid","casinoHybrid","build_isCasinoHybrid","inSportHybrid","build_isInSportHybrid","dataSanityCheck","inPoker","isNativeIOS","isNativeAndroid","NativeInterface","Store","storedClientVersion","startsWith","storedSourceProductPackage","className","webkit","messageHandlers","Device","_uaParser","UAParser","feature","viewport","hybrid","getUA","connection","effectiveType","rtt","downlink","uuidv4","media","standalone","isHybrid","isStandalone","getContext","isProbablyIOSDevice","cookieEnabled","isMacOS","isTouch","isIpad","isIphone","isMobile","screenWidth","screenHeight","getIphoneVersion","isTablet","bd","bmt","count","tt","_createLogger","element","append","query","el","_","isTag","tag","isId","getElementById","querySelectorAll","isNodeList","selector","querySelector","content","newStyle","innerHTML","html","domElement","_class","isElement","parentNode","removeChild","insertBefore","firstChild","toggle","contains","attribute","setAttribute","style","removeProperty","getCurrentStyle","horizontMargin","parseFloat","marginLeft","marginRight","verticalMargin","marginBottom","marginTop","offsetWidth","offsetHeight","horizontPadding","paddingLeft","paddingRight","verticalPadding","paddingBottom","paddingTop","horizontBorder","borderLeftWidth","borderRightWidth","verticalBorder","borderBottomWidth","borderTopWidth","fullWidth","fullHeight","unit","getComputedStyle","attr","removeAttribute","tagName","g","data","attributes","camelCaseName","$0","$1","textContent","msgElement","msgType","msgCallback","useCapture","eventName","isFunction","timeout","handle","clearInterval","OrbitContext","createContext","OrbitContextProvider","Provider","Consumer","DomService","observable","initialBodyPaddingRight","bodyPaddingRightAltered","_eventListenerRegistration","_onFullScreenChange","runInAction","isInFullScreen","EventListenerRegistration","clientWidth","scrollbarThickness","bodyComputedStyles","head","title","getElementsByClassName","getElementsByTagName","params","form","method","hiddenField","extraParams","submit","Lazy","_valueFactory","_value","_initializing","_initValue","tryMatchPath","pathToMatch","routes","routeDefinition","j","paths","pattern","matchPath","exact","strict","routeParams","reactIs","require","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","getOwnPropertyNames","getOwnPropertySymbols","objectPrototype","module","exports","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","prefix","invariant","condition","message","FallbackRoute","_routeDefinition","RouteBase","_routeParams","_isOrbitRoute","SplashService","splashTime","_splashRemovedSubscribers","startTime","performance","splashPageElement","computeSplashTimeInSeconds","_enablePrerender","timeoutValue","IMAGE_TYPE","IMAGE_STATUS","EMPTY_IMAGE","Image","_onLoad","status","LAZY","LOADING","SETTLED","SRC","onLoad","onSettled","_onError","FALLBACK","EMPTY_IMAGE_BASE64","fallbackSrc","onError","_intersectionObserver","_intersectionObserverCallback","intersectionRatio","isIntersecting","_destroyIntersectionObserver","onLoadStart","_captureImageElementRef","_createTapLogicHandler","_createIntersectionObserver","_getInitialSrcState","lazy","_destroyTapLogicHandler","prevProps","enableTap","IntersectionObserver","rootMargin","threshold","observe","disconnect","alt","onClick","CGPLogger","CGPStorage","_selectedStorage","init","isLocalStorageNameSupported","debug","LocalStorage","WindowStorage","setFullYear","getFullYear","cookie","toUTCString","testKey","storage","localStorage","setItem","removeItem","set","delKey","delArray","del","clear","_perfix","getQueryParameters","localStorageExists","getKeyConvention","getItem","isKeyConvention","Strings","keyConvention","_storgeKeyName","_cgpStorage","storageExists","defaultGetter","_reactions","services","_disposeReactions","expression","effect","opts","disposer","mobxReaction","Component","isPrimitive","assignSymbols","typeOf","len","isObject","extend","isValidKey","hasOwn","objects","isEnumerable","propertyIsEnumerable","provider","names","String","Function","isBuffer","logHandler","VERSION","contextualLoggersByNameMap","scope","func","merge","defineLogLevel","TRACE","TIME","ContextualLogger","defaultContext","filterLevel","info","newLevel","getLevel","enabledFor","lvl","trace","invoke","warn","time","label","timeEnd","msgArgs","globalLogger","L","setHandler","createDefaultHandler","formatter","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","timerLabel","getTime","defaultLevel","define","MAX_SIGNED_31_BIT_INT","createEventEmitter","handlers","on","off","h","newValue","changedBits","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","gud","_Component","_this","emitter","_inheritsLoose","_proto","getChildContext","_ref","componentWillReceiveProps","nextProps","oldValue","y","PropTypes","isRequired","_Component2","_this2","getValue","onUpdate","observedBits","_proto2","componentDidMount","componentWillUnmount","subClass","superClass","create","__proto__","isarray","pathToRegexp","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","tokens","defaultDelimiter","delimiter","exec","escaped","capture","group","modifier","asterisk","partial","repeat","optional","escapeGroup","escapeString","encodeURIComponentPretty","encodeURI","c","charCodeAt","flags","encode","pretty","token","segment","attachKeys","re","sensitive","end","route","endsWithDelimiter","groups","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SONY","XIAOMI","ZEBRA","FACEBOOK","enumerize","enums","has","str1","str2","lowerize","rgxMapper","ua","arrays","q","regex","strMapper","windowsVersionMap","regexes","CHROME","cpu","engine","EDGE","extensions","getResult","_ua","userAgent","_rgxmap","mergedRegexes","_browser","major","getCPU","_cpu","_device","getEngine","_engine","_os","setUA","BROWSER","CPU","DEVICE","ENGINE","OS","$","jQuery","Zepto","__webpack_amd_options__","l","d","enumerable","toStringTag","__esModule","default","BrowserInfo","platform","NodeInfo","bot","BotInfo","u","detect","parseUserAgent","detectOS","getNodeVersion","f","nodeName","run","fun","w","nextTick","env","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","umask","_curlyBracesPattern","_string","found","currentMatch","_getBindingMethod","bindExpression","bindMap","bindRelatedMethod","stringToInjectT","stringToInject","n1","partialString","searchString","position","bindingParams","bindTo"],"mappings":"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","file":"static/js/launcher~orbit-main.a9772d00.chunk.js","sourcesContent":["function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","function valueOf(obj) {\n return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n // Test for strict equality first.\n if (a === b) return true;\n\n // Otherwise, if either of them == null they are not equal.\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every(function(item, index) {\n return valueEqual(item, b[index]);\n })\n );\n }\n\n if (typeof a === 'object' || typeof b === 'object') {\n var aValue = valueOf(a);\n var bValue = valueOf(b);\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n return Object.keys(Object.assign({}, a, b)).every(function(key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\nexport default valueEqual;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import logger from 'js-logger';\r\n\r\nlogger.useDefaults();\r\n\r\nexport default class Logger {\r\n\r\n static SET_LOG_LEVEL(level = 'ERROR'): any {\r\n switch (level.toString().toUpperCase()) {\r\n case 'DEBUG':\r\n return logger.DEBUG;\r\n case 'INFO':\r\n return logger.INFO;\r\n case 'WARN':\r\n return logger.WARN;\r\n case 'ERROR':\r\n default:\r\n return logger.ERROR;\r\n case 'OFF':\r\n return logger.OFF;\r\n }\r\n }\r\n\r\n _logger;\r\n\r\n\r\n constructor(name: string) {\r\n let logLevel = this._getQueryParameters()['logLevel'] || window['LOG_LEVEL'];\r\n this._logger = logger.get(name);\r\n this._logger.setLevel(Logger.SET_LOG_LEVEL(logLevel));\r\n }\r\n\r\n\r\n /**\r\n * Fatal errors. Mission critical - application can not run properly when present.\r\n */\r\n error(...log): void {\r\n this._log('error', log);\r\n }\r\n\r\n\r\n /**\r\n * Warning only. Should be fixed but application been able to recover.\r\n */\r\n warn(...log): void {\r\n this._log('warn', log);\r\n }\r\n\r\n\r\n /**\r\n * Information only. General info printed.\r\n */\r\n info(...log): void {\r\n this._log('info', log);\r\n }\r\n\r\n\r\n /**\r\n * Debug mode. Print as much as possible to allow quick and easy debugging when needed.\r\n */\r\n debug(...log): void {\r\n this._log('debug', log);\r\n }\r\n\r\n\r\n /**\r\n * ULTRA Debug mode, almost silly to use. Print as much as possible to allow quick and easy debugging when needed.\r\n * But very useful debugging, should contain ALOT of prints via this method.\r\n */\r\n silly(...log) : void {\r\n this._log('silly', log);\r\n }\r\n\r\n\r\n /**\r\n * Private method, provides single point of access to the \"console.log\" API.\r\n * Prevents mess around the code and a clean way to prevent the output of the log or the severity level.\r\n */\r\n _log(severity: string, log: any) {\r\n if (this._isConsoleEnabled(severity)) {\r\n this._logger[severity](log);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Checks that console is globally defined and able to use it to print out log data to it.\r\n */\r\n private _isConsoleEnabled(severity: string): boolean {\r\n return 'undefined' !== typeof console && 'undefined' !== typeof console[severity]; // eslint-disable-line no-console\r\n }\r\n\r\n /**\r\n * Get Query String or \"string\" as Object\r\n */\r\n private _getQueryParameters(str?: string) {\r\n return (str || document.location.search).replace(/(^\\?)/, '').split(\"&\").map(function (n) {\r\n n = n.split(\"=\");\r\n this[n[0]] = n[1];\r\n\r\n return this;\r\n }.bind({}))[0];\r\n }\r\n\r\n}","import {Check, TimeSpan} from '@sparkware/app-utils';\r\nimport {ApplicationStartupConfigurations} from '../app-react/app-bootstrap/config-interfaces/application-startup.configurations';\r\nimport {TimeIntervalName} from '../common/utils/time-interval-names';\r\n\r\nexport const CYPRESS_TO_ORBIT_HOOKS_OBJECT_NAME = 'CypressToOrbitHooks';\r\nexport const CYPRESS_GLOBAL_OBJECT_NAME = 'Cypress';\r\n\r\nexport function isInsideAutomation(): boolean {\r\n return !Check.isNullOrUndefined(window[CYPRESS_GLOBAL_OBJECT_NAME])\r\n && !Check.isNullOrUndefined(window[CYPRESS_GLOBAL_OBJECT_NAME][CYPRESS_TO_ORBIT_HOOKS_OBJECT_NAME])\r\n}\r\n\r\n\r\nexport function mockApplicationStartupConfigs(configs: ApplicationStartupConfigurations): ApplicationStartupConfigurations {\r\n if(isInsideAutomation()) {\r\n getCypressToOrbitHooks().onAppStartupConfigs(configs);\r\n }\r\n return configs;\r\n}\r\n\r\nexport function getCypressToOrbitHooks(): ICypressToOrbitHooks {\r\n if(!isInsideAutomation()) {\r\n throw new Error('You can only call getCypressToOrbitHooks inside automation');\r\n }\r\n return window[CYPRESS_GLOBAL_OBJECT_NAME][CYPRESS_TO_ORBIT_HOOKS_OBJECT_NAME] as ICypressToOrbitHooks;\r\n}\r\n\r\nexport interface OnTimeIntervalCreationResult {\r\n ignoreJavaScriptImplementation: boolean;\r\n timerId?: number;\r\n}\r\n\r\nexport enum NamedIntervalType {\r\n setInterval,\r\n setTimeout\r\n}\r\n\r\nexport interface ICypressToOrbitHooks {\r\n onAppStartupConfigs(configs: ApplicationStartupConfigurations);\r\n onTimeIntervalCreation(name: TimeIntervalName, callback: () => void, interval: TimeSpan, intervalType: NamedIntervalType): OnTimeIntervalCreationResult;\r\n}\r\n\r\n","export function matchAllWords(text: string, words: RegExp[]): boolean {\r\n for(let index = 0; index < words.length; index++) {\r\n if(!text.match(words[index])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function removeSpaces(str) {\r\n return str.replace(/\\s/g, '');\r\n}\r\n\r\nexport function removeSpecialCharacters(str: string): string {\r\n return str.replace(/[^a-zA-Z ]/g, \"\");\r\n}\r\n\r\n/**\r\n * Given a string extracts all the words from it and converts them in case insensitive regular expressions\r\n * @param {string} text\r\n * @return {RegExp[]}\r\n */\r\nexport function extractWordsRegularExpressions(text: string): RegExp[] {\r\n if(!text) {\r\n return [];\r\n }\r\n\r\n return text.split(' ')\r\n .map(word => word.trim())\r\n .filter(word => word)\r\n .map(word => new RegExp(word, 'gi'));\r\n}\r\n\r\nexport function convertStringArrayToString(messages: string[], joinCharacters: string): string {\r\n return messages.join(joinCharacters);\r\n\r\n}","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { useCallback, useEffect, useState } from \"react\";\nvar EMPTY_ARRAY = [];\nexport function useUnmount(fn) {\n useEffect(function () { return fn; }, EMPTY_ARRAY);\n}\nexport function useForceUpdate() {\n var _a = __read(useState(0), 2), setTick = _a[1];\n var update = useCallback(function () {\n setTick(function (tick) { return tick + 1; });\n }, []);\n return update;\n}\nexport function isPlainObject(value) {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n var proto = Object.getPrototypeOf(value);\n return !proto || proto === Object.prototype;\n}\nexport function getSymbol(name) {\n if (typeof Symbol === \"function\") {\n return Symbol.for(name);\n }\n return \"__$mobx-react \" + name + \"__\";\n}\nvar mockGlobal = {};\nexport function getGlobal() {\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n return mockGlobal;\n}\n","import superPropBase from \"@babel/runtime/helpers/esm/superPropBase\";\nexport default function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","\r\nexport function splitArrayToChunks(originalArray: T[], chunkSize: number): Array {\r\n\r\n if(!originalArray || originalArray.length === 0) {\r\n return [];\r\n }\r\n\r\n let result: Array = [];\r\n for(let i = 0; i * chunkSize < originalArray.length; i++) {\r\n result.push(originalArray.slice(i * chunkSize, i * chunkSize + chunkSize));\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function arraysEqual(arr1: T[], arr2: T[]) {\r\n if (arr1 === arr2) return true;\r\n if (arr1 == null || arr2 == null) return false;\r\n if (arr1.length !== arr2.length) return false;\r\n\r\n for (let i = 0; i < arr1.length; ++i) {\r\n if (arr1[i] !== arr2[i]) return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Shuffle an array using the Fisher-Yates unbiased algorithm\r\n * Read more about the algorithm here: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\r\n * The implementation is taken from here: https://bost.ocks.org/mike/shuffle/\r\n * and updated a bit for typescript\r\n */\r\nexport function shuffle(array: unknown[]) {\r\n let m = array.length, t: unknown;\r\n\r\n // While there remain elements to shuffle…\r\n while (m) {\r\n\r\n // Pick a remaining element…\r\n let i = Math.floor(Math.random() * m--);\r\n\r\n // And swap it with the current element.\r\n t = array[m];\r\n array[m] = array[i];\r\n array[i] = t;\r\n }\r\n\r\n return array;\r\n}\r\n","import {OrbitComponentWithState} from '../orbit-component-with-state/orbit-component-with-state';\r\n\r\nexport class OrbitComponent extends OrbitComponentWithState {\r\n}\r\n\r\n\r\n","import { spy } from \"mobx\";\nimport { useState } from \"react\";\nif (!useState) {\n throw new Error(\"mobx-react-lite requires React with Hooks support\");\n}\nif (!spy) {\n throw new Error(\"mobx-react-lite requires mobx at least version 4 to be available\");\n}\n","import { configure } from \"mobx\";\nimport { getGlobal, getSymbol } from \"./utils\";\nvar observerBatchingConfiguredSymbol = getSymbol(\"observerBatching\");\nexport function defaultNoopBatch(callback) {\n callback();\n}\nexport function observerBatching(reactionScheduler) {\n if (!reactionScheduler) {\n reactionScheduler = defaultNoopBatch;\n if (\"production\" !== process.env.NODE_ENV) {\n console.warn(\"[MobX] Failed to get unstable_batched updates from react-dom / react-native\");\n }\n }\n configure({ reactionScheduler: reactionScheduler });\n getGlobal()[observerBatchingConfiguredSymbol] = true;\n}\nexport var isObserverBatched = function () { return !!getGlobal()[observerBatchingConfiguredSymbol]; };\n","var globalIsUsingStaticRendering = false;\nexport function useStaticRendering(enable) {\n globalIsUsingStaticRendering = enable;\n}\nexport function isUsingStaticRendering() {\n return globalIsUsingStaticRendering;\n}\n","import { getDependencyTree } from \"mobx\";\nexport function printDebugValue(v) {\n return getDependencyTree(v);\n}\n","export function createTrackingData(reaction) {\n var trackingData = {\n cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS,\n reaction: reaction\n };\n return trackingData;\n}\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport var CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport var CLEANUP_TIMER_LOOP_MILLIS = 10000;\n/**\n * Reactions created by components that have yet to be fully mounted.\n */\nvar uncommittedReactionRefs = new Set();\n/**\n * Latest 'uncommitted reactions' cleanup timer handle.\n */\nvar reactionCleanupHandle;\nfunction ensureCleanupTimerRunning() {\n if (reactionCleanupHandle === undefined) {\n reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS);\n }\n}\nexport function scheduleCleanupOfReactionIfLeaked(ref) {\n uncommittedReactionRefs.add(ref);\n ensureCleanupTimerRunning();\n}\nexport function recordReactionAsCommitted(reactionRef) {\n uncommittedReactionRefs.delete(reactionRef);\n}\n/**\n * Run by the cleanup timer to dispose any outstanding reactions\n */\nfunction cleanUncommittedReactions() {\n reactionCleanupHandle = undefined;\n // Loop through all the candidate leaked reactions; those older\n // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n var now = Date.now();\n uncommittedReactionRefs.forEach(function (ref) {\n var tracking = ref.current;\n if (tracking) {\n if (now >= tracking.cleanAt) {\n // It's time to tidy up this leaked reaction.\n tracking.reaction.dispose();\n ref.current = null;\n uncommittedReactionRefs.delete(ref);\n }\n }\n });\n if (uncommittedReactionRefs.size > 0) {\n // We've just finished a round of cleanups but there are still\n // some leak candidates outstanding.\n ensureCleanupTimerRunning();\n }\n}\n/* istanbul ignore next */\n/**\n * Only to be used by test functions; do not export outside of mobx-react-lite\n */\nexport function forceCleanupTimerToRunNowForTests() {\n // This allows us to control the execution of the cleanup timer\n // to force it to run at awkward times in unit tests.\n if (reactionCleanupHandle) {\n clearTimeout(reactionCleanupHandle);\n cleanUncommittedReactions();\n }\n}\n/* istanbul ignore next */\nexport function resetCleanupScheduleForTests() {\n if (reactionCleanupHandle) {\n clearTimeout(reactionCleanupHandle);\n reactionCleanupHandle = undefined;\n }\n uncommittedReactionRefs.clear();\n}\n","import React from \"react\";\nvar insideRender = false;\nvar forceUpdateQueue = [];\nexport function useQueuedForceUpdate(forceUpdate) {\n return function () {\n if (insideRender) {\n forceUpdateQueue.push(forceUpdate);\n }\n else {\n forceUpdate();\n }\n };\n}\nexport function useQueuedForceUpdateBlock(callback) {\n // start intercepting force-update calls\n insideRender = true;\n forceUpdateQueue = [];\n try {\n var result = callback();\n // stop intercepting force-update\n insideRender = false;\n // store queue or nothing if it was empty to execute useLayoutEffect only when necessary\n var queue_1 = forceUpdateQueue.length > 0 ? forceUpdateQueue : undefined;\n // run force-update queue in useLayoutEffect\n React.useLayoutEffect(function () {\n if (queue_1) {\n queue_1.forEach(function (x) { return x(); });\n }\n }, [queue_1]);\n return result;\n }\n finally {\n insideRender = false;\n }\n}\n","import { Reaction } from \"mobx\";\nimport React from \"react\";\nimport { printDebugValue } from \"./printDebugValue\";\nimport { createTrackingData, recordReactionAsCommitted, scheduleCleanupOfReactionIfLeaked } from \"./reactionCleanupTracking\";\nimport { isUsingStaticRendering } from \"./staticRendering\";\nimport { useForceUpdate } from \"./utils\";\nimport { useQueuedForceUpdate, useQueuedForceUpdateBlock } from \"./useQueuedForceUpdate\";\nvar EMPTY_OBJECT = {};\nfunction observerComponentNameFor(baseComponentName) {\n return \"observer\" + baseComponentName;\n}\nexport function useObserver(fn, baseComponentName, options) {\n if (baseComponentName === void 0) { baseComponentName = \"observed\"; }\n if (options === void 0) { options = EMPTY_OBJECT; }\n if (isUsingStaticRendering()) {\n return fn();\n }\n var wantedForceUpdateHook = options.useForceUpdate || useForceUpdate;\n var forceUpdate = wantedForceUpdateHook();\n var queuedForceUpdate = useQueuedForceUpdate(forceUpdate);\n // StrictMode/ConcurrentMode/Suspense may mean that our component is\n // rendered and abandoned multiple times, so we need to track leaked\n // Reactions.\n var reactionTrackingRef = React.useRef(null);\n if (!reactionTrackingRef.current) {\n // First render for this component (or first time since a previous\n // reaction from an abandoned render was disposed).\n var newReaction_1 = new Reaction(observerComponentNameFor(baseComponentName), function () {\n // Observable has changed, meaning we want to re-render\n // BUT if we're a component that hasn't yet got to the useEffect()\n // stage, we might be a component that _started_ to render, but\n // got dropped, and we don't want to make state changes then.\n // (It triggers warnings in StrictMode, for a start.)\n if (trackingData_1.mounted) {\n // We have reached useEffect(), so we're mounted, and can trigger an update\n queuedForceUpdate();\n }\n else {\n // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n // when (and if) useEffect() arrives. The easiest way to do that is just to\n // drop our current reaction and allow useEffect() to recreate it.\n newReaction_1.dispose();\n reactionTrackingRef.current = null;\n }\n });\n var trackingData_1 = createTrackingData(newReaction_1);\n reactionTrackingRef.current = trackingData_1;\n scheduleCleanupOfReactionIfLeaked(reactionTrackingRef);\n }\n var reaction = reactionTrackingRef.current.reaction;\n React.useDebugValue(reaction, printDebugValue);\n React.useEffect(function () {\n // Called on first mount only\n recordReactionAsCommitted(reactionTrackingRef);\n if (reactionTrackingRef.current) {\n // Great. We've already got our reaction from our render;\n // all we need to do is to record that it's now mounted,\n // to allow future observable changes to trigger re-renders\n reactionTrackingRef.current.mounted = true;\n }\n else {\n // The reaction we set up in our render has been disposed.\n // This is either due to bad timings of renderings, e.g. our\n // component was paused for a _very_ long time, and our\n // reaction got cleaned up, or we got a observable change\n // between render and useEffect\n // Re-create the reaction\n reactionTrackingRef.current = {\n reaction: new Reaction(observerComponentNameFor(baseComponentName), function () {\n // We've definitely already been mounted at this point\n queuedForceUpdate();\n }),\n cleanAt: Infinity\n };\n queuedForceUpdate();\n }\n return function () {\n reactionTrackingRef.current.reaction.dispose();\n reactionTrackingRef.current = null;\n };\n }, []);\n // delay all force-update calls after rendering of this component\n return useQueuedForceUpdateBlock(function () {\n // render the original component, but have the\n // reaction track the observables, so that rendering\n // can be invalidated (see above) once a dependency changes\n var rendering;\n var exception;\n reaction.track(function () {\n try {\n rendering = fn();\n }\n catch (e) {\n exception = e;\n }\n });\n if (exception) {\n throw exception; // re-throw any exceptions caught during rendering\n }\n return rendering;\n });\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { forwardRef, memo } from \"react\";\nimport { isUsingStaticRendering } from \"./staticRendering\";\nimport { useObserver } from \"./useObserver\";\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer(baseComponent, options) {\n // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n if (isUsingStaticRendering()) {\n return baseComponent;\n }\n var realOptions = __assign({ forwardRef: false }, options);\n var baseComponentName = baseComponent.displayName || baseComponent.name;\n var wrappedComponent = function (props, ref) {\n return useObserver(function () { return baseComponent(props, ref); }, baseComponentName);\n };\n wrappedComponent.displayName = baseComponentName;\n // memo; we are not interested in deep updates\n // in props; we assume that if deep objects are changed,\n // this is in observables, which would have been tracked anyway\n var memoComponent;\n if (realOptions.forwardRef) {\n // we have to use forwardRef here because:\n // 1. it cannot go before memo, only after it\n // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n // since it wouldn't be a callable function anymore\n memoComponent = memo(forwardRef(wrappedComponent));\n }\n else {\n memoComponent = memo(wrappedComponent);\n }\n copyStaticProperties(baseComponent, memoComponent);\n memoComponent.displayName = baseComponentName;\n return memoComponent;\n}\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nvar hoistBlackList = {\n $$typeof: true,\n render: true,\n compare: true,\n type: true\n};\nfunction copyStaticProperties(base, target) {\n Object.keys(base).forEach(function (key) {\n if (!hoistBlackList[key]) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));\n }\n });\n}\n","import { useObserver } from \"./useObserver\";\nfunction ObserverComponent(_a) {\n var children = _a.children, render = _a.render;\n var component = children || render;\n if (typeof component !== \"function\") {\n return null;\n }\n return useObserver(component);\n}\nObserverComponent.propTypes = {\n children: ObserverPropsCheck,\n render: ObserverPropsCheck\n};\nObserverComponent.displayName = \"Observer\";\nexport { ObserverComponent as Observer };\nfunction ObserverPropsCheck(props, key, componentName, location, propFullName) {\n var extraKey = key === \"children\" ? \"render\" : \"children\";\n var hasProp = typeof props[key] === \"function\";\n var hasExtraProp = typeof props[extraKey] === \"function\";\n if (hasProp && hasExtraProp) {\n return new Error(\"MobX Observer: Do not use children and render in the same time in`\" + componentName);\n }\n if (hasProp || hasExtraProp) {\n return null;\n }\n return new Error(\"Invalid prop `\" +\n propFullName +\n \"` of type `\" +\n typeof props[key] +\n \"` supplied to\" +\n \" `\" +\n componentName +\n \"`, expected `function`.\");\n}\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { observable, runInAction } from \"mobx\";\nimport React from \"react\";\nimport { isPlainObject } from \"./utils\";\nexport function useAsObservableSourceInternal(current, usedByLocalStore) {\n var culprit = usedByLocalStore ? \"useLocalStore\" : \"useAsObservableSource\";\n if (\"production\" !== process.env.NODE_ENV && usedByLocalStore) {\n var _a = __read(React.useState(current), 1), initialSource = _a[0];\n if ((initialSource !== undefined && current === undefined) ||\n (initialSource === undefined && current !== undefined)) {\n throw new Error(\"make sure you never pass `undefined` to \" + culprit);\n }\n }\n if (usedByLocalStore && current === undefined) {\n return undefined;\n }\n if (\"production\" !== process.env.NODE_ENV && !isPlainObject(current)) {\n throw new Error(culprit + \" expects a plain object as \" + (usedByLocalStore ? \"second\" : \"first\") + \" argument\");\n }\n var _b = __read(React.useState(function () { return observable(current, {}, { deep: false }); }), 1), res = _b[0];\n if (\"production\" !== process.env.NODE_ENV &&\n Object.keys(res).length !== Object.keys(current).length) {\n throw new Error(\"the shape of objects passed to \" + culprit + \" should be stable\");\n }\n runInAction(function () {\n Object.assign(res, current);\n });\n return res;\n}\nexport function useAsObservableSource(current) {\n return useAsObservableSourceInternal(current, false);\n}\n","import \"./assertEnvironment\";\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\";\nimport { observerBatching } from \"./observerBatching\";\nobserverBatching(batch);\nexport { isUsingStaticRendering, useStaticRendering } from \"./staticRendering\";\nexport { observer } from \"./observer\";\nexport { useObserver } from \"./useObserver\";\nexport { Observer } from \"./ObserverComponent\";\nexport { useForceUpdate } from \"./utils\";\nexport { useAsObservableSource } from \"./useAsObservableSource\";\nexport { useLocalStore } from \"./useLocalStore\";\nexport { useQueuedForceUpdate, useQueuedForceUpdateBlock } from \"./useQueuedForceUpdate\";\nexport { isObserverBatched, observerBatching } from \"./observerBatching\";\n","import {getCypressToOrbitHooks, NamedIntervalType, isInsideAutomation} from '../../utils/automation-helpers';\r\nimport {TimeIntervalName} from './time-interval-names';\r\nimport {Check, TimeSpan} from '@sparkware/app-utils';\r\n\r\nfunction convertToTimeSpan(interval: number | TimeSpan): TimeSpan {\r\n if(Check.isNumber(interval)) {\r\n return TimeSpan.fromMilliseconds(interval);\r\n } else {\r\n return interval;\r\n }\r\n}\r\n\r\nfunction namedTimer(name: TimeIntervalName | null | undefined,\r\n handler: () => void,\r\n interval: TimeSpan | number,\r\n intervalType: NamedIntervalType,\r\n javascriptFunction: (handler: () => void, timeout: number) => number): number {\r\n\r\n if(Check.isNullOrUndefined(handler)) {\r\n throw new Error('namedInterval: handler argument cannot be null or undefined');\r\n }\r\n\r\n if(Check.isNullOrUndefined(interval)) {\r\n throw new Error('namedInterval: interval argument cannot be null or undefined');\r\n }\r\n\r\n let timeSpan = convertToTimeSpan(interval);\r\n\r\n if(name && isInsideAutomation()) {\r\n const response = getCypressToOrbitHooks().onTimeIntervalCreation(name, handler, timeSpan, intervalType);\r\n if(response.ignoreJavaScriptImplementation) {\r\n // we are here because current running test decided to fake this timer\r\n return response.timerId;\r\n }\r\n }\r\n\r\n\r\n\r\n return javascriptFunction(handler, timeSpan.totalMilliseconds);\r\n}\r\n\r\n\r\n\r\nexport function namedSetInterval(name: TimeIntervalName, handler: () => void, interval: TimeSpan | number): number {\r\n return namedTimer(name, handler, interval, NamedIntervalType.setInterval, setInterval);\r\n}\r\n\r\nexport function namedSetTimeout(name: TimeIntervalName, handler: () => void, interval: TimeSpan | number): number {\r\n return namedTimer(name, handler, interval, NamedIntervalType.setTimeout, setTimeout);\r\n}","import DOM from './dom';\r\nimport assign from 'assign-deep';\r\n\r\n\r\nclass Underscore {\r\n isArguments(input) : boolean {\r\n return '[object Arguments]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isFunction(input) : boolean {\r\n return '[object Function]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isString(input) : boolean {\r\n return '[object String]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isNumber(input) : boolean {\r\n return '[object Number]' === Object.prototype.toString.call(input) && !isNaN(input);\r\n }\r\n\r\n isObject(input) : boolean {\r\n return '[object Object]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isDate(input) : boolean {\r\n return '[object Date]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isArray(expectedArray) : boolean {\r\n return Array.isArray(expectedArray);\r\n }\r\n\r\n isBoolean(input) : boolean {\r\n return true === input || false === input || '[object Boolean]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n\r\n isError(input) : boolean {\r\n return '[object Error]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isSymbol(input) : boolean {\r\n return '[object Symbol]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isUndefined(input) : boolean {\r\n return '[object Undefined]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isHTMLDivElement(input) : boolean {\r\n return '[object HTMLDivElement]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n isHTMLImgElement(input) : boolean {\r\n return '[object HTMLImageElement]' === Object.prototype.toString.call(input);\r\n }\r\n\r\n\r\n isNull(value) : boolean {\r\n return 'null' === value || value === null;\r\n }\r\n\r\n isNullOrUndefined(input) : boolean {\r\n return this.isNull(input) || this.isUndefined(input);\r\n }\r\n\r\n\tpropertyChainExists(obj: any, propChain: string) : boolean {\r\n let properties = propChain.split('.');\r\n while (properties.length > 0) {\r\n obj = obj[properties.shift()];\r\n if (this.isUndefined(obj)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n isEmpty(input) : boolean {\r\n\r\n return this.isNullOrUndefined(input) || 0 === input.length || (input.constructor === Object && Object.keys(input).length === 0);\r\n }\r\n\r\n\r\n safeStringToNumber(str: string, defaultValue?: number) : number {\r\n\r\n if(this.isNullOrUndefined(str)) {\r\n if(this.isNullOrUndefined(defaultValue)) {\r\n throw new Error(`str parameter is null or undefined and no default value provided`);\r\n }\r\n\r\n return defaultValue;\r\n }\r\n\r\n let result = Number(str);\r\n\r\n if (Number.isNaN(result)) {\r\n if(this.isNullOrUndefined(defaultValue)) {\r\n throw new Error(`${str} is not a number and no default value provided`);\r\n }\r\n return defaultValue;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n\r\n isNodeList(expectedNodeList: any) : boolean {\r\n var stringRepr = Object.prototype.toString.call(expectedNodeList);\r\n\r\n return typeof expectedNodeList === 'object' &&\r\n /^\\[object (HTMLCollection|NodeList|Object)\\]$/.test(stringRepr) &&\r\n (typeof expectedNodeList.length === 'number') &&\r\n (expectedNodeList.length === 0 || (typeof expectedNodeList[0] === \"object\" && expectedNodeList[0].nodeType > 0));\r\n }\r\n\r\n\r\n isElement(expectedElement: any) : boolean {\r\n return expectedElement instanceof HTMLElement;\r\n }\r\n\r\n /**\r\n * Check if string includes another substring\r\n *\r\n */\r\n includes(str: string, substr: string) : boolean{\r\n return str.indexOf(substr) !== -1;\r\n }\r\n\r\n\r\n /**\r\n * Load async js script code.\r\n *\r\n */\r\n loadAsyncScript(src: string, id: string = 'cgp-dynamic-script-' + Date.now(), type: string = 'text/javascript') : Promise {\r\n return new Promise((resolve, reject) => {\r\n var s;\r\n s = document.createElement('script');\r\n s.src = src;\r\n s.id = id;\r\n s.type = type;\r\n s.onload = resolve;\r\n s.onerror = reject;\r\n document.body.appendChild(s);\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Generate GUID\r\n */\r\n getGuid(): string {\r\n let s4 = () => {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n };\r\n\r\n return s4() + s4() + s4() + s4() +\r\n s4() + s4() + s4() + s4();\r\n }\r\n\r\n\r\n /**\r\n * Make id.\r\n *\r\n */\r\n makeid() : string {\r\n var text = \"\";\r\n var possible = \"abcdefghijklmnopqrstuvwxyz\";\r\n\r\n for (var i = 0; i < 10; i++)\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n\r\n return text;\r\n }\r\n\r\n /**\r\n * return if the link is absolute\r\n * @param link\r\n * @returns {boolean}\r\n */\r\n isAbsoluteLink(link) {\r\n let regex = /^https?:\\/\\//i;\r\n return regex.test(link);\r\n }\r\n\r\n /**\r\n * Get hostname.\r\n *\r\n */\r\n getHostName(url: string) : string {\r\n const match = url.match(/(https?:\\/\\/[^/?#]+)/i);\r\n if (match != null && match.length === 2 && typeof match[1] === 'string' && match[1].length > 0) {\r\n return match[1];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Determinate if the given URL is valid(support also mailto url)\r\n *\r\n */\r\n isValidUrl(url: any): boolean {\r\n if (!this.isString(url))\r\n return false;\r\n var rg = /(^(((https?):\\/\\/)|(\\/))[^\\s]+$)|((^(mailto:))[^\\s]+@[^\\s]+$)/;\r\n return rg.test(url);\r\n }\r\n\r\n isAbsolutUrl(url: string): boolean {\r\n try {\r\n new URL(url);\r\n }catch (err) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * toggle option, kicks into and out of fullscreen mode.\r\n */\r\n toggleFullScreen(): void {\r\n if (this.isFullScreen()) {\r\n this.closeFullScreen();\r\n } else {\r\n this.openFullScreen();\r\n }\r\n }\r\n\r\n openFullScreen(): void {\r\n if (document.documentElement['requestFullScreen']) {\r\n document.documentElement['requestFullScreen']();\r\n } else if (document.documentElement['mozRequestFullScreen']) {\r\n document.documentElement['mozRequestFullScreen']();\r\n } else if (document.documentElement['webkitRequestFullScreen']) {\r\n document.documentElement['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']);\r\n } else if (document.documentElement['msRequestFullscreen']) {\r\n if (!DOM.hasClass(document.body, 'cgp-ie-fullscreen')) {\r\n DOM.addClass(document.body, 'cgp-ie-fullscreen');\r\n }\r\n document.documentElement['msRequestFullscreen']();\r\n }\r\n\r\n }\r\n\r\n closeFullScreen(): void {\r\n if (document['cancelFullScreen']) {\r\n document['cancelFullScreen']();\r\n } else if (document['mozCancelFullScreen']) {\r\n document['mozCancelFullScreen']();\r\n } else if (document['webkitCancelFullScreen']) {\r\n document['webkitCancelFullScreen']();\r\n } else if (document['msExitFullscreen']) {\r\n DOM.removeClass(document.body, 'cgp-ie-fullscreen');\r\n document['msExitFullscreen']();\r\n }\r\n }\r\n\r\n isFullScreen() : boolean {\r\n return !this.isNullOrUndefined(document['mozFullScreenElement'])\r\n || !this.isNullOrUndefined(document['webkitFullscreenElement'])\r\n || !this.isNullOrUndefined(document['webkitCurrentFullScreenElement'])\r\n || !this.isNullOrUndefined(document['msFullscreenElement'])\r\n || !this.isNullOrUndefined(document['fullscreenElement']);\r\n }\r\n\r\n\r\n /**\r\n * If the user is caps lock.\r\n */\r\n isCapslock(event: any) : boolean {\r\n event = (event) ? event : window.event;\r\n\r\n let charCode: number = null;\r\n if (event.which) {\r\n charCode = event.which;\r\n } else if (event.keyCode) {\r\n charCode = event.keyCode;\r\n }\r\n\r\n let shiftOn = false;\r\n if (event.shiftKey) {\r\n shiftOn = event.shiftKey;\r\n } else if (event.modifiers) {\r\n shiftOn = !!(event.modifiers & 4);\r\n }\r\n\r\n if (charCode >= 97 && charCode <= 122 && shiftOn) {\r\n return true;\r\n }\r\n\r\n if (charCode >= 65 && charCode <= 90 && !shiftOn) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Merge/Extend Object\r\n *\r\n */\r\n mergeDeep(target: any, ...source) : any {\r\n source.forEach(curr => {\r\n assign(target, curr);\r\n });\r\n\r\n return target;\r\n }\r\n\r\n _createXmlDoc(xmlStr: string) {\r\n const xmlDoc = new (window as any).ActiveXObject(\"Microsoft.XMLDOM\");\r\n xmlDoc.async = \"false\";\r\n xmlDoc.loadXML(xmlStr);\r\n return xmlDoc;\r\n }\r\n\r\n parseXml(xmlStr: string)\r\n {\r\n try {\r\n if ((window as any).DOMParser) {\r\n return new DOMParser().parseFromString(xmlStr, \"text/xml\");\r\n } else if ((window as any).ActiveXObject) {\r\n return this._createXmlDoc(xmlStr);\r\n }\r\n }\r\n catch(err) {\r\n return null;\r\n }\r\n if ((window as any).DOMParser) {\r\n try {\r\n return new DOMParser().parseFromString(xmlStr, \"text/xml\");\r\n }\r\n catch(err) {\r\n return null;\r\n }\r\n } else if ((window as any).ActiveXObject) {\r\n try {\r\n return this._createXmlDoc(xmlStr);\r\n }\r\n catch(err) {\r\n return null;\r\n }\r\n }\r\n else\r\n return null;\r\n }\r\n\r\n /**\r\n * Get Query String or \"string\" as Object\r\n *\r\n */\r\n getQueryParameters() : any {\r\n let pairs = window.location.search.slice(1).split('&');\r\n let result = {};\r\n\r\n pairs.forEach(pair => {\r\n try {\r\n let pairMatch = pair.match(/([^?=]+)=(([^&]*))/).slice(1);\r\n result[pairMatch[0]] = decodeURIComponent(pairMatch[1] || '');\r\n } catch(e) {\r\n //failed to parse QS\r\n }\r\n });\r\n\r\n return JSON.parse(JSON.stringify(result));\r\n }\r\n\r\n jsonToQueryString(json: any): string {\r\n return this.isEmpty(json) ? '' : '?' +\r\n Object.keys(json).map(function(key) {\r\n return encodeURIComponent(key) + '=' +\r\n encodeURIComponent(json[key]);\r\n }).join('&');\r\n }\r\n\r\n\r\n /**\r\n * Add stop scrolling class to body.\r\n *\r\n */\r\n stopScrolling() {\r\n DOM.addClass(DOM.getBody(), 'stop-scrolling');\r\n }\r\n\r\n\r\n /**\r\n * Safe way to parse json stringfy.\r\n *\r\n * @param toParse - The string we want to parse to json.\r\n * @param defaultInException - The default value to return when exception thrown.\r\n * @returns {undefined}\r\n */\r\n safeJSON(toParse: string, defaultInException?: any) : any {\r\n try {\r\n return JSON.parse(toParse);\r\n } catch (ex) {\r\n return defaultInException || ex;\r\n }\r\n }\r\n\r\n safeJSONandDecode(input: string): object{\r\n try {\r\n const json = decodeURIComponent(input);\r\n return JSON.parse(json);\r\n } catch(e) {\r\n }\r\n return {};\r\n }\r\n\r\n getJSONVal(json: object, key: string): any {\r\n\r\n let val;\r\n try {\r\n val = json[key];\r\n } catch (e) {\r\n }\r\n return (undefined !== val) ? val : '';\r\n }\r\n\r\n\r\n dasherize(str: string): string {\r\n return (str[0].toLowerCase() + str.slice(1)).trim().replace(/[_\\s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase();\r\n }\r\n\r\n\r\n /**\r\n * Parse string function.\r\n */\r\n parseStringFunction(strFunction: string) : {rawStringFunction: string, functionName: string, functionStringParams:string, functionArrayParams: Array} {\r\n const START = 0;\r\n\r\n let startFunctionParams = strFunction.indexOf('('),\r\n endFunctionParams = strFunction.indexOf(')');\r\n\r\n let strFunctionName = strFunction.substring(START, startFunctionParams),\r\n strFunctionParams = strFunction.substring(startFunctionParams + 1, endFunctionParams),\r\n arrayFunctionParams = strFunctionParams.replace(/\\s+/g, '').split(',');\r\n\r\n return {\r\n rawStringFunction: strFunction,\r\n functionName: strFunctionName,\r\n functionStringParams: strFunctionParams,\r\n functionArrayParams: arrayFunctionParams\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Returns the object without nullable or undefined parameters\r\n */\r\n cleanObject(obj: any, options: any) : any {\r\n options = Object.assign({removeUndefined: true, removeNull: false}, options);\r\n var cleanObject = {};\r\n Object.entries(obj).forEach(([key, value]) => {\r\n if ((undefined === value && true === options.removeUndefined) || (null === value && true === options.removeNull)) {\r\n return;\r\n } else {\r\n cleanObject[key] = value;\r\n }\r\n });\r\n return cleanObject;\r\n }\r\n\r\n\r\n /**\r\n * Generic convert to boolean\r\n */\r\n toBoolean(value) {\r\n if (this.isString(value) && (value === 'false' || value === 'true')) {\r\n return value === 'true';\r\n }\r\n return Boolean(value);\r\n }\r\n\r\n\r\n /**\r\n * Scroll with smooth animation\r\n * @param direction\r\n * @param scrollSize\r\n * @param container\r\n * @param duration\r\n * @param smooothLevel\r\n * @private\r\n */\r\n smoothScrolling(direction: string, scrollSize: number, duration: number, container: HTMLElement, smoothLevel: number = 20): Promise {\r\n return new Promise((res) => {\r\n let stepInterval = Math.ceil(duration / smoothLevel); // 1000 / 20 = 50\r\n let restSize = scrollSize;\r\n let scrollStepSize = Math.ceil(scrollSize / smoothLevel); // 100 / 50 = 2 (0.5 rest)\r\n\r\n let scrollStepFn = () => {\r\n scrollSize = restSize > scrollStepSize ? scrollStepSize : restSize;\r\n switch (direction) {\r\n case 'left':\r\n container.scrollLeft -= scrollSize;\r\n break;\r\n case 'right':\r\n container.scrollLeft += scrollSize;\r\n break;\r\n case 'up':\r\n container.scrollTop -= scrollSize;\r\n break;\r\n case 'down':\r\n container.scrollTop += scrollSize;\r\n break;\r\n }\r\n restSize -= scrollSize;\r\n if (0 < restSize) {\r\n DOM.setTimeout(scrollStepFn, stepInterval, null);\r\n } else {\r\n res();\r\n }\r\n };\r\n scrollStepFn();\r\n // DOM.setTimeout(scrollStepFn, stepInterval);\r\n });\r\n\r\n }\r\n\r\n toLowerCaseKeys(obj: object): object {\r\n return Object.keys(obj).reduce((accum, key) => {\r\n accum[key.toLowerCase()] = obj[key];\r\n return accum;\r\n }, {});\r\n }\r\n\r\n removeEmptyPropertiesfromObject(obj) {\r\n if(typeof(obj) !== 'object') {\r\n return obj;\r\n }\r\n\r\n Object.keys(obj).forEach((prop)=> {\r\n if(this.isNullOrUndefined(obj[prop])) {\r\n delete obj[prop];\r\n }\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n /**\r\n * @description Remove the localhost\r\n */\r\n removeLocalhost(url){\r\n try {\r\n return url.replace(/^[a-z]{4,5}:\\/{2}[a-z]{1,}:[0-9]{1,4}.(.*)/, '$1');\r\n }catch (e) {\r\n return url;\r\n }\r\n }\r\n\r\n capitalizeFirstLetter(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n\r\n\r\n lowerFirstLetter(str: string): string {\r\n return str.charAt(0).toLowerCase() + str.slice(1);\r\n }\r\n\r\n\r\n arraysAreEqual(arr1: any[], arr2: any[], areItemsEqual?: (item1: any, item2: any) => boolean): boolean {\r\n arr1 = arr1 || [];\r\n arr2 = arr2 || [];\r\n\r\n if(arr1.length !== arr2.length) {\r\n return false;\r\n }\r\n\r\n for(let i = 0; i < arr1.length; i++) {\r\n if(this.isNullOrUndefined(areItemsEqual)) {\r\n if(arr1[i] !== arr2[i]) {\r\n return false;\r\n }\r\n } else {\r\n if(!areItemsEqual(arr1[i], arr2[i])) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * should return the number as bytes notation.\r\n * for example:\r\n * formatNumberToBytesNotation(1000, 0) will return 1K\r\n * formatNumberToBytesNotation(3000000, 0) will return 3M\r\n * formatNumberToBytesNotation(1500, 1) will return 1.5K\r\n * @param num\r\n * @param digits\r\n */\r\n formatNumberToBytesNotation(num: number, digits: number) {\r\n const formatMap = [\r\n { value: 1, symbol: \"\" },\r\n { value: 1E3, symbol: \"K\" },\r\n { value: 1E6, symbol: \"M\" },\r\n { value: 1E9, symbol: \"G\" },\r\n { value: 1E12, symbol: \"T\" },\r\n { value: 1E15, symbol: \"P\" },\r\n { value: 1E18, symbol: \"E\" }\r\n ];\r\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\r\n let index;\r\n for (index = formatMap.length - 1; index > 0; index--) {\r\n if (num >= formatMap[index].value) {\r\n break;\r\n }\r\n }\r\n return (num / formatMap[index].value).toFixed(digits).replace(rx, \"$1\") + formatMap[index].symbol;\r\n }\r\n\r\n once(fn, context = this) {\r\n let result;\r\n return function() {\r\n if (fn) {\r\n result = fn.apply(context || this, arguments);\r\n fn = null;\r\n }\r\n return result;\r\n };\r\n }\r\n}\r\n\r\nexport default new Underscore();","import React from 'react';\r\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\r\nimport {ORBIT_TAP} from '../../themes/css-global-classes';\r\n\r\n\r\ninterface TapHandlerProps {\r\n enabled: boolean;\r\n elementRef: any;\r\n}\r\n\r\nexport class TapHandlerLogic {\r\n constructor(private _element: HTMLElement) {\r\n this._element.addEventListener('click', this._onClickHandler);\r\n }\r\n\r\n private _timeoutRef = null;\r\n\r\n private _onClickHandler = () => {\r\n if (this._timeoutRef) {\r\n return;\r\n }\r\n\r\n this._element.classList.add(ORBIT_TAP);\r\n this._timeoutRef = setTimeout(() => {\r\n this._element.classList.remove(ORBIT_TAP);\r\n this._timeoutRef = null;\r\n }, 150);\r\n\r\n };\r\n\r\n dispose() {\r\n if(this._timeoutRef) {\r\n clearTimeout(this._timeoutRef);\r\n }\r\n\r\n this._element.removeEventListener('click', this._onClickHandler);\r\n }\r\n\r\n}\r\n\r\n\r\nexport class TapHandler extends OrbitComponent {\r\n\r\n\r\n render() {\r\n return (\r\n <>\r\n {this.props.children}\r\n \r\n )\r\n }\r\n\r\n\r\n private _tapHandlerLogic: TapHandlerLogic | null = null;\r\n\r\n componentDidMount() {\r\n super.componentDidMount();\r\n if(this.props.enabled) {\r\n this._tapHandlerLogic = new TapHandlerLogic(this.props.elementRef.current);\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n super.componentWillUnmount();\r\n if(this._tapHandlerLogic) {\r\n this._tapHandlerLogic.dispose();\r\n }\r\n }\r\n\r\n\r\n}\r\n","export class DeviceFeatureDetection {\r\n /**\r\n * The device supports touch, does it have a touchscreen\r\n */\r\n public get isTouch() {\r\n return (\r\n ('ontouchstart' in window)\r\n || ((window as any).DocumentTouch && document instanceof (window as any).DocumentTouch)\r\n || (window.navigator.maxTouchPoints !== undefined && window.navigator.maxTouchPoints > 0)\r\n );\r\n }\r\n}\r\n","import UAParser from \"ua-parser-js\";\r\n\r\nexport class DeviceOSDetection {\r\n private os: UAParser.IOS;\r\n constructor(private parser: UAParser) {\r\n this.os = this.parser.getOS();\r\n }\r\n\r\n /**\r\n * Returns the name of the operating system\r\n *\r\n * Possible 'os.name' - data taken from ua-parser-js\r\n * AIX, AmigaOS, Android, Arch, Bada, BeOS, BlackBerry, CentOS, ChromiumOS, Contiki,\r\n * Fedora, FirefoxOS, FreeBSD, Debian, DragonFly, Gentoo, GNU, Haiku, Hurd, iOS,\r\n * Joli, Linpus, Linux, MacOS, Mageia, Mandriva, MeeGo, Minix, Mint, MorphOS, NetBSD,\r\n * Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PCLinuxOS, Plan9, Playstation, QNX, RedHat,\r\n * RIM Tablet OS, RISCOS, Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen,\r\n * Ubuntu, UNIX, VectorLinux, WebOS, Windows[Phone/Mobile], Zenwalk\r\n */\r\n public get name() {\r\n // ua-parser-js returns human readable names like \"Mac OS\". I want without spaces to be able to use them as keys in an object\r\n // example in the external_links_consts.js where macos and safari are used as keys.\r\n // also, we make it lowercase for comodity\r\n return this.os.name.replace(/\\s/g, \"\").toLowerCase();\r\n }\r\n\r\n /**\r\n * Returns the major version of the operating system\r\n */\r\n public get version() {\r\n return parseInt(this.os.version.split(\".\")[0]);\r\n }\r\n\r\n public get isIOS() {\r\n return this.name === 'ios';\r\n }\r\n\r\n public get isAndroid() {\r\n return this.name === 'android';\r\n }\r\n\r\n public get isPC() {\r\n return [\"centos\", \"fedora\", \"debian\", \"linux\", \"macos\", \"pclinuxos\", \"redhat\", \"ubuntu\", \"unix\", \"vectorlinux\", \"windows\"].indexOf(this.name) && !this.isMobileOS;\r\n }\r\n\r\n public get isMacOS() {\r\n return this.name === 'macos';\r\n }\r\n\r\n public get isMobileOS() {\r\n return (this.isIOS || this.isAndroid);\r\n }\r\n\r\n}\r\n","export class DeviceViewportDetection {\r\n\r\n /**\r\n * Get viewport width.\r\n */\r\n public get width() {\r\n return window.innerWidth;\r\n }\r\n\r\n\r\n /**\r\n * Get viewport height.\r\n */\r\n public get height() {\r\n return window.innerHeight;\r\n }\r\n\r\n /**\r\n * Get screen height.\r\n */\r\n public get screenHeight() {\r\n return window.screen.height;\r\n }\r\n\r\n /**\r\n * Get screen width.\r\n */\r\n public get screenWidth() {\r\n return window.screen.width;\r\n }\r\n\r\n /**\r\n * Get the pixel ratio for the current running device.\r\n */\r\n public get pixelRatio() {\r\n var ratio = 1;\r\n\r\n const screen = window.screen as any;\r\n\r\n // To account for zoom, change to use deviceXDPI instead of systemXDPI\r\n if (screen.systemXDPI !== undefined && screen.logicalXDPI !== undefined && screen.systemXDPI > screen.logicalXDPI) {\r\n // Only allow for values > 1\r\n ratio = screen.systemXDPI / screen.logicalXDPI;\r\n } else if (window.devicePixelRatio !== undefined) {\r\n ratio = window.devicePixelRatio;\r\n }\r\n return ratio;\r\n }\r\n\r\n public get isPortrait() {\r\n return window.matchMedia(\"(orientation: portrait)\").matches;\r\n }\r\n}","import UAParser from \"ua-parser-js\";\r\n\r\nexport class DeviceModelDetection {\r\n private device: UAParser.IDevice;\r\n constructor(private parser: UAParser) {\r\n this.device = this.parser.getDevice();\r\n }\r\n\r\n /**\r\n * Is it an iPhone?\r\n */\r\n public get isIphone() {\r\n return this.device.vendor === \"Apple\" && this.device.model === \"iPhone\";\r\n }\r\n\r\n public get isIpad() {\r\n return this.device.vendor === \"Apple\" && this.device.model === \"iPad\";\r\n }\r\n\r\n}\r\n","import UAParser from \"ua-parser-js\";\r\n//https://confluence/pages/viewpage.action?spaceKey=WEB&title=iframe-allow-camera\r\nimport { getAllowAttr } from '@888webteam/iframe-allow-camera';\r\n\r\nexport class DeviceBrowserDetection {\r\n private browser: UAParser.IBrowser;\r\n constructor(private parser: UAParser) {\r\n this.browser = this.parser.getBrowser();\r\n }\r\n\r\n /**\r\n * Returns the name of the browser\r\n *\r\n * Possible values :\r\n * Amaya, Android Browser, Arora, Avant, Baidu, Blazer, Bolt, Camino, Chimera, Chrome,\r\n * Chromium, Comodo Dragon, Conkeror, Dillo, Dolphin, Doris, Edge, Epiphany, Fennec,\r\n * Firebird, Firefox, Flock, GoBrowser, iCab, ICE Browser, IceApe, IceCat, IceDragon,\r\n * Iceweasel, IE [Mobile], Iron, Jasmine, K-Meleon, Konqueror, Kindle, Links,\r\n * Lunascape, Lynx, Maemo, Maxthon, Midori, Minimo, MIUI Browser, [Mobile] Safari,\r\n * Mosaic, Mozilla, Netfront, Netscape, NetSurf, Nokia, OmniWeb, Opera [Mini/Mobi/Tablet],\r\n * Phoenix, Polaris, QQBrowser, RockMelt, Silk, Skyfire, SeaMonkey, SlimBrowser, Swiftfox,\r\n * Tizen, UCBrowser, Vivaldi, w3m, Yandex\r\n */\r\n public get name() {\r\n // ua-parser-js returns human readable names like \"Mobile Safari\". I want without spaces to be able to use them as keys in an object\r\n // example in the external_links_consts.js where macos and safari are used as keys.\r\n // also, we make it lowercase for comodity\r\n return this.browser.name.replace(/\\s/g, \"\").toLowerCase();\r\n }\r\n\r\n /**\r\n * Returns the major version of the browser\r\n */\r\n public get version() {\r\n return parseInt(this.browser.version.split(\".\")[0]);\r\n }\r\n\r\n /**\r\n * Is it a Firefox?\r\n */\r\n public get isFirefox() {\r\n return this.name === \"firefox\";\r\n }\r\n\r\n\r\n /**\r\n * Is it a Chrome?\r\n */\r\n public get isChrome() {\r\n return this.name === \"chrome\";\r\n }\r\n\r\n\r\n /**\r\n * Is it a Safari?\r\n */\r\n public get isSafari() {\r\n // Can be \"Safari\" or \"Mobile Safari\"\r\n return this.name.indexOf(\"safari\") !== -1;\r\n }\r\n\r\n /**\r\n * Is it a Opera?\r\n */\r\n public get isOpera() {\r\n // Can be \"Opera\", \"Opera Mobi\", \"Opera Mini\", \"Opera Tablet\"\r\n return this.name.indexOf(\"opera\") !== -1;\r\n }\r\n\r\n\r\n /**\r\n * Is browser an Edge instance?\r\n */\r\n public get isEdge() {\r\n return this.name === \"edge\";\r\n }\r\n\r\n getIframeAllowAttributeValue(){\r\n let allowAttrValue = getAllowAttr();\r\n if(allowAttrValue.indexOf('autoplay') >= 0) {\r\n return allowAttrValue;\r\n } else {\r\n return `autoplay; ${allowAttrValue}`;\r\n }\r\n }\r\n\r\n}\r\n","import Store from '../../store';\r\nimport Logger from '../../logger';\r\nimport { DeviceOSDetection } from \"./os\";\r\n\r\nconst NATIVE_TYPE = {\r\n CASINO_IOS: 'cbCallBackHandlerCGP',\r\n CASINO_ANDROID: 'WrapperInterfaceCGP',\r\n POKER_IOS: 'NativeInterface',\r\n POKER_ANDROID: 'NativeInterface',\r\n POKER_7_ANDROID: 'PokerSecondWebView',\r\n CIP8_ANDROID: 'pokerNativeInterface',//TODO - will be also used in CGP so that we have a unique source\r\n SPORT_IOS: 'callbackHandler',\r\n SPORT_IOS_EMBEDDED: 'sportHybridOnly',\r\n SPORT_ANDROID: 'WrapperInterface'\r\n};\r\n\r\nexport class DeviceHybridDetection {\r\n private logger: Logger;\r\n private _hybrid = false;\r\n private _inCasino = false;\r\n private _inPoker = false;\r\n private _inSport = false;\r\n private _embedded = false;\r\n\r\n constructor(private os: DeviceOSDetection) {\r\n this.logger = new Logger((this.constructor as any).CLASS);\r\n this.buildHybridInfo();\r\n }\r\n\r\n public get isHybrid() {\r\n return this._hybrid;\r\n }\r\n\r\n /**\r\n * The hybrid host app that loads the CGP (Orbit) is owned by Casino\r\n */\r\n public get inCasino() {\r\n return this._inCasino;\r\n }\r\n\r\n /**\r\n * The hybrid host app that loads the CGP (Orbit) is owned by Poker\r\n */\r\n public get inPoker() {\r\n return this._inPoker;\r\n }\r\n\r\n /**\r\n * The hybrid host app that loads the CGP (Orbit) is owned by Sport\r\n */\r\n public get inSport() {\r\n return this._inSport;\r\n }\r\n\r\n /**\r\n * The hybrid type is embedded (like AOD - Apple On Demand Resources). All games are bundled and deployed at Apple servers and downloaded by demand by the hybrid app\r\n */\r\n public get isEmbedded() {\r\n return this._embedded;\r\n }\r\n\r\n\r\n /**\r\n * FOR BUILDING HYBRID INFO I AM BEING EXTRA CAREFULL AND DOUBLECHECKING THE RESULTS FROM DIFFERENT DATA\r\n */\r\n private buildHybridInfo() {\r\n\r\n const genericHybridEmbedded = window['cgp_isHybridEmbedded'] || false;\r\n\r\n const inPokerHybrid = this.build_isInPokerHybrid();\r\n const casinoHybrid = this.build_isCasinoHybrid(inPokerHybrid);\r\n const inSportHybrid = this.build_isInSportHybrid();\r\n\r\n if (casinoHybrid || inPokerHybrid || inSportHybrid || genericHybridEmbedded) {\r\n this._hybrid = true;\r\n }\r\n\r\n if (genericHybridEmbedded) {\r\n this._embedded = true;\r\n }\r\n\r\n this._inCasino = false;\r\n this._inPoker = false;\r\n this._inSport = false;\r\n\r\n if (casinoHybrid) {\r\n this._inCasino = true;\r\n }\r\n\r\n if (inPokerHybrid) {\r\n this._inPoker = true;\r\n }\r\n\r\n if (inSportHybrid) {\r\n this._inSport = true;\r\n }\r\n\r\n this.dataSanityCheck(casinoHybrid, inPokerHybrid, inSportHybrid, genericHybridEmbedded);\r\n }\r\n\r\n private build_isCasinoHybrid(inPoker) {\r\n // checks for normal casino hybrid\r\n if (this.os.isIOS) {\r\n return this.isNativeIOS() && !inPoker;//isNativeIOS include cip8\r\n }\r\n\r\n if (this.os.isAndroid) {\r\n return this.isNativeAndroid();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private build_isInPokerHybrid() {\r\n if (this.os.isIOS) {\r\n // On iOS, first check if poker put a known object in global namespace. If it's there, we know it's poker hybrid, we don't need anything else\r\n if ((window as any).NativeInterface && (this.isNativeIOS(NATIVE_TYPE.POKER_IOS))) {\r\n return true;\r\n }\r\n // Otherwise, we have to make an additional check for New Jersey. 103 and 106 are the subbrands of poker in NJ (poker 7, the old one)\r\n // Once poker7 will use AOD in NJ this code below can be removed\r\n if (['103', '106'].indexOf(Store.get('sourceSubBrand')) === -1) {\r\n // not NJ, so it's not poker hybrid\r\n return false;\r\n }\r\n // we are in NJ, so now we have to check for the ClientVersion key in storage. If exists and starts with \"mp-\" or \"sp-\", then it is poker hybrid\r\n let storedClientVersion = Store.get('ClientVersion');\r\n if (storedClientVersion && (storedClientVersion.toLowerCase().startsWith('mp-') || storedClientVersion.toLowerCase().startsWith('sp-'))) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n\r\n }\r\n if (this.os.isAndroid) {\r\n // On Android, first check if poker put a known object in global namespace. If it's there, we know it's poker7 hybrid, we don't need anything else\r\n if ((window as any)[NATIVE_TYPE.POKER_ANDROID] && this.isNativeAndroid(NATIVE_TYPE.POKER_ANDROID)) {\r\n return true;\r\n }\r\n // For Some reason poker 7 have 2 different name.. do we need to check both\r\n if ((window as any)[NATIVE_TYPE.POKER_7_ANDROID] && this.isNativeAndroid(NATIVE_TYPE.POKER_7_ANDROID)) {\r\n return true;\r\n }\r\n\r\n //For Poker8 (new Poker) - Same check for CIP8_ANDROID, because it is a different object name\r\n if ((window as any)[NATIVE_TYPE.CIP8_ANDROID] && this.isNativeAndroid(NATIVE_TYPE.CIP8_ANDROID)) {\r\n return true;\r\n }\r\n\r\n //Once poker7 Baruch will go live with the the new POKER_7_ANDROID name we can remove the code below - for now we leave it for backward\r\n // ... otherwise, we have to make an additional check for New Jersey. 103 and 106 are the subbrands of poker in NJ (poker 7, the old one)\r\n if (['103', '106'].indexOf(Store.get('sourceSubBrand')) === -1) {\r\n //Todo check this store get logic, I think we have timing issue here\r\n // not NJ, so it's not poker hybrid\r\n return false;\r\n }\r\n\r\n let storedSourceProductPackage = Store.get('sourceProductPackage');\r\n if (storedSourceProductPackage && (storedSourceProductPackage.toString() === '52' || storedSourceProductPackage.toString() === '95')) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private build_isInSportHybrid(): boolean {\r\n if (this.os.isIOS) {\r\n return this.isNativeIOS(NATIVE_TYPE.SPORT_IOS_EMBEDDED);\r\n }\r\n\r\n if (this.os.isAndroid) {\r\n return this.isNativeAndroid(NATIVE_TYPE.SPORT_ANDROID);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Is it an IOS Hybrid?\r\n */\r\n private isNativeIOS(name?: string): boolean {\r\n const className = undefined !== name ? name : NATIVE_TYPE.CASINO_IOS;\r\n\r\n return ('object' === typeof ((window as any).webkit)\r\n && 'object' === typeof ((window as any).webkit.messageHandlers[className]));\r\n }\r\n\r\n /**\r\n * Is it an Android Hybrid?\r\n */\r\n private isNativeAndroid(name?: string): boolean {\r\n const className = undefined !== name ? name : NATIVE_TYPE.CASINO_ANDROID;\r\n return ('object' === typeof ((window as any)[className]));\r\n }\r\n\r\n\r\n private dataSanityCheck(casinoHybrid: boolean, inPokerHybrid: boolean, inSportHybrid: boolean, genericHybridEmbedded: boolean) {\r\n // Casino in Poker and casino in sport cannot be true at the same time\r\n if (inPokerHybrid === true && inSportHybrid === true) {\r\n this.logger.error(\"Hybrid data sanity check. 1. inPokerHybrid and inSportHybrid are both true\");\r\n }\r\n\r\n if (casinoHybrid === true && inSportHybrid === true) {\r\n this.logger.error(\"Hybrid data sanity check. 2. casinoHybrid and inSportHybrid are both true\");\r\n }\r\n\r\n if (inPokerHybrid === true && casinoHybrid === true) {\r\n this.logger.error(\"Hybrid data sanity check. 3. inPokerHybrid and casinoHybrid are both true\");\r\n }\r\n\r\n // From the trio: casinoHybrid, inPokerHybrid, inSportHybrid at most one need to be true.\r\n // And this, only if genericHybridEmbedded is true\r\n if (genericHybridEmbedded === true && (casinoHybrid === false || inPokerHybrid === false || inSportHybrid === false)) {\r\n this.logger.error(\"Hybrid data sanity check. 4. if genericHybridEmbedded is false, none of any other embedded flags can be true\");\r\n }\r\n\r\n }\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport { UAParser } from 'ua-parser-js';\r\nimport Logger from '../logger';\r\nimport { DeviceFeatureDetection } from './detection/feature';\r\nimport { DeviceOSDetection } from './detection/os';\r\nimport { DeviceViewportDetection } from './detection/viewport';\r\nimport { DeviceModelDetection } from './detection/model';\r\nimport { DeviceBrowserDetection } from './detection/browser';\r\nimport { DeviceHybridDetection } from './detection/hybrid';\r\n\r\nclass Device {\r\n public logger: Logger;\r\n private _uaParser: UAParser = new UAParser();\r\n public readonly feature = new DeviceFeatureDetection();\r\n public readonly os = new DeviceOSDetection(this._uaParser);\r\n public readonly viewport = new DeviceViewportDetection();\r\n public readonly model = new DeviceModelDetection(this._uaParser);\r\n public readonly browser = new DeviceBrowserDetection(this._uaParser);\r\n public readonly hybrid = new DeviceHybridDetection(this.os);\r\n\r\n /**\r\n * Initialize the device.\r\n *\r\n * @constructor\r\n */\r\n constructor() {\r\n this.logger = new Logger((this.constructor as any).CLASS);\r\n }\r\n\r\n /**\r\n * Getter for the user-agent for the client being handled in this request.\r\n *\r\n * @example 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53'\r\n */\r\n public get userAgent() {\r\n return this._uaParser.getUA();\r\n }\r\n\r\n public get networkData() {\r\n let connection = navigator[\"connection\"] || navigator[\"mozConnection\"] || navigator[\"webkitConnection\"];\r\n if(connection) {\r\n return (connection.effectiveType?connection.effectiveType:'') + '_'\r\n + (connection.rtt?connection.rtt:'') + '_'\r\n + (connection.downlink?connection.downlink:'');\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Generates a GUID\r\n */\r\n public generateGuid(): string {\r\n return uuidv4();\r\n }\r\n\r\n private matchMedia(media: string) {\r\n return window.matchMedia(media).matches;\r\n }\r\n\r\n /**\r\n * Used to detected if user clicked and loaded the app using home screen\r\n *\r\n * Returns true if the app is running in standalone mode (iOS only)\r\n */\r\n public get isStandalone() {\r\n return 'standalone' in window.navigator ? (window.navigator as any).standalone : false;\r\n }\r\n\r\n public get isProgressiveWebApp(): boolean {\r\n\t\t// PWA setting is \"display\": \"fullscreen\"\r\n\t\t// but installed on desktop it's detected as \"standalone\" if app is not in fullscreen mode or \"fullscreen\" if user enters fullscreen mode\r\n // iOS is identified through check the navigator to have attribute 'standalone'\r\n\r\n\t\treturn !this.hybrid.isHybrid && (this.isStandalone ||\r\n this.matchMedia('(display-mode: fullscreen)') ||\r\n this.matchMedia('(display-mode: standalone)'));\r\n\r\n }\r\n\r\n public get isSupportHTML5() {\r\n return 'function' === typeof document.createElement('canvas').getContext;\r\n }\r\n\r\n public get isMobileWebApp() {\r\n return (this.os.isMobileOS || this.isProbablyIOSDevice) && !this.hybrid.isHybrid;\r\n }\r\n\r\n /**\r\n * Check whether the browser has cookie enable 3rd party.\r\n */\r\n public get isCookieEnable() {\r\n return window.navigator.cookieEnabled;\r\n }\r\n\r\n /**\r\n * From iOS 13, Safari decided to put the \"Request Desktop Website\" setting on true by default on iPad.\r\n * For users that disable this setting, Device.model.isIpad will be true, but for the majority it will be false because\r\n * Safari will send the desktop user agent.\r\n *\r\n * Also, iPhone users have that option also although not many people enable it.\r\n *\r\n * The only clue we have that it is most probably an iPad is to detect if the device has touchscreen because up until now\r\n * Apple does not produce MacBooks or Macs with touchscreens. So it's most probably an iOS (iPad or an iPhone)\r\n *\r\n * @Note IMPORTANT! Should be use only in rare cases (for example force GRS(GGP games) to return the mobile version on iPad)\r\n * @Note IMPORTANT! This method should return true for all iOS and iOS + \"Request Desktop Website\", iPhone INCLUDED\r\n */\r\n public get isProbablyIOSDevice() {\r\n if (this.os.isIOS) {\r\n return true;\r\n }\r\n if (!this.os.isMacOS) {\r\n return false;\r\n }\r\n // At this point we know that we are on Mac\r\n // Let's see if it has touchscreen\r\n return this.feature.isTouch;\r\n }\r\n\r\n /**\r\n * From iOS 13, Safari decided to put the \"Request Desktop Website\" setting on true by default on iPad.\r\n * For users that disable this setting, Device.model.isIpad will be true, but for the majority it will be false because\r\n * Safari will send the desktop user agent.\r\n *\r\n * Also, iPhone users have that option also although not many people enable it.\r\n *\r\n * The only clue we have that it is most probably an iPad is to detect if the device has touchscreen because up until now\r\n * Apple does not produce MacBooks or Macs with touchscreens. So it's most probably an iOS (iPad or an iPhone)\r\n *\r\n * @Note IMPORTANT! Should be use only in rare cases (for example force GRS(GGP games) to return the mobile version on iPad)\r\n * @Note IMPORTANT! This method should return true for all iPad and iOS + \"Request Desktop Website\", iPhone NOT INCLUDED\r\n * HOWEVER, FOR IPHONE THAT HAVE \"Request Desktop Website\", this method will return true\r\n */\r\n public get isProbablyIPad() {\r\n // Pre iOS 13 detection\r\n if (this.model.isIpad) {\r\n return true;\r\n }\r\n if (this.model.isIphone) {\r\n return false;\r\n }\r\n if (!this.os.isMacOS) {\r\n return false;\r\n }\r\n // At this point we know that is a Safari browser on Mac (in the past, Safari was available for Windows too)\r\n // Let's see if it has touchscreen\r\n return this.feature.isTouch;\r\n }\r\n\r\n /**\r\n * Check the device is in a portrait mode.\r\n *\r\n * @deprecated use \"Device.viewport.isPortrait\"\r\n */\r\n public get isPortrait(): boolean {\r\n if (this.isMobile() && this.os.isAndroid) {\r\n // fix for Samsung S8 series (S8-S9...).\r\n // In full screen mode window.screen.width and window.screen.height after single rotation get wrong values (width equal to height)\r\n // So we should test it by innerWidth and innerHeight like in iOS\r\n if (this.viewport.screenWidth === this.viewport.screenHeight) {\r\n return this.viewport.width < this.viewport.height;\r\n }\r\n return this.viewport.screenWidth < this.viewport.screenHeight;\r\n } else {\r\n return this.viewport.width < this.viewport.height;\r\n }\r\n }\r\n\r\n /**\r\n * TODO: Replace with NOTCH DETECTION. We don't care about the iPhone version, we care to know for iPhone X if it has a notch.\r\n *\r\n * Getting the current running iPhone device version, hardware version.\r\n * Able to detect iPhone 4 and 5 and iphone x (10)\r\n * Returns NULL if device is not an iPhone. Will return a Number of the hardware version.\r\n * @deprecated\r\n */\r\n public getIphoneVersion() {\r\n\r\n if (this.os.isIOS && 11 <= this.os.version &&\r\n (\r\n //iphone 12 pro max\r\n (926 === window.screen.height && 428 === window.screen.width) || (926 === window.screen.width && 428 === window.screen.height)\r\n ||\r\n //iphone 12 pro\r\n (844 === window.screen.height && 390 === window.screen.width) || (844 === window.screen.width && 390 === window.screen.height)\r\n ||\r\n // iPhone X / Xs\r\n (812 === window.screen.height && 375 === window.screen.width) || (812 === window.screen.width && 375 === window.screen.height)\r\n ||\r\n // iPhone Xr / Xs Max\r\n (896 === window.screen.height && 414 === window.screen.width) || (896 === window.screen.width && 414 === window.screen.height)\r\n )\r\n ) {\r\n return 10;\r\n }\r\n\r\n if (this.os.isIOS && 8 <= this.os.version && 375 === window.screen.width) {\r\n return 6;\r\n }\r\n\r\n if (this.os.isIOS && 6 <= this.os.version && 320 === window.screen.width) {\r\n return 5;\r\n }\r\n\r\n // iphone 4/s (Retina)\r\n if (this.os.isIOS && 5 <= this.os.version && 640 === window.screen.width) {\r\n return 4;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * TODO: Replace with NOTCH DETECTION. We don't care about the iPhone version, we care to know for iPhone X if it has a notch.\r\n * Is IphoneX\r\n * Returns true if the device is IphoneX\r\n * @deprecated\r\n */\r\n public isIphoneX(): boolean {\r\n return 10 === this.getIphoneVersion();\r\n }\r\n\r\n /**\r\n * TODO: Check usages and delete/refactor\r\n * @deprecated\r\n */\r\n public isMobileNotTablet(): boolean {\r\n return this.viewport.width < 1280 && !this.isTablet();\r\n }\r\n\r\n\r\n /**\r\n * TODO: Check usages and delete/refactor\r\n * Returns true only for ipads smaller than 1280\r\n * @deprecated\r\n */\r\n public isTablet(): boolean {\r\n return this.model.isIpad && this.viewport.width < 1280;\r\n }\r\n\r\n /**\r\n * Those are not the droids you are looking for\r\n * Use media queries, feature detection, client hints, os detection.\r\n * Think of what you want to achieve with your code and put a condition for that, not a general isMobile condition\r\n *\r\n * TODO: Check usages and delete/refactor\r\n * @deprecated\r\n */\r\n public isMobile(): boolean {\r\n return this.viewport.width < 1280;\r\n }\r\n\r\n /**\r\n * Get benchmark.\r\n */\r\n public getBenchMark() {\r\n var b = { m: 0 }, bd = [], bmt = + new Date() + 50;\r\n do {\r\n var t, count = 0, tt = + new Date();\r\n do { t = + new Date(); } while (t === tt);\r\n do { count++; tt = +new Date(); } while (t === tt);\r\n if ((tt - t) === 1) { bd[bd.length] = count; }\r\n } while ((bd.length < 20) && (t < bmt));\r\n\r\n if (bd.length === 0) b.m = 0; else b.m = Math.max.apply(Math, bd);\r\n\r\n return b.m;\r\n }\r\n\r\n}\r\n\r\nexport default new Device();\r\n","import _ from './underscore';\r\nimport Logger from './logger';\r\nimport {namedSetInterval, namedSetTimeout} from '../../../common/utils/time-functions';\r\nimport {TimeIntervalName} from '../../../common/utils/time-interval-names';\r\n\r\nexport interface TimeoutSubscription {\r\n clear(): void;\r\n}\r\n\r\n\r\n\r\nexport interface ElementDimensions {\r\n\r\n width: number,\r\n height: number,\r\n horizontMargin: number,\r\n verticalMargin: number,\r\n horizontPadding: number,\r\n verticalPadding: number,\r\n horizontBorder: number,\r\n verticalBorder: number,\r\n fullWidth: number,\r\n fullHeight: number,\r\n marginRight: number,\r\n marginLeft: number,\r\n marginTop: number,\r\n marginBottom: number\r\n}\r\n\r\nexport interface ElementSize {\r\n width: number,\r\n height: number\r\n}\r\n\r\nexport interface DomEventSubscription {\r\n remove: () => void\r\n}\r\n\r\n\r\n\r\nclass DOM {\r\n\r\n static CLASS = 'DOM';\r\n\r\n constructor() {\r\n this._createLogger();\r\n }\r\n\r\n logger: Logger;\r\n _createLogger() {\r\n this.logger = new Logger(DOM.CLASS);\r\n }\r\n\r\n\r\n getBody() : HTMLElement {\r\n return document.body;\r\n }\r\n\r\n\r\n getHTML(): HTMLElement {\r\n return document.documentElement;\r\n }\r\n\r\n\r\n /**\r\n * Draw element into the DOM.\r\n */\r\n draw(element: Element) : DOM {\r\n\r\n this.append(this.getBody(), element);\r\n\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Selector jQuery like for getting the object from the dom.\r\n * $$ is double the fun, $ is cool, $$ is cooler.\r\n */\r\n $$(query: any): any {\r\n let el = null;\r\n\r\n // first off if it's not a string assume it's already an element\r\n if (!_.isString(query)) {\r\n el = query;\r\n } else if ( this.isTag(query) ) {\r\n // check if it's a tag\r\n let tag = query.substring(1, query.length - 1);\r\n el = document.createElement( tag );\r\n } else if ( this.isId(query) ) {\r\n // check if it's an id\r\n let id = query.substr(1);\r\n el = document.getElementById( id );\r\n } else {\r\n // run a basic query\r\n el = document.querySelectorAll(query);\r\n }\r\n\r\n if (_.isNodeList(el)) {\r\n el = [].slice.call(el);\r\n }\r\n\r\n return el;\r\n }\r\n\r\n querySelector(selector: string): Element {\r\n return document.querySelector(selector);\r\n }\r\n\r\n\r\n injectStyleToDOM(content: string): HTMLStyleElement {\r\n let newStyle = document.createElement('style');\r\n newStyle.innerHTML = content;\r\n return document.body.appendChild(newStyle);\r\n }\r\n\r\n createElement(type: string = 'div', html: string = '', classList = []): HTMLElement {\r\n let domElement = document.createElement(type);\r\n if(html) {\r\n domElement.innerHTML = html;\r\n }\r\n\r\n if(classList.length > 0){\r\n classList.forEach(_class => this.addClass(domElement, _class));\r\n }\r\n\r\n return domElement;\r\n }\r\n\r\n append(target: Element, el: Element) : DOM {\r\n if (!target || !_.isElement(target)) {\r\n return this;\r\n }\r\n\r\n if (!el || !_.isElement(el)) {\r\n return this;\r\n }\r\n\r\n target.appendChild(el);\r\n\r\n return this;\r\n }\r\n\r\n\r\n\r\n removeElement(target: Element, el: Element) : DOM {\r\n if (!target || !_.isElement(target)) {\r\n return this;\r\n }\r\n\r\n if (!el || !_.isElement(el)) {\r\n return this;\r\n }\r\n el.parentNode.removeChild(el);\r\n\r\n return this;\r\n }\r\n\r\n appendFirst(target: Element, el: Element): void {\r\n\r\n if (!_.isElement(target)) {\r\n throw new Error('target argument must be an Element');\r\n }\r\n\r\n if (!_.isElement(el)) {\r\n throw new Error('el argument must be an Element');\r\n }\r\n\r\n target.insertBefore(el, target.firstChild);\r\n }\r\n\r\n addClass(el: Element, className: any) : DOM {\r\n if (!_.isElement(el)) {\r\n return this;\r\n }\r\n\r\n if (!className || 0 === className.length) {\r\n return this;\r\n }\r\n\r\n let name = _.isArray(className) ? className[0] : className;\r\n\r\n if (el.classList) {\r\n el.classList.add(name);\r\n } else {\r\n el.className += ' ' + name;\r\n }\r\n\r\n return _.isArray(className) ? this.addClass(el, className.slice(1)) : this;\r\n }\r\n\r\n\r\n\r\n /**\r\n * toggle class to element\r\n */\r\n toggleClass(el: Element, className: string) : DOM {\r\n if (!_.isElement(el)) {\r\n return this;\r\n }\r\n\r\n if (!className) {\r\n return this;\r\n }\r\n\r\n el.classList.toggle(className);\r\n\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * if element already has the class\r\n */\r\n hasClass(el: Element, className: string) : boolean {\r\n if (!_.isElement(el)) {\r\n throw new Error(`el argument is required! el = ${el}; className = ${className}`);\r\n }\r\n\r\n if (!className) {\r\n throw new Error(`className argument is required! el = ${el}; className = ${className}`);\r\n }\r\n\r\n return el.classList.contains(className);\r\n }\r\n\r\n\r\n /**\r\n * Add attribute to the element.\r\n */\r\n addAttribute(el: Element, attribute: string = '', value: string = ''): DOM {\r\n if (!_.isElement(el)) {\r\n return this;\r\n }\r\n el.setAttribute(attribute, value);\r\n\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Add Style to the element.\r\n */\r\n addStyle(el: HTMLElement, key: string, value: string): DOM {\r\n if (!_.isElement(el)) {\r\n return this;\r\n }\r\n el.style[key] = value;\r\n\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Remove Style from the element.\r\n */\r\n removeStyle(el: HTMLElement, key: string): DOM {\r\n if (!_.isElement(el)) {\r\n return this;\r\n }\r\n el.style.removeProperty(key);\r\n\r\n return this;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Get current element dimensions\r\n */\r\n getDimensions(el: HTMLElement): ElementDimensions {\r\n if (!_.isElement(el)) {\r\n throw new Error('el argument must be an HTMLElement');\r\n }\r\n\r\n let style = this.getCurrentStyle(el);\r\n let horizontMargin = parseFloat(style.marginLeft) + parseFloat(style.marginRight);\r\n let verticalMargin = parseFloat(style.marginBottom) + parseFloat(style.marginTop);\r\n\r\n return {\r\n width: el.offsetWidth,\r\n height: el.offsetHeight,\r\n horizontMargin: horizontMargin,\r\n verticalMargin: verticalMargin,\r\n horizontPadding: parseFloat(style.paddingLeft) + parseFloat(style.paddingRight),\r\n verticalPadding: parseFloat(style.paddingBottom) + parseFloat(style.paddingTop),\r\n horizontBorder: parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth),\r\n verticalBorder: parseFloat(style.borderBottomWidth) + parseFloat(style.borderTopWidth),\r\n fullWidth: el.offsetWidth + horizontMargin,\r\n fullHeight: el.offsetHeight + verticalMargin,\r\n marginRight: parseFloat(style.marginRight),\r\n marginLeft: parseFloat(style.marginLeft),\r\n marginTop: parseFloat(style.marginTop),\r\n marginBottom: parseFloat(style.marginBottom)\r\n };\r\n }\r\n\r\n setElementSize(element: HTMLElement, size: ElementSize, unit: string = 'px') : void {\r\n element.style.width = size.width + unit;\r\n element.style.height = size.height + unit;\r\n }\r\n\r\n getCurrentStyle(el: HTMLElement) : CSSStyleDeclaration {\r\n if (!_.isElement(el)) {\r\n throw new Error('el argument must be an HTMLElement');\r\n }\r\n return window.getComputedStyle(el) || el['currentStyle'];\r\n }\r\n\r\n\r\n /**\r\n * Hide element from dom.\r\n */\r\n hide(el: Element): DOM {\r\n this.removeClass(el, 'show');\r\n this.addClass(el, 'hide');\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Get element to be invisible\r\n * @param el\r\n * @returns {DOM}\r\n */\r\n invisible(el: HTMLElement): DOM {\r\n this.removeClass(el, 'cgp-visible');\r\n this.addClass(el, 'cgp-invisible');\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Show element on dom\r\n * @param el\r\n */\r\n show(el: Element): DOM {\r\n this.removeClass(el, 'hide');\r\n this.addClass(el, 'show');\r\n return this;\r\n }\r\n\r\n /**\r\n * Get element to be visible\r\n * @param el\r\n * @returns {DOM}\r\n */\r\n visible(el: HTMLElement): DOM {\r\n this.removeClass(el, 'cgp-invisible');\r\n this.addClass(el, 'cgp-visible');\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Remove class from element.\r\n * @param el\r\n * @param className\r\n */\r\n removeClass(el: Element, className: string): DOM {\r\n if (!_.isElement(el)) {\r\n throw new Error('el argument must be an element');\r\n }\r\n\r\n el.classList.remove(className);\r\n return this;\r\n }\r\n\r\n\r\n removeAttribute(el: Element, attr: string = ''): DOM {\r\n if (!_.isElement(el)) {\r\n throw new Error('el argument must be an element');\r\n }\r\n\r\n el.removeAttribute(attr);\r\n return this;\r\n }\r\n\r\n isInputElement(tagName: string = ''): boolean {\r\n return 'INPUT' === tagName;\r\n }\r\n\r\n\r\n /**\r\n * Sets the innerHTML for the provided element\r\n */\r\n html(html: string, el: Element): DOM {\r\n if (_.isNullOrUndefined(html)) {\r\n this.logger.error('Html is not valid parameter');\r\n return this;\r\n }\r\n el.innerHTML = html;\r\n return this;\r\n }\r\n\r\n\r\n /**\r\n * Clear elements from his node childs nor content.\r\n */\r\n clear(target: Element): DOM {\r\n while (target.firstChild) {\r\n target.removeChild(target.firstChild);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n camelCase(str: string): string {\r\n return str.replace(/-([a-z])/g, (g) => {\r\n return g[1].toUpperCase();\r\n });\r\n }\r\n\r\n\r\n isTag(str: string): boolean {\r\n return 0 === str.search(/^<\\w+>$/);\r\n }\r\n\r\n isId(str: string ) {\r\n return 0 === str.search(/^#\\w+$/);\r\n }\r\n\r\n parseDataAttributes(el: Element): object {\r\n let data = {};\r\n\r\n [].forEach.call(el.attributes, (attr) => {\r\n if (/^data-/.test(attr.name)) {\r\n let camelCaseName = attr.name.substr(5).replace(/-(.)/g, ($0, $1) => {\r\n return $1.toUpperCase();\r\n });\r\n data[camelCaseName] = attr.value;\r\n }\r\n });\r\n\r\n return data;\r\n }\r\n\r\n text(el: Element, value: string): DOM {\r\n if (!_.isElement(el)) {\r\n throw new Error('el argument must be a HTMLElement');\r\n }\r\n el.textContent = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * wrapper for add event listeners on DOM, returns a self removing method.\r\n */\r\n addEventListener(el: Element | Document, type: string, callback: EventListenerOrEventListenerObject, useCapture: boolean = false) : DomEventSubscription {\r\n\r\n el.addEventListener(type, callback, useCapture);\r\n\r\n return {\r\n remove: function(msgElement: Element | Document, msgType: string, msgCallback: EventListenerOrEventListenerObject) {\r\n return () => {\r\n return msgElement.removeEventListener(msgType, msgCallback);\r\n };\r\n }(el, type, callback)\r\n };\r\n }\r\n\r\n\r\n\r\n\r\n /**\r\n *\r\n *\r\n * @description - Generic event handler, all the component should subscribe to one event function,\r\n * They should pass the element it self define specific id inside the element,\r\n * Event type, And the event callback.\r\n *\r\n * @usage:\r\n * onDOMEvent(DOMElement, '#testid', 'click', ()=> {alert('onClick happend'});\r\n * onDOMEvent(DOMElement, 'click', ()=> {alert('onClick happend'});\r\n */\r\n onDOMElementEvent(element: Element, eventName: string, callback: EventListenerOrEventListenerObject, useCapture: boolean = false) : DomEventSubscription {\r\n\r\n if (!_.isElement(element)) {\r\n throw new Error('element argument must be of type HTMLElement');\r\n }\r\n\r\n if(!_.isString(eventName)) {\r\n throw new Error('eventName argument must be of type String');\r\n }\r\n\r\n if(!_.isFunction(callback)) {\r\n throw new Error('callback argument must be of type Function');\r\n }\r\n\r\n element.addEventListener(eventName, callback, useCapture);\r\n\r\n return {\r\n remove: () => element.removeEventListener(eventName, callback)\r\n };\r\n }\r\n\r\n\r\n setInterval(callback: () => void, timeout: number, name?: TimeIntervalName) : number {\r\n return namedSetInterval(name, callback, timeout);\r\n }\r\n\r\n\r\n clearInterval(handle: number): void {\r\n clearInterval(handle);\r\n }\r\n\r\n\r\n setTimeout(callback: () => void, timeout: number, name?: TimeIntervalName): number {\r\n return namedSetTimeout(name, callback, timeout);\r\n }\r\n\r\n clearTimeout(handle: number): void {\r\n clearTimeout(handle);\r\n }\r\n}\r\n\r\nexport default new DOM();\r\n","import React from 'react';\r\nimport {IServiceFactory} from './services/service-factory.interface';\r\n\r\n\r\n\r\nexport interface IOrbitContext {\r\n services: IServiceFactory\r\n}\r\n\r\nexport const OrbitContext = React.createContext(null!);\r\n\r\nexport const OrbitContextProvider = OrbitContext.Provider;\r\nexport const OrbitContextConsumer = OrbitContext.Consumer;\r\n","import {IDomService, IFormPostParams} from './dom.service.interface';\r\nimport {EventListenerRegistration} from '../../../utils/event-listener-registration';\r\nimport DOM from \"../../../sdk/src/utils/dom\";\r\nimport _ from \"../../../sdk/src/utils/underscore\";\r\nimport {observable, runInAction} from \"mobx\";\r\nimport {Check} from \"@sparkware/app-utils\";\r\n\r\n\r\nexport class DomService implements IDomService {\r\n constructor() {\r\n this._eventListenerRegistration = new EventListenerRegistration(document);\r\n DOM.addEventListener(document, 'webkitfullscreenchange', this._onFullScreenChange, false);\r\n DOM.addEventListener(document, 'mozfullscreenchange', this._onFullScreenChange, false);\r\n DOM.addEventListener(document, 'fullscreenchange', this._onFullScreenChange, false);\r\n DOM.addEventListener(document, 'MSFullscreenChange', this._onFullScreenChange, false);\r\n this.isInFullScreen = _.isFullScreen();\r\n }\r\n\r\n private initialBodyPaddingRight: string | null = null;\r\n private bodyPaddingRightAltered = false;\r\n disableScrolling(): void {\r\n // before we add the class \"no-scrolling\" (that has overflow: hidden) on the body\r\n // we check if a scrollbar exists. If it exists, we compute the scrollbar thickness and we add it to body's padding-right\r\n // WE COULD HAVE USED CSS `scrollbar-gutter: stable;` on `html` but that has problems. The spacing auto-added by the browser is outside the DOM\r\n // and seems to be above everything. Above the overlay, so clicking in that area does not close it\r\n // and above the right drawer, so the scrollbar of the drawer is not visible on desktop (on Chrome, doesn't happen on Firefox)\r\n // and also creates positioning problems for right drawers (like user menu on rtl languages)\r\n\r\n // instead of comparing document.body.scrollHeight > window.innerHeight to see if we have scrollable content we compare the widths\r\n // to see if we have a scrollbar. And the difference is the scrollbar thickness.\r\n if (window.innerWidth > document.body.clientWidth) {\r\n let scrollbarThickness = window.innerWidth - document.body.clientWidth;\r\n let bodyComputedStyles: CSSStyleDeclaration = window.getComputedStyle(document.body);\r\n this.initialBodyPaddingRight = bodyComputedStyles.paddingRight;\r\n this.bodyPaddingRightAltered = true;\r\n\r\n // increase padding by the scrollbar thickness\r\n this.body.style.paddingRight = \"calc(\" + this.initialBodyPaddingRight + \" + \" + scrollbarThickness + \"px)\";\r\n }\r\n this.body.classList.add('no-scrolling');\r\n }\r\n\r\n enableScrolling(): void {\r\n this.body.classList.remove('no-scrolling');\r\n if (this.bodyPaddingRightAltered) {\r\n this.bodyPaddingRightAltered = false;\r\n this.body.style.paddingRight = this.initialBodyPaddingRight;\r\n }\r\n }\r\n\r\n querySelector(selector: string): Element | null {\r\n return document.querySelector(selector);\r\n }\r\n\r\n get body(): HTMLElement {\r\n return document.body;\r\n }\r\n\r\n get head(): HTMLElement {\r\n return document.head;\r\n }\r\n\r\n get html(): HTMLElement {\r\n return document.documentElement;\r\n }\r\n\r\n setDocumentTitle(title: string): void {\r\n if(title) {\r\n document.title = title;\r\n }\r\n }\r\n\r\n get locationPathName(): string {\r\n return document.location.pathname;\r\n }\r\n\r\n private readonly _eventListenerRegistration;\r\n get subscribeTo(): EventListenerRegistration {\r\n return this._eventListenerRegistration;\r\n }\r\n\r\n getElementsByClassName(className: string): HTMLCollectionOf {\r\n return document.getElementsByClassName(className);\r\n }\r\n\r\n getElementsByTagName(tagName: string): HTMLCollectionOf {\r\n return document.getElementsByTagName(tagName);\r\n }\r\n\r\n getElementById(id: string): HTMLElement | null {\r\n return document.getElementById(id);\r\n }\r\n\r\n createElement(tagName: string): HTMLElement {\r\n return document.createElement(tagName);\r\n }\r\n\r\n @observable.ref\r\n isInFullScreen: boolean;\r\n\r\n private _onFullScreenChange = () => {\r\n runInAction(() => {\r\n this.isInFullScreen = _.isFullScreen()\r\n });\r\n }\r\n\r\n enterFullScreen(): void {\r\n _.openFullScreen();\r\n }\r\n exitFullScreen(): void {\r\n _.closeFullScreen();\r\n }\r\n\r\n performFormPost(params: IFormPostParams) {\r\n const form: HTMLFormElement = this.createElement(\"form\") as HTMLFormElement;\r\n form.className = 'cy-form-post-form';\r\n form.setAttribute('method', params.method);\r\n form.setAttribute('target', Check.isNullOrUndefined(params.target) ? '_blank' : params.target);\r\n form.setAttribute('action', params.url);\r\n\r\n let hiddenField: HTMLInputElement = null;\r\n if (!Check.isNullOrUndefined(params.extraParams)) {\r\n for (const key in params.extraParams) {\r\n hiddenField = document.createElement('input');\r\n hiddenField.setAttribute('type', 'hidden');\r\n hiddenField.setAttribute('name', key);\r\n hiddenField.setAttribute('value', params.extraParams[key]);\r\n form.appendChild(hiddenField);\r\n }\r\n }\r\n\r\n this.body.appendChild(form);\r\n form.submit();\r\n //Timeout is for automation purposes.\r\n setTimeout(() => this.body.removeChild(form), 500);\r\n }\r\n}\r\n","import {Check} from '@sparkware/app-utils';\r\n\r\nexport class Lazy{\r\n constructor(private _valueFactory: () => T) {\r\n }\r\n\r\n private _value = undefined;\r\n private _initializing = false;\r\n private _initValue() {\r\n if(this._initializing) {\r\n throw new Error('Lazy circular dependency detected: ' + this._valueFactory)\r\n }\r\n if(Check.isUndefined(this._value)) {\r\n this._initializing = true;\r\n try {\r\n this._value = this._valueFactory();\r\n }\r\n finally {\r\n this._initializing = false;\r\n }\r\n\r\n }\r\n }\r\n\r\n get value(): T {\r\n this._initValue();\r\n\r\n return this._value;\r\n }\r\n\r\n forceInit() {\r\n this._initValue();\r\n }\r\n}\r\n","import { matchPath } from 'react-router';\r\nimport {RouteDefinition, RouteParams} from '../routing-configuration/route-definition/route-definition';\r\n\r\n\r\nexport interface RouteMatchResult {\r\n routeDefinition: RouteDefinition;\r\n routeParams: RouteParams;\r\n}\r\nexport function tryMatchPath(pathToMatch: string, routes: RouteDefinition[]): RouteMatchResult {\r\n for(let i = 0; i < routes.length; i++) {\r\n let routeDefinition = routes[i];\r\n\r\n for(let j = 0; j < routeDefinition.paths.length; j++) {\r\n let pattern = routeDefinition.paths[j];\r\n let match = matchPath(pathToMatch, {\r\n path: pattern,\r\n exact: routeDefinition.exact,\r\n strict: false\r\n });\r\n\r\n if(match) {\r\n return {\r\n routeDefinition: routeDefinition,\r\n routeParams: match.params\r\n };\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\n\nfunction getStatics(component) {\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n }\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n } else {\n throw new Error(prefix + \": \" + (message || ''));\n }\n}\n\nexport default invariant;\n","import {RouteDefinition, RouteParams, RouteRender} from '../../routing-configuration/route-definition/route-definition';\r\nimport {IRoute} from \"./route.interface\";\r\nimport React from \"react\";\r\n\r\nexport class FallbackRoute implements IRoute{\r\n private readonly _routeDefinition: RouteDefinition;\r\n\r\n constructor(render: RouteRender) {\r\n this._routeDefinition = {\r\n paths: [],\r\n render: render\r\n }\r\n }\r\n\r\n render(): React.ReactNode {\r\n return this._routeDefinition.render(this.routeParams);\r\n }\r\n\r\n get routeParams(): RouteParams {\r\n return {};\r\n }\r\n\r\n get isOrbitRoute(): boolean {\r\n return false;\r\n }\r\n\r\n get data(): any {\r\n return {};\r\n }\r\n\r\n get routeDefinition(): RouteDefinition {\r\n return this._routeDefinition;\r\n }\r\n\r\n protected _isMiniOrbitRoute(): boolean {\r\n return false;\r\n }\r\n}\r\n","import {IRoute} from './route.interface';\r\nimport {RouteData, RouteDefinition, RouteParams} from '../../routing-configuration/route-definition/route-definition';\r\nimport React from 'react';\r\n\r\nexport abstract class RouteBase implements IRoute {\r\n constructor(private _routeDefinition: RouteDefinition, private _routeParams: RouteParams) {}\r\n\r\n render(): React.ReactNode {\r\n return this._routeDefinition?.render(this._routeParams);\r\n }\r\n\r\n get routeParams(): RouteParams {\r\n return this._routeParams;\r\n }\r\n\r\n get isOrbitRoute(): boolean {\r\n return this._isOrbitRoute();\r\n }\r\n\r\n get data(): RouteData {\r\n return this._routeDefinition.data;\r\n }\r\n\r\n get routeDefinition(): RouteDefinition {\r\n return this._routeDefinition;\r\n }\r\n\r\n\r\n protected abstract _isOrbitRoute(): boolean;\r\n\r\n}\r\n","import {ISplashService} from './splash-service.interface';\r\nimport {Check} from '@sparkware/app-utils';\r\nimport {isInsideAutomation} from \"../../../utils/automation-helpers\";\r\n\r\nexport class SplashService implements ISplashService {\r\n constructor() {\r\n //document.body.style.position = 'fixed';\r\n document.body.classList.add('disable-animations');\r\n }\r\n\r\n computeSplashTimeInSeconds(startTime: number): number {\r\n return parseFloat(((performance.now() - startTime) / 1000).toFixed(2));\r\n }\r\n\r\n splashTime: number = null;\r\n\r\n removeSplash(): void {\r\n if(!Check.isNull(this.splashTime)) {\r\n console.error('removeSplash called second time!');\r\n return;\r\n }\r\n //document.body.style.removeProperty('position');\r\n document.body.classList.remove('disable-animations');\r\n let splashPageElement = document.getElementById('splash-page');\r\n if(splashPageElement) {\r\n splashPageElement.remove();\r\n }\r\n this.splashTime = this.computeSplashTimeInSeconds(window['splashStart']);\r\n\r\n this._splashRemovedSubscribers.forEach(callback => callback());\r\n\r\n this._enablePrerender();\r\n\r\n }\r\n\r\n private _splashRemovedSubscribers: Array<() => void> = [];\r\n onSplashRemoved(callback: () => void) {\r\n this._splashRemovedSubscribers.push(callback);\r\n }\r\n\r\n private _enablePrerender() {\r\n const timeoutValue = isInsideAutomation() ? 0 : 5000;\r\n //We want to give 5 more sec of delay before pre render take the snapshot to make sure all b2c banner loaded\r\n setTimeout(() => {\r\n window['prerenderReady'] = true;\r\n }, timeoutValue);\r\n }\r\n}\r\n","import React from 'react';\r\nimport {TapHandlerLogic} from '../../tap-handler/tap-handler.component';\r\nimport {OrbitComponentWithState} from \"../../base-components/orbit-component-with-state/orbit-component-with-state\";\r\n\r\nenum IMAGE_TYPE {\r\n EMPTY_IMAGE_BASE64,\r\n FALLBACK,\r\n SRC\r\n};\r\nenum IMAGE_STATUS {\r\n LAZY,\r\n LOADING,\r\n SETTLED\r\n}\r\n\r\ninterface ImageSettleStatus {\r\n value: \"load\" | \"error\",\r\n type: IMAGE_TYPE,\r\n}\r\n\r\n/**\r\n * We could have defined this interface as \"ImageProps extends React.ImgHTMLAttributes\"\r\n * and define inside only what's extra (like \"lazy\" or \"fallbackSrc\") and props that alter the original def (like \"width: number\" instead of default \"width: string | number\")\r\n * But in case of someone styling the \"Image\" component with: styled(Image)<{squareIcon: boolean}>. The extra prop will bleed into the DOM and React will throw:\r\n * -- \"Warning: React does not recognize the `squareIcon` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `squareicon` instead. If you accidentally passed it from a parent component, remove it from the DOM element.\"\r\n * Also, ocasionally I am getting this warning\r\n * -- \"Warning: React does not recognize the `forwardedRef` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `forwardedref` instead. If you accidentally passed it from a parent component, remove it from the DOM element.\"\r\n *\r\n * So I am whitelisting props we actually use, and I am filtering based on that\r\n */\r\nexport interface ImageProps {\r\n // props common with React.ImgHTMLAttributes\r\n src: string;\r\n alt?: string;\r\n className?: string;\r\n title?: string;\r\n onClick?(event: React.MouseEvent): void;\r\n onLoad?(e: React.SyntheticEvent): void;\r\n onError?(e: React.SyntheticEvent): void;\r\n\r\n // props derived from React.ImgHTMLAttributes with slight changes\r\n width?: number; // instead of string | number\r\n height?: number; // instead of string | number\r\n\r\n // custom props\r\n fallbackSrc?: string;\r\n enableTap?: boolean;\r\n lazy?: boolean;\r\n onLoadStart?(): void;\r\n onSettled?(settleStatus: ImageSettleStatus): void;\r\n}\r\n\r\ninterface ImageState {\r\n src: string;\r\n type: IMAGE_TYPE;\r\n status: IMAGE_STATUS;\r\n}\r\n\r\nconst EMPTY_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\nexport class Image extends OrbitComponentWithState {\r\n\r\n constructor(props: ImageProps) {\r\n super(props);\r\n this.state = this._getInitialSrcState();\r\n }\r\n\r\n private _getInitialSrcState() {\r\n /**\r\n * If this is a lazy load image we initialize the state.src with the fallback image from props\r\n * but in case this is not provided we just set an empty image gif.\r\n * This will prevent the borders to be visible around the image while scrolled into the view.\r\n */\r\n if (this.props.lazy) {\r\n return {\r\n src: this.props.fallbackSrc || EMPTY_IMAGE,\r\n type: this.props.fallbackSrc ? IMAGE_TYPE.FALLBACK : IMAGE_TYPE.EMPTY_IMAGE_BASE64,\r\n status: IMAGE_STATUS.LAZY\r\n };\r\n }\r\n if (this.props.onLoadStart) {\r\n this.props.onLoadStart();\r\n }\r\n return {\r\n src: this.props.src,\r\n type: IMAGE_TYPE.SRC,\r\n status: IMAGE_STATUS.LOADING\r\n };\r\n }\r\n\r\n private _onLoad = (e: React.SyntheticEvent) => {\r\n if (this.state.status === IMAGE_STATUS.LAZY) {\r\n return;\r\n }\r\n if (this.state.status === IMAGE_STATUS.LOADING) {\r\n this.setState({\r\n status: IMAGE_STATUS.SETTLED\r\n });\r\n if (this.state.type === IMAGE_TYPE.SRC && this.props.onLoad) {\r\n this.props.onLoad(e);\r\n }\r\n if (this.props.onSettled) {\r\n this.props.onSettled({\r\n value: \"load\",\r\n type: this.state.type\r\n });\r\n }\r\n }\r\n }\r\n private _onError = (e: React.SyntheticEvent) => {\r\n if (this.state.status === IMAGE_STATUS.LAZY && this.state.type === IMAGE_TYPE.FALLBACK) {\r\n this.setState({\r\n src: EMPTY_IMAGE,\r\n type: IMAGE_TYPE.EMPTY_IMAGE_BASE64,\r\n });\r\n }\r\n if (this.state.status === IMAGE_STATUS.LOADING) {\r\n if (this.state.type === IMAGE_TYPE.SRC) {\r\n this.setState({\r\n src: this.props.fallbackSrc || EMPTY_IMAGE,\r\n type: this.props.fallbackSrc ? IMAGE_TYPE.FALLBACK : IMAGE_TYPE.EMPTY_IMAGE_BASE64\r\n });\r\n if (this.props.onError) {\r\n this.props.onError(e);\r\n }\r\n } else if (this.state.type === IMAGE_TYPE.FALLBACK) {\r\n this.setState({\r\n src: EMPTY_IMAGE,\r\n type: IMAGE_TYPE.EMPTY_IMAGE_BASE64,\r\n });\r\n } else if (this.state.type === IMAGE_TYPE.EMPTY_IMAGE_BASE64) {\r\n this.setState({\r\n status: IMAGE_STATUS.SETTLED\r\n });\r\n if (this.props.onSettled) {\r\n this.props.onSettled({\r\n value: \"error\",\r\n type: this.state.type\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n super.componentWillUnmount();\r\n this._destroyIntersectionObserver();\r\n this._destroyTapLogicHandler();\r\n }\r\n\r\n componentDidUpdate(prevProps: ImageProps) {\r\n if (this.props.fallbackSrc !== prevProps.fallbackSrc && this.state.type === IMAGE_TYPE.FALLBACK) {\r\n this.setState({\r\n src: this.props.fallbackSrc\r\n });\r\n }\r\n if (this.props.src !== prevProps.src) {\r\n if (this.state.status === IMAGE_STATUS.SETTLED) {\r\n this.setState({\r\n src: this.props.src,\r\n type: IMAGE_TYPE.SRC\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _tapHandlerLogic: TapHandlerLogic | null = null;\r\n private _createTapLogicHandler(element: HTMLElement) {\r\n if (this.props.enableTap) {\r\n this._destroyTapLogicHandler();\r\n this._tapHandlerLogic = new TapHandlerLogic(element);\r\n }\r\n }\r\n\r\n private _destroyTapLogicHandler() {\r\n if (this._tapHandlerLogic) {\r\n this._tapHandlerLogic.dispose();\r\n this._tapHandlerLogic = null;\r\n }\r\n }\r\n\r\n private _intersectionObserver: IntersectionObserver | null;\r\n\r\n private _createIntersectionObserver(element: HTMLImageElement) {\r\n if (!this.props.lazy) {\r\n return;\r\n }\r\n\r\n // just in case this is called twice for this component we want to discard the existing intersection observer and create a new one\r\n this._destroyIntersectionObserver();\r\n\r\n this._intersectionObserver = new IntersectionObserver(this._intersectionObserverCallback, {\r\n rootMargin: '15px',\r\n threshold: 0.1\r\n });\r\n\r\n this._intersectionObserver.observe(element);\r\n }\r\n\r\n private _destroyIntersectionObserver() {\r\n if (this._intersectionObserver) {\r\n this._intersectionObserver.disconnect();\r\n this._intersectionObserver = null;\r\n }\r\n }\r\n\r\n private _intersectionObserverCallback = (entries: IntersectionObserverEntry[], observer: IntersectionObserver) => {\r\n if (entries[0].intersectionRatio > 0 || entries[0].isIntersecting) {\r\n this._destroyIntersectionObserver();\r\n\r\n this.setState({\r\n src: this.props.src,\r\n type: IMAGE_TYPE.SRC,\r\n status: IMAGE_STATUS.LOADING\r\n });\r\n\r\n if (this.props.onLoadStart) {\r\n this.props.onLoadStart();\r\n }\r\n }\r\n };\r\n\r\n private _captureImageElementRef = (element: HTMLImageElement) => {\r\n if (element) {\r\n this._createTapLogicHandler(element);\r\n this._createIntersectionObserver(element);\r\n }\r\n };\r\n\r\n render() {\r\n let {\r\n // standard img props that need to be altered\r\n alt,\r\n // pass-through props\r\n className, title, width, height,\r\n } = this.props;\r\n\r\n return ;\r\n }\r\n\r\n}\r\n","import CGPLogger from './logger';\r\nimport Strings from './strings';\r\nimport _ from './underscore';\r\n\r\ninterface IStorage {\r\n set(key: string, value: any) : boolean;\r\n\r\n del(key: string): boolean;\r\n\r\n get(key: string, defaultValue: any): any | null;\r\n\r\n clear(): void;\r\n};\r\n\r\nconst logger = new CGPLogger('Store');\r\n\r\nclass CGPStorage {\r\n /**\r\n * @property\r\n * @type {null|LocalStorage|WindowStorage}\r\n */\r\n _selectedStorage: IStorage = null;\r\n\r\n\r\n /**\r\n * CGP storage business logic place.\r\n */\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n\r\n /**\r\n * Initialize the storage and initialize the currect instance of storage\r\n * Or from the window['localStorage'] or our window cgp storage ;).\r\n *\r\n * @returns {LocalStorage}\r\n */\r\n init() : void {\r\n if (this.isLocalStorageNameSupported()) {\r\n logger.debug('Selected to be main priority cgp storage from localstorage.');\r\n this._selectedStorage = new LocalStorage();\r\n } else {\r\n logger.debug('Selected to be main priority cgp storage from window unique localstorage.');\r\n this._selectedStorage = new WindowStorage();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Create cookie that shared/not between sub domains\r\n * @param name\r\n * @param value\r\n */\r\n setCookie(name: string, value: string) : void {\r\n let now = new Date();\r\n now.setFullYear(now.getFullYear() + 1);\r\n document.cookie = name + '=' + value + ';expires=' + now.toUTCString() + ';path=/';\r\n }\r\n\r\n /**\r\n * Get cookie by key\r\n * @param name\r\n * @returns {string}\r\n */\r\n getCookie(name: string): string {\r\n let match = document.cookie.match(new RegExp(name + '=([^;]+)'));\r\n if (match) {\r\n return match[1];\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Remove cookie by key\r\n * @param name\r\n */\r\n removeCookie(name: string) : void {\r\n document.cookie = name + \"=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/\";\r\n }\r\n\r\n /**\r\n * Check wheter local storage supported.\r\n *\r\n * @returns {boolean}\r\n */\r\n isLocalStorageNameSupported(): boolean {\r\n let testKey = 'test';\r\n\r\n try\r\n {\r\n const storage: Storage = window.localStorage;\r\n storage.setItem(testKey, '1');\r\n storage.removeItem(testKey);\r\n return 'localStorage' in window && null !== window.localStorage;\r\n }\r\n catch (error)\r\n {\r\n logger.error('Local storage is not supported the user might running under incognito mode on safari yak!');\r\n return false;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Stores a value to the assigned key.\r\n *\r\n *\r\n * @param {string} key - the name of the key to be stored.\r\n * @param {*} value - could be anything, Array/String/Object.\r\n *\r\n * @returns {boolean} stating the save was successfully or not.\r\n * @public\r\n */\r\n set(key: string, value: any): boolean {\r\n return this._selectedStorage.set(key, value);\r\n }\r\n\r\n\r\n /**\r\n * Removes a key from the storage, also checks if exists.\r\n *\r\n *\r\n * @param {string} key - the name of the key to be deleted.\r\n * @returns {boolean} stating the delete was successfully or not.\r\n * @public\r\n */\r\n del(key: any): boolean {\r\n if(typeof key === 'string') {\r\n return this.delKey(key);\r\n } else {\r\n return this.delArray(key);\r\n }\r\n }\r\n\r\n /**\r\n * Removes a key from the storage, also checks if exists.\r\n *\r\n *\r\n * @param {string} key - the name of the key to be deleted.\r\n * @returns {boolean} stating the delete was successfully or not.\r\n * @public\r\n */\r\n delKey(key: string): boolean {\r\n return this._selectedStorage.del(key);\r\n }\r\n\r\n /**\r\n * remove array of keys from storage, also check if exists.\r\n * @param keys\r\n * @returns {boolean} stating the delete was successfully or not\r\n */\r\n delArray(keys: string[]): boolean {\r\n let result = true;\r\n keys.forEach(function (key) {\r\n result = result && this._selectedStorage.del(key);\r\n }, this);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get a specific key from the store. If is not set, optionally can set a default value\r\n *\r\n *\r\n * @param {string} key - the name of the key to be returned.\r\n * @param {*} defaultValue - if key is empty, will return the default\r\n *\r\n * @returns {*} the data is mixed, what-ever is stored in the cache will be returned.\r\n * @public\r\n */\r\n get(key: string, defaultValue?: any): any | null {\r\n return this._selectedStorage.get(key, defaultValue);\r\n }\r\n\r\n clearLocalStorage() {\r\n this._selectedStorage.clear();\r\n }\r\n}\r\n\r\n/**\r\n *\r\n */\r\nclass LocalStorage implements IStorage {\r\n /**\r\n * @property\r\n * @type {string}\r\n * @private\r\n */\r\n private readonly _perfix = 'cgp_';\r\n\r\n\r\n /**\r\n * Creates the store object and ensures it remains a Singleton.\r\n *\r\n * @constructor\r\n */\r\n constructor() {\r\n if (_.getQueryParameters()['clearstorage']) {\r\n this.clear();\r\n }\r\n }\r\n\r\n /**\r\n * Stores a value to the assigned key.\r\n *\r\n *\r\n * @param {string} key - the name of the key to be stored.\r\n * @param {*} value - could be anything, Array/String/Object.\r\n *\r\n * @returns {boolean} stating the save was successfully or not.\r\n * @public\r\n */\r\n set(key: string, value: any): boolean {\r\n if (!this.localStorageExists()) {\r\n return false;\r\n }\r\n\r\n try {\r\n localStorage.setItem(this.getKeyConvention(key), value);\r\n } catch (error) {\r\n throw new Error(error);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Removes a key from the storage, also checks if exists.\r\n *\r\n *\r\n * @param {string} key - the name of the key to be deleted.\r\n * @returns {boolean} stating the delete was successfully or not.\r\n * @public\r\n */\r\n del(key: string): boolean {\r\n if (!this.localStorageExists() || null === this.get(key)) {\r\n return false;\r\n }\r\n\r\n localStorage.removeItem(this.getKeyConvention(key));\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Get a specific key from the store. If is not set, optionally can set a default value\r\n *\r\n *\r\n * @param {string} key - the name of the key to be returned.\r\n * @param {*} defaultValue - if key is empty, will return the default\r\n *\r\n * @returns {*} the data is mixed, what-ever is stored in the cache will be returned.\r\n * @public\r\n */\r\n get(key: string, defaultValue?: any): any | null {\r\n if (!this.localStorageExists()) {\r\n return false;\r\n }\r\n\r\n key = this.getKeyConvention(key);\r\n\r\n return null === localStorage.getItem(key) && 'undefined' !== typeof defaultValue ? defaultValue : localStorage.getItem(key);\r\n }\r\n\r\n\r\n /**\r\n * Get all keys for the whole key convention\r\n *\r\n *\r\n *\r\n * @usage:\r\n * // Defined already in localstorage\r\n * localStorageKeys = [cgp_test1,test2,cgp_test3,test4]\r\n *\r\n * getAll() {\r\n * return [cgp_test1, cgp_test3];\r\n * };\r\n *\r\n * @returns {*} Gets all the data stored in the cache.\r\n * @public\r\n */\r\n getAll() : any[] {\r\n let keys: any[] = [];\r\n\r\n if (!this.localStorageExists()) {\r\n return keys;\r\n }\r\n\r\n Object\r\n .keys(localStorage)\r\n .filter(key => this.isKeyConvention(key))\r\n .forEach((key) => {\r\n keys.push(key);\r\n });\r\n\r\n return keys;\r\n }\r\n\r\n\r\n /**\r\n * Verify localStore is defined and can be used in here :)\r\n *\r\n *\r\n * @returns {boolean} makes sure that localStorage exists and we are allowed to use it.\r\n * @public\r\n */\r\n localStorageExists() {\r\n try {\r\n return 'localStorage' in window && null !== window.localStorage;\r\n } catch (error) {\r\n logger.error(['localStorage not found, features related to store will be disabled for this session.']);\r\n return false;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Clear all the data from the localStorage, return true when the local is clear\r\n * and false when the localStorage not found in the global scope.\r\n *\r\n *\r\n *\r\n * @usage:\r\n * clearLocalStorage() {\r\n * // if the localStorage is defined in the global window.\r\n * return true;\r\n * };\r\n *\r\n * @public\r\n */\r\n clear() : void {\r\n if (!this.localStorageExists()) {\r\n return;\r\n }\r\n\r\n localStorage.clear();\r\n }\r\n\r\n\r\n /**\r\n * This function will check key start with cgp prefix.\r\n *\r\n *\r\n *\r\n * @usage:\r\n * isKeyConvention('test') {\r\n * return false;\r\n * };\r\n *\r\n * getKeyConvention('cgp_test') {\r\n * return true;\r\n * };\r\n *\r\n *\r\n * @param {string} key - that needs to be verified for convention.\r\n * @returns {boolean} if they key is valid.\r\n * @public\r\n */\r\n isKeyConvention(key: string) {\r\n let stringUtil = new Strings(key);\r\n if (stringUtil.startsWith(this._perfix)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n\r\n /**\r\n * Get string convention for localStorage key.\r\n * Extend the input key with the static prefix we define.\r\n *\r\n *\r\n *\r\n * @usage:\r\n * getKeyConvention('test') {\r\n * return cgp_test\r\n * };\r\n *\r\n * @param {string} key - that needs to be converted to our convention.\r\n * @returns {string} of the key to be stored. With naming convention set.\r\n * @public\r\n */\r\n getKeyConvention(key: string) {\r\n if (!key) {\r\n return '';\r\n }\r\n\r\n // remove unwanted white spaces.\r\n let keyConvention = key.trim();\r\n let stringUtil = new Strings(keyConvention);\r\n if (!stringUtil.startsWith(this._perfix)) {\r\n return this._perfix + keyConvention;\r\n }\r\n\r\n return keyConvention;\r\n }\r\n}\r\n\r\nclass WindowStorage implements IStorage {\r\n /**\r\n * @property\r\n * @type {string}\r\n * @private\r\n */\r\n private readonly _storgeKeyName = 'cgpStorage';\r\n\r\n\r\n /**\r\n * @property\r\n * @type {null|object}\r\n * @private\r\n */\r\n private _cgpStorage: {[key: string]: any} = null;\r\n\r\n\r\n /**\r\n * Creates the store object and ensures it remains a Singleton.\r\n *\r\n * @constructor\r\n */\r\n constructor() {\r\n if (_.getQueryParameters()['clearstorage']) {\r\n this.clear();\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n\r\n /**\r\n * Initializing the CGP window local storage.\r\n */\r\n init() {\r\n // Define CGP storage on the global window.\r\n this._cgpStorage = (window as any)[this._storgeKeyName] = {};\r\n\r\n logger.debug('Defined a new window cgp local storage.');\r\n logger.debug('Finish initializing window storage.');\r\n }\r\n\r\n\r\n /**\r\n * Stores a value to the assigned key.\r\n *\r\n *\r\n * @param {string} key - the name of the key to be stored.\r\n * @param {*} value - could be anything, Array/String/Object.\r\n *\r\n * @returns {boolean} stating the save was successfully or not.\r\n * @public\r\n */\r\n set(key: string, value: any): boolean {\r\n if (!this.storageExists()) {\r\n return false;\r\n }\r\n\r\n try {\r\n this._cgpStorage[key] = value;\r\n } catch (error) {\r\n throw new Error(error);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Removes a key from the storage, also checks if exists.\r\n *\r\n *\r\n * @param {string} key - the name of the key to be deleted.\r\n * @returns {boolean} stating the delete was successfully or not.\r\n * @public\r\n */\r\n del(key: string): boolean {\r\n if (!this.storageExists() || _.isUndefined(this.get(key))) {\r\n return false;\r\n }\r\n\r\n delete this._cgpStorage[key];\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Get a specific key from the store. If is not set, optionally can set a default value\r\n *\r\n *\r\n * @param {string} key - the name of the key to be returned.\r\n * @param {*} defaultValue - if key is empty, will return the default\r\n *\r\n * @returns {*} the data is mixed, what-ever is stored in the cache will be returned.\r\n * @public\r\n */\r\n get(key: string, defaultValue?: any): any | null {\r\n if (!this.storageExists()) {\r\n return defaultValue;\r\n }\r\n\r\n const defaultGetter = _.isUndefined(defaultValue) ? undefined : defaultValue;\r\n return this._cgpStorage[key] || defaultGetter;\r\n }\r\n\r\n\r\n /**\r\n * Check if window cgp stroage is exist.\r\n *\r\n * @returns {boolean}\r\n */\r\n storageExists(): boolean {\r\n return !_.isNull(this._cgpStorage);\r\n }\r\n\r\n\r\n /**\r\n * Get all keys for the whole key convention\r\n *\r\n *\r\n *\r\n * @usage:\r\n * // Defined already in localstorage\r\n * localStorageKeys = [cgp_test1,test2,cgp_test3,test4]\r\n *\r\n * getAll() {\r\n * return [cgp_test1, cgp_test3];\r\n * };\r\n *\r\n * @returns {*} Gets all the data stored in the cache.\r\n * @public\r\n */\r\n getAll(): any[] {\r\n let keys: any[] = [];\r\n\r\n if (!this.storageExists()) {\r\n return keys;\r\n }\r\n\r\n Object\r\n .keys(this._cgpStorage)\r\n .forEach((key) => {\r\n keys.push(key);\r\n });\r\n\r\n return keys;\r\n }\r\n\r\n\r\n /**\r\n * Clear all the data from the localStorage, return true when the local is clear\r\n * and false when the localStorage not found in the global scope.\r\n *\r\n *\r\n *\r\n * @usage:\r\n * clear() {\r\n * };\r\n *\r\n * @returns {boolean} stating the clear was successfully or not.\r\n * @public\r\n */\r\n clear() : void {\r\n (window as any)[this._storgeKeyName] = {};\r\n }\r\n}\r\n\r\n\r\nexport default new CGPStorage();\r\n","import React from 'react';\r\nimport {IServiceFactory} from '../../../services/service-factory.interface';\r\nimport {OrbitContext} from '../../../orbit-context';\r\nimport {reaction as mobxReaction, IReactionDisposer, IReactionOptions, IReactionPublic} from 'mobx';\r\n\r\nexport class OrbitComponentWithState extends React.Component {\r\n\r\n private _reactions: IReactionDisposer[] = [];\r\n\r\n protected get services(): IServiceFactory {\r\n /** This code is for unit tests, enzyme is not compatible wit the current react context api so we pass the context through a prop */\r\n if ((this.props as any)['context']) {\r\n return (this.props as any)['context'].services;\r\n }\r\n\r\n return this.context.services;\r\n }\r\n\r\n //React life time hooks stubs for future use\r\n componentDidMount() {}\r\n\r\n componentWillUnmount() {\r\n this._disposeReactions();\r\n }\r\n\r\n\r\n protected reaction(expression: (r: IReactionPublic) => T, effect: (arg: T, r: IReactionPublic) => void, opts?: IReactionOptions): IReactionDisposer {\r\n let disposer = mobxReaction(expression, effect, opts);\r\n this._reactions.push(disposer);\r\n return disposer;\r\n }\r\n\r\n private _disposeReactions() {\r\n this._reactions.forEach(disposer => disposer());\r\n }\r\n}\r\n\r\nOrbitComponentWithState.contextType = OrbitContext;\r\n","/*!\n * assign-deep \n *\n * Copyright (c) 2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isPrimitive = require('is-primitive');\nvar assignSymbols = require('assign-symbols');\nvar typeOf = require('kind-of');\n\nfunction assign(target/*, objects*/) {\n target = target || {};\n var len = arguments.length, i = 0;\n if (len === 1) {\n return target;\n }\n while (++i < len) {\n var val = arguments[i];\n if (isPrimitive(target)) {\n target = val;\n }\n if (isObject(val)) {\n extend(target, val);\n }\n }\n return target;\n}\n\n/**\n * Shallow extend\n */\n\nfunction extend(target, obj) {\n assignSymbols(target, obj);\n\n for (var key in obj) {\n if (isValidKey(key) && hasOwn(obj, key)) {\n var val = obj[key];\n if (isObject(val)) {\n if (typeOf(target[key]) === 'undefined' && typeOf(val) === 'function') {\n target[key] = val;\n }\n target[key] = assign(target[key] || {}, val);\n } else {\n target[key] = val;\n }\n }\n }\n return target;\n}\n\n/**\n * Returns true if the object is a plain object or a function.\n */\n\nfunction isObject(obj) {\n return typeOf(obj) === 'object' || typeOf(obj) === 'function';\n}\n\n/**\n * Returns true if the given `key` is an own property of `obj`.\n */\n\nfunction hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\n/**\n * Returns true if the given `key` is a valid key that can be used for assigning properties.\n */\n\nfunction isValidKey(key) {\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n}\n\n/**\n * Expose `assign`\n */\n\nmodule.exports = assign;\n","/*!\n * is-primitive \n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\n// see http://jsperf.com/testing-value-is-primitive/7\nmodule.exports = function isPrimitive(value) {\n return value == null || (typeof value !== 'function' && typeof value !== 'object');\n};\n","/*!\n * assign-symbols \n *\n * Copyright (c) 2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(receiver, objects) {\n if (receiver === null || typeof receiver === 'undefined') {\n throw new TypeError('expected first argument to be an object.');\n }\n\n if (typeof objects === 'undefined' || typeof Symbol === 'undefined') {\n return receiver;\n }\n\n if (typeof Object.getOwnPropertySymbols !== 'function') {\n return receiver;\n }\n\n var isEnumerable = Object.prototype.propertyIsEnumerable;\n var target = Object(receiver);\n var len = arguments.length, i = 0;\n\n while (++i < len) {\n var provider = Object(arguments[i]);\n var names = Object.getOwnPropertySymbols(provider);\n\n for (var j = 0; j < names.length; j++) {\n var key = names[j];\n\n if (isEnumerable.call(provider, key)) {\n target[key] = provider[key];\n }\n }\n }\n return target;\n};\n","var toString = Object.prototype.toString;\n\n/**\n * Get the native `typeof` a value.\n *\n * @param {*} `val`\n * @return {*} Native javascript type\n */\n\nmodule.exports = function kindOf(val) {\n var type = typeof val;\n\n // primitivies\n if (type === 'undefined') {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n if (val === true || val === false || val instanceof Boolean) {\n return 'boolean';\n }\n if (type === 'string' || val instanceof String) {\n return 'string';\n }\n if (type === 'number' || val instanceof Number) {\n return 'number';\n }\n\n // functions\n if (type === 'function' || val instanceof Function) {\n if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') {\n return 'generatorfunction';\n }\n return 'function';\n }\n\n // array\n if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {\n return 'array';\n }\n\n // check for instances of RegExp and Date before calling `toString`\n if (val instanceof RegExp) {\n return 'regexp';\n }\n if (val instanceof Date) {\n return 'date';\n }\n\n // other objects\n type = toString.call(val);\n\n if (type === '[object RegExp]') {\n return 'regexp';\n }\n if (type === '[object Date]') {\n return 'date';\n }\n if (type === '[object Arguments]') {\n return 'arguments';\n }\n if (type === '[object Error]') {\n return 'error';\n }\n if (type === '[object Promise]') {\n return 'promise';\n }\n\n // buffer\n if (isBuffer(val)) {\n return 'buffer';\n }\n\n // es6: Map, WeakMap, Set, WeakSet\n if (type === '[object Set]') {\n return 'set';\n }\n if (type === '[object WeakSet]') {\n return 'weakset';\n }\n if (type === '[object Map]') {\n return 'map';\n }\n if (type === '[object WeakMap]') {\n return 'weakmap';\n }\n if (type === '[object Symbol]') {\n return 'symbol';\n }\n \n if (type === '[object Map Iterator]') {\n return 'mapiterator';\n }\n if (type === '[object Set Iterator]') {\n return 'setiterator';\n }\n if (type === '[object String Iterator]') {\n return 'stringiterator';\n }\n if (type === '[object Array Iterator]') {\n return 'arrayiterator';\n }\n \n // typed arrays\n if (type === '[object Int8Array]') {\n return 'int8array';\n }\n if (type === '[object Uint8Array]') {\n return 'uint8array';\n }\n if (type === '[object Uint8ClampedArray]') {\n return 'uint8clampedarray';\n }\n if (type === '[object Int16Array]') {\n return 'int16array';\n }\n if (type === '[object Uint16Array]') {\n return 'uint16array';\n }\n if (type === '[object Int32Array]') {\n return 'int32array';\n }\n if (type === '[object Uint32Array]') {\n return 'uint32array';\n }\n if (type === '[object Float32Array]') {\n return 'float32array';\n }\n if (type === '[object Float64Array]') {\n return 'float64array';\n }\n\n // must be a plain object\n return 'object';\n};\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n return val.constructor\n && typeof val.constructor.isBuffer === 'function'\n && val.constructor.isBuffer(val);\n}\n","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport gud from 'gud';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + gud() + '__';\n\n var Provider =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (process.env.NODE_ENV !== 'production') {\n warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n var Consumer =\n /*#__PURE__*/\n function (_Component2) {\n _inheritsLoose(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;","// @flow\n'use strict';\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function() {\n return global[key] = (global[key] || 0) + 1;\n};\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.2\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.2',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /\\bqbcore\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i // LieBao Browser\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w\\.]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}-[atu]?[ln][01259x][012359][an]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ ([c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","!function(e,r){for(var n in r)e[n]=r[n]}(exports,function(e){var r={};function n(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=r,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,r){if(1&r&&(e=n(e)),8&r)return e;if(4&r&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(n.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&r&&\"string\"!=typeof e)for(var o in e)n.d(t,o,function(r){return e[r]}.bind(null,o));return t},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,\"a\",r),r},n.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},n.p=\"\",n(n.s=1)}([function(e,r,n){\"use strict\";(function(e){Object.defineProperty(r,\"__esModule\",{value:!0});var n=function(){return function(e,r,n){this.name=e,this.version=r,this.os=n}}();r.BrowserInfo=n;var t=function(){return function(r){this.version=r,this.name=\"node\",this.os=e.platform}}();r.NodeInfo=t;var o=function(){return function(){this.bot=!0,this.name=\"bot\",this.version=null,this.os=null}}();r.BotInfo=o;var i=3,a=[[\"aol\",/AOLShield\\/([0-9\\._]+)/],[\"edge\",/Edge\\/([0-9\\._]+)/],[\"yandexbrowser\",/YaBrowser\\/([0-9\\._]+)/],[\"vivaldi\",/Vivaldi\\/([0-9\\.]+)/],[\"kakaotalk\",/KAKAOTALK\\s([0-9\\.]+)/],[\"samsung\",/SamsungBrowser\\/([0-9\\.]+)/],[\"silk\",/\\bSilk\\/([0-9._-]+)\\b/],[\"miui\",/MiuiBrowser\\/([0-9\\.]+)$/],[\"beaker\",/BeakerBrowser\\/([0-9\\.]+)/],[\"edge-chromium\",/Edg\\/([0-9\\.]+)/],[\"chromium-webview\",/(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],[\"chrome\",/(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],[\"phantomjs\",/PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],[\"crios\",/CriOS\\/([0-9\\.]+)(:?\\s|$)/],[\"firefox\",/Firefox\\/([0-9\\.]+)(?:\\s|$)/],[\"fxios\",/FxiOS\\/([0-9\\.]+)/],[\"opera-mini\",/Opera Mini.*Version\\/([0-9\\.]+)/],[\"opera\",/Opera\\/([0-9\\.]+)(?:\\s|$)/],[\"opera\",/OPR\\/([0-9\\.]+)(:?\\s|$)/],[\"ie\",/Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],[\"ie\",/MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],[\"ie\",/MSIE\\s(7\\.0)/],[\"bb10\",/BB10;\\sTouch.*Version\\/([0-9\\.]+)/],[\"android\",/Android\\s([0-9\\.]+)/],[\"ios\",/Version\\/([0-9\\._]+).*Mobile.*Safari.*/],[\"safari\",/Version\\/([0-9\\._]+).*Safari/],[\"facebook\",/FBAV\\/([0-9\\.]+)/],[\"instagram\",/Instagram\\s([0-9\\.]+)/],[\"ios-webview\",/AppleWebKit\\/([0-9\\.]+).*Mobile/],[\"ios-webview\",/AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],[\"searchbot\",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],u=[[\"iOS\",/iP(hone|od|ad)/],[\"Android OS\",/Android/],[\"BlackBerry OS\",/BlackBerry|BB10/],[\"Windows Mobile\",/IEMobile/],[\"Amazon OS\",/Kindle/],[\"Windows 3.11\",/Win16/],[\"Windows 95\",/(Windows 95)|(Win95)|(Windows_95)/],[\"Windows 98\",/(Windows 98)|(Win98)/],[\"Windows 2000\",/(Windows NT 5.0)|(Windows 2000)/],[\"Windows XP\",/(Windows NT 5.1)|(Windows XP)/],[\"Windows Server 2003\",/(Windows NT 5.2)/],[\"Windows Vista\",/(Windows NT 6.0)/],[\"Windows 7\",/(Windows NT 6.1)/],[\"Windows 8\",/(Windows NT 6.2)/],[\"Windows 8.1\",/(Windows NT 6.3)/],[\"Windows 10\",/(Windows NT 10.0)/],[\"Windows ME\",/Windows ME/],[\"Open BSD\",/OpenBSD/],[\"Sun OS\",/SunOS/],[\"Chrome OS\",/CrOS/],[\"Linux\",/(Linux)|(X11)/],[\"Mac OS\",/(Mac_PowerPC)|(Macintosh)/],[\"QNX\",/QNX/],[\"BeOS\",/BeOS/],[\"OS/2\",/OS\\/2/],[\"Search Bot\",/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\\/Teoma)|(ia_archiver)/]];function s(e){var r=\"\"!==e&&a.reduce(function(r,n){var t=n[0],o=n[1];if(r)return r;var i=o.exec(e);return!!i&&[t,i]},!1);if(!r)return null;var t=r[0],u=r[1];if(\"searchbot\"===t)return new o;var s=u[1]&&u[1].split(/[._]/).slice(0,3);return s?s.length1)for(var n=1;n {\r\n let found: Array = []; // an array to collect the strings that are found\r\n\r\n let currentMatch = this._curlyBracesPattern.exec(this._string);\r\n while (currentMatch) {\r\n found.push(this._getBindingMethod(currentMatch[1]));\r\n currentMatch = this._curlyBracesPattern.exec(this._string)\r\n }\r\n\r\n return found;\r\n }\r\n\r\n private _getBindingMethod(bindExpression: string) : ICurlyBracesBinding {\r\n let bindMap = {\r\n to: bindExpression,\r\n value: '',\r\n fn: ''\r\n };\r\n\r\n let bindRelatedMethod = bindExpression.split('|');\r\n if (2 === bindRelatedMethod.length) {\r\n bindMap.value = bindRelatedMethod[0].trim();\r\n bindMap.fn = bindRelatedMethod[1].trim();\r\n }\r\n\r\n return bindMap;\r\n }\r\n\r\n\r\n /**\r\n * @description - Insert char at a specific position in the string.\r\n */\r\n insertAt(index: number, stringToInjectT: string, stringToInject: string) {\r\n return stringToInjectT.substr(0, index) + stringToInject + stringToInjectT.substr(index);\r\n }\r\n\r\n /**\r\n *\r\n * @returns {string}\r\n */\r\n stripslashes(): string {\r\n return (this._string + '')\r\n .replace(/\\\\(.?)/g, function (s, n1) {\r\n switch (n1) {\r\n case '\\\\':\r\n return '\\\\'\r\n case '0':\r\n return '\\u0000'\r\n case '':\r\n return ''\r\n default:\r\n return n1\r\n }\r\n });\r\n }\r\n replaceAll(from: string, to: string)\r\n {\r\n return this._string.replace(new RegExp(to, 'g'), from);\r\n }\r\n\r\n getString() :string {\r\n return this._string;\r\n }\r\n\r\n setString(str): void {\r\n this._string = str;\r\n }\r\n\r\n /**\r\n * @description - Determines if a value is a empty string.\r\n */\r\n isEmpty(): boolean {\r\n return this._string.length === 0 || !this._string.trim();\r\n }\r\n\r\n\r\n /**\r\n *\r\n * @param partialString\r\n */\r\n startsWith(partialString) {\r\n if (!String.prototype.startsWith) {\r\n // eslint-disable-next-line\r\n String.prototype.startsWith = function (searchString, position) {\r\n position = position || 0;\r\n return this.substr(position, searchString.length) === searchString;\r\n };\r\n }\r\n\r\n return this._string.startsWith(partialString);\r\n }\r\n\r\n injectIntoCurly(bindingParams: object): string {\r\n if (bindingParams === undefined || bindingParams === null) {\r\n return this._string;\r\n }\r\n Object\r\n .keys(bindingParams)\r\n .forEach((bindTo) => {\r\n let tokens = this._string.split('{' + bindTo + '}');\r\n this._string = tokens.join(bindingParams[bindTo]);\r\n });\r\n\r\n return this._string;\r\n }\r\n}\r\n"],"sourceRoot":""}