{"version":3,"file":"main.6a9d14f05c9aecbd.js","mappings":"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AIZpyP,OAAQ,CACJqF,OAAQ,CACJ8sP,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEJxsH,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJysH,KAAM,CACF,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,aAGR,cAAe,CACXD,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEJxsH,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJysH,KAAM,CACF,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,cAIZC,SAAU,CACNhtP,OAAQ,CACJ8sP,YAAa,CACT,KACA,KACA,KACA,MAEJxsH,OAAQ,CACJ,IACA,IACA,IACA,KAEJysH,KAAM,CACF,cACA,cACA,cACA,gBAGR,cAAe,CACXD,YAAa,CACT,KACA,KACA,KACA,MAEJxsH,OAAQ,CACJ,IACA,IACA,IACA,KAEJysH,KAAM,CACF,cACA,cACA,cACA,iBAIZtlN,WAAY,CACRznC,OAAQ,CACJ8sP,YAAa,CACTG,SAAU,WACVniN,GAAI,KACJ,iBAAkB,KAClBoiN,KAAM,OACN/vR,GAAI,KACJ,iBAAkB,KAClBgwR,SAAU,iBACVC,WAAY,mBACZC,SAAU,iBACVC,OAAQ,YAEZhtH,OAAQ,CACJ2sH,SAAU,KACVniN,GAAI,IACJ,iBAAkB,KAClBoiN,KAAM,IACN/vR,GAAI,IACJ,iBAAkB,KAClBgwR,SAAU,iBACVC,WAAY,mBACZC,SAAU,iBACVC,OAAQ,YAEZP,KAAM,CACFE,SAAU,WACVniN,GAAI,KACJ,iBAAkB,KAClBoiN,KAAM,OACN/vR,GAAI,KACJ,iBAAkB,KAClBgwR,SAAU,iBACVC,WAAY,mBACZC,SAAU,iBACVC,OAAQ,aAGhB,cAAe,CACXR,YAAa,CACTG,SAAU,WACVniN,GAAI,KACJ,iBAAkB,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","names":["DEFAULT_RETRY_DELAYS_IN_MILLISECONDS","DefaultReconnectPolicy","constructor","retryDelays","this","_retryDelays","undefined","nextRetryDelayInMilliseconds","retryContext","previousRetryCount","HttpError","Error","errorMessage","statusCode","trueProto","prototype","super","__proto__","TimeoutError","AbortError","UnsupportedTransportError","message","transport","errorType","DisabledTransportError","FailedToStartTransportError","FailedToNegotiateWithServerError","AggregateErrors","innerErrors","HttpResponse","statusText","content","HttpClient","get","url","options","send","method","post","delete","getCookieString","LogLevel","Trace","Debug","Information","Warning","Critical","None","NullLogger","log","_logLevel","_message","instance","Arg","static","val","name","match","values","Platform","isBrowser","window","document","isWebWorker","self","isReactNative","isNode","getDataDetail","data","includeContent","detail","isArrayBuffer","byteLength","formatArrayBuffer","view","Uint8Array","str","forEach","num","toString","substr","length","ArrayBuffer","sendMessage","_x","logger","transportName","httpClient","accessTokenFactory","headers","token","Authorization","value","getUserAgentHeader","logMessageContent","responseType","response","timeout","withCredentials","SubjectSubscription","subject","observer","_subject","_observer","dispose","index","observers","indexOf","splice","cancelCallback","catch","_","ConsoleLogger","minimumLogLevel","_minLevel","out","console","logLevel","msg","Date","toISOString","error","warn","info","userAgentHeaderName","constructUserAgent","getOsName","getRuntimeVersion","version","os","runtime","runtimeVersion","userAgent","majorAndMinor","split","process","platform","versions","node","getErrorString","e","stack","FetchHttpClient","_logger","fetch","requireFunc","__non_webpack_require__","_jar","CookieJar","_fetchType","bind","getGlobalThis","globalThis","global","AbortController","_abortControllerType","request","abortSignal","aborted","abortController","_this","onabort","abort","timeoutId","setTimeout","body","cache","credentials","mode","redirect","signal","clearTimeout","ok","deserializeContent","status","payload","cookies","getCookies","c","join","arrayBuffer","text","XhrHttpClient","Promise","reject","resolve","xhr","XMLHttpRequest","open","setRequestHeader","Object","keys","header","onload","responseText","onerror","ontimeout","DefaultHttpClient","_httpClient","HeaderNames","Cookie","HttpTransportType","WebSockets","ServerSentEvents","LongPolling","TransferFormat","Text","Binary","_isAborted","LongPollingTransport","_accessTokenFactory","_pollAbort","_options","_running","onreceive","onclose","pollAborted","connect","transferFormat","_url","Et","pollOptions","_getAccessToken","_updateHeaderToken","pollUrl","now","_closeError","_receiving","_poll","_this2","_this3","_raiseOnClose","_this4","stop","_this5","deleteOptions","logMessage","ServerSentEventsTransport","encodeURIComponent","eventSource","opened","EventSource","onmessage","_close","onopen","_eventSource","close","WebSocketTransport","webSocketConstructor","_logMessageContent","_webSocketConstructor","_headers","webSocket","replace","binaryType","_event","_webSocket","event","ErrorEvent","readyState","OPEN","_isCloseEvent","wasClean","code","reason","HttpConnection","_stopPromiseResolver","features","_negotiateVersion","createLogger","baseUrl","_resolveUrl","webSocketModule","eventSourceModule","WebSocket","_connectionState","_connectionStarted","start","_startInternalPromise","_startInternal","_stopPromise","_sendQueue","TransportSendQueue","_stopInternal","_stopError","_stopConnection","skipNegotiation","_constructTransport","_startTransport","negotiateResponse","redirects","_getNegotiationResponse","ProtocolVersion","accessToken","_createTransport","inherentKeepAlive","negotiateUrl","_resolveNegotiateUrl","JSON","parse","negotiateVersion","connectionToken","connectionId","_createConnectUrl","requestedTransport","requestedTransferFormat","connectUrl","_this6","_isITransport","transportExceptions","transports","availableTransports","negotiate","endpoint","transportOrError","_resolveTransportOrError","push","ex","transportMatches","actualTransport","transferFormats","map","s","lastIndexOf","aTag","createElement","href","substring","_transport","_buffer","_executing","_sendBufferedData","PromiseSource","_transportResult","_sendLoopPromise","_sendLoop","_bufferData","promise","_this7","transportResult","_concatBuffers","arrayBuffers","totalLength","b","reduce","a","result","offset","item","set","buffer","_resolver","_rejecter","TextMessageFormat","output","RecordSeparator","input","messages","pop","RecordSeparatorCode","String","fromCharCode","HandshakeProtocol","writeHandshakeRequest","handshakeRequest","stringify","parseHandshakeResponse","messageData","remainingData","binaryData","separatorIndex","responseLength","apply","Array","slice","call","textData","type","MessageType","Invocation","StreamItem","Completion","StreamInvocation","CancelInvocation","Ping","Close","Subject","next","err","complete","subscribe","HubConnectionState","Disconnected","Connecting","Connected","Disconnecting","Reconnecting","HubConnection","connection","protocol","reconnectPolicy","_nextKeepAlive","_freezeEventListener","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","_protocol","_reconnectPolicy","_handshakeProtocol","_processIncomingData","_connectionClosed","_callbacks","_methods","_closedCallbacks","_reconnectingCallbacks","_reconnectedCallbacks","_invocationId","_receivedHandshakeResponse","_cachedPingMessage","writeMessage","state","_startPromise","_startWithStateTransitions","addEventListener","_stopDuringStartError","handshakePromise","_handshakeResolver","_handshakeRejecter","_sendMessage","_cleanupTimeout","_resetTimeoutPeriod","_resetKeepAliveInterval","_cleanupPingTimer","startPromise","_reconnectDelayHandle","_completeClose","stream","methodName","args","streams","streamIds","_replaceStreamingParams","invocationDescriptor","_createStreamInvocation","promiseQueue","cancelInvocation","_createCancelInvocation","invocationId","then","_sendWithProtocol","invocationEvent","_launchStreams","sendPromise","_createInvocation","invoke","on","newMethod","toLowerCase","off","handlers","removeIdx","callback","onreconnecting","onreconnected","_processHandshakeResponse","parseMessages","_invokeClientMethod","allowReconnect","responseMessage","getTime","_timeoutHandle","serverTimeout","_pingServerHandle","nextPing","invocationMessage","methods","target","m","arguments","_cancelCallbacksWithError","_reconnect","removeEventListener","reconnectStartTime","previousReconnectAttempts","retryError","nextRetryDelay","_getNextRetryDelay","elapsedMilliseconds","retryReason","callbacks","key","nonblocking","streamId","_createCompletionMessage","_createStreamItemMessage","i","argument","_isObservable","arg","id","JsonHubProtocol","hubMessages","parsedMessage","_isInvocationMessage","_isStreamItemMessage","_isCompletionMessage","_assertNotEmptyString","LogLevelNameMapping","trace","debug","information","warning","critical","none","HubConnectionBuilder","configureLogging","logging","isLogger","parseLogLevel","mapping","withUrl","transportTypeOrOptions","httpConnectionOptions","withHubProtocol","withAutomaticReconnect","retryDelaysOrReconnectPolicy","isArray","build","SignalRService","userService","apiUrl","injector","EventEmitter","isPlatformServer","PLATFORM_ID","PluginRecording","_recording","PluginRecordCommands","CloseConnections","connections","ManuallyStopped","Connection","createConnection","path","IsLoggedIn","GetAccessToken","conInfo","Name","retryConnect","StartConnection","systemConnection","SystemBroadcast","emit","User","orgConection","OrganizationBroadcast","IsInRole","Roles","partnerConnection","PartnerBroadcast","userConnection","UserBroadcast","pluginConnection","PluginBroadcast","qConnection","QBroadcast","QExpertBroadcast","conversationId","QExpertCompleteBroadcast","connectionEstablished","SendMessage","find","SendProductAndVersionId","productId","versionId","RespondToEscallationRequest","i0","API_URL","factory","SignalRModule","ngModule","providers","UserService","BaseUserService","oidcSecurityService","router","appInsights","userClient","configurationService","Init","checkAuth","loginResponse","AuthChanged","SetAuth","currentUrl","location","pathname","search","hash","sessionStorage","getItem","removeItem","PASSTHROUGH_URLS","u","startsWith","includes","LOGOUT_PATH","FORBIDDEN_PATH","UNAUTHORIZED_PATH","isAuthenticated","navigateByUrl","Login","AuthenticationChanged","IsAuthenticationReady","AuthToken","userData","setAuthenticatedUserContext","UserName","Id","clearAuthenticatedUserContext","redirectUrl","silent","thirdPartyOnly","thirdPartyProvider","setItem","authorize","AUTH_CONFIG_ID","urlHandler","authUrl","browser","identity","launchWebAuthFlow","interactive","responseUrl","assign","Logout","logoff","Register3rdParty","provider","host","getAllConfigurations","authWellknownEndpoints","issuer","SetLanguage","languageCode","toUpperCase","LanguageCode","RefreshSession","SetOrganization","organizationId","OrganizationId","SetProject","projectId","ProjectId","AcceptTerms","UpdateAvailability","available","Available","UserId","_this8","GetCookie","cname","ca","decodeURIComponent","cookie","charAt","SetCookie","cvalue","exdays","d","setTime","expires","toUTCString","APP_INSIGHTS","_a","UNDEFINED","Constructor","Prototype","strFunction","DynInstFuncTable","DynProxyTag","DynClassName","DynInstChkTag","DynAllowInstChkTag","DynProtoDefaultOptions","UnknownValue","str__Proto","DynProtoBaseProto","DynProtoGlobalSettings","DynProtoCurrent","strUseBaseInst","strSetInstFuncs","Obj","_objGetPrototypeOf","getPrototypeOf","_objGetOwnProps","getOwnPropertyNames","_gbl","_getGlobal","_gblInst","o","n","_hasOwnProperty","obj","prop","hasOwnProperty","_isObjectOrArrayPrototype","_isObjectArrayOrFunctionPrototype","Function","_getObjProto","newProto","curProto","_forEachProp","func","props","name_1","lp","_isDynamicCandidate","funcName","skipOwn","_throwTypeError","TypeError","_hasVisited","_getInstFunc","proto","currentDynProtoProxy","instFunc","instFuncTable","canAddInst","objProto","visited","protoFunc","_getProtoFunc","_getObjName","unknownValue","dynamicProto","theClass","delegateFunc","classProto","_checkPrototype","thisTarget","thisProto","className","perfOptions","useBaseInst","instFuncs","_getInstanceFuncs","baseFuncs","_getBaseFuncs","_instFuncProxy","funcHost","theFunc","baseProto","setInstanceFunc","_populatePrototype","baseInstFuncs","instFuncs_1","_createDynamicPrototype","dynProtoProxy","strShimFunction","strShimObject","strShimUndefined","strShimPrototype","strShimHasOwnProperty","ObjClass","ObjProto","ObjAssign","ObjCreate","create","ObjDefineProperty","defineProperty","ObjHasOwnProperty","_cachedGlobal","getGlobal","useCached","throwTypeError","objCreateFn","tmpFunc","__assignFn","t","p","extendStaticsFn","__extendsFn","__","__spreadArrayFn","to","from","il","j","_DYN_INITIALIZE","_DYN_NAME","_DYN_GET_NOTIFY_MGR","_DYN_IDENTIFIER","_DYN_PUSH","_DYN_IS_INITIALIZED","_DYN_CONFIG","_DYN_INSTRUMENTATION_KEY","_DYN_LOGGER","_DYN_LENGTH","_DYN_TIME","_DYN_PROCESS_NEXT","_DYN_GET_PROCESS_TEL_CONT0","_DYN_ADD_NOTIFICATION_LIS1","_DYN_REMOVE_NOTIFICATION_2","_DYN_STOP_POLLING_INTERNA3","_DYN_ON_COMPLETE","_DYN_GET_PLUGIN","_DYN_FLUSH","_DYN__EXTENSIONS","_DYN_SPLICE","_DYN_TEARDOWN","_DYN_MESSAGE_ID","_DYN_MESSAGE","_DYN_IS_ASYNC","_DYN__DO_TEARDOWN","_DYN_UPDATE","_DYN_GET_NEXT","_DYN_DIAG_LOG","_DYN_SET_NEXT_PLUGIN","_DYN_CREATE_NEW","_DYN_COOKIE_CFG","_DYN_INDEX_OF","_DYN_SUBSTRING","_DYN_USER_AGENT","_DYN_SPLIT","_DYN_SET_ENABLED","_DYN_SUBSTR","_DYN_NODE_TYPE","_DYN_APPLY","_DYN_REPLACE","_DYN_ENABLE_DEBUG_EXCEPTI4","_DYN_LOG_INTERNAL_MESSAGE","_DYN_TO_LOWER_CASE","_DYN_CALL","_DYN_TYPE","_DYN_HANDLER","_DYN_LISTENERS","_DYN_IS_CHILD_EVT","_DYN_GET_CTX","_DYN_SET_CTX","_DYN_COMPLETE","_DYN_TRACE_ID","_DYN_SPAN_ID","_DYN_TRACE_FLAGS","_DYN_VERSION","STR_CHANNELS","STR_CORE","STR_CREATE_PERF_MGR","STR_DISABLED","STR_EXTENSION_CONFIG","STR_PROCESS_TELEMETRY","STR_PRIORITY","STR_EVENTS_SENT","STR_EVENTS_DISCARDED","STR_EVENTS_SEND_REQUEST","STR_PERF_EVENT","STR_ERROR_TO_CONSOLE","STR_WARN_TO_CONSOLE","STR_GET_PERF_MGR","strToISOString","cStrEndsWith","strIndexOf","strReduce","cStrTrim","strToString","strConstructor","_objDefineProperty","_objFreeze","_objKeys","StringProto","_strTrim","_strEndsWith","_dataToISOString","_isArray","_objToString","_fnToString","_objFunctionString","rCamelCase","rNormalizeInvalid","rLeadingNumeric","isUndefined","isNullOrUndefined","isNotNullOrUndefined","isObject","isFunction","normalizeJsName","isString","_all","letter","objForEachKey","callbackfn","strContains","_isArrayPoly","isError","isNumber","isBoolean","isPlainObject","date","_toISOStringPoly","getUTCFullYear","pad","r","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","toFixed","arrForEach","arr","thisArg","len","idx","arrIndexOf","searchElement","fromIndex","Math","max","abs","arrMap","results","strMap","strTrim","_objKeysHasDontEnumBug","propertyIsEnumerable","_objKeysDontEnums","objKeys","objType","dontEnumsLength","objDefineAccessors","getProp","setProp","descriptor","enumerable","configurable","deepFreeze","objFreeze","_doNothing","dateNow","dt","getExceptionName","object","setValue","field","valChk","srcChk","theValue","getSetValue","defValue","getCfgValue","defaultValue","isTruthy","throwError","_createProxyFunction","source","srcFunc","src","originalArguments","proxyFunctionAs","overwriteTarget","proxyFunctions","functionsToProxy","theFuncName","optimizeObject","theObject","objExtend","obj1","obj2","obj3","obj4","obj5","obj6","theArgs","extended","argLen","deep","isArgArray","isArgObj","propOk","newValue","isNewArray","clone","_DYN_INGESTIONENDPOINT","_DYN_TO_STRING","_DYN_REMOVE_ITEM","_DYN_STRINGIFY","_DYN_PATHNAME","_DYN_CORRELATION_HEADER_E0","_DYN_EXCEPTIONS","_DYN_PARSED_STACK","_DYN_PROPERTIES","_DYN_MEASUREMENTS","_DYN_SIZE_IN_BYTES","_DYN_TYPE_NAME","_DYN_SEVERITY_LEVEL","_DYN_PROBLEM_GROUP","_DYN_IS_MANUAL","_DYN__CREATE_FROM_INTERFA1","_DYN_ASSEMBLY","_DYN_FILE_NAME","_DYN_HAS_FULL_STACK","_DYN_LEVEL","_DYN_METHOD","_DYN_LINE","_DYN_DURATION","_DYN_RECEIVED_RESPONSE","stringToBoolOrDefault","msToTimeSpan","totalms","isNaN","ms","round","sec","floor","min","hour","days","strMsie","strTrident","strXMLHttpRequest","_isTrident","_navUserAgentCheck","_useXDomainRequest","_beaconsSupported","_hasProperty","property","supported","getGlobalInst","gbl","hasWindow","Boolean","getWindow","hasDocument","getDocument","hasNavigator","navigator","getNavigator","hasHistory","history","getLocation","checkForMock","getPerformance","hasJSON","getJSON","isIE","nav","getIEVersion","userAgentStr","navigator_1","ua","doc","parseInt","strDocumentMode","tridentVer","dumpObj","objectTypeDump","propertyValueDump","isBeaconsSupported","sendBeacon","isFetchSupported","withKeepAlive","isSupported","useXDomainRequest","XDomainRequest","isXhrSupported","_debugListener","listenerFuncs","_aiNamespace","_listenerProxyFunc","config","dbgExt","getDebugExt","listener","ns","disableDbgExt","_getExtensionNamespace","ApplicationInsights","ChromeDbgExt","_sanitizeDiagnosticText","_logToConsole","theConsole","getConsole","logFunc","_InternalLogMessage","msgId","isUserAct","properties","strProps","diagnosticText","dataType","safeGetLogger","core","DiagnosticLogger","identifier","queue","_loggingLevelConsole","_loggingLevelTelemetry","_maxInternalMessageLimit","_enableDebug","_messageCount","_messageLogged","_self","_logInternalMessage","severity","_areInternalMessagesThrottled","messageKey","_debugExtMsg","throttleLimitMessage","throttleMessage","_setDefaultsFromConfig","loggingLevelConsole","loggingLevelTelemetry","maxMessageLimit","enableDebug","consoleLoggingLevel","telemetryLoggingLevel","maxInternalMessageLimit","throwInternal","resetInternalMessageCount","__ieDyn","_getLogger","_throwInternal","_warnToConsole","createEnumStyle","enumClass","StorageType","LocalStorage","SessionStorage","_canUseLocalStorage","AI","AI_AND_W3C","W3C","_canUseSessionStorage","_storagePrefix","_getLocalStorageObject","utlCanUseLocalStorage","_getVerifiedStorageObject","storageType","uid","storage","fail","_getSessionStorageObject","utlCanUseSessionStorage","utlSetStoragePrefix","storagePrefix","reset","utlGetSessionStorage","exception","utlSetSessionStorage","PropertiesPluginIdentifier","BreezeChannelIdentifier","DisabledPropertyName","SampleRate","ProcessLegacy","HttpMethod","DEFAULT_BREEZE_ENDPOINT","DEFAULT_BREEZE_PATH","strNotSpecified","strIkey","dataSanitizeKeyAndAddUniqueness","origLength","dataSanitizeKey","uniqueField","dsPadNumber","nameTrunc","dataSanitizeString","maxLength","valueTrunc","dataSanitizeUrl","dataSanitizeInput","dataSanitizeMessage","messageTrunc","dataSanitizeException","exceptionTrunc","dataSanitizeProperties","tempProps_1","dataSanitizeMeasurements","measurements","tempMeasurements_1","measure","dataSanitizeId","_msgId","inputTrunc","createTelemetryItem","baseType","envelopeName","customProperties","systemProperties","iKey","telemetryItem","time","ext","tags","baseData","MAX_NAME_LENGTH","MAX_ID_LENGTH","MAX_PROPERTY_LENGTH","MAX_STRING_LENGTH","MAX_URL_LENGTH","MAX_MESSAGE_LENGTH","MAX_EXCEPTION_LENGTH","_DYN_SANITIZE_KEY_AND_ADD2","sanitizeKey","sanitizeString","sanitizeUrl","sanitizeMessage","_DYN_SANITIZE_EXCEPTION","_DYN_SANITIZE_PROPERTIES","_DYN_SANITIZE_MEASUREMENT3","sanitizeId","sanitizeInput","padNumber","trim","Event","aiDataContract","ver","envelopeType","severityLevel","DataPoint","kind","count","stdDev","Metric","metrics","dataPoint","_DYN_COUNT","PageView","durationMs","duration","PageViewPerformance","unused","cs4BaseData","perfTotal","networkConnect","sentRequest","receivedResponse","domProcessing","strError","strStack","strStackDetails","strErrorSrc","strMessage","strDescription","_stringify","convertToString","_formatMessage","theEvent","evtMessage","filename","lineno","colno","_isStackDetails","details","_convertStackObj","errorStack","items","_getStackFromErrorObj","errorObj","opera","_getOperaStack","lines","entry","_getErrorType","typeName","exec","_formatErrorCode","Exception","exceptions","_isExceptionInternal","_ExceptionDetails","CreateAutoException","lineNumber","columnNumber","evt","errorSrc","stackDetails","CreateFromInterface","__assign","toInterface","_b","problemGroup","isManual","exceptionDetailsInterface","CreateSimpleException","assembly","fileName","line","formatError","outerId","hasFullStack","parsedStack","_isExceptionDetailsInternal","_parseStack","frames","level_1","totalSizeInBytes_1","frame","theFrame","_StackFrame","regex","test","parsedFrame","left","right","size","acceptedLeft","acceptedRight","_formatStackTrace","sourceFrame","level","matches","sizeInBytes","baseSize","strToGMTString","strToUTCString","strCookie","strExpires","strEnabled","strIsCookieUseDisabled","strDisableCookiesUsage","strConfigCookieMgr","_supportsCookies","_allowUaSameSite","_parsedCookieValue","_doc","_cookieCache","_globalCookieConfig","_isMgrEnabled","cookieMgr","isEnabled","_isIgnoredCookie","cookieMgrCfg","ignoreCookies","safeGetCookieMgr","getCookieMgr","cookieCfg","createCookieMgr","_gblCookieMgr","inst","rootConfig","cookieMgrConfig","_createCookieMgrConfig","cookieDomain","cookiePath","cookieEnabled","_path","_domain","domain","_enabled","enabled","areCookiesSupported","gblManager","maxAgeSec","_isBlockedCookie","blockedCookies","_extractParts","_isIE","expireMs","expiry","_formatDate","location_1","uaDisallowsSameSiteNone","strEndsWith","_strEndsWithPoly","searchLen","valLen","pos","setCookie","_setCookieValue","_formatCookieValue","getCookie","_getCookieValue","del","purge","delCookie","thePart","theDate","cookieValue","theCookie","UInt32Mask","MaxUInt32","_mwcSeeded","_mwcW","_mwcZ","_autoSeedMwc","_mwcSeed","seedValue","random","random32","signed","getCrypto","getMsCrypto","getRandomValues","Uint32Array","mwcRandom32","newId","number","chars","instanceName","_dataUid","_canAcceptData","createUniqueNamespace","includeVersion","createElmNodeData","accept","addDefault","theCache","_getCache","_createAccessor","kill","strAttachEvent","strAddEventHelper","strDetachEvent","strRemoveEventListener","strEvents","strVisibilityChangeEvt","strPageHide","strBeforeUnload","strPageHideNamespace","rRemoveEmptyNs","rRemoveTrailingEmptyNs","_guid","elmNodeData","eventNamespace","_normalizeNamespace","_getEvtNamespace","eventName","evtNamespace","theNamespace_1","parsedEvent","sort","_getRegisteredEvents","evtName","aiEvts","registeredEvents","_doDetach","handlerRef","useCapture","_doUnregister","events","unRegFn","capture","mergeEvtNamespace","theNamespace","namespaces","concat","eventOn","_doAttach","registeredEvent","guid","eventOff","evtName_1","found_1","_unregisterEvents","eventCache","evtType","regEvent","_addEventListeners","excludeEvents","added","addEventHandler","w","removeEventListeners","removeEventHandler","addPageHideEventListener","newNamespaces","pageUnloadAdded","_handlePageVisibility","visibilityState","generateW3CId","tmp","hexValues","oct","clockSequenceHi","INVALID_TRACE_ID","INVALID_SPAN_ID","_isValid","invalidValue","_formatValue","createTraceParent","traceId","spanId","flags","isValidTraceId","isValidSpanId","traceFlags","formatTraceParent","_formatFlags","createDomEvent","createEvent","initEvent","RequestHeaders","createValueMap","mapClass","requestContextHeader","requestContextTargetKey","requestContextAppIdFormat","requestIdHeader","traceParentHeader","traceStateHeader","sdkContextHeader","sdkContextHeaderAppIdRequest","requestContextHeaderLowerCase","_document","_htmlAnchorIdx","_htmlAnchorElement","urlParseUrl","anchorIdx","anchorCache","tempAnchor","urlParseHost","inclPort","fullHost","urlParseFullHost","port","_internalEndpoints","isInternalApplicationInsightsEndpoint","endpointUrl","CorrelationIdHelper","correlationIdPrefix","canIncludeCorrelationHeader","requestUrl","currentHost","disableCorrelationHeaders","correlationHeaderExcludePatterns","requestHost","enableCorsCorrelation","matchExists_1","includedDomains","correlationHeaderDomains","RegExp","excludedDomains","correlationHeaderExcludedDomains","getCorrelationContext","responseHeader","correlationId","getCorrelationContextValue","keyValues","keyValue","dateTimeUtilsNow","perf","timing","navigationStart","dateTimeUtilsDuration","end","createDistributedTraceContextFromTrace","telemetryTrace","parentCtx","getName","setName","getTraceId","traceID","setTraceId","getSpanId","parentID","setSpanId","getTraceFlags","setTraceFlags","newTraceFlags","RemoteDependencyData","absoluteUrl","commandName","success","resultCode","requestAPI","correlationContext","dependencyKind","dependencySource","dependencyTypeName","dependencyFields","AjaxHelperParseDependencyPath","parsedUrl","pathName","strParentContextKey","strChildrenContextKey","PerfEvent","payloadDetails","isAsync","theDetails_1","accessorDefined","strExecutionContextKey","childTime","childEvts","childEvt","exTime","ParentContextKey","ChildrenContextKey","PerfManager","manager","ctx","fire","perfEvent","doPerfActiveKey","doPerf","mgrSource","getSource","perfMgr","perfEvt","currentActive","children","pluginStateData","_getPluginState","plugin","initializePlugins","processContext","extensions","pluginState","initPlugins","lastPlugin","proxy","thePlugin","getCfg","sortPlugins","plugins","extA","extB","bHasProcess","strHasRunFlags","strGetTelCtx","_chainId","_createInternalContext","telemetryChain","startAt","_nextProxy","_onComplete","_getNextProxyStart","createTelemetryProxyChain","context","_next","_moveNext","nextProxy","completeDetails","diagLog","getExtCfg","_getExtCfg","getConfig","_getConfig","extConfig","hasNext","getNext","setNext","nextPlugin","iterate","_iterateChain","cb","onComplete","_addOnComplete","that","_i","mergeDefault","theConfig","newConfig_1","cfgValue","createProcessTelemetryContext","internalContext","_processNext","env","_createNew","createProcessTelemetryUnloadContext","unloadState","unload","createProcessTelemetryUpdateContext","updateState","firstProxy","add","lastProxy_1","newProxy","createTelemetryPluginProxy","chainId","hasProcessTelemetry","hasSetNext","proxyChain","getPlugin","processTelemetry","_processTelemetry","itemCtx","_processChain","_getTelCtx","_callProcessTelemetry","sync","_unloadPlugin","unloadCtx","_callTeardown","hasRun","pluginCore","update","_updatePlugin","updateCtx","_callUpdate","_id","_setNext","processPluginFn","hasRunContext","nextId","hasNextRun","aiInstrumentHooks","cbNames","_arrLoop","fn","_doCallbacks","hooks","callDetails","cbArgs","hookCtx","hook","cbks","orgEx","hookErrorCb","_getOwner","checkPrototype","checkParentProto","owner","_createInstrumentHook","aiHook","newFunc","_createFunctionHook","funcThis","orgArgs","h","funcArgs","_replaceArg","_createArgs","f","rslt","theHook","rm","InstrumentFunc","InstrumentEvent","createUnloadHandlerContainer","_addHandler","handler","run","_runHandlers","strGetPlugin","BaseTelemetryPlugin","_isinitialized","_rootCtx","_nextPlugin","_unloadHandlerContainer","_hooks","currentCtx","_setDefaults","pluginChain","_initDefaults","unloadDone","theUnloadCtx","theUnloadState","_unloadCallback","oldHooks","updateDone","theUpdateCtx","_doUpdate","_updateCallback","_addHook","setInitialized","isInitialized","_DYN_DISABLE_EXCEPTION_TR0","_DYN_AUTO_TRACK_PAGE_VISI1","_DYN_OVERRIDE_PAGE_VIEW_D2","_DYN_ENABLE_UNHANDLED_PRO3","_DYN_SAMPLING_PERCENTAGE","_DYN_IS_STORAGE_USE_DISAB4","_DYN_IS_BROWSER_LINK_TRAC5","_DYN_ENABLE_AUTO_ROUTE_TR6","_DYN_NAME_PREFIX","_DYN_DISABLE_FLUSH_ON_BEF7","_DYN_CORE","_DYN_DATA_TYPE","_DYN_ENVELOPE_TYPE","_DYN_TRACK","_DYN_TRACK_PAGE_VIEW","_DYN_TRACK_PREVIOUS_PAGE_9","_DYN_SEND_PAGE_VIEW_INTER10","_DYN_SEND_PAGE_VIEW_PERFO11","_DYN_POPULATE_PAGE_VIEW_P12","_DYN_HREF","_DYN_SEND_EXCEPTION_INTER13","_DYN_EXCEPTION","_DYN_ERROR","_DYN__ONERROR","_DYN_ERROR_SRC","_DYN_LINE_NUMBER","_DYN_COLUMN_NUMBER","_DYN__CREATE_AUTO_EXCEPTI14","_DYN_ADD_TELEMETRY_INITIA15","_DYN_IS_PERFORMANCE_TIMIN16","_DYN_GET_PERFORMANCE_TIMI17","_DYN_NAVIGATION_START","_DYN_SHOULD_COLLECT_DURAT18","_DYN_IS_PERFORMANCE_TIMIN19","_DYN_RESPONSE_START","_DYN_LOAD_EVENT_END","_DYN_RESPONSE_END","_DYN_CONNECT_END","_DYN_PAGE_VISIT_START_TIM20","_isWebWorker","PageViewManager","overridePageViewDuration","pageViewPerformanceManager","queueTimer","itemQueue","pageViewPerformanceSent","_flushChannels","flush","_startTimer","allItems","doFlush","_addQueue","pageView","title","uri","WorkerGlobalScope","customDuration","pageViewSent","processed","pageViewPerformance","isValid","teardown","botAgentNames","_isPerformanceTimingSupported","_isPerformanceTimingDataReady","domainLookupStart","_DYN_REQUEST_START","domLoading","_getPerformanceTiming","_shouldCollectDuration","durations","_navigator","isGoogleBot","PageViewPerformanceManager","navigationTiming","_getPerformanceNavigationTiming","_isPerformanceNavigationTimingSupported","getEntriesByType","_DYN_GET_ENTRIES_BY_TYPE","total","network","dom","startTime","requestStart","responseEnd","PageVisitTimeManager","pageVisitTimeTrackingHandler","prevPageVisitDataKeyName","currentPageName","currentPageUrl","prevPageVisitTimeData","restartPageVisitTimer","pageName","pageUrl","prevPageVisitData","stopPageVisitTimer","pageVisitEndTime","pageVisitDataJsonStr","pageVisitTime","utlRemoveSessionStorage","startPageVisitTimer","currPageVisitData","PageVisitData","currPageVisitDataStr","Timing","_events","action","_dispatchEvent","evnt","dispatchEvent","_configMilliseconds","_getDefaultConfig","sessionRenewalMs","sessionExpirationMs","disableFlushOnUnload","_updateStorageUsage","utlDisableStorage","utlEnableStorage","AnalyticsPlugin","_super","_eventTracking","_pageTracking","_pageViewManager","_pageViewPerformanceManager","_pageVisitTimeManager","_preInitTelemetryInitializers","_isBrowserLinkTrackingEnabled","_browserLinkInitializerAdded","_enableAutoRouteTracking","_historyListenerAdded","_disableExceptionTracking","_autoExceptionInstrumented","_enableUnhandledPromiseRejectionTracking","_autoUnhandledPromiseInstrumented","_prevUri","_currUri","_evtNamespace","priority","autoRoutePVDelay","_base","processNext","trackEvent","EventTelemetry","startTrackEvent","stopTrackEvent","trackTrace","trackMetric","metric","inPv","refUri","referrer","trackPageViewPerformance","inPvp","startTrackPage","stopTrackPage","measurement","loc","theError","trackException","_window","strEvent","URL","isCrossOriginError","_sendCORSException","errorString","telemetryInitializer","initialize","initializer","_populateDefaults","defaults","trackPageVisitTime","average","sampleCount","PageName","PageUrl","_updateBrowserLinkTracking","_addDefaultTelemetryInitializers","browserLinkPaths_1","envelope","remoteData","_updateExceptionTracking","locn","autoExceptionInstrumented","rsp","_addUnhandledPromiseRejectionTracking","_location","_getReason","autoUnhandledPromiseInstrumented","_updateLocationChange","win","_history","getHistory","pushState","replaceState","strUndefined","_addHistoryListener","namePrefix","_popstateHandler","_locationChangeHandler","distributedTraceCtx","_getDistributedTraceCtx","getTraceCtx","traceLocationName","_doTeardown","__extends","Version","getDefaultConfig","_aiNameFunc","baseName","aiName","_aiApplication","_aiDevice","_aiLocation","_aiOperation","_aiSession","_aiUser","_aiCloud","_aiInternal","ContextTagKeys","createClassFromInterface","class_1","_this_1","applicationVersion","applicationBuild","applicationTypeId","applicationId","applicationLayer","deviceId","deviceIp","deviceLanguage","deviceLocale","deviceModel","deviceFriendlyName","deviceNetwork","deviceNetworkName","deviceOEMName","deviceOS","deviceOSVersion","deviceRoleInstance","deviceRoleName","deviceScreenResolution","deviceType","deviceMachineName","deviceVMName","deviceBrowser","deviceBrowserVersion","locationIp","locationCountry","locationProvince","locationCity","operationId","operationName","operationParentId","operationRootId","operationSyntheticSource","operationCorrelationVector","sessionId","sessionIsFirst","sessionIsNew","userAccountAcquisitionDate","userAccountId","userId","userStoreRegion","userAuthUserId","userAnonymousUserAcquisitionDate","userAuthenticatedUserAcquisitionDate","cloudName","cloudRole","cloudRoleVer","cloudRoleInstance","cloudEnvironment","cloudLocation","cloudDeploymentUnit","internalNodeName","internalSdkVersion","internalAgentVersion","internalSnippet","internalSdkSrc","Extensions","CtxTagKeys","Envelope","sampleRate","Data","STR_DURATION","_DYN_TAGS","_DYN_DEVICE_TYPE","_DYN_DATA","_DYN_ON_LINE","_DYN_IS_ONLINE","_DYN_ENQUEUE","_DYN_EMIT_LINE_DELIMITED_0","_DYN_CLEAR","_DYN_BATCH_PAYLOADS","_DYN_MARK_AS_SENT","_DYN_CLEAR_SENT","_DYN_BUFFER_OVERRIDE","_DYN__BUFFER__KEY","_DYN__SENT__BUFFER__KEY","_DYN__MAX__BUFFER__SIZE","_DYN_MAX_BATCH_SIZE_IN_BY1","_DYN_TRIGGER_SEND","_DYN_ONUNLOAD_DISABLE_BEA2","_DYN_IS_BEACON_API_DISABL3","_DYN__SENDER","_DYN__SENDER_CONFIG","_DYN_ENABLE_SESSION_STORA4","_DYN__BUFFER","_DYN_ENDPOINT_URL","_DYN_CUSTOM_HEADERS","_DYN_DISABLE_XHR","_DYN_ONUNLOAD_DISABLE_FET5","_DYN_DISABLE_TELEMETRY","_DYN_BASE_TYPE","_DYN_SAMPLE_RATE","_DYN_CONVERT_UNDEFINED","_DYN__ON_ERROR","_DYN__ON_PARTIAL_SUCCESS","_DYN__ON_SUCCESS","_DYN_ITEMS_ACCEPTED","_DYN_IS_RETRY_DISABLED","_DYN_SET_REQUEST_HEADER","_DYN_MAX_BATCH_INTERVAL","_DYN_EVENTS_SEND_REQUEST","_DYN_DISABLE_INSTRUMENTAT7","_DYN_GET_SAMPLING_SCORE","strBaseType","strBaseData","strProperties","_setValueIf","_extractPropsAndMeasurements","_convertPropsUndefinedToCustomDefinedValue","customUndefinedValue","_createEnvelope","iKeyNoDashes","_extractPartAExtensions","envTags","itmExt","itmTags","extUser","user","authId","localId","extApp","app","sesId","extDevice","device","deviceClass","ip","model","web","browserLang","browserVer","envData","envBaseData","envProps","screenRes","userConsent","extOs","extTrace","tgs","tg","theTags","EnvelopeCreator","EnvelopeCreatorInit","EventEnvelopeCreator","customMeasurements","baseTypeSource","eventData","_disableEvents","BaseSendBuffer","_bufferFullMessageSent","_get","_set","eventsLimitInMem","getItems","ArraySendBuffer","SessionStorageSendBuffer","bufferItems","_getBuffer","notDeliveredItems","_removePayloadsFromBuffer","payloads","remaining","prefixedKey","bufferJson","buffer_1","_setBuffer","sentElements","BUFFER_KEY","SENT_BUFFER_KEY","MAX_BUFFER_SIZE","Serializer","_serializeObject","circularReferenceCheck","_serializeStringMap","_serializeArray","contract","isRequired","isHidden","isPresent","isObj","sources","expectedType","parseFloat","serialize","HashCodeScoreGenerator","getHashCodeScore","getHashCode","INT_MAX_VALUE","charCodeAt","SamplingScoreGenerator","hashCodeGenerator","_DYN_GET_HASH_CODE_SCORE","Sample","samplingRate","samplingScoreGenerator","isSampledIn","samplingPercentage","_getResponseText","_getDefaultAppInsightsChannelConfig","EnvelopeTypeCreator","TraceEnvelopeCreator","PageViewEnvelopeCreator","currentContextId","bd","pageType","isLoggedIn","pageViewData","PageViewPerformanceEnvelopeCreator","ExceptionEnvelopeCreator","exData","MetricEnvelopeCreator","baseMetricData","DependencyEnvelopeCreator","remoteDepData","responseCode","Sender","_senderConfig","_consecutiveErrors","_retryAt","_paused","_serializer","_stamp_specific_redirects","_fallbackSender","_syncUnloadSender","_offlineListener","_syncFetchPayload","_checkResponsStatus","countOfItemsInPayload","res","_appId","_parseResponse","appId","_checkAndUpdateEndPointUrl","_isRetriable","_resendPayload","isOnline","_doUnloadSend","_beaconSender","_doBeaconSend","batch","plainTextBatch","Blob","queued","_onSuccess","droppedPayload","thePayload","_xhrSender","endPointUrl","headerName","onreadystatechange","_xhrReadyStateChange","_formatErrorMessageXhr","_fetchKeepAliveSender","payloadSize","_doFetchSender","_fetchSender","requestHeaders","Headers","batchLength","ignoreResponse","responseHandled","append","init","keepalive","Request","itemsReceived","itemsAccepted","errors","linearFactor","payload_1","_setRetryTime","delayInSeconds","backOffSlot","pow","backOffDelay","retryAfterTimeSpan","_setupTimer","retryInterval","timerValue","_clearScheduledTimer","_xdrSender","xdr","_xdrOnLoad","_formatErrorMessageXdr","hostingProtocol","_sample","pause","resume","callBack","sendReason","onunloadFlush","addHeader","createOfflineListener","parentEvtNamespace","_isListening","_onlineStatus","_enableEvents","ononline","_setOnline","_setOffline","_isOnline","isListening","_unload","useSessionStorage","_validateInstrumentationKey","customHeaders","customHeader","senderConfig","sendPostFunc","diagLogger","_isSampledIn","convertUndefined","defaultEnvelopeIkey","aiEnvelope_1","constructEnvelope","doNotSendItem_1","_DYN__XHR_READY_STATE_CHA6","responseURL","async","forcedSender","_notifySendRequest","sendRequest","_getNotifyMgr","_notificationManager","ieVer","failed","retry","errors_1","reverse","extracted","_DYN_ITEMS_RECEIVED","orig","parseConnectionString","connectionString","arrReduce","initialValue","fields","kv","kvParts","endpointsuffix","Verbose","ChannelControllerPriority","_addChannelQueue","channelQueue","queueItem","chain","TelemetryInitializerPlugin","_initializers","addTelemetryInitializer","theInitializer","remove","doNotSendItem","telemetryInitializersCount","strValidationError","strNotificationManager","strSdkUnloadingError","defaultInitConfig","_createPerfManager","notificationMgr","_isPluginPresent","exists","BaseCore","_config","_isInitialized","_eventQueue","_perfManager","_cfgPerfManager","_cookieManager","_pluginChain","_configExtensions","_coreExtensions","_channelControl","_channelConfig","_channelQueue","_isUnloading","_telemetryInitializerPlugin","_internalLogsEventName","_unloadHandlers","_traceCtx","_internalLogPoller","_forceStopInternalLogPoller","_startInternalLogTimer","alwaysStart","interval","diagnosticLogInterval","setInterval","clearInterval","_flushInternalLogs","_createTelCtx","theCtx","_getPluginChain","_initPluginChain","theExtensions","_validateExtensions","channelPriority","allExtensions","coreExtensions","extPriorities","extPriority","all","createChannelQueues","channels","extensionQueue_1","_setQueue","createChannelControllerPlugin","_processChannelQueue","theChannels","processFn","waiting","_runChainOnComplete","chainCtx","theUpdateState","getChannel","_getChannel","pluginIdentifier","cbTimeout","doneIterating","cbTimer","doCallback","handled_1","_updateHook","_getPlugin","theExt","removeCb","pluginsToRemove","_removePlugins","removed","thePlugins","removeComplete","newConfigExtensions","newChannelConfig","newQueue","channel","track","_logOrThrowError","notificationManager","_initDebugListener","getDebugListener","_initPerfManager","enablePerfMgr","_initExtConfig","NotificationManager","cfgExtensions","__spreadArray","releaseQueue","getTransmissionControls","controls","_createDummyNotificationManager","setCookieMgr","createPerfMgr","setPerfMgr","eventCnt","eventQueue","pollInternalLogs","unloadComplete","flushComplete","processUnloadCtx","_doUnload","addPlugin","replaceExisting","addCb","existingPlugin","_addPlugin","removedPlugins_1","createNew","createDistributedTraceContext","setTraceCtx","traceCtx","_runListeners","listeners","perfEvtsSendAll","AppInsightsCore","_notifyInvalidEvent","_validateTelemetryItem","STR_PROPERTIES","_DYN_REQUEST_URL","_DYN_INST","_DYN_CONTEXT","_DYN_ABORTED","_DYN_TRACE_ID0","_DYN_SPAN_ID1","_DYN_INCLUDE_CORRELATION_2","_DYN_CAN_INCLUDE_CORRELAT3","_DYN_GET_ABSOLUTE_URL","_DYN_HEADERS","_DYN_REQUEST_HEADERS","_DYN_APP_ID","_DYN_TRACK_DEPENDENCY_DAT4","_DYN_DISTRIBUTED_TRACING_5","_DYN_START_TIME","_DYN_STATUS","_DYN_STATUS_TEXT","_DYN_HEADER_MAP","_DYN_OPEN_DONE","_DYN_SEND_DONE","_DYN_REQUEST_SENT_TIME","_DYN_ABORT_DONE","_DYN_GET_TRACE_ID","_DYN_GET_TRACE_FLAGS","_DYN_ERROR_STATUS_TEXT","_DYN_STATE_CHANGE_ATTACHE14","_DYN_RESPONSE_FINISHED_TI15","_DYN__CREATE_TRACK_ITEM","_DYN_RESPONSE","_DYN_GET_ALL_RESPONSE_HEA16","_DYN_GET_PART_APROPS","_DYN_GET_CORRELATION_CONT17","_DYN_PERF_MARK","_DYN_PERF_TIMING","_DYN_AJAX_TOTAL_DURATION","_DYN_EVENT_TRACE_CTX","_calcPerfDuration","resourceEntry","_setPerfDuration","_setPerfValue","strPerf","XHRMonitoringState","setRequestHeaderDone","ajaxRecord","completed","requestHeadersSize","responseReceivingDuration","callbackDuration","requestSize","responseStartedTime","callbackFinishedTime","endTime","xhrMonitoringState","clientFailure","getAbsoluteUrl","urlGetAbsoluteUrl","getPathName","urlGetCompleteUrl","ajaxType","enableRequestHeaderTracking","getResponse","ajaxTotalDuration","requestSentTime","responseFinishedTime","dependency","_populatePerfData","ajaxData","propsSet","strConnect","strRedirect","strRequest","strResponse","strStartTime","strConnectEnd","strRequestStart","strResponseEnd","strRedirectStart","strRedirectEnd","strTransferSize","strEncodedBodySize","strDecodedBodySize","strServerTiming","strDomainLookup","serverTiming","server_1","strName","perfAttempts","_DYN_CORRELATION_CONTEXT","headerMap","responseHeaders","strResponseText","partA","traceExt","AJAX_MONITOR_PREFIX","strDiagLog","AJAX_DATA_CONTAINER","STR_FETCH","ERROR_HEADER","ERROR_PREFIX","ERROR_POSTFIX","ERROR_NOT_SENT","CORRELATION_HEADER_ERROR","CUSTOM_REQUEST_CONTEXT_ERROR","FAILED_TO_CALCULATE_DURATION_ERROR","_markCount","_getAjaxData","ajaxDataId","_isHeaderSet","xh","_getFailedAjaxDiagnosticsMessage","_throwInternalCritical","ajaxMonitorInstance","_throwInternalWarning","_createErrorCallbackFunc","internalMessage","ajaxDiagnosticsMessage","_ajaxDataId","_indexOf","container","theHandler","_processDependencyContainer","BLOB_CORE","DfltAjaxCorrelationHeaderExDomains","_internalExcludeEndpoints","maxAjaxCallsPerView","disableAjaxTracking","disableFetchTracking","excludeRequestFromAutoTrackingPatterns","distributedTracingMode","enableResponseHeaderTracking","enableAjaxErrorStatusText","enableAjaxPerfTracking","maxAjaxPerfLookupAttempts","ajaxPerfLookupDelay","ignoreHeaders","addRequestContext","addIntEndpoints","_getEmptyConfig","emptyConfig","AjaxMonitor","_fetchInitialized","_xhrInitialized","_currentWindowHost","_enableRequestHeaderTracking","_enableAjaxErrorStatusText","_trackAjaxAttempts","_context","_isUsingW3CHeaders","_isUsingAIHeaders","_markPrefix","_enableAjaxPerfTracking","_maxAjaxCallsPerView","_enableResponseHeaderTracking","_disabledUrls","_disableAjaxTracking","_disableFetchTracking","_excludeRequestFromAutoTrackingPatterns","_addRequestContext","_dependencyHandlerId","_dependencyListeners","_dependencyInitializers","getEmptyConfig","_canIncludeHeaders","rlt","_hookProto","InstrumentProto","_isDisabledRequest","isDisabled","theUrl","theRegex","idx2","_isMonitoredXhrInstance","excludeAjaxDataValidation","ajaxValidation","initialized","_DYN_RESPONSE_TEXT","_getAjaxCorrelationContext","responseHeadersString","getResponseHeader","_createMarkId","performance_1","mark","markId","entries","getEntriesByName","_findPerfResourceEntry","initiatorType","trackCallback","reportError","perfMark","performance","maxAttempts","retryDelay","_DYN_AJAX_PERF_LOOKUP_DEL18","attempt","locateResourceTiming","perfTiming","getEntries","entryType","clearMarks","_getFailedFetchDiagnosticsMessage","_reportFetchMetrics","_reportFetchError","failedProps","errorProps","fetchDiagnosticsMessage","sysProperties","_reportDependencyInternal","_getFetchCorrelationContext","initializers","_DYN_ENABLE_REQUEST_HEADE6","_DYN_ENABLE_AJAX_ERROR_ST7","_DYN_ENABLE_AJAX_PERF_TRA8","_DYN_MAX_AJAX_CALLS_PER_V9","_DYN_ENABLE_RESPONSE_HEAD10","_DYN_EXCLUDE_REQUEST_FROM11","_DYN_ADD_REQUEST_CONTEXT","instrumentationKey","_DYN_DISABLE_AJAX_TRACKIN12","_DYN_DISABLE_FETCH_TRACKI13","_instrumentXhr","_supportsAjaxMonitoring","strPrototype","xhrData","theOpen","req","_openHandler","spanID","xhrRequestData","ajaxDataCntr","_attachToOnReadyStateChange","_onAjaxComplete","_reportXhrError","ajaxResponse","responseHeaderMap_2","parts","shift","exceptionText","hkErr","v","_addSharedXhrHeaders","_instrumentFetch","_supportsFetch","_global","isPolyfill","polyfill","fetchData","_createFetchRecord","newInit","fetchData_1","responseHeaderMap_1","_populateContext","propExt","trackDependencyData","currentWindowHost","_processDependencyListeners","traceParent","addDependencyListener","dependencyListener","addDependencyInitializer","dependencyInitializer","Application","Device","_DYN_SESSION_MANAGER","_DYN_IS_USER_COOKIE_SET","_DYN_IS_NEW_USER","_DYN_GET_TRACE_CTX","_DYN_TELEMETRY_TRACE","_DYN_APPLY_SESSION_CONTEX0","_DYN_APPLY_APPLICATION_CO1","_DYN_APPLY_DEVICE_CONTEXT","_DYN_APPLY_OPERATION_CONT2","_DYN_APPLY_USER_CONTEXT","_DYN_APPLY_OPERATING_SYST3","_DYN_APPLY_LOCATION_CONTE4","_DYN_APPLY_INTERNAL_CONTE5","_DYN_ACCOUNT_ID","_DYN_SDK_EXTENSION","_DYN_GET_SESSION_ID","_DYN_SESSION_COOKIE_POSTF6","_DYN_USER_COOKIE_POSTFIX","_DYN_ID_LENGTH","_DYN_GET_NEW_ID","_DYN_AUTOMATIC_SESSION","_DYN_AUTHENTICATED_ID","_DYN_SESSION_EXPIRATION_M7","_DYN_SESSION_RENEWAL_MS","_DYN_ACQUISITION_DATE","_DYN_RENEWAL_DATE","_DYN_COOKIE_DOMAIN","_DYN_JOIN","_DYN_COOKIE_SEPARATOR","_DYN_AUTH_USER_COOKIE_NAM8","Internal","sdkVersion","Location","Session","_SessionManager","_storageNamePrefix","_cookieUpdatedTimestamp","acquisitionSpan","renewalSpan","sessionCookiePostfix","_initializeAutomaticSessionWithData","session","sessionData","sessionReset","tokens","acqMs","renewalMs","_setCookie","nowMs","acq","renewalPeriodMs","acqTimeLeftMs","isExpired","_initializeAutomaticSession","storageValue","utlGetLocalStorage","timeSinceAcqMs","timeSinceRenewalMs","_renew","getNewId","automaticSession","cookieUpdateInterval","backup","_setStorage","renewal","utlSetLocalStorage","TelemetryTrace","parentId","_validateUserInput","isNewUser","isUserCookieSet","userCookiePostfix","userCookieName","params","_generateNewId","_generateNewCookie","acqStr","accountAcquisitionDate","_setUserCookie","utlRemoveStorage","authCookie","authCookieString","decodeURI","authenticatedUserId","accountId","storeInCookie","encodeURI","cookieSeparator","authUserCookieName","strExt","strTags","_removeEmpty","TelemetryContext","defaultConfig","previousTraceCtx","application","internal","autoSession","agentVersion","snippetVer","sdkSrc","applyWebContext","cleanUp","PropertiesPlugin","_extensionConfig","_distributedTraceCtx","_previousTraceCtx","breezeChannel","_extConfig","theContext","userCtx","_processTelemetryInternal","nullValue","isBrowserLinkTrackingEnabled","_internalSdkSrc","STR_SNIPPET","STR_FLUSH","STR_POLL_INTERNAL_LOGS","STR_GET_PLUGIN","STR_EVT_NAMESPACE","_DYN_DIAGNOSTIC_LOG_INTER4","_DYN_QUEUE","_DYN_CONNECTION_STRING","_DYN_APP_INSIGHTS","_DYN_DISABLE_IKEY_DEPRECA18","_DYN_GET_TRANSMISSION_CON19","_DYN_ONUNLOAD_FLUSH","_DYN_ADD_HOUSEKEEPING_BEF20","_ignoreUpdateSnippetProperties","Initialization","snippet","dependencies","_sender","_snippetVersion","_houseKeepingNamespace","_core","sv","cs","ingest","ingestionendpoint","instrumentationkey","DependenciesPlugin","isErrMessageDisabled","_getSKUDefaults","_DYN_LOAD_APP_INSIGHTS","legacyMode","_updateSnippetProperties","emptyQueue","_DYN_UPDATE_SNIPPET_DEFIN0","proxyAssign","chkSet","_loop_1","length_1","appInsightsInstance","performHousekeeping","loadedPlugin","propertiesPlugin","_sessionManager","excludePageUnloadEvents","disablePageUnloadEvents","_DYN_DISABLE_FLUSH_ON_BEF11","addPageUnloadEventListener","addEventListeners","product","_DYN_DISABLE_FLUSH_ON_UNL12","getSender","removePageUnloadEventListener","removePageHideEventListener","_TRACK","_getCurrentDependencies","cdns","scrpt","currentScript","ROOT_COMPANY_ID","CLIENT_ID","SHOW_HELP","HIDE_HELP","DEFAULT_LOGIN_REDIRECT_PATH","DEFAULT_PERFECT_SCROLLBAR_CONFIG","suppressScrollX","hostname","endsWith","InjectionToken","providedIn","origin","getBlobUrl","SITE_URL","Sites","LOGO_URL","site","AnHourSites","LOGO_URL_LIGHT","IS_CADLEARNING_SITE","IS_ANHOUR_SITE","IS_IFRAME","top","IS_APP","queryString","Windows","standalone","matchMedia","THEME_COOKIE","IS_LIGHT_THEME","theme","IS_DARK_THEME","autoTrackPageVisitTime","enableAutoRouteTracking","environment","enableDebugExceptions","DialogsModule","CurrencyPipe","imports","CommonModule","FormsModule","ReactiveFormsModule","DialogModule","DirectivesModule","DropDownsModule","DateInputsModule","InputsModule","TranslateModule","AzureModule","CanActivatePartnerSalesGuard","canActivate","CanActivateOrganizationAdminGuard","CanActivateOrganizationContentCreatorGuard","CanActivateOrganizationGuard","CanActivateOrganizationReportingGuard","CanActivatePartnerGuard","CanActivateUserGuard","route","isAuthorized","returnUrl","CanActivateProjectGuard","CanActivateBotGuard","HasBotEscallation","CanActivateAccomplishmentsGuard","HasAccomplishments","TermsOfServiceComponent","ngOnInit","selectors","TermsOfServiceModule","RouterModule","PlayListNewComponent","EditBaseComponent","playlistClient","fb","modalService","OverrideTranslationUri","TranslatePage","Form","group","Validators","IsLoaded","SaveAndClose","valid","Working","newPlaylist","Description","Owner","OwnerId","TimeStamp","OwningOrganizationId","OwningOrganization","SaveAutomatically","Upsert","alert","markAsTouched","Cancel","PipesModule","SharedModule","LayoutModule","GetHostUrl","replaceGuidHyphens","addGuidHyphens","ColorConverter","hex","rgb","hexToRgb","g","rgbToHex","componentToHex","production","blobUrl","ApiUrl","LogoUrl","UseGoogleAnalytics","SignalRUrl","invalidTimingValue","exp","ɵRuntimeError","ngDevMode","optimizeGroupPlayer","players","NoopAnimationPlayer","ɵAnimationGroupPlayer","normalizeKeyframes$1","driver","normalizer","element","keyframes","preStyles","Map","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","kf","isSameOffset","normalizedKeyframe","normalizedProp","normalizedValue","normalizePropertyName","ɵPRE_STYLE","AUTO_STYLE","normalizeStyleValue","animationFailed","listenOnPlayer","player","onStart","copyAnimationEvent","onDone","onDestroy","phaseName","makeAnimationEvent","triggerName","fromState","toState","totalTime","disabled","_data","getOrSetDefaultValue","parseTimelineCommand","command","separatorPos","_contains","elm1","elm2","_query","selector","multi","_documentElement","getParentElement","parent","parentNode","Element","documentElement","contains","querySelectorAll","elem","querySelector","_CACHED_BODY","_IS_WEBKIT","containsElement","invokeQuery","NoopAnimationDriver","validateStyleProperty","getBodyNode","style","containsVendorPrefix","matchesElement","_element","_selector","query","computeStyle","animate","delay","easing","previousPlayers","scrubberAccessRequested","ɵfac","ɵprov","AnimationDriver","NOOP","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_TRIGGER_SELECTOR","NG_ANIMATING_CLASSNAME","NG_ANIMATING_SELECTOR","resolveTimingValue","_convertTimeValueToMS","unit","resolveTiming","timings","allowNegativeValues","parseTimeExpression","delayMatch","easingVal","containsErrors","startIndex","negativeStepValue","negativeDelayValue","copyObj","destination","convertToMap","styleMap","copyStyles","styles","backfill","getStyleAttributeString","writeStyleAttribute","styleAttrValue","getPropertyValue","camelCaseToDashCase","setAttribute","setStyles","formerStyles","camelProp","dashCaseToCamelCase","has","eraseStyles","normalizeAnimationEntry","steps","sequence","PARAM_REGEX","extractStyleParams","lastIndex","interpolateParams","original","varName","localVal","invalidParamValue","iteratorToArray","iterator","done","DASH_CASE_REGEXP","visitDslNode","visitor","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","invalidNodeType","nodeType","getComputedStyle","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","alias","invalidTransitionAlias","invalidExpression","expr","separator","makeLambdaFromStates","TRUE_BOOLEAN_VALUES","Set","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN_REGEX","buildAnimationAst","metadata","warnings","AnimationAstBuilderVisitor","_driver","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","queryCount","depCount","states","transitions","invalidTrigger","definitions","def","stateDef","transition","invalidDefinition","styleAst","astParams","containsDynamicStyles","missingSubs","sub","invalidState","metadataName","animation","matchers","normalizeAnimationOptions","furthestTime","step","innerAst","timingAst","constructTimingAst","makeTimingAst","strValue","some","ast","dynamic","currentAnimateTimings","styleMetadata","isEmpty","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","metadataStyles","styleTuple","collectedEasing","styleData","tuple","collectedEntry","updateCollectedStyle","invalidParallelAnimation","firstStart","firstEnd","secondStart","secondEnd","validateStyleParams","invalidStyleParams","invalidKeyframes","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","offsetVal","consumeOffset","invalidOffset","keyframeOffsetsOutOfOrder","generatedOffset","keyframesMissingOffsets","limit","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","includeSelf","normalizeSelector","hasAmpersand","optional","originalSelector","invalidStagger","currentTransition","unsupportedCSSPropertiesFound","normalizeParams","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","ElementInstructionMap","_map","instructions","existingInstructions","clear","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","buildAnimationTimelines","rootElement","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","AnimationTimelineContext","currentTimeline","delayNextStep","timelines","filter","timeline","containsAnimation","lastRootTimeline","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","_applyAnimationRefDelays","animationsRefsOptions","animationRefOptions","animationDelay","animationDelayValue","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","hasCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","tl","maxTime","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate","_copyOptions","oldParams","newTime","fork","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","elements","invalidQuery","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_localTimelineStyles","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","flattenStyles","allStyles","allProperties","getFinalKeyframe","details1","details0","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","oldOffset","decimalPoints","mult","AnimationStyleNormalizer","DIMENSIONAL_PROP_SET","WebAnimationsStyleNormalizer","propertyName","userProvidedProperty","normalizedProperty","strVal","valAndSuffixMatch","invalidCssUnitValue","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","AnimationTransitionFactory","_triggerName","_stateStyles","currentState","nextState","oneOrMoreTransitionsMatch","matchFns","buildStyles","stateName","styler","currentOptions","nextOptions","skipAstBuild","transitionAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","applyParamDefaults","elm","queriedElementsList","userParams","AnimationStateStyles","defaultParams","combinedParams","AnimationTrigger","_normalizer","transitionFactories","balanceProperties","fallbackTransition","createFallbackTransition","containsQueries","matchTransition","matchStyles","stateMap","key1","key2","EMPTY_INSTRUCTION_MAP","TimelineAnimationEngine","bodyNode","_animations","_playersById","register","registerFailed","_buildPlayer","autoStylesMap","missingOrDestroyedAnimation","createAnimationFailed","destroy","_getPlayer","missingPlayer","listen","baseEvent","play","restart","finish","setPosition","QUEUED_CLASSNAME","DISABLED_CLASSNAME","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","StateValue","normalizeTriggerValue","absorbOptions","VOID_VALUE","DEFAULT_STATE_VALUE","AnimationTransitionNamespace","hostElement","_engine","_triggers","_queue","_elementListeners","_hostClassName","addClass","phase","missingTrigger","missingEvent","isTriggerEventValid","unsupportedTriggerEvent","triggersWithStates","statesByElement","afterFlush","_getTrigger","trigger","unregisteredTrigger","defaultToFallback","TransitionAnimationPlayer","objEquals","k1","k2","playersOnElement","playersByElement","isFallbackTransition","totalQueuedPlayers","removeClass","deregister","clearElementCache","elementPlayers","_signalRemovalForInnerTriggers","fetchNamespacesByElement","triggerLeaveAnimation","afterFlushAnimationsDone","destroyAfterComplete","triggerStates","previousTriggersValues","markElementAsRemoved","processLeaveNode","prepareLeaveAnimationListeners","elementStates","visitedTriggers","removeNode","engine","childElementCount","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","removalFlag","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","destroyed","markedForDestroy","d0","d1","elementContainsData","containsData","TransitionAnimationEngine","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","onRemovalComplete","queuedPlayers","createNamespace","_balanceNamespaceList","collectEnterElement","namespaceList","found","ancestor","ancestorNs","unshift","registerTrigger","_fetchNamespace","stateValue","isElementNode","insertBefore","markElementAsDisabled","isHostElement","hostNS","_buildInstruction","subTimelines","skipBuildAst","containerElement","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","whenRenderingDone","classList","cleanupFns","_flushAnimations","quietFns","triggerTransitionsFailed","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","nodes","root","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","previousValue","nodeIsOrphaned","stringMap","setVal","transitionFailed","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","pre","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","overrideTotalTime","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","parentPlayer","playersForElement","syncPlayerEvents","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","beforeDestroy","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","wrappedPlayer","deleteOrUnsetInMap","currentValues","_player","_containsRealPlayer","_queuedCallbacks","triggerCallback","_queueEvent","hasStarted","getPosition","cloakElement","oldValue","display","valuesMap","elementPropsMap","defaultStyle","cloakVals","failedElements","roots","rootMap","nodeSet","localRootMap","getRoot","postEntry","preEntry","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","componentId","cacheKey","triggerBuildFailed","buildTrigger","onInsert","onRemove","disableAnimations","disable","eventPhase","SpecialCasedStyles","_startStyles","_endStyles","_state","initialStyles","initialStylesByElement","_initialStyles","WeakMap","filterNonAnimatableStyles","isNonAnimatableStyle","WebAnimationsPlayer","_specialStyles","_onDoneFns","_onStartFns","_onDestroyFns","_initialized","_finished","_started","_destroyed","_originalOnDoneFns","_originalOnStartFns","currentSnapshot","_duration","_delay","_onFinish","_preparePlayerBeforeStart","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","_convertKeyframesToObject","kfs","fromEntries","cancel","WebAnimationsDriver","validateAnimatableStyleProperty","playerOptions","fill","previousStyles","previousWebAnimationPlayers","allowPreviousPlayerStylesMerge","normalizeKeyframes","balancePreviousStylesIntoKeyframes","startingKeyframe","missingStyleProps","specialStyles","packageNonAnimatableStyles","startStyles","endStyles","BrowserAnimationBuilder","AnimationBuilder","rootRenderer","_nextAnimationId","_renderer","createRenderer","encapsulation","ViewEncapsulation","issueAnimationCommand","BrowserAnimationFactory","DOCUMENT","AnimationFactory","RendererAnimationPlayer","_command","_listen","renderer","setProperty","DISABLE_ANIMATIONS_FLAG","AnimationRendererFactory","delegate","_zone","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","removeChild","BaseAnimationRenderer","animationTriggers","AnimationRenderer","begin","_scheduleCountTask","scheduleListenerCallback","runOutsideAngular","i1","_onDestroy","destroyNode","namespace","createComment","createText","appendChild","newChild","refChild","isMove","oldChild","selectRootElement","selectorOrNode","preserveContent","nextSibling","el","removeAttribute","setStyle","removeStyle","resolveElementFromTarget","parseTriggerCallbackName","dotIndex","SHARED_ANIMATION_PROVIDERS","provide","useClass","ɵAnimationStyleNormalizer","useFactory","instantiateDefaultStyleNormalizer","ɵWebAnimationsStyleNormalizer","ɵAnimationEngine","InjectableAnimationEngine","appRef","ngOnDestroy","RendererFactory2","instantiateRendererFactory","zone","deps","ɵDomRendererFactory2","NgZone","BROWSER_ANIMATIONS_PROVIDERS","ɵWebAnimationsDriver","ANIMATION_MODULE_TYPE","useValue","BROWSER_NOOP_ANIMATIONS_PROVIDERS","ɵNoopAnimationDriver","BrowserAnimationsModule","ɵmod","ɵinj","BrowserModule","DEFAULT_CONFIG","connector","operate","subscriber","innerFrom","fromSubscribable","subscribable","Observable","ERR_SW_NOT_SUPPORTED","NgswCommChannel","serviceWorker","controllerChanges","fromEvent","pipe","controller","currentController","defer","of","controllerWithChanges","worker","registration","switchMap","getRegistration","publish","multicast","subjectOrSubjectFactory","subjectFactory","ConnectableObservable","errorObservable","postMessage","take","tap","sw","toPromise","postMessageWithOperation","operationNonce","waitForOperationCompleted","generateNonce","eventsOfType","filterFn","nextEventOfType","nonce","SwPush","subscriptionChanges","NEVER","notificationClicks","subscription","pushManager","workerDrivenSubscriptions","pm","getSubscription","merge","requestSubscription","pushOptions","userVisibleOnly","decodeBase64","serverPublicKey","applicationServerKey","unsubscribe","atob","SwUpdate","versionUpdates","activated","unrecoverable","current","currentVersion","latestVersion","checkForUpdate","activateUpdate","SwRegistrationOptions","SCRIPT","ngswAppInitializer","script","platformId","isPlatformBrowser","readyToRegister$","registrationStrategy","strategy","delayWithTimeout","whenStable","scope","ApplicationRef","isStable","stable","ngswCommChannelFactory","opts","ServiceWorkerModule","APP_INITIALIZER","Injector","TranslateHttpLoader","http","prefix","suffix","getTranslation","lang","_r6","ctx_r5","packageMetadata","productName","productCodes","publishDate","licensingDocsUrl","LocalizedMessagesDirective","ComponentMessages","service","ɵdir","useExisting","forwardRef","NotificationComponent","cdr","localizationService","width","height","defaultHideAfter","animationEnd","rtl","validatePackage","dynamicRTLSubscription","changes","direction","containerClass","closeButtonTitle","closeTitle","notificationClasses","typeClass","closable","hideTimeout","ngAfterViewInit","setHideTimeout","typeIconClass","onCloseClick","hide","customComponent","elementHeight","nativeElement","emitClose","hideAfter","animatedElement","generatedAnimation","slideAnimation","offsetHeight","fadeAnimation","slideCloseAnimation","overflow","fadeCloseAnimation","opacity","i1$1","ɵcmp","_c0","ViewContainerRef","_t","LocalizationService","L10N_PREFIX","decls","$localize","i4","NotificationContainerComponent","resolver","notifications","notification","closeClickSubscription","addNotification","settings","position","horizontal","vertical","resolveComponentFactory","notificationRef","createComponent","applySettings","customFactory","changeDetectorRef","detectChanges","appendTo","applyAbsolutePosition","applyPosition","applyContainerWrap","afterHide","templateRef","templateString","TemplateRef","icon","cssClass","appendToContainer","elementHalfWidth","getBoundingClientRect","positionStyles","setContainerPosition","cssStyle","offsetMargin","positionLayout","alignItems","center","marginLeft","bottom","_c3","NOTIFICATION_CONTAINER","NotificationService","notificationContainers","show","findGroupContainer","currentId","notificationContainer","attachView","hostView","hostViewElement","groupContainer","applicationRef","appRoot","components","NotificationModule","YourPathComponent","BaseComponent","badgeClient","LearningPath","YourPath","hasExpanded","oldExpandedBadges","STORAGE_KEY","expandedBadges","PercentComplete","Expanded","Loaded","SetPosition","storageElement","ScrollPosition","badge","getElementById","offsetTop","LessonClicked","Closed","Assess","assessmentId","GetAchievementAssessment","SideBarScrolled","$event","srcElement","scrollTop","preventDefault","ToggleLearningPathExpand","LibraryComponent","IsDark","IsLight","AllSuggestedProducts","GetSuggestedProducts","GetPublicSuggestedProducts","ReturnSuggestedProducts","IsLibraryLoaded","GetRssFeedUrl","ToggleExpand","FixProductImageUrl","Product","SuggestedProducts","Owned","PartnersComponent","IsPartnerAdmin","IsPartnerSales","OrganizationsComponent","organizationClient","assessmentClient","courseClient","IsCustomContentCreator","IsReporting","IsOrgAdmin","IsApprover","IsLearningPathAdmin","HasProjects","HasProjectManagement","CustomCourses","CustomAssessments","ListManagableCustomCourses","ListManagableCustomAssessments","ListPermissionRequests","Notifications","Title","Message","Url","NotificationMessageTypes","ImageUrl","UsersComponent","reportClient","AvailableForEscallation","Loading","UserDto","Organizations","Projects","TestedOutOfAchivements","Get","ListOrganizations","ListProjects","GetTestedOutAchievements","GetRecentActivity","RecentActivity","SelectProject","project","SelectOrganization","organization","AvailableClicked","PlayListShareComponent","EmailAddress","IsValidEmail","Invitees","ListPlayListUsers","PlayList","RemoveInvitee","invitee","DeletePlayListUser","AddInvitee","PlayListId","markAsUntouched","emailAddresses","InviteEmailAddressesToPlayList","EmailAddresses","SiteUrl","PlayListMenuComponent","playListClient","confirmService","SelectedPlayListId","localStorage","PlayLists","ListPlaylistByUser","storageItem","OpenLesson","PlayListChange","panel","expanded","NewPlayList","modal","DeleteLesson","playList","Contents","SavePlaylist","DragEndRunning","SaveRunning","UpsertWithContent","Delete","DeleteByIds","Share","dialog","Assessment","navigate","queryParams","onDragEnd","Order","RenamePlaylist","newName","prompt","CustomContentMenuComponent","resourceClient","confirm","ListCustomCourses","PanelStateChange","courseId","CourseStructureMap","structure","GetStructureForEditing","DownloadStructureResource","resource","ItemId","ResourceType","ResourceTypes","ResourcesDownloaded","DownloadResource","Uri","RequestResourceAccessToken","download","click","SaveCourseStructure","rOrder","ChildItems","ciOrder","ci","ItemType","UpdateCustomCourseStructure","CourseId","Structure","IsExpanded","dataItem","ContentItemTypes","HandleExpand","HandleCollapse","HasChildren","IsRootElement","ParentId","PluginMenuComponent","Detach","ChatService","signalr","Type","QMessageTypes","ClearQConversation","QMessages","QExpertMessages","ClearExpertConversation","SetDefaultMessage","defaultMessage","ButtonResponse","ConversationId","DateTime","FromParticipant","AccessToken","Active","Accepted","QParticipantTypes","InResponseToMessageId","isHTML","ToParticipants","VerificationToken","ButtonOnly","Buttons","Lessons","ChatModule","ChatComponent","Chat","CurrentMessage","scrollToBottom","Expert","siteName","qmessage","QButtonActionTypes","Value","Concepts","Entities","InitialProductId","ProductId","InitialVersionId","VersionId","Intent","IntentScore","InitialMessage","ButtonClick","accepted","IsContent","scrollHeight","QMenuComponent","_superprop_getTranslatePage","ExpertMenuComponent","ProjectsComponent","projectClient","List","ReportsComponent","orgClient","IsPartner","IsPartnerOrganization","NotificationAreas","AppComponent","translate","searchClient","IsIFrame","IsApp","LogoUrlLight","SearchPhrase","getFullYear","setDefaultLang","SelectedLanguage","use","helpParameters","ShowQMenu","HelpParameters","onUrlChange","ShowQTab","WindowWidth","scrollWidth","onresize","ShowMenu","onclick","defaultPrevented","IsClassPresent","ShowCustomCourses","ShowPlayList","ShowPluginMenu","ShowExpertMenu","ShowQuickSearch","MenusVisible","subQuickSearch","SearchForm","valueChanges","searchText","debounceTime","distinctUntilChanged","QuickSearch","SearchResults","ShowProjectsMenu","ready","reg","newWorker","installing","getElementsByTagName","WhichSite","authChanged","ngAfterContentChecked","IsContentCreator","AcceptedCookie","ShowCookieConsent","SetLanguageList","CommandNotifications","PluginCommandNotifications","IsPreHire","userInfo","ShowReportsMenu","IsPartnerOrg","IsCADSupport","OrganizationGroupLogo","setupNotifications","SelectLanguage","language","reload","SearchClicked","SearchFocused","ToggleMenuVisible","FirstName","Search","TogglePlayList","ToggleQ","ToggleExpert","ToggleCustomCourses","ToggleYourPath","ShowYourPath","TogglePluginMenu","ClosePlayList","CloseCustomContent","ClosePluginMenu","detach","ShowPluginWindow","CloseYourPathMenu","CloseQMenu","CloseExpertMenu","ClosePluginWindow","CloseCookieConsent","GetNavDisplay","ToggleDisplay","Languages","GetLanguages","ShowLanguage","HasLanguages","langs","l","ol","SVGAnimatedString","parentElement","initNotifications","subscriptions","notify","Organization","Partner","Plugin","notifyPlugin","hasFocus","html2text","Q","disconnectNotifications","html","innerHTML","textContent","innerText","area","Notification","permission","requestPermission","tag","IsNotificationDuplicate","OrganizationNotifications","PartnerNotifications","PluginNotifications","UserNotifications","CheckForNotifications","AuthConfigModule","eventService","registerForEvents","first","EventTypes","HTTP_INTERCEPTORS","AuthInterceptor","AbstractSecurityStorage","DefaultLocalStorage","Setup","AuthModule","authority","configId","postLogoutRedirectUri","postLoginRoute","clientId","silentRenew","useRefreshToken","secureRoutes","autoUserInfo","forbiddenRoute","autoCleanStateAfterAuthentication","ignoreNonceAfterRefresh","triggerAuthorizationResultEvent","maxIdTokenIatOffsetAllowedInSeconds","unauthorizedRoute","renewTimeBeforeTokenExpiresInSeconds","ngswBypass","renewUserInfoAfterTokenRenew","AcceptTermsComponent","titleService","metaService","setTitle","updateTag","Accept","Accepting","ReturnUrl","Route","snapshot","rurl","AcceptTermsGuard","dialogService","HasAcceptedTerms","innerWidth","innerHeight","windowRef","actions","primary","minWidth","DialogCloseResult","ErrorHandlerService","handleError","handleProblemDetails","HttpErrorResponse","forceRelogin","ProgressEvent","openIdError","description","WebApiTranslationLoaderComponent","AppModule","loadAppInsights","errorService","ClientId","ServiceUrl","ErrorService","baseHref","bootstrap","CLIENT_CONFIG","GetClientConfig","PERFECT_SCROLLBAR_CONFIG","ErrorHandler","AssessmentsV1Client","BadgesV1Client","BlogArticlesV1Client","BlogsV1Client","CampaignDripsV1Client","CampaignsV1Client","CoursesV1Client","DisciplinesV1Client","DocumentsV1Client","DomainsV1Client","EntitlementsV1Client","IndustriesV1Client","InventoryV1Client","InvoicesV1Client","LessonsV1Client","MedallionsV1Client","OfflineV1Client","OrganizationsV1Client","PaymentMethodsV1Client","PaymentProvidersV1Client","PlaylistsV1Client","PriceListRevisionsV1Client","PriceListsV1Client","ProductCategoriesV1Client","ProductsV1Client","ProjectsV1Client","PublicVideosV1Client","PreferencesV1Client","QuestionsV1Client","ReportsV1Client","ResourcesV1Client","SalesTaxesV1Client","SearchV1Client","ShippingMethodsV1Client","SupportV1Client","SystemV1Client","TokensV1Client","TopicsV1Client","UsersV1Client","WorkflowsV1Client","HttpClientModule","WindowModule","ChartModule","ConfirmModule","NgbDropdownModule","SortableModule","ButtonsModule","PopupModule","TreeViewModule","QuillModule","PerfectScrollbarModule","loader","TranslateLoader","redirectTo","loadChildren","__webpack_require__","DownloadsModule","ContactModule","LegalModule","ProductModule","LessonModule","PlaybackModule","SearchModule","AccountModule","UserModule","OrganizationModule","CustomContentModule","PartnerModule","ReportsModule","AssessmentsModule","SupportModule","AboutModule","ProjectsModule","ExpertModule","GoalsModule","WorkflowModule","pathMatch","AccountHomeModule","anchorScrolling","onSameUrlNavigation","scrollPositionRestoration","initialNavigation","enableTracing","relativeLinkResolution","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","_r15","ctx_r14","ctx_r16","ctx_r7","ctx_r8","ctx_r9","resolvedPromise","SIZES","small","medium","large","ROUNDNESS","full","KendoButtonService","buttonClicked","buttonClicked$","asObservable","button","ButtonDirective","localization","ngZone","toggleable","role","selectedChange","isIcon","isIconClass","_size","_rounded","_fillMode","_themeColor","_focused","subs","Subscription","togglable","selected","_selected","tabIndex","iconSetter","addIcon","updateIconNode","iconClass","iconClassName","imageUrl","addImgIcon","removeImageNode","isDocumentAvailable","desktopBrowser","detectDesktopBrowser","mobileOS","detectMobileOS","mozilla","isFirefox","blur","newSize","handleClasses","rounded","newRounded","fillMode","newFillMode","themeColor","newThemeColor","handleThemeColor","isFocused","toggleClass","classButton","isToggleable","roleSetter","classDisabled","classActive","getDirection","onFocus","onBlur","look","isSpan","tagName","addTextSpan","hasAttribute","toggleAriaPressed","_onButtonClick","keyCode","Keys","ngOnChanges","change","isChanged","ngAfterViewChecked","setIconTextClasses","imageNode","iconNode","iconSpanNode","deferTimeout","focus","attribute","setSelected","changed","hasObservers","shouldSet","hasText","prependChild","classNames","span","childNodes","firstChild","insertIcon","removeIconNode","classes","componentType","stylingOption","toRemove","toAdd","getStylingClasses","prevFillMode","addFillMode","themeColorClass","getThemeColorClasses","PreventableEvent","prevented","isDefaultPrevented","ButtonModule","ButtonGroupModule","FocusService","focused","resetFocus","focusedIndex","FocusableDirective","focusService","elementRef","subscribeEvents","TemplateContextDirective","viewContainerRef","templateContext","insertedViewRef","createEmbeddedView","ListComponent","onItemClick","onItemBlur","sizeClass","getText","textField","getIconClasses","onClick","i2","ButtonItemTemplateDirective","ListModule","KeyEvents","keydown","keypress","keyup","NavigationAction","Undefined","Open","Enter","EnterPress","EnterUp","Tab","Esc","Navigate","NAVIGATION_CONFIG","NavigationService","enter","enterpress","enterup","tab","esc","useLeftRightArrows","keyEvent","isEnter","altKey","flipNavigation","ListButton","navigationService","wrapperRef","_open","_disabled","_active","_popupSettings","popupClass","listId","_isFocused","wrapper","popupClasses","openState","togglePopupVisibility","emitItemClickHandler","focusWrapper","focusFirstTimeout","blurTimeout","subscribeListItemFocusEvent","subscribeComponentBlurredEvent","subscribeNavigationEvents","handleTab","wrapperContains","blurWrapper","enterHandler","focusFirstItem","keyDownHandler","keyHandler","keyPressHandler","keyUpHandler","_itemClick","focusButton","_blur","markForCheck","SplitButtonModule","NAVIGATION_SETTINGS_PROVIDER$1","DropDownButtonComponent","popupService","elRef","itemClick","popupSubs","popupSettings","eventArgs","_toggle","componentTabIndex","widgetClasses","dir","active","mousedown","mouseup","openPopup","onButtonBlur","isOpen","anchorAlign","align","popupAlign","popupRef","popup","newSettings","currentValue","destroyPopup","toggle","tick","handleFocus","popupElement","onArrowKeyNavigate","onNavigationEnterUp","onNavigationOpen","onNavigationClose","createPopup","anchor","popupTemplate","popupAnchorViewportLeave","popupOpen","i3","dirIndex","_c10","_c5","_c6","ngContentSelectors","DropDownButtonModule","ChipModule","FloatingActionButtonModule","EventsModule","point_r15","getTouch","domEvent","x","pageX","y","pageY","shouldBindGroup","groupNames","eventGroups","move","gesturechange","gestureend","gesturestart","press","DomEvents","hammerInstance","eventHandlers","panstart","panmove","panend","pinchstart","pinchmove","pinchend","previous","previousArgs","pointers","pointer","xLocation","yLocation","distance","pointer1","pointer2","sqrt","srcEvent","touches","delta","initialDelta","deltaX","startLocation","deltaY","unbind","eventGroup","nameIdx","toggleDrag","enable","toggleZoom","recognizer","dateValueAxisFormats","DateValueAxis","dateFormats","milliseconds","seconds","minutes","hours","skeleton","weeks","months","years","DateCategoryAxis","DomEventsBuilder$1","DomEventsBuilder","HAMMER","Hammer","isDevMode","recognizers","Tap","Pan","Pinch","Press","DonutCenterTemplateDirective","ItemChange","sender","CollectionService","onItemChange$","copyChanges","toSimpleChanges","SimpleChange","THROTTLE_MS","Change","ConfigurationService","store","BehaviorSubject","initSource","onFastChange$","onChange$","auditTime","CollectionItemComponent","collectionService","notifyChanges","SettingsComponent","configKey","markAsVisible","visible","SeriesTooltipComponent","seriesTooltipTemplateRef","seriesTooltipTemplate","flag","SeriesItemComponent","toggleVisibility","togglePointVisibility","pointIndex","pv","pointVisibility","seriesTooltip","COLLISION","BaseTooltip","point","collision","positionMode","onInit","bbox","scrollLeft","scrollOffset","bodyFactory","ElementRef","CrosshairTooltipComponent","PopupService","POPUP_CONTAINER","i4$1","AXES","CrosshairTooltipsContainerComponent","tooltipKeys","tooltipsMap","tooltipComponents","crossahirTooltipComponents","toArray","axisName","axisIndex","createCrosshairTooltips","newMap","mapTooltips","removeTooltip","tooltips","axesCrosshairTooltipOptions","tooltipIdx","tooltip","axes","crosshair","SeriesTooltipTemplateDirective","SharedTooltipTemplateDirective","TooltipTemplatePoint","format","template","category","categoryIndex","categoryIx","series","percentage","runningTotal","low","high","xLow","xHigh","yLow","yHigh","formattedValue","formatValue","hasParent","TooltipTemplateService","setTemplate","getTemplate","seriesIndex","seriesTemplates","setSeriesTemplates","setSharedTemplate","sharedTemplate","getSharedTemplate","TooltipPopupComponent","templateService","seriesTooltipContext","seriesSharedTooltipContext","wrapperClass","leave","shared","seriesSharedTooltipTemplateRef","defaultSharedTooltipTemplate","sharedTemplateContext","pointTemplateRef","nameColumn","points","colorMarker","colspan","categoryText","wrapPoints","defaultSeriesTooltipTemplate","mouseleaveSubscription","ChartInstanceObserver","InstanceObserver","handlerMap","hideTooltip","legendItemClick","render","showTooltip","BaseEvent","LegendEvent","NoteEvent","visual","RenderEvent","_e","SeriesEvent","originalEvent","stackValue","EVENT_MAP$1","axisLabelClick","AxisLabelClickEvent","axis","drag","DragEvent","axisRanges","dragEnd","DragEndEvent","dragStart","DragStartEvent","legendItemHover","LegendItemHoverEvent","legendItemLeave","LegendItemLeaveEvent","noteClick","NoteClickEvent","noteHover","NoteHoverEvent","noteLeave","NoteLeaveEvent","paneRender","PaneRenderEvent","plotAreaClick","PlotAreaClickEvent","plotAreaHover","PlotAreaHoverEvent","plotAreaLeave","PlotAreaLeaveEvent","select","SelectEvent","selectEnd","SelectEndEvent","selectStart","SelectStartEvent","seriesClick","SeriesClickEvent","seriesHover","SeriesHoverEvent","seriesOver","SeriesOverEvent","seriesLeave","SeriesLeaveEvent","zoom","ZoomEvent","zoomEnd","ZoomEndEvent","zoomStart","ZoomStartEvent","InstanceEventService","LegendItemClickEvent","font","fontWeight","fontSize","fontFamily","computedBackgroundColor","backgroundColor","ThemeService","loaded","loadTheme","readTheme","readDefaultTheme","queryColor","chartBaseTheme","setColors","setFonts","setSeriesColors","destroyElement","axisDefaults","color","labels","majorGridLines","minorGridLines","notes","background","border","label","chartArea","legend","inactiveItems","markers","seriesDefaults","boxPlot","downColor","mean","median","whiskers","bullet","candlestick","errorBars","horizontalWaterfall","overlay","gradient","verticalBoxPlot","verticalBullet","waterfall","seriesColors","seriesTemplate","mapColor","queryStyle","setInactiveOpacity","seriesTypes","inactiveOpacity","defaultFont","titleFont","paneTitleFont","labelFont","unsetColor","alpha","letterPos","seriesPos","emitter","ChartComponent","themeService","intl","instanceEventService","changeDetector","resizeRateLimit","suppressTransitions","hostClasses","refreshWait","canRender","chartMouseleave","surfaceElement","domSubscriptions","setDirection","intlChange","rtlChange","autoResize","resizeTimeout","resize","optionsChange","redrawTimeout","createInstance","Chart","intlService","exportImage","exportVisual","exportSVG","findAxisByName","findPaneByIndex","findPaneByName","getPlotArea","plotArea","toggleHighlight","instanceObserver","onResize","onLegendItemClick","seriesComponents","onRender","donutCenterStyle","getDonutCenterStyle","surface","onShowTooltip","crossahirTooltips","tooltipInstance","onHideTooltip","activeEmitter","requiresHandlers","names","refresh","updateDirection","setChartAreaSize","setOptions","tooltipMouseleave","relatedTarget","hideElements","chartElement","handlingTap","firstSeries","charts","_plotArea","firstPoint","box","radius","sector","innerRadius","combineLatest","inZone","deferredRedraw","isRTL","noTransitionsRedraw","_c1","i8","AxisDefaultsComponent","AxisDefaultsLabelsComponent","CollectionComponent","processChanges","ngAfterContentInit","readItems","CategoryAxisItemComponent","localeId","weekStartDay","firstDay","LOCALE_ID","CategoryAxisComponent","CategoryAxisLabelsComponent","ChartAreaComponent","LegendComponent","SeriesComponent","tooltipTemplateService","readTooltipTemplates","templates","TooltipComponent","sharedTooltipTemplate","ValueAxisItemComponent","ValueAxisComponent","ValueAxisLabelsComponent","SparklineComponent","tooltipWrapperClass","tooltipContentClasses","Sparkline","ResizeSensorModule","StockChartModule","SparklineModule","ChartsModule","skipFirstChange","isFirstChange","anyChanged","propertyNames","DraggableDirective","enableDrag","kendoPress","kendoDrag","kendoRelease","toggleDraggable","destroyDraggable","draggable","Draggable","release","bindTo","DraggableModule","closest","predicate","EventsOutsideAngularDirective","ResizeService","resizeBatchService","acceptedSize","acceptSize","lastWidth","lastHeight","checkChanges","schedule","checkSize","initSize","offsetWidth","div","cssText","WRAP_STYLE","ResizeCompatService","isScheduled","expand","shrink","expandChild","shrinkChild","EXPAND_CHILD_STYLE","HAS_OBSERVER","ResizeObserver","ResizeObserverService","resizeObserver","disconnect","observe","ResizeBatchService","scheduled","ResizeSensorComponent","rateLimit","serviceType","resizeService","KendoInput","Alt","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Backspace","Control","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","End","Escape","F1","F2","F10","Home","Insert","KeyA","KeyB","KeyC","KeyD","KeyE","KeyF","KeyG","KeyH","KeyI","KeyJ","KeyK","KeyL","KeyM","KeyN","KeyO","KeyP","KeyQ","KeyR","KeyS","KeyT","KeyU","KeyV","KeyW","KeyX","KeyY","KeyZ","NumpadDecimal","PageDown","PageUp","Shift","Space","ScrollbarWidthService","cloneDate","adjustDST","newDate","getHours","setHours","addDays","setDate","getDate","createDate","year","month","day","setFullYear","getMonth","isEqual","candidate","expected","lastDayOfMonth","getMinutes","getSeconds","getMilliseconds","addMonths","expectedMonth","setMonth","normalize","setYear","addYears","addDecades","addCenturies","normalizeYear","firstDecadeOfCentury","lastDecadeOfCentury","firstYearOfDecade","lastYearOfDecade","lastMonthOfYear","durationInCenturies","durationInDecades","addWeeks","firstDayOfMonth","Direction","Forward","Backward","dayOfWeek","weekDay","newDay","getDay","durationInMonths","firstMonthOfYear","durationInYears","Day","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","calcWeekInYear","firstWeekInYear","diffInMS","prevDayOfWeek","moveDateToWeekStart","weekInYear","prevWeekDate","nextWeekDate","weekNumber","ctx_r2","cell_r14","name_r11","_r13","ctx_r12","ctx_r15","ctx_r0","_r5","ctx_r4","_r7","ctx_r6","name_r5","_r9","ctx_r10","_r4","ctx_r3","ctx_r11","ctx_r17","ctx_r18","ctx_r19","ctx_r20","_r8","Action","Left","Right","Up","Down","PrevView","NextView","FirstInView","LastInView","LowerView","UpperView","CalendarViewEnum","decade","century","MIDNIGHT_DATE","MIN_DATE","MAX_DATE","EMPTY_SELECTIONRANGE","requiresZoneOnBlur","ngControl","touched","control","updateOn","isSet","setter","setYears","setHours$1","setMinutes","setSeconds","setMilliseconds","range","isInRange","isValidRange","dateInRange","getToday","noop$2","shiftWeekNames","domContainerFactory","child","hasChange","hasExistingValue","last","list","isInSelectionRange","selectionRange","areDatesEqual","second","every","getSizeClass","component","getRoundedClass","getFillModeClass","solid","flat","outline","DEFAULT_ROUNDED","DEFAULT_SIZE","DEFAULT_FILL_MODE","EMPTY_DATA$3","ACTIONS$3","CenturyViewService","dateRange","addToDate","skip","datesList","cellUID","focusedDate","isActiveView","selectedDates","viewDate","cells","firstDate","lastDate","today","rowOffset","baseDate","cellOffset","cellDate","nextCentury","isRangeStart","isRangeEnd","isRangeMid","isSelected","isWeekend","isRangeSplitEnd","isRangeSplitStart","isToday","cellTitle","isInArray","dates","aboveMin","belowMax","beginningOfPeriod","firstYear","lastDayOfPeriod","modifier","navigationTitle","rowLength","viewsCount","viewsInRange","EMPTY_DATA$2","ACTIONS$2","DecadeViewService","nextDecade","EMPTY_DATA$1","ACTIONS$1","MonthViewService","_intlService","isDateDisabled","firstMonthDate","firstMonthDay","lastMonthDate","lastMonthDay","cellDay","otherMonth","isOtherMonth","lowerBound","upperBound","formatDate","abbrMonthNames","wideMonthNames","prependCell","weekendRange","dateFormatNames","nameType","EMPTY_DATA","ACTIONS","upStep","downStep","YearViewService","currentYear","changedYear","candidateValue","services$1","BusViewService","viewChanged","configure","moveDown","moveUp","moveToBottom","activeView","canMoveDown","canMoveUp","clamp","viewOffset","WeekNamesService","getWeekNames","includeWeekNumber","weekNames","closestInScope","noop$1","DisabledDatesService","disabledDates","isNumberArray","disabledWeekDays","isDateArray","normalizedDisabledDates","notifyInvalidInput","notifyServiceChange","KForOfContext","$implicit","kForOf","even","odd","KForOf","_viewContainer","_template","_differs","_differ","kForTemplate","kForTrackBy","getTypeNameForDebugging","ngDoCheck","diff","_applyChanges","viewContainerLength","dataLength","tuples","forEachOperation","record","currentIndex","ViewComponent","bus","disabledDatesService","isActive","cellClick","weekNumberCellClick","cellEnter","cellLeave","colSpan","domEvents","disabledDatesChange","showWeekNumbers","bindEvents","updateData","currentCellIndex","unsubscribeCallback","isHorizontal","isMonthView","shouldRenderCellContent","cellCtx","rowCtx","firstWeekDateContext","getWeekNumber","getWeekNumberContext","getStyles","acc","cls","stringifyClassObject","activeRangeEnd","tableCellIndex","rowIndex","cellIndex","handleWeekNumberClick","week","availableDates","cellMouseoverHandler","mouseLeaveHandler","clickHandler","cell","closestCell","getAttribute","cellContext","cellByIndex","ctrlKey","metaKey","shiftKey","modifiers","emitCellLeave","attrs","i7","i5","HorizontalViewListComponent","weekService","views","showViewHeader","animateNavigation","orientation","activeDateChange","getComponentClass","intlSubscription","horizontalHostClass","verticalHostClass","getComponentMonthClass","getComponentYearClass","getComponentDecadeClass","getComponentCenturyClass","initService","clampDate","activeViewChanged","viewsHasChanged","isInDates","activeDate","getTake","setTableMinWidth","getCaptionTitle","getCaptionClass","animateView","table","initialContainerWidth","tableWidth","nextAnimationDate","prevAnimationDate","tabRect","containerGap","columnGap","transform","oncancel","onfinish","isListInRange","canNavigate","containerWidth","HeaderComponent","todayAvailable","rangeLength","isPrevDisabled","isNextDisabled","showNavigationButtons","todayButtonClick","prevButtonClick","nextButtonClick","l10nChange","setTodayAvailability","activeViewValue","todayMessage","getTitle","handleTodayClick","handleNavigation","currentDate","prevButtonTitle","nextButtonTitle","nextDate","isTodayInRange","KEY_TO_ACTION","SelectionService","performSelection","selectionMode","activeViewEnum","rangePivot","isDateSelected","sortDates","CellTemplateDirective","MonthCellTemplateDirective","YearCellTemplateDirective","DecadeCellTemplateDirective","CenturyCellTemplateDirective","WeekNumberCellTemplateDirective","HeaderTitleTemplateDirective","minValidator","minValue","minError","maxValidator","maxValue","maxError","noop","Messages$1","MultiViewCalendarLocalizedMessagesDirective","VALUE_DOC_LINK$5","RANGE_CALENDAR_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","MultiViewCalendarComponent","RANGE_CALENDAR_RANGE_VALIDATORS","NG_VALIDATORS","selectionService","rangeValidation","disabledDatesRangeValidation","selection","tabindex","isHeaderActive","bottomView","topView","activeViewChange","valueChange","blurEvent","isHovered","prevView","nextView","_min","_max","_focusedDate","onControlChange","onControlTouched","onValidatorChange","minValidateFn","maxValidateFn","disabledDatesRangeValidateFn","setClasses","_value","verifyValue","lastSelected","_selectionRange","cellTemplateRef","_cellTemplateRef","cellTemplate","monthCellTemplateRef","_monthCellTemplateRef","monthCellTemplate","yearCellTemplateRef","_yearCellTemplateRef","yearCellTemplate","decadeCellTemplateRef","_decadeCellTemplateRef","decadeCellTemplate","centuryCellTemplateRef","_centuryCellTemplateRef","centuryCellTemplate","weekNumberTemplateRef","_weekNumberTemplateRef","weekNumberTemplate","headerTitleTemplateRef","_headerTitleTemplateRef","headerTitleTemplate","bottomViewEnum","topViewEnum","widgetId","calendarTabIndex","ariaDisabled","ariaActivedescendant","handleFocusout","headerElement","handleMouseEnter","handleMouseLeave","handleMousedown","handleClick","viewList","emitNavigate","updateButtonState","verifyChanges","selectedRange","disabledDatesInRange","disabledDatesRangeValidator","handleHeaderFocus","handleDateChange","canNavigateDown","sameDates","parseSelectionToValue","handleTodayButtonClick","todayDate","isSameView","isBottomView","setActiveDate","writeValue","registerOnChange","registerOnTouched","setDisabledState","validate","registerOnValidatorChange","activeCellTemplate","navigateView","emitCellEvent","handleCellClick","selectionModifiers","i18n_8","i18n_10","RowHeightService","rowHeight","detailRowHeight","heights","agg","expandDetail","updateRowHeight","collapseDetail","prev","totalHeight","curr","ScrollAction","PageAction","ScrollerService","scrollObservable","firstLoaded","bottomOffset","topOffset","rowHeightService","lastLoaded","lastScroll","ReplaySubject","offsetBufferRows","rowsForHeight","skipWithOffset","scrollSubscription","onScroll","scrollPosition","offsetSize","up","firstItemIndex","lastItemIndex","nonVisibleBuffer","ceil","SCROLLER_FACTORY_TOKEN","DEFAULT_SCROLLER_FACTORY","observable","ScrollDirection","scrollModifiers","scrollNormalizers","scrollValidators","VirtualizationComponent","scrollerFactory","itemHeight","itemWidth","maxScrollDifference","scrollOffsetSize","scrollDuration","activeIndexChange","pageChange","scrollChange","wrapperClasses","dispatcher","scroller","horizontalClass","totalVertexLength","totalSize","containerOffsetSize","getContainerProperty","containerScrollSize","containerScrollPosition","initServices","createRowHeightService","containerScrollSubscription","scroll$","emitActiveIndex","animationSubscription","activeIndex","itemIndex","itemOffset","isIndexVisible","containerTop","containerBottom","isListScrolled","scrollTo","scrollToIndex","animateToIndex","indexOffset","getContainerScrollDirection","scrollRange","scrollStep","modifyScroll","normalizeScroll","isScrollValid","animationFrameScheduler","scan","takeWhile","containerScroll","maxScroll","containerMaxScroll","sign","difference","staticOffset","differenceToScroll","EMPTY","lastActiveIndex","div$1","ul$1","li$1","td","th","tr","tbody","thead","repeat","mapper","scrollable$1","navigationList","navElement","viewFactory","rows","renderWeekHeader","viewElement","contentElement","getScrollable","monthView","yearView","decadeView","paddingLeft","paddingRight","getBody","CalendarDOMService","ensureHeights","calendarHeight","calculateHeights","hostContainer","monthViewHeight","headerHeight","scrollableContentHeight","calendarWidth","monthViewWidth","scrollableContentWidth","yearViewHeight","scrollableYearContentHeight","yearViewWidth","decadeViewHeight","centuryViewHeight","decadeViewWidth","centuryViewWidth","navigationItemHeight","viewHeight","viewType","viewDimension","viewWidth","dimension","viewProp","hostClone","cloneNode","NavigationComponent","indexToScroll","maxViewHeight","totalChanged","virtualization","onPageChange","_c14","ViewListComponent","cols","minViewsToRender","getBottomOffset","colWidth","generateDates","date1","date2","isEqualMonthYear","updateIndex","isScrolled","getScrollableHeight","ScrollSyncService","magnitude","divideByMagnitude","powerByMagnitude","navScrolled","monthScrolled","navSubscription","scrollSiblingOf","viewSubscription","scrolledElement","siblingComponent","calculateScroll","scrollableElement","NavigationItemTemplateDirective","PickerService","sameDateSelected","dateCompletenessChange","MultiViewCalendarCustomMessagesComponent","override","CalendarMessages","CalendarLocalizedMessagesDirective","VALUE_DOC_LINK$4","virtualizationProp","CALENDAR_VALUE_ACCESSOR","CalendarComponent","CALENDAR_RANGE_VALIDATORS","KENDO_INPUT_PROVIDER","scrollSyncService","pickerService","navigation","activeViewDateChange","syncNavigation","_type","calendar","activeViewDate","lastDayInPeriod","setAriaActivedescendant","_disabledDates","navigationItemTemplateRef","_navigationItemTemplateRef","navigationItemTemplate","localizationChangeSubscription","viewChangeSubscription","handleActiveViewChange","NgControl","navigationView","unbindCallback","pageChangeSubscription","focusTarget","multiViewCalendar","blurTarget","handleMultiViewCalendarValueChange","emitSameDate","handleNavigate","emitEvent","handleActiveDateChange","handleBlur","emitBlur","emitFocus","handleMultiViewCalendarKeydown","handleComponentClick","handleKeydown","arrowKeyPressed","focusedCellId","i18n_17","i18n_19","incompleteDateValidator","incomplete","incompleteDate","Arrow","DateInputMessages","DateInputLocalizedMessagesDirective","DATE_PART_REGEXP","TIME_PART_REGEXP","SHORT_PATTERN_LENGTH_REGEXP","unpadZero","Mask","symbols","KendoDate","formatPlaceholder","twoDigitYearMax","leadingZero","monthNames","typedMonthPart","knownParts","E","H","M","S","allFormatedMonths","dayPeriods","allDayPeriods","sampleFormat","dateFormatString","setExisting","hasValue","splitDateFormat","getExisting","pattern","shouldNormalizeCentury","part","getDateObject","getTextAndFormat","symbol","modifyPart","normalizeCentury","parsePart","currentChar","resetSegmentValue","resetLeadingZero","switchToNext","dateParts","baseFormat","replaced","currentMaxLength","parsedDate","matchMonth","dayPeriod","matchDayPeriod","isZeroCurrentChar","isAbbrMonth","partMap","incrementLeadingZero","middle","middleNumber","parseDate","monthNumber","patternValue","partPattern","peekDate","peek","patternLength","patternSatisfied","hasLeadingZero","setLeadingZero","twoDigitYear","Number","centuryBase","getNormalizedCenturyBase","peekValue","typedChar","monthAsNum","lowerChart","am","dateFormatParts","partLength","returnValue","mask","resultText","resultFormat","currentSymbol","dateFieldName","DateInputComponent","focusableId","readonly","ariaReadOnly","placeholder","autoCorrect","incompleteDateValidation","spinners","isPopupOpen","hasPopup","valueUpdate","arrow","arrowDirection","formatSections","hasMousedown","focusedPriorToMousedown","isDateIncomplete","currentFormat","backspace","incompleteValidator","kendoDate","paste","symbolsMap","dateSymbolMap","updateFormatSections","spinup","spindown","setSpinnerFill","disabledClass","inputElement","dateInput","inputValue","inputFormat","displayFormat","verifyRange","isEqualToKendoDate","getKendoDate","updateElementValue","setComponentClasses","triggerChange","selectDateSegment","handleButtonClick","modifyDateSegmentValue","caret","millisecond","msDigits","millisecondDigitsInFormat","digits","millisecondStepFor","putDateInRange","updateIncompleteValidationStatus","switchDateSegment","selectNearestSegment","previousFormatSymbol","selectionPresent","selectionStart","selectionEnd","placeholderToggled","handleDragAndDrop","texts","showPlaceholder","isPosition","activeElement","setSelectionRange","updateOnPaste","mousewheelHandler","handleMouseWheel","handlePaste","handleInput","wheelDelta","stopPropagation","oldTextOrigin","oldFormat","newTextOrigin","oldIndex","oldTextSeparator","oldText","newText","deletedSymbol","approximateStringMatching","navigationOnly","switchPart","parsedPart","spinner","oldFill","_c21","_c22","_c23","i18n_26","TOUCH_ENABLED","CalendarCustomMessagesComponent","DatePickerMessages","DatePickerLocalizedMessagesDirective","DatePickerComponent","touchEnabled","calendarType","animateCalendarNavigation","readOnlyInput","disabledDatesValidation","popupUID","_show","disabledDatesValidateFn","pickerSubscriptions","handleSameSelection","handleDateCompletenessChange","toggleButton","inputRole","togglePopup","verifySettings","disabledDate","disabledDatesValidator","windowBlurSubscription","handleIconClick","focusInput","handleChange","handleInputChange","mergeTime","focusedElement","isTabExitingCalendar","toggleFocus","handleWindowBlur","currentTarget","blurArgs","currentFocusTarget","blurComponent","_c29","_c30","_c31","i18n_34","i18n_36","i18n_38","clamp$3","HOURS_IN_DAY","distanceFromMin$3","limit$3","borderValue","barrier","limitDown$3","limitUp$3","HoursService","boundRange","insertUndividedMax","toListItem","selectedValue","getHour","stepper$3","countFromMin","addLast","addMissing","isRangeChanged","limitRange","isLastMissing","missing","isMissing","selectedIndex","divideByStep","valueInList","lastHour","missingItem","clamp$2","MINUTES_IN_HOUR","distanceFromMin$2","limit$2","limitDown$2","limitUp$2","MinutesService","minute","getMinute","stepper$2","lastMinute","clamp$1","SECONDS_IN_HOUR","distanceFromMin$1","limit$1","limitDown$1","limitUp$1","SecondsService","getSecond","stepper$1","lastSecond","MILLISECONDS_IN_SECOND","distanceFromMin","limitDown","limitUp","MillisecondsService","getMillisecond","stepper","lastMillisecond","isAM","inRange","inReverseRange","DayPeriodService","hourAM","candidateAM","normalizedRange","isPM","minHour","maxHour","ul","li","TIMELIST_WRAPPER","TimePickerDOMService","timeListHeight","isEqualTillMinute","isEqualTillSecond","defaultGetters","getter","minGetter","isEqualTillMillisecond","CalendarCommonModule","TemplatesModule","MultiViewCalendarModule","IntlModule","VirtualizationModule","CalendarModule","CalendarsModule","DateInputModule","DatePickerCustomMessagesComponent","DatePickerModule","COMPONENT_MODULES$2","DateRangeModule","COMPONENT_MODULES$1","TimePickerModule","DateTimePickerModule","COMPONENT_MODULES","ctx_r1","toClassList","focusableRegex","space","ctrl","down","DIALOG_ELEMENTS_HANDLING_ESC_KEY","hasClasses","namesList","isFocusable","checkVisibility","validTabIndex","focusable","rect","visibility","isVisible","setHTMLAttributes","attributes","parseCSSClassNames","parseObjectClassNames","parseStringClassNames","parseArrayClassNames","currentClassName","splitStringToArray","classesArray","focusableSelector","RESIZE_DIRECTIONS","OFFSET_STYLES","createValueWithUnit","isFinite","DialogActionsComponent","layout","buttonGroupClassName","actionsTemplate","actionsArray","onButtonClick","buttonClass","cssClasses","i6","DIALOG_LOCALIZATION_SERVICE","TitleBarLocalizationService","messageService","dialogLocalization","shortKey","RTL","Messages","DialogTitleBarComponent","onStable","DEFAULT_ANIMATION_CONFIG","DialogComponent","actionsLayout","titleId","contentId","domSubs","generateTitleId","generateContentId","htmlAttributes","tIndex","_htmlAttributes","setServiceClasses","_cssClass","bubble","titlebarContent","handleInitialFocus","titlebarView","actionsView","initDomEvents","defAnimationConfig","animationConfig","animationSpecs","animations","animationType","scale","endScale","transformOrigin","endZoom","endFade","createPlayer","animateContent","ev","onKeyDown","handleActionButtonFocus","keepFocusWithinComponent","prevValue","primaryButton","findPrimary","autoFocusedElement","initiallyFocusedElement","shouldFocusPrimary","buttons","findPrimaryButton","focusableActionButtons","getAllFocusableChildren","firstFocusable","lastFocusable","getFirstAndLastFocusable","shiftTabAfterFirstFocusable","maxWidth","minHeight","maxHeight","DialogRef","DialogContentBase","dialogTitleBar","dialogActions","viewQuery","DialogContainerService","DialogInjector","getDialogRef","parentInjector","notFoundValue","DialogService","containerService","initializeDialog","dialogRef","contentFrom","applyOptions","apiClose","componentRef","preventAction","dialogRefParameter","isNotComponent$1","share","hasContentTitle","hasContentActions","multipleTitles","multipleActions","contentTemplate","Renderer2","titleNodes","actionNodes","newZIndex","DEFAULT_OPTIONS","resizable","createMoveStream","mouseDown","takeUntil","originalX","originalY","DragResizeService","stateChange","resizeStart","resizeEnd","lastAction","dragSubscription","restoreOptions","onDrag","startPosition","dragStarted","isTouch","currentPosition","ensureWidth","handleDrag","handle","startOffsetAndPosition","resizeStarted","currentOffsetAndPosition","handleResize","initial","old","newWidth","newHeight","newTop","newLeft","restoreAction","defaultState","storeOptions","maximizeAction","maximizeState","wnd","windowViewPort","minimizeAction","minimizeState","applyManualState","clearHeight","closeAction","windowOffset","scroll","positionWithScroll","getDocumentElement","setRestoreOption","nextPossibleZIndex","nextZIndex","getWindowViewPort","ResizeHandleDirective","hostClass","setDisplay","WindowTitleBarComponent","dragDirective","isDraggable","subscribeDrag","subscribeStateChange","unsubscribeDrag","unsubscribeState","titleBar","stateSubscription","touchAction","handleArrow","handleEscape","handleStateChange","WindowMinimizeActionDirective","Button","_service","buttonType","WindowMaximizeActionDirective","WindowRestoreActionDirective","WindowCloseActionDirective","WindowComponent","keepContent","widthChange","heightChange","topChange","leftChange","draged","resized","windowSubscription","resizeDirections","setOption","restoreButtonTitle","restoreTitle","maximizeButtonTitle","maximizeTitle","minimizeButtonTitle","minimizeTitle","setNextZIndex","setInitialOffset","titleBarContent","titleBarView","updateAllOffset","bringToFront","setDimension","setOffset","showDefaultTitleBar","styleMinWidth","styleMinHeight","stylePosition","wrapperMaximizedClass","wrapperMinimizedClass","onComponentFocus","onComponentBlur","currentZIndex","viewPort","parsedValue","i18n_11","i18n_13","i18n_15","_c17","WindowCloseResult","WindowContainerService","WindowInjector","getWindowRef","WindowRef","WindowService","preventClose","windowRefParameter","isNotComponent","titleBarTemplate","DialogContainerDirective","WindowContainerDirective","not","pred","skipWhile","taking","createOperatorSubscriber","_r18","dataItem_r24","ctx_r26","ctx_r35","ctx_r27","_r41","ctx_r40","_r44","ctx_r43","_r19","_r21","_r20","_r16","ctx_r24","_r27","_r29","ctx_r28","_r23","ctx_r22","_r25","isEmptyString","isObjectArray","selectedIndices","valueField","extractedValues","getter$1","matchText","word","ignoreCase","temp","isUntouched","matcher","msMatchesSelector","webkitMatchesSelector","inDropDown","SearchBarComponent","onNavigate","searchBarClass","_userInput","_previousValue","_placeholder","userInput","setInputSize","ariaExpanded","previousUserInput","suggestedText","caretIndex","caretAtEnd","writeInputValue","combineStr","setInputSelection","lengthOf","placeholderLength","textLength","i9","ItemTemplateDirective","HeaderTemplateDirective","FooterTemplateDirective","GroupTemplateDirective","FixedGroupTemplateDirective","onSelect","onChange","getTotal","indices","newSelection","unselect","resetSelection","DataService","grouped","groupIndices","isGrouped","getGroupIndices","_flatData","flatten","itemsCount","hasProps","startFrom","findIndex","offsetIndex","closestGroup","itemAt","flatIndex","groupAt","groupField","itemGroup","fieldName","groupIndex","DisabledItemsService","dataService","itemDisabled","isIndexDisabled","defaultItem","isItemDisabled","NavigationEvent","disabledItemsService","home","nextIndex","clampIndex","firstFocusableIndex","NoDataTemplateDirective","FilterableComponent","DEFAULTS","pageSize","normalizeVirtualizationSettings","defaultOverrides","ListItemDirective","SelectableDirective","checkboxes","multipleSelection","focusedClassName","selectedClassName","checkOnClick","listResize","lastScrollTop","scrollToFocused","selectSubscription","scrollToItem","prepareClasses","virtual","overflowY","hasVirtualScrollbar","checkboxClasses","setOverflow","prefetchData","findCurrentGroup","positionItems","onCheckedChange","isChecked","checked","listContentClass","listClass","listItemClass","listVirtualClass","listGroupStickyHeaderClass","listGroupStickyHeaderTextClass","listGroupItemClass","listGroupItemTextClass","firstVisibleItem","elementFromPoint","currentGroup","visibleItems","trunc","clientHeight","offsetY","prevPage","changePage","getValue","isAltRow","firstGroupHeaderInTargetedPage","contentScrollTop","itemOffsetTop","contentOffsetHeight","bottomDistance","hasScrollbar","virtualContainer","_c2","_c4","i11","inputs","AUTOCOMPLETE_VALUE_ACCESSOR","AutoCompleteComponent","highlightFirst","listHeight","clearButton","filterable","filterChange","closed","listBoxId","optionPrefix","onChangeCallback","onTouchedCallback","popupMouseDownHandler","valueChangeSubject","subscribeTouchEvents","wrapperOffsetWidth","popupHeight","listContainerClasses","containerClasses","suggestion","hasMatch","suggest","backspacePressed","clearButtonVisiblity","shouldOpen","triggerPopupEvents","activeDescendant","noDataLabel","messageFor","_virtualSettings","isLoading","loading","unsubscribeEvents","clearValue","stopImmediatePropagation","focusItemAt","searchbar","popupWrapper","emitChange","findIndexPredicate","handleEnter","searchBarChange","currentTextLength","exactMatch","insensitiveMatch","valueHasChanged","valueChangeSubscription","changeSubscription","handleItemChange","focusSubscription","handleItemFocus","navigationSubscription","closeSubscription","enterSubscription","escSubscription","touchstartDisposeHandler","horizontalAlign","optionsList","popupClose","maxIndex","itemText","_c8","_c9","COMBOBOX_VALUE_ACCESSOR","ComboBoxComponent","allowCustom","valueNormalizer","selectionChange","defaultVirtualItemHeight","defaultVirtualPageSize","_filtering","_text","filterText","customValueSubject","valueSubject","clearValueSubject","setState","valuePrimitive","isPrimitive","_valuePrimitive","popupWidth","attachStreams","createValueStream","attachSelectClickHandler","valueStream","clearFilter","customValueStreams","partition","throttleTime","allowCustomValueStream","custom","disableCustomValueStream","clearValueStream","valueSubscription","merged","catchError","selectionChanged","emitValueChange","handleNavigationOpen","selectClickDisposeHandler","clearState","textEmpty","valueEmpty","_previousDataItem","buttonClasses","selectButtonClasses","resolved","findDataItem","getSuggestion","hasSelected","hasFocused","previousText","focusedItemText","textHasChanged","useSuggestion","unresolvedSelection","currentText","restoreItemFocus","isCustom","selectClick","preventEventDefault","focusedDataItem","isInDropDown","_c16","i18n_21","ValueTemplateDirective","FilterInputDirective","nextTick","DROPDOWNLIST_VALUE_ACCESSOR","DropDownListComponent","filterFocused","filterBlurred","hostElementFocused","hostElementBlurred","selectionSubscription","subscribeFocusEvents","onMouseDown","wrapperWidth","widgetTabIndex","providedTabIndex","ariaOwns","blurFilterInput","focusComponent","hostTabIndex","isReadonly","isAriaExpanded","hostAriaOwns","hostAriaActivedescendant","hostNoDataLabel","firstIndex","focusedItemNotSelected","onKeyPress","localizationChangesSubscription","assignAriaDescribedBy","onFilterFocus","filterInputClasses","optionLabelSizeClass","isDisabledDefaultItem","getDefaultItemText","onSelectionChange","itemFromEvent","shouldUsePrevious","shouldUseNewValue","openSubscription","filterBlurredSubscription","concatMap","componentBlurredSubscription","componentBlur","unSubscribeFocusEvents","currentOrDefault","defaultItemIndex","which","character","charCode","typingTimeout","selectNext","isInLoop","sameCharsOnly","splitIndex","shuffleData","loopMatch","nextMatch","comparer","primitive","ofSameType","handleFilter","trimmed","valueLabelId","i12","CustomItemTemplateDirective","TagTemplateDirective","GroupTagTemplateDirective","RemoveTagEvent","TagListComponent","disabledIndices","removeTag","hostId","tagProp","propField","getPropField","isTagDisabled","positionIndex","isGroupTag","_tag","deleteTag","itemId","tagPrefix","tagAriaHidden","fieldsCount","valueDepth","depth","MULTISELECT_VALUE_ACCESSOR","MultiSelectComponent","differs","tagListId","focusedTagIndex","autoClose","tagMapper","matchingValue","_checkboxes","selectedDataItems","observableSubscriptions","onSearchBarFocus","onSearchBarBlur","closePopup","differ","valueChangeDetected","normalizeCheckboxesSettings","hostMousedown","customItemSizeClass","focusedListIndex","newItem","addCustomValue","customValues","validateComplexValues","resolveValuesInArray","resolveAllValues","resolveDataItemFromTags","disabledItemsMapper","searchTextAndFocus","navigateInput","selectValue","handleBackspace","handleRemoveTag","removeGroupTag","removeSingleTag","clearAll","_item","createCustomValueStream","onTagMapperChange","isClosed","isTagFocused","handleClose","handleUp","handleHome","handleEnd","handleDelete","handleRightKey","handleLeftKey","handleDownKey","customValueSubscription","dataItems","dataItemValues","isDataItemDisabled","customItem","startsFrom","i18n_33","SharedDirectivesModule","DropDownTreesModule","AutoCompleteModule","ComboBoxModule","DropDownListModule","MultiSelectModule","areSame","value1","value2","limitPrecision","precision","fractionLength","toFixedPrecision","maxPrecision","maxFractionLength","invokeElementMethod","LocalizedSwitchMessagesDirective","FOCUSED$4","SwitchComponent","hostClickSubscription","_checked","_trackRounded","_thumbRounded","ngChange","ngTouched","setHostClasses","thumbRounded","newThumbRounded","handleThumbClasses","trackRounded","newTrackRounded","handleTrackClasses","ieClass","ariaReadonly","onLabelMessage","onLabel","offLabelMessage","offLabel","attachHostClickHandler","changeValue","thumb","i18n_25","TextBoxDirective","onValueChange","autoFillStart","autoFillEnd","animationName","EXPONENT_REGEX","decimalPart","padString","ArrowDirection","NumericTextBoxMessages","LocalizedNumericTextBoxMessagesDirective","PARSABLE_OPTIONS","PARSABLE_DEFAULTS","decimals","FOCUSED$3","NumericTextBoxComponent","changeValueOnScroll","selectOnFocus","_format","isPasted","ngValidatorChange","increasePress","arrowPress","decreasePress","releaseArrow","spinTimeout","numericInput","pressedKey","replaceNumpadDotValue","formatInputValue","parseNumber","setSelection","restrictDecimals","limited","limitInputValue","hasTrailingZeros","setInputValue","updateValue","previousSelection","handleDragEnter","handleMouseDown","shouldSelectAll","selectAll","selectCaret","elementValue","handleKeyDown","addStep","handleWheel","getDeltaFromMouseWheel","disableClass","parseOptions","option","createMinValidator","createMaxValidator","numericRegex","restrictModelValue","unbindHandler","restrictedValue","notifyValueChange","incrementTitle","decrementTitle","decimalSeparator","numberSymbols","decimal","hasDecimals","wrap","isRightClick","spin","numberPattern","limitValue","enteredValue","limitedValue","selectToEnd","lengthChange","hasMax","hasMin","padLimit","replaceNext","correctedValue","paddedValue","tryPadValue","limitLength","zeroPadded","zeroPaddedNext","stringValue","fraction","is","exponentMatch","defined","formatNumber","parsed","caretPosition","getCaretPosition","partialValue","significantCharsInFormattedValue","formattedString","significantCharacters","extractSignificantNumericChars","adjustedSignificantChars","adjustSignificantChars","numberOfLeadingZeroes","matchedLeadingZeroes","lengthOfLeadingZeroesMatch","significantChars","leadingZeroes","i1$2","_c28","i18n_31","NumericTextBoxCustomMessagesComponent","SlidersCommonModule","SliderModule","RangeSliderModule","SwitchModule","NumericTextBoxModule","MaskedTextBoxModule","TextBoxSuffixTemplateDirective","TextBoxPrefixTemplateDirective","TextBoxMessages","LocalizedTextBoxMessagesDirective","FOCUSED$1","TextBoxComponent","showSuccessIcon","showErrorIcon","inputFocus","inputBlur","focusChangedProgrammatically","handleInputFocus","clearButtonClicked","handleInputBlur","isBrowserSafari","safari","isSafari","incomingValue","isJapanese","caretStart","caretEnd","checkClearButton","cursorInsideWrapper","tabbing","isFocusedElement","clearTitle","showClearButton","showErrorsInitial","invalid","dirty","showSuccessInitial","successIconClasses","successIcon","errorIconClasses","errorIcon","clearButtonClasses","clearButtonIcon","hasErrors","isSuccessful","_c36","TextBoxModule","TextAreaModule","ColorPickerModule","CheckBoxDirective","kendoClass","CheckBoxModule","RadioButtonDirective","RadioButtonModule","FormFieldModule","DOCS_URL","errorSolutions","NoCurrency","NoCurrencyDisplay","NoCurrencyRegion","NoDateFieldNames","NoFirstDay","NoGMTInfo","NoLocale","NoValidCurrency","NoWeekData","intlMethod","formatMessage","errorSolution","LOCALE_REGEX","IntlService","cldrServiceFactory","CldrIntlService","locale","format$1","MessageService","_key","_rtl","dictionary","alt","MODULES","ProgressBarModule","_r17","_r36","PanelBarExpandMode","Single","Full","Multiple","Default","PanelBarContentDirective","PanelBarItemTitleDirective","nextId$1","parsePanelBarItems","isHorizontalArrowKey","isVerticalArrowKey","isNavigationKey","skipTab","hasClass","nextPanelbarId","PanelBarService","parentSource","keepContentSource","childSource","parent$","children$","keepContent$","pbId","onKeepContent","PanelBarItemComponent","hasChildItems","hasItems","hasContent","titleAttribute","kItemClass","wrapperFocused","_expanded","onWrapperFocusChange","toggleExpandedChildAnimations","kStateDefaultClass","kStateDisabledClass","kStateExpandedClass","ariaSelected","headerClass","childClass","titleTemplate","titleTemplates","contentWrapper","addLevelClass","hidden","contentItems","validateConfiguration","childrenItems","viewChildItems","onItemAction","iconClasses","subTreeViewItems","subTree","toggleAnimationState","expandMode","kendo_angular_layout_c0","kendo_angular_layout_c1","kendo_angular_layout_c7","PanelBarItemTemplateDirective","PanelBarCollapseEvent","PanelBarExpandEvent","PanelBarSelectEvent","PanelBarStateChangeEvent","PanelBarComponent","selectable","collapse","isViewInit","_keepItemContent","updateChildrenHeight","childrenHeight","panelbarHeight","contentOverflow","contentHeight","keyBindings","computedKeys","keepItemContent","_items","hostHeight","invertKeys","inverted","selectFocusedItem","focusPreviousItem","collapseItem","focusNextItem","expandItem","focusLastItem","viewItems","contentChildItems","onComponentClick","itemClicked","onComponentKeyDown","treeItems","modifiedItems","selectPreventedItems","currentItem","selectedState","focusedState","preventedCollapseItem","siblings","expandedItems","expandedState","isEventPrevented","getVisibleParent","focusItem","nextItem","focusedItem","moveFocus","firstChildIndex","flatVisibleItems","listOfItems","flattedItems","TabContentDirective","TabTitleDirective","TabStripTabComponent","_tabContent","QueryList","tabContent","tabTitle","_tabTitleDirective","TabCloseEvent","PreventableEvent$1","mouseScrollEnabled","scrollableSettings","mouseScroll","getActiveTab","tabs","focusedTab","selectedTab","getTabByIndex","filtered","_tab","isTablistHorizontal","tabPosition","TabStripService","targetId","isTabElement","shouldHandleKey","isArrowKey","onDelete","onTabSelect","selectArgs","tabSelect","focusTabHeader","selectTab","resetTabSelection","isScrollable","scrollToSelectedTab","activeTab","firstNavigatableIndex","computeNextIndex","activateTab","activeTabIndex","tabStripClosable","isTabClosable","tabClose","tabHeaderContainers","_tabHeader","getTabHeaderByIndex","prevNavigatableIndex","nextNavigatableIndex","lastNavigatableIndex","ScrollService","scrollButtonActiveStateChange","tablistElement","tablist","tabstripSize","wrapperHeight","tablistOverflowSize","overflowSize","tabsOverflow","scrollButtonsSize","hasScrollButtons","prevRect","prevScrollButton","hostBoundingClientRect","prevSize","nextRect","nextScrollButton","toggleScrollButtonsState","currentPrevButtonActive","currentNextButtonActive","calculatedPrevButtonActive","calculatedNextButtonActive","toggleButtonActiveState","getScrollOffset","isLastTabActive","activeTabRect","tablistRect","activeTabStart","activeTabEnd","tablistStart","tablistEnd","tabEndIsInVisibleRange","tabStartIsInVisibleRange","onMouseScroll","scrollable","calculateListPosition","mouseScrollSpeed","scrollTabs","buttonScrollSpeed","behavior","scrollSpeed","adjustedMaxScroll","restoreScrollPosition","normalizeScrollableSettings","scrollButtons","prevButtonIcon","nextButtonIcon","normalizeSettings","TabScrollEvent","TabStripScrollableButtonComponent","btnClasses","tabScroll","scrollEvent","emitScrollEvent","prevClass","nextClass","scrollButtonIconClass","defaultPrevIcon","defaultNextIcon","TabComponent","activeClass","focusedClass","tabClosable","closeButtonClasses","closeIcon","tabStripCloseIcon","closeTab","closeArgs","TabStripMessages","LocalizedTabStripMessagesDirective","TabStripComponent","tabstripService","scrollService","keepTabContent","_scrollableSettings","subscriptionsArePresent","activeButtonSettings","_height","toggleScrollButtons","attachWheelHandler","tabsAtTop","tabsAtRight","tabsAtBottom","tabsAtLeft","tabStripScrollable","positionChange","tabsAtBottomChanged","tabsAlignmentStyles","justify","tabAlignment","tabListWidth","tabListHeight","tabStripHasScrollButtons","itemsWrapperClass","onTabClick","targetElement","onScrollButtonClick","resetTabFocus","scrollButtonsSetting","scrollButtonsArePresent","shouldShowButtons","alwaysVisible","wheelEvent","_c15","handlersRTL","AvatarModule","CardModule","DrawerModule","ExpansionPanelModule","PanelBarModule","SplitterModule","StepperModule","TabStripModule","TileLayoutModule","StackLayoutModule","GridLayoutModule","eitherRect","isWindowAvailable","OVERFLOW_REGEXP","overflowStyle","overflowX","overflowElementStyle","overflowComputedStyle","FRAME_DURATION","hasRelativeStackingContext","memoize","fun","called","isDifferent","scaleRect","SCALE","STYLES","DOMService","addOffset","addition","addScroll","boundingOffset","getFontStyles","computedStyles","hasOffsetParent","offsetParent","offsetAtPoint","currentLocation","currentOffset","removeScroll","restrictToView","scrollableParents","parentElements","stackingElementOffset","relativeContextElement","getRelativeContextElement","stackingElementScroll","useRelativePosition","zIndex","sibling","siblingContainer","parents","zIndexStyle","zoomLevel","clientWidth","isZoomed","AlignService","_dom","alignElement","elementAlign","margin","anchorRect","relativeRect","absoluteRect","elementRect","scrollPos","elementScrollPosition","stackScale","stackScroll","stackOffset","stackingOffset","removeStackingOffset","PositionService","positionElement","collisions","elementOffset","anchorOffset","flip","flipped","isUnsubscribed","ScrollableService","forElement","observables","elemRect","containerRect","LEFT","RIGHT","DOWN","animationTypes","AnimationService","animationBuilder","statesFn","playStates","stopPlayer","DEFAULT_OFFSET","PopupComponent","_alignService","domService","_positionService","_resizeService","_scrollableService","animationService","copyAnchorStyles","anchorViewportLeave","initialCheck","updateFixedClass","reposition","animationSubscriptions","onAnimationStart","onAnimationEnd","setZIndex","copyFontStyles","unsubscribeReposition","repositionSubscription","_currentOffset","setContainerStyle","newOffset","oldLeft","oldTop","isDifferentOffset","contentContainer","resizeSensor","alignedOffset","isInViewPort","hasLeaveObservers","componentFactoryResolver","rootViewContainer","rootComponents","rootViewContainerNode","getComponentRootNode","popupComponentRef","appendPopup","popupInstance","projectComponentInputs","removeElement","popupPositionChange","getComponentFactory","componentClass","item_r3","_r11","ctx_r13","NODE_NAME_PREDICATES","NODE_ATTR_PREDICATES","matchesNodeAttr","nodeAttr","draggableFromPoint","isChild","parentDraggable","isDraggableChild","draggableFromEvent","sortable","changedTouches","touch","clientX","clientY","draggables","isSortable","nodeName","HAS_RELATIVE_STACKING_CONTEXT","SortableContainer","_hidden","updateDisplayStyle","_display","PlaceholderTemplateDirective","NavigateEvent","DraggableEvent","DragOverEvent","allowDrag","widgetTarget","SortableService","activeDraggable","originDraggable","targetSortable","lastDraggable","onPressSubject","onDragSubject","onReleaseSubject","_target","sortableCounter","sortableRegister","getSortableComponentFromTouch","pressArgs","_drag","onPress","onRelease","registerComponent","sortableComponent","unregisterComponent","setSource","realTarget","startTarget","startDrag","dropTarget","endDrag","positionHintFromEvent","SortableComponent","sortableService","navigable","disabledIndexes","acceptZones","itemStyle","emptyItemStyle","activeItemStyle","disabledItemStyle","itemClass","activeItemClass","emptyItemClass","disabledItemClass","emptyText","defaultTemplateRef","itemTemplateDirectiveRef","placeholderTemplateDirectiveRef","itemWrappers","dragOver","dragLeave","dataMove","dataAdd","dataRemove","animating","dragIndex","dragOverIndex","onDragStartSubject","onDragOverSubject","onDragLeaveSubject","onDragEndSubject","hintLocation","_localData","animationDuration","afterKeyPress","_hideActiveItem","cacheData","navigatable","setItemData","itemTemplate","itemTemplateRef","placeholderTemplateRef","elems","updateCacheIndices","itemEnabled","startEvent","dragEvent","leaveEvent","endEvent","hintVisible","currentItemStyle","hideActiveItem","currentItemClass","hintStyle","acceptDragFrom","ariaDropEffect","focusHandler","blurHandler","keydownHandler","targetIndex","navigateEvent","removeDataItem","hideItem","clearActiveItem","fixFocus","getActiveItem","addDataItem","moveItem","toIndex","originalIndexAnimate","toAnimate","prevIndex","itemArray","prevClientRect","nextClientRect","_animating","targetRect","currentRect","applyAnimationStyle","reflow","animated","parentOffset","dragStartSubscription","originIndex","dragStartEvent","dragOverSubscription","dragOverEvent","placeHolderItemData","dragEndSubscription","dragEndEvent","dragLeaveSubscription","originalData","endSub","leaveSub","overSub","DataAddEvent","DataRemoveEvent","DataMoveEvent","SortableBindingDirective","nextEnabledIndex","addItem","addEvent","noDataContainer","removeEvent","moveEvent","removeOriginDraggable","removeHiddenSubscription","newSource","onDragOver","targetDraggables","lastTarget","navigateSubscription","index_r3","node_r2","DataChangeNotificationService","hasChildren","isExpanded","trackBy","ExpandStateService","IndexBuilderService","INDEX_SEPARATOR","nodeIndex","parentIndex","indexForLevel","lastLevelIndex","NaN","LoadingNotificationService","notifyLoaded","closestWithMatch","isBlank","closestNode","isContent","isLoadMoreButton","focusableNode","nodeId","dataItemsEqual","getDataItem","lookup","isArrayWithAtLeastOneItem","filterTree","term","operator","isMatch","matchByFieldAndCase","containsMatches","setParentChain","makeAllVisible","operators","doesnotcontain","startswith","doesnotstartwith","endswith","doesnotendwith","matchByCase","buildTreeIndex","sameValues","as","bs","safe","safeChildren","lastVisibleNode","NavigationModel","ib","firstVisibleNode","lastVisibleChild","findNode","visibleSibling","firstFocusableNode","findParent","parentLevel","findVisibleChild","findVisiblePrev","levelIndex","prevNodesHidden","currentNode","findVisibleNext","hasVisibleChildren","registerItem","loadMoreButton","insert","unregisterItem","childLevel","indexToMatch","isLeaf","nextItemIndex","expands","moves","checks","selects","deselectAllButCurrentItem","loadMore","activate","focusableItem","intercept","moveToFirstVisibleChild","moveToParent","handleSpace","shouldScroll","_model","activeItem","isActiveExpanded","notifyMove","activateParent","activateIndex","activateClosest","activateFocusable","deactivate","checkIndex","selectIndex","notifyLoadMore","itemAtIndex","updateItem","moveAction","notifyExpand","navigationState","NodeChildrenService","childrenLoaded","NodeTemplateDirective","LoadMoreButtonTemplateDirective","DataBoundComponent","ExpandableComponent","isFirstSelected","setFirstSelected","INDEX_REGEX","TreeViewLookupService","currentLookup","registerChildren","replaceItem","addToParent","itemLookup","mapChildren","hasItem","parentItem","CheckBoxComponent","checkStateChange","checkState","classWrapper","indeterminate","checkBoxClasses","buildItem","TreeViewItemDirective","expandService","lookupService","loadOnDemand","ariaChecked","_isExpanded","_isSelected","isButton","treeItem","parentTreeItem","parentDataItem","registerNavigationItem","setAriaAttributes","updateTabIndex","moveLookupItem","moveNavigationItem","updateNodeAvailability","navState","activateItem","shouldExpand","scrollIntoView","preventScroll","firstChange","indexChange","expandable","checkable","attr","LoadingIndicatorDirective","loadingService","cd","_loading","loadingNotifications","TreeViewItemContentDirective","initialSelection","updateFocusClass","updateSelectionClass","TOP_ITEM","MID_ITEM","BOT_ITEM","TreeViewGroupComponent","indexBuilder","treeViewLookupService","nodeChildrenService","dataChangeNotification","kGroupClass","initialNodesLoaded","loadingMoreNodes","isItemExpandable","expandDisabledNodes","singleRecordSubscriptions","moreNodesAvailable","loadMoreService","totalNodesCount","getGroupSize","setGroupSize","registerLoadedNodes","loadMoreButtonIndex","getTotalNodesCount","hasTemplate","nodeTemplateRef","expandNode","checkNode","nodeText","nodesSubscription","loadMoreNodesSubscription","subscribeToNodesChange","loadMoreNodes","setNodeChildren","mapToTreeItem","fetchChildren","nextFields","fetchMoreNodes","loadMoreLocalNodes","disableParentNodesOnly","setItemClasses","initialLoadMoreButtonIndex","getInitialPageSize","reselectItemAt","finalize","emitChildrenLoaded","contentChildren","mappedChildren","TreeViewComponent","filterInputPlaceholder","fetchNodes","nodeDragStart","nodeDrag","filterStateChange","nodeDrop","nodeDragEnd","checkedChange","nodeClick","nodeDblClick","expandIcons","touchActions","_animate","_nodeTemplateRef","nodeTemplateQuery","loadMoreButtonTemplateRef","_loadMoreButtonTemplateRef","loadMoreButtonTemplateQuery","_hasChildren","_isChecked","preloadChildNodes","attachDomHandlers","focusIndex","rebindChildren","collapseNode","getNodePageSize","verifyLoadMoreService","setNodePageSize","registerLookupItems","currentLevelIndex","buildTreeItem","DEFAULT_FILTER_EXPAND_SETTINGS","maxAutoExpandResults","expandMatches","expandedOnClear","ExpandDirective","expandOnFilter","expandedKeysChange","originalExpandedKeys","isFiltered","updateExpandedNodes","collection","autoExpandMatches","itemKey","getEveryExpandKey","toggleExpand","handleAutoExpand","filterExpandSettings","expandedKeys","lastChange","expandKey","matchCount","rootNode","indicesToExpand","SelectDirective","treeView","selectedKeysChange","selectActions","multiple","selectMultiple","single","selectSingle","getAriaMultiselectable","defaultOptions","selectionSettings","selectedKeys","selectKey","DropAction","Add","InsertTop","InsertBottom","InsertMiddle","Invalid","DropPosition","Over","Before","After","TreeItemDropEvent","setValid","TreeItemDragStartEvent","getDropPosition","draggedItem","targetTreeView","containerOffset","getContentElement","targetChildOfDraggedItem","itemViewPortCoords","itemDivisionHeight","pointerPosition","itemTop","treeItemFromEventTarget","collapseEmptyParent","parentNodes","treeview","expandDropTarget","getDropTarget","updateMovedItemIndex","newIndex","originalIndex","movedItemNewIndexParts","originalItemIndexParts","originalItemParentPathLength","originalItemParentPath","movedItemParentPath","originalItemIndexLevel","originalItemLevelIndex","movedItemLevelIndex","SCROLLBAR_REG_EXP","isTopReached","isBottomReached","scrollElementBy","initialScrollTop","currentStep","iterations","copyPageSize","sourceGroupSize","incrementPageSize","currentPageSize","decrementPageSize","HierarchyEditingService","hierarchyBinding","sourceItem","destinationItem","dropPosition","sourceTree","destinationTree","clonedSourceDataItem","destinationChildren","childrenFor","childrenField","movedItemNewIndex","destinationParentNodes","getParentNodes","shiftIndex","updatedParent","sourceParentNodes","sourceItemIndex","DEFAULT_FILTER_SETTINGS","FilteringBase","visibleNodes","_filterSettings","filterSettings","handleFilterChange","filterData","resetNodesVisibility","updateVisibleNodes","DragClueComponent","posistionStyle","statusIconClass","DragAndDropAssetService","_componentRef","DragClueService","clueComponentFactory","cancelReturnAnimation","cancelScroll","animateDragClueToElementPosition","targetElementViewPortCoords","clueElementViewPortCoords","returnAnimation","updateDragClueData","dragClue","updateText","scrollableContainer","hasOverflow","getScrollableContainer","clueRect","firstVisibleClientTopPart","topLimit","bottomLimit","scrollInterval","DropHintComponent","pointerEvents","DropHintService","hintComponentFactory","updateDropHintData","dropHint","DragClueTemplateDirective","DropHintTemplateDirective","DEFAULT_SCROLL_SETTINGS","DragAndDropDirective","dragClueService","dropHintService","allowCopy","dropZoneTreeViews","startDragAfter","autoScroll","userSelectStyle","scrollSettings","initalizeDraggable","assetsContainer","dragClueTemplate","dropHintTemplate","handlePress","pendingDragStartEvent","shouldInitiateDragStart","initiateDragStart","notifyDrag","getTargetTreeView","dropHintAnchor","dropAction","previousElementSibling","nextElementSibling","getDropAction","updateDropHintState","updateDragClueState","handleRelease","notifyDrop","notifyDragEnd","anchorViewPortCoords","notifyDragStart","disableAnimationsForNextTick","currentPointerCoords","getContainerOffset","indexBuilder$1","mapToWrappers","currentLevelNodes","HierarchyBindingDirective","dragAndDropDirective","shouldFilter","_childrenField","editService","updateNodes","FlatEditingService","flatBinding","destinationItemId","idField","parentIdField","getLastVisibleChildNodeIndex","rebindData","fetchChildNodes","destinationItemParentId","addChildNodes","sourceDataItem","removeChildNodes","itemChildren","fetchAllDescendantNodes","visibleNodesCount","visibleChildren","findChildren","mapToTree","allNodes","FlatDataBindingDirective","isNullOrEmptyString","reduceRight","compose","DragAndDropEditingDirective","handleAdd","handleRemove","ARC","BLACK","BOTTOM","CENTER","CIRCLE","DATE","DEFAULT_FONT","FORMAT_REGEX","HEIGHT","INSIDE","INHERIT","MAX_VALUE","MIN_VALUE","NONE","OBJECT","OUTSIDE","ROUNDED_RECT","STRING","TOP","VALUE","WHITE","WIDTH","X","Y","classArray","SPACE_REGEX","alignPathToPixel","stroke","drawing","segments","clockwise","angle1","angle2","convertableToNumber","deepExtendOne","propInit","propValue","propType","destProp","deepExtend","styleValue","SIZE_STYLES_REGEX","isSizeField","elementStyles","stylesArray","getSpacing","defaultSpacing","spacing","compile","TemplateService","userImplementation","FIELD_REGEX","getterCache","indexAccessor","grep","array","HashMap","inArray","interpolateValue","progress","TRIGGER","instance_observer","callObserver","fnName","support","mousewheelDelta","webkit","devicePixelRatio","logToConsole","drawing_utils_append","drawing_utils_defined","deg","drawing_utils_deg","elementSize","eventCoordinates","eventElement","hashKey","drawing_utils_last","objectKey","rad","drawing_utils_rad","drawing_utils_round","unbindEvents","valueOrDefault","FontLoader","fonts","MAX_DEPTH","fetchFonts","promises","load","loadFonts","setDefaultOptions","KI_PREFFIX","KSVG_PREFFIX","HTMLBaseIcon","addClasses","outerHTML","stylingOptions","HTMLFontIcon","currentIconClass","_className","HTMLSvgIcon","iconNameMatch","svgIcons","svgElement","createElementNS","viewBox","ICON_TYPES","svg","renderIcon","iconElement","iconOptions","HTMLElement","sparseArrayLimits","Matrix","geometry","matrixRegexp","transformMatrix","parseMatrix","matrixString","members","autoTextColor","Color","isDark","DELETED","LegacySet","_index","_values","SetWrapper","createHashSet","supportsSet","defaultErrorHandler","autoMajorUnit","DEFAULT_PRECISION","relativeValue","scaleMultiplier","Point","Class","equals","rotate","degrees","theta","cosT","cos","sinT","sin","cx","cy","multiply","distanceTo","dx","dy","angle","radians","Box","x1","y1","x2","y2","targetBox","wrapPoint","arrayPoint","snapTo","alignTo","targetCenter","dw","dh","padding","unpad","containsPoint","getHash","overlaps","rotation","r1","rotatePoint","r2","r3","r4","toRect","geom","hasSize","alignment","c1","c2","sizeFunc","Ring","startAngle","setRadius","newRadius","radianAngle","ax","ay","adjacentBox","midAndle","midPoint","hw","hh","sa","endAngle","vector","startPoint","startVector","endPoint","endVector","dist","getBBox","allAngles","numericComparer","startAngleIndex","endAngleIndex","angles","ShapeBuilder","createRing","arc","radiusX","radiusY","draw","innerEnd","pointAt","lineTo","swing","PI","linear","easeOutElastic","asin","Animation","setup","easingFunctions","loop","_stopped","wallTime","easingPosition","animationFrame","ChartElement","initUserOptions","currentChild","getService","chartService","translateChildren","childrenCount","renderVisual","createVisual","addVisual","renderChildren","createAnimation","renderComplete","appendVisual","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","visuals","traverse","matched","hasHighlight","highlight","createHighlight","customVisual","_highlight","highlightOptions","highlightVisualArgs","createGradientOverlay","gradientOptions","createGradient","supportsPointInactiveOpacity","BoxElement","shrinkToFit","hasSetSize","borderWidth","reflowPaddingBox","vAlign","paddingBox","contentBox","hasBox","visualStyle","dashType","cursor","ShapeElement","pointData","getElement","halfWidth","halfHeight","moveTo","borderRadius","setCornerRadius","visualOptions","RADIAL","core_gradients","glass","stops","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","boxDiff","boxes","RootElement","rootOptions","gradients","currentBox","createBackground","hashCode","GRADIENTS","drawingGradient","innerRadialStops","usedSpace","currentStops","currentStop","cleanGradients","_observers","FloatElement","_initDirection","groupAxis","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groups","groupsSize","maxGroupElementsSize","groupOptions","groupsCount","groupsStart","alignStart","groupStart","groupIdx","groupElements","elementStart","groupElementsCount","groupElementStart","groupSize","elementBox","maxSize","groupElementsSize","DrawingText","baseline","topLeft","rectToBox","bottomRight","ROWS_SPLIT_REGEX","text_box","TextBox","_initContainer","_autoReflow","floatElement","textOptions","rowIdx","visualFn","_boxReflow","visualBox","visualContext","clippedBBox","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","_textBox","titleOptions","titles","collapseVerticalMargins","prevBox","AxisLabel","culture","widget","alignRotation","matrix","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","transformCopy","topRight","bottomLeft","G","distanceLeft","distanceRight","alignEnd","alignCenter","Note","childAlias","noteTemplate","auto","aliasFor","marker","wrapperBox","lineStart","linePoints","createLine","defaultVisual","over","implementation","FORMAT_REPLACE_REGEX","chart_service","ChartService","chart","FormatService","formatString","localeAuto","placeholderFormat","isPannable","pannable","lock","createAxisTick","tickOptions","tickX","tickY","createAxisGridLine","gridLine","lineEnd","Axis","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","labelsCount","normalizeLabelRotation","labelOptions","clearLabels","autoRotateLabels","createAxisLabel","lineBox","mirror","axisX","axisY","lineWidth","visualSize","parseNoteValue","note","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","majorUnit","tickLineOptions","tickPositions","skipUnit","getMajorTickPositions","getMinorTickPositions","minorUnit","_alignLines","_lineGroup","getActualTickSize","tickSize","_backgroundPath","plotBands","_plotbandGroup","altAxis","pane","slotX","slotY","getSlot","createPlotBandLabel","bandRect","textbox","labelTemplate","createGridLines","axisLineVisible","linePos","lineOptions","sizeFn","titleSize","boxSize","maxLabelSize","labelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","labelsBetweenTicks","tickIx","firstTickPosition","nextTickPosition","positionStart","positionEnd","positionLabel","labelOffset","labelBox","labelX","labelY","autoRotateLabelAngle","slotWidth","labelAngle","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","defaultText","maxLabelOffset","lastLabel","offsetField","endPosition","maxStartOffset","maxEndOffset","startTick","endTick","rangeSize","valueRange","seriesMin","seriesMax","lineDir","lineInfo","lineSize","axisDir","axisOrigin","pointOffset","scaleToDelta","rawScale","MAX_SCALE","justified","prepareUserOptions","axisCrossingValue","MILLISECONDS","SECONDS","MINUTES","HOURS","DAYS","WEEKS","MONTHS","YEARS","TIME_PER_MINUTE","TIME_PER_HOUR","TIME_PER_DAY","TIME_PER_WEEK","TIME_PER_MONTH","TIME_PER_YEAR","TIME_PER_UNIT","absoluteDateDiff","getTimezoneOffset","addTicks","ticks","toDate","addDuration","dateValue","startOfWeek","daysToSubtract","addHours","roundedDate","tzDiff","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","dateIndex","baseUnitStep","startDate","parseDates","CategoryAxis","_ticks","categoriesHash","copy","categories","srcCategories","definedMin","definedMax","rangeIndices","totalRange","roundedRange","_seriesMax","scaleOptions","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","tickIndices","stepSize","getTickPositions","positions","_hash","hasMinor","filterOutOfRangePositions","endIndex","slotBox","singleSlot","p1","p2","limitSlot","limittedSlot","pointCategoryIndex","getCategory","totalIndex","categoryAt","categoriesCount","translateRange","scaleRange","limitedRangeIndices","zoomRange","totalMin","totalMax","labelContext","hideOutOfRangeNotes","pan","pointsRange","rangeMin","rangeMax","_categoriesMap","currentRangeIndices","totalCount","totalLimit","totalRangeIndices","mapCategories","DateLabelFormats","BASE_UNITS","FIT","categoryRange","clearCache","_range","EmptyDateRange","displayIndices","displayRange","valueIndex","valuesCount","dateAt","DateRange","roundToBaseUnit","lowerEnd","roundToTotalStep","expandEnd","justifyEnd","valueStart","displayStart","valueEnd","displayEnd","_indices","minIdx","maxIdx","upper","roundedStep","autoBaseUnit","startUnit","startStep","categoryLimits","autoBaseUnitSteps","maxDateGroups","autoUnit","unitSteps","nextStep","autoUnitIx","units","totalUnits","dataRange","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","maxDivisions","safeOptions","initUnit","defaultBaseUnit","lastCategory","minDiff","forecast","_forecast","before","after","divisionOptions","dataRangeOptions","divisionRange","rangeLabels","totalLimits","panRange","datesRange","indicesRange","fit","minDelta","maxDelta","maxDiff","rangeDiff","autoBaseUnitStep","baseUnitIndex","stepIndex","createRangeLabels","arrangeRangeLabels","autoRotateRangeLabels","hideOverlappingLabels","clip","rangeLabel","firstRangeLabel","lastRangeLabel","createLabel","rotateLabel","limitCoordinate","MIN_VALUE_RANGE","NumericAxis","autoOptions","autoAxisOptions","narrowRange","autoMin","autoAxisMin","narrow","axisMin","autoMax","autoAxisMax","axisMax","roundToMajorUnit","remainderClose","totalOptions","totalAxisOptions","axisOptions","userOptions","userSetMin","userSetMax","clearNullValues","userSetLimits","totalMajorUnit","startValue","getDivisions","stepValue","divisions","skipStep","endValue","divisor","ratio","remainder","axisCrossingValues","applyDefaults","timeUnits","baseUnitTime","actualUnits","unitsToAdd","head","tail","limittedRange","LogarithmicAxis","base","logMaxRemainder","initRange","throwNegativeValuesError","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","power","minorOptions","_minorIntervalOptions","minorStep","grid_lines_mixin","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","circle","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","intervalAngle","RadarCategoryAxis","reflowLabels","measureBox","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","minorAngle","minorRadius","band","plotBandSlot","ring","totalDivs","slotAngle","fromValue","slotStart","GridLinesMixin","PolarAxis","instanceOptions","atan2","angularDistance","polarAxis","bandStyle","shape","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","axisType","RadarNumericAxis","minorSkipStep","RadarNumericAxisMixin","RadarLogarithmicAxis","numberSign","CurveProcessor","dataPoints","removeDuplicates","initialControlPoint","lastControlPoint","p0","tangent","controlOut","firstControlPoint","secondControlPoint","controlPoints","cp0","invertAxis","lineFunction","calculateFunction","isLine","xField","yField","restrict","switchOrientation","monotonic","isMonotonicByField","oldXField","restrictControlPoint","cp","p3","t1","t2","xValue","yValue","controlPoint","chart_axis","ChartAxis","_axis","ChartPane","chartsVisual","chartContainer","_pane","chart_plotarea","ChartPlotArea","backgroundVisual","_bgVisual","countNumbers","Aggregates","sum","sumOrNull","avg","aggregates","getField","row","SeriesBinder","_valueFields","_otherFields","_nullValue","_undefinedValue","valueFields","otherFields","_makeValue","canonicalFields","bindPoint","pointIx","fieldData","_bindFromArray","srcValueFields","sourceFields","srcPointFields","_bindFromObject","srcFields","srcFieldName","sourceFieldName","percentRegex","standardDeviationRegex","error_range_calculator","ErrorRangeCalculator","errorValue","initGlobalRanges","deviationMatch","valueGetter","createValueGetter","getAverage","deviation","getStandardDeviation","errorRange","globalRange","standardError","getStandardError","binder","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","INITIAL_ANIMATION_DURATION","FADEIN","START_SCALE","msie","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","ZERO","INTERPOLATE","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","PYRAMID","HEATMAP","HORIZONTAL_WATERFALL","LINE","OHLC","PIE","POLAR_AREA","POLAR_LINE","POLAR_SCATTER","RADAR_AREA","RADAR_COLUMN","RADAR_LINE","RANGE_AREA","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","VERTICAL_RANGE_AREA","WATERFALL","EQUALLY_SPACED_SERIES","TRENDLINE_SERIES","SERIES_CLICK","SERIES_HOVER","SERIES_OVER","SERIES_LEAVE","PLOT_AREA_HOVER","PLOT_AREA_LEAVE","DRAG","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT","SELECT_END","SHOW_TOOLTIP","HIDE_TOOLTIP","LOGARITHMIC","CATEGORY","INSIDE_END","OUTSIDE_END","MOUSEWHEEL","DRILLDOWN_FIELD","ErrorBarBase","isVertical","endCaps","valueBox","getAxis","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","categorical_error_bar","CategoricalErrorBar","seriesValueAxis","anyHasZIndex","appendIfNotNull","areNumbers","segmentVisible","bindSegments","seriesCount","equalsIgnoreCase","evalOptions","dryRun","needsEval","excluded","filterSeriesByType","types","currentSeries","getDateField","hasGradientOverlay","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","AREA_REGEX","findNext","pointHasValue","outPoint","createOutOfRangePoints","hasMinPoint","hasMaxPoint","missingValues","seriesMissingValues","minPoint","maxPoint","_outOfRangeMinPoint","_outOfRangeMaxPoint","CategoricalChart","categoryAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","pointOptions","seriesIx","pointType","invertAxes","plotValue","isStacked100","otherValues","categorySum","other","otherStack","plotRange","isStacked","positive","isStackedBar","otherValue","categoryAxisCrossingValue","stackLimits","stackName","pIx","updateStackRange","chartSeries","limitsCache","limits","errorTotals","negative","addErrorBar","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","updateRange","errorBar","createPoint","noteText","evalPointOptions","_defaults","doEval","axisRange","namedValueAxes","categorySlots","chartPoints","categorySlot","valueSlot","pointSlot","aboveAxis","reflowPoint","reflowCategories","limitPoints","limitPoint","limitedSlot","_outOfRangeCallback","currentCategory","outOfRangePoint","formatPointValue","point_events_mixin","hover","note_mixin","createNote","LinePoint","tooltipTracking","_rendered","createMarker","labelText","markerBorder","brightness","toHex","markerBox","_childBox","childBox","reflowLabel","noteTargetBox","defaultColor","shadow","highlightVisual","halfSize","tooltipAnchor","clipBox","verticalAlign","overlapsBox","unclipElements","PointEventsMixin","NoteMixin","LineSegment","toGeometryPoints","segmentVisual","coords","getNearestPoint","toGeometryPoint","lintPoint","stepAxis","stepDir","calculateStepPoints","previousPoint","stepPoint","StepLineSegment","StepLineMixin","spline_segment","SplineSegment","curve","line_chart_mixin","renderSegments","lastSegment","_segments","sortedPoints","sortPoints","pointCount","createSegment","_addSegment","segment","allPoints","nearestPoint","nearestPointDistance","pointDistance","ClipAnimation","_setEnd","suspend","setX","clip_animation_mixin","clipPath","_setChildrenAnimation","animationPoints","LineChart","LineChartMixin","ClipAnimationMixin","area_segment","AreaSegment","prevSegment","stackPoints","createFill","createStroke","lineCap","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","lastPoint","StepAreaSegment","spline_area_segment","SplineAreaSegment","curveProcessor","controlIn","area_chart","AreaChart","previousSegment","_gapStackPoints","_stackPoints","stackPoint","startIdx","endIdx","currentSeriesIx","_previousSegmentPoint","gapStackPoint","_createGapStackPoint","segmentIx","seriesIdx","axis_group_range_tracker","AxisGroupRangeTracker","chartAxisRanges","chartRange","BarLabel","textBox","alignToClipBox","parentBox","Bar","rectVisual","createRect","strokeOpacity","getBorderColor","lineJoin","baseColor","_brightness","borderColor","forEachReverse","ClusterLayout","gap","slots","slotSize","StackWrap","positionAxis","BarChart","clusterType","stackType","negativeColor","cluster","getStackWrap","stackGroup","wraps","stackWrap","_stackGroup","zeroSlot","stackAxis","childrenLength","_setAnimationOptions","pointVisual","Candlestick","ocSlot","lhSlot","realBody","mid","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","CandlestickChart","splitValue","BoxPlot","whiskerSlot","boxSlot","q1","q3","reflowBoxSlot","lower","reflowWhiskerSlot","medianSlot","meanSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","renderOutliers","outliers","outerFence","outlierValue","extremes","markersBorder","reflowOutliers","vertical_box_plot","VerticalBoxPlot","box_plot_chart","BoxPlotChart","filterOutliers","scatter_error_bar","ScatterErrorBar","seriesAxes","ScatterChart","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxis","xAxisName","yAxis","yAxisName","xAxisRange","yAxisRange","namedXAxes","namedYAxes","Bubble","highlightGroup","BubbleChart","_maxSize","negativeValues","updateBubblesSize","minR","minSize","maxR","minArea","areaRatio","Target","Bullet","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","BulletChart","wrapData","seriesItem","bulletOptions","getStyle","pointColor","paddingTop","paddingBottom","tooltipOptions","CrosshairTooltip","formatService","initAxisName","showAt","stickyMode","getAnchor","Crosshair","moveLine","getBox","dim","axisLineBox","currentAxis","ChartContainer","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","Pane","paneID","ID","appendAxis","appendAxisAt","appendChart","empty","removeAxis","removeChart","allAxes","vGridLines","hGridLines","notifyRender","axisValueField","paneIndex","PlotAreaBase","initSeries","crosshairs","originalOptions","originalSeries","_bindCache","createPanes","createCrosshairs","cached","paneDefaults","paneOptions","panes","panesLength","currentPane","crosshairOptions","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","inactiveItemsLabels","seriesVisible","visibleInLegend","itemLabelOptions","markerColor","groupAxes","xAxes","yAxes","paneIx","paneAxes","axisIx","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","reflowPanes","detachLabels","reflowAxes","reflowCharts","redraw","panesArray","crossingAxes","crossingValues","valuesToAdd","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","axisBox","alignAxes","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","paneId","paneAnchor","anchorCrossings","_overlap","_mirrored","shrinkAxisWidth","axisGroupBox","shrinkAxisHeight","shrinked","fitAxes","offsetX","paneBox","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","allPaneAxes","rotated","chartPane","remainingHeight","autoHeightPanes","percents","backgroundBox","axesCount","axisA","axisB","chartsBoxes","addBackgroundPaths","multipath","paths","backgroundContainsPoint","isTransparent","bg","pointsByCategoryIndex","pointsBySeriesIndex","filterPoints","pointsBySeriesName","findPoint","paneByPoint","detachAxisGroupLabels","labelAxisCount","labelAxis","createLabelAxis","edge","isTrendline","trendlineFactory","createTrendlineSeries","modifiedSeries","forSeries","seriesByName","for","trendlineSeries","isSingleAxis","plotarea_events_mixin","parentObj","SeriesAggregator","defaultAggregates","seriesFields","_seriesFields","rootAggregate","aggregate","_series","_binder","fieldAggregate","canonicalName","aggregatePoints","srcPoints","_bindPoints","firstDataItem","srcValues","_bindField","DefaultAggregates","seriesType","RangeBar","fromOptions","toOptions","labelFrom","_createLabel","labelTo","RangeBarChart","plotLimits","range_line_point","RangeLinePoint","RangeAreaPoint","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","range_area_segment","RangeAreaSegment","toPoints","fromSegments","fromPoints","toPath","fromPath","spline_range_area_segment","SplineRangeAreaSegment","createCurveSegments","StepRangeAreaSegment","RangeAreaChart","segmentType","fromSlot","toSlot","ohlc_point","OHLCPoint","oPoints","cPoints","lhPoints","oSlot","cSlot","ohlc_chart","OHLCChart","WaterfallSegment","waterfall_chart","WaterfallChart","createSegments","totalCategories","summary","prevPoint","trendline_factory","registry","impl","calculate_slope","calculateSlope","sourceValues","slope","xy","xMin","xMax","calculate_moving_average","calculateMovingAverage","period","averagePoints","lastValue","trendline_registry","linearTrendline","seriesValues","getData","currentRange","categoryField","movingAverageTrendline","calculatePoints","trendline","AREA_SERIES","OUT_OF_RANGE_SERIES","CategoricalPlotArea","namedCategoryAxes","valueAxisRangeTracker","_seriesPointsCache","_currentPointsCache","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","trendlineRegistry","filterSeries","trendlineAggregateForecast","srcSeries","aggregateSeries","paneSeries","visibleSeries","groupSeriesByCategoryAxis","groupIx","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","processedSeries","axisPane","outOfRangePoints","clearSeriesPointsCache","seriesSourcePoints","dateAxis","srcData","getFn","aggregator","categoryItem","categoryIdx","categoriesToAdd","stackableChartOptions","categoryAxes","unique","axisSeries","groupSeries","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","centeredSeries","seriesAxis","aggregatedAxis","isJustified","primaryAxis","tracker","defaultRange","baseOptions","defaultAxisRange","eventType","_eventCoordinates","pointPane","updateAxisOptions","targetOptions","PlotAreaEventsMixin","ATTRIBUTE_MAP","path_node","PathNode","Node","geometryChange","renderData","invalidate","allAttr","mapFill","removeAttr","mapStroke","transformChange","accessibilityOptionsChange","POINT_DIGITS","renderLinecap","renderDashType","renderStroke","renderAllAttr","SOLID","dashArray","DASH_ARRAYS","BUTT","renderFill","renderId","renderStyle","renderOpacity","renderAttr","renderDefinitions","renderTransform","renderClassName","renderRole","renderAriaLabel","renderAriaRoleDescription","arc_node","ArcNode","circle_node","CircleNode","group_node","GroupNode","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","htmlEncode","ImageNode","mapPosition","mapSource","renderPosition","encode","renderSource","multi_path_node","MultiPathNode","rect_node","RectNode","cornerRadius","rx","ry","ENTITY_REGEX","decodeEntities","TextNode","mapStyle","setY","renderContent","normalizeText","renderTextAnchor","NODE_MAP","Surface","BaseSurface","_root","RootNode","renderSVG","_rootElement","firstElementChild","alignToScreen","ctm","getScreenCTM","attachTo","_click","mouseover","_mouseenter","mouseout","_mouseleave","mousemove","_mousemove","_offset","_visual","Group","_resize","svgStyles","SVG_NS","SurfaceFactory","canvas","getContext","hasFeature","SVGSurface","CanvasSurface","preferred","es2015_surface","_defaultPrevented","Highlight","_points","arrayPoints","togglePointHighlight","toggleHandler","isHighlighted","acceptKey","mouseKey","toChartAxisRanges","ranges","Pannable","_panAxes","updatedAxes","ZoomSelection","marquee","_marquee","marqueeColor","zoomPane","_zoomPane","_elementOffset","_zoomPaneClipBox","_selectionPosition","selectionPosition","_updateAxisRanges","mousewheel_zoom","MousewheelZoom","rate","updateRanges","translateToPoint","transofrm","createTransform","sizeField","alignStartReverse","alignContent","justifyContent","lineSpacing","revers","Layout","_rect","_fieldMap","_initMap","fieldMap","groupsSizeField","groupsAxis","justifyAlign","_initGroups","groupOrigin","elementOrigin","Size","groupBox","arrangeElements","Rect","bboxes","scaledStart","newStart","_newGroup","addGroup","_addToGroup","legend_layout","LegendLayout","legendItem","legend_item","LegendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","_unsetActivePoint","HORIZONTAL","CUSTOM","Legend","createContainers","createLegendTitle","createItems","userAlign","itemsContainer","hasTitle","innerElement","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","PlotAreaFactory","_registry","trendlines","createDiv","closestHandle","Selection","_dateAxis","initOptions","createElements","onPane","leftMask","rightMask","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","borderLeftWidth","borderRightWidth","mousewheel","_mousewheelHandler","_mousewheel","$u","_domEvents","_start","_move","_end","_tap","_press","_gesturestart","_gesturechange","_gestureend","_mwTimeout","_rangeEventArgs","_pointInPane","modelCoords","_toModelCoordinates","bodyRect","inBody","moveTarget","oldRange","rightClick","_slot","leftMaskWidth","rightMaskWidth","toValue","zDir","relative","tooltip_tooltip","Tooltip","_current","SharedTooltip","tooltipPoints","_slotAnchor","_defaultAnchor","categoryFormat","slotCenter","centerPoint","BarChartAnimation","fromScale","scaleX","scaleY","BubbleAnimation","FadeInAnimation","fadeTo","PieAnimation","ScatterLineChart","missingValue","scatter_value_getter","scatter_trendline_registry","scatterRegistry","scatterLinearTrendLine","scatterValueGetter","samplingInterval","scatterMovingAverageTrendline","XYPlotArea","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","createXYAxis","namedAxes","isLog","typeSamples","seriesAxisName","firstPointValue","inferredDate","xAxesOptions","yAxesOptions","xValues","yValues","scatterTrendlineRegistry","PieSegment","themeLabels","labelsOptions","labelsDistance","labelHeight","labelWidth","createSegmentVisual","borderOptions","fallbackFill","userSpace","singleSegment","tooltipAlignment","RAD_30","RAD_60","sine","cosine","pie_chart_mixin","createLegendItem","legendOptions","pointVisible","legendItems","PieChart","colorsCount","anglePerValue","constantAngle","currentAngle","explode","evalSegmentOptions","segmentOptions","seriesConfigs","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","lr","firstBox","_takeDistance","amount","labelDistance","boxX","boxY","hAlignLabel","connectors","_connectorLines","connectorsColor","connectorLine","sr","crossing","intersection","pointInCircle","autoFit","pieCenter","bboxBottom","reverseValue","a1","a2","b1","b2","ub","PieChartMixin","pie_plotarea","PiePlotArea","createPieChart","pieChart","DonutSegment","DonutChart","holeSize","seriesWithoutSize","polar_plotarea_base","PolarPlotAreaBase","createPolarAxis","createValueAxis","valueAxisOptions","axisDefaultRange","valueAxisBox","heightDiff","PolarScatterChart","PolarLineChart","spline_polar_area_segment","SplinePolarAreaSegment","_polarAxisCenter","polar_area_segment","PolarAreaSegment","centerSegment","xComparer","PolarAreaChart","_hasMissingValuesGap","PolarPlotArea","scatterChart","RadarLineChart","valueRadius","seriesSegments","groupBySeriesIx","isLastDataPoint","spline_radar_area_segment","SplineRadarAreaSegment","radar_area_segment","RadarAreaSegment","radar_area_chart","RadarAreaChart","RadarSegment","RadarClusterLayout","slotSector","radar_stack_layout","RadarStackLayout","childSector","RadarBarChart","RadarPlotArea","_hasBarCharts","_isStacked100","chartOptions","FunnelSegment","chartBox","createPath","FunnelChart","labelPadding","dynamicSlopeReflow","firstSegment","maxSegment","lastUpperSide","previousHeight","nextSegment","nextPercentage","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","finalNarrow","dynamicSlope","pyramid_chart","PyramidChart","HeatmapPoint","labelColor","isRoundRect","halfBorderWidth","HeatmapChart","setRange","minLightnessOffset","parseColor","hsl","toHSL","toCss","colorScale","indexX","indexY","xRange","yRange","xIndex","yIndex","yIn","HeatmapPlotArea","bindCategories","createAxisLabels","xCategories","yCategories","createHeatmapChart","xAxisOptions","yAxisOptions","COLOR","FIRST","MAX","NOTE_TEXT","DonutPlotArea","createDonutChart","donutChart","FunnelPlotArea","createChart","chartType","errorLow","errorHigh","AXIS_NAMES","MOUSEMOVE","CONTEXTMENU","MOUSELEAVE","themeOptions","addObserver","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","fontLoaded","_redraw","_attachEvents","_setElementClass","seriesCopies","resolveAxisAliases","aliases","applySeriesColors","getSize","force","currentSize","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","paneName","seriesName","categoryName","pointByCategoryName","togglePointsHighlight","_sharedTooltip","_tooltip","_surfaceWrap","renderAs","_destroySurface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","_getModel","_destroyView","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","triggerPaneRender","_navState","_cancelDomEvents","exportOptions","clearMissingValues","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_toggleDragZoomEvents","allowZoom","_dragZoomEnabled","_touchAction","_toggleDomEvents","_createSharedTooltip","applyAxisDefaults","themeAxisDefaults","mapAxisOptions","axisColor","applySeriesDefaults","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","colors","seriesColor","_createPlotArea","_modelOptions","subtitle","skipSeries","selections","_selectStart","_select","_selectEnd","_clickHandler","_mouseleaveHandler","_mouseover","_mouseout","throttle","removeObserver","eventNames","_toDocumentCoordinates","_updateDrilldownPoint","_resetDrilldownPoint","_startDrilldown","qh","Cf","_shouldAttachMouseMove","Fd","_hoveredPoint","_plotAreaHovered","_hasInactiveOpacity","_activeChartInstance","_applySeriesOpacity","_updateSeriesOpacity","_stopChartHandlers","_gestureDistance","suspendTracking","_zooming","resumeTracking","mousewheelZoom","scaleDelta","_drawingChartElement","_startNavigation","_suppressHover","_endNavigation","_mousewheelZoomRate","totalDelta","chartEvent","_getChartElement","eventTarget","coordinates","_elementPadding","_padding","inverseTransform","elementScale","parentMatrix","multiplyCopy","invert","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","_showInactiveOpacity","_displayTooltip","_displayInactiveOpacity","activePoint","multipleSeries","highlightPoints","chartInstance","_chartInstanceFromPoint","inactivePoints","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","_updateHoveredPoint","hoveredPoint","drilldown","_drilldownState","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","activeSeries","_activePoint","hasInactiveOpacity","_hideInactiveOpacity","hasDefaultInactiveOpacity","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","overPlotArea","_tooltipCategoryIx","_sharedHighlight","pointArgs","hoverArgs","keepTooltipOpen","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","autoBind","bindCategoryAxisFromSeries","uniqueCategories","bindable","onAxis","dataIx","dataRow","uniqueDates","srcDates","transpose","rowCount","rowIx","colCount","colIx","_isBindable","transitionsState","updateMouseMoveHandler","setIntlService","bar","column","rangeColumn","verticalLine","pie","donut","verticalArea","scatter","scatterLine","ohlc","polarArea","polarLine","radarArea","radarLine","DATA_FIELDS","fieldValue","originalValue","sparkline_shared_tooltip","ChartSharedTooltip","NO_CROSSHAIR","wrapNumber","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointsCount","pointWidth","fade_out_animation","FadeOutAnimation","_initialOpacity","NavigatorHint","chartPadding","minPos","clearHideTimeout","_visible","tooltipStyle","marginTop","borderTopWidth","_hideTimeout","_hideAnimation","hideDelay","NAVIGATOR_PANE","NAVIGATOR_AXIS","DEFAULT_PANE","Navigator","hint","chartObserver","bl","Au","rh","iu","clean","_redrawSelf","initSelection","mainAxis","axisClone","ClonedObject","filterAxes","redrawSlaves","slavePanes","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","_dragEnd","readSelection","_zoom","fromIx","toIx","_zoomEnd","__navi","naviOptions","attachAxes","attachSeries","valueAxes","justifyAxis","_collapse","autoBindElements","navigatorSeries","dateField","StockChart","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","_seriesCount","copyNavigatorCategories","Arc","paintable","measurable","withGeometry","GeometryArc","_bbox","_geometry","rawBBox","Path","curvePoints","curveTo","_containsPoint","_isOnPath","GeometryRect","alignElements","stackElements","otherAxis","previousBBox","createStackElements","vStack","wrapElements","stacks","getStacks","stackSize","addElementToStack","startElement","elementIdx","vWrap","rectSize","PathParser","multiPath","MultiPath","parsePath","ARROW_POINTER","BAR_POINTER","DEGREE","LINEAR","RADIAL_POINTER","RADIAL_RANGE_POINTER","getOrigin","setOrigin","setSize","buildLabelElement","fromRect","geo","styleGeometry","styleBox","getRange","gauge_Path","Gauge","contextService","pointerValue","_setValueOptions","_draw","_visuals","allValues","arrayValues","_toggleTransitions","_surfaceSize","gaugeArea","_createGaugeArea","_createModel","_gaugeAreaMargin","currentTheme","areaGeometry","_surfaceElement","_getSize","defaultSize","_defaultSize","linear_scale_Path","renderAxisTick","tickRenderOptions","renderTicks","tickGroup","LinearScale","renderLabels","scaleLine","renderLine","scaleTicks","renderRanges","linePath","Pointer","_oldValue","repaint","LinearPointer","trackSize","pointerHalfSize","pointerBox","pointerRangeBox","trackBox","getElementOptions","_margin","ArrowLinearPointerAnimation","toScale","translateX","translateY","arrow_linear_pointer","ArrowLinearPointer","pointerShape","elementOptions","BarLinearPointerAnimation","newPoints","oldPoints","speed","bar_linear_pointer_Group","bar_linear_pointer","BarLinearPointer","minSlot","sizeAxis","p4","pointerPath","oldShape","renderTrack","trackOptions","LinearGauge","bboxX","bboxY","_shrinkScaleWidth","_getBox","_alignElements","_shrinkElements","_buildVisual","scaleElements","plotAreaBox","scaleBox","radial_scale_Arc","radial_scale_Path","drawTicks","tickAngles","getRadiusX","tickStart","tickEnd","rangeSegment","RadialScale","renderArc","labelElements","repositionRanges","hasRanges","ticksSize","labelsGroup","rangeDistance","isInside","hasLabelElements","setRadiusX","setRadiusY","paddingWidth","paddingHeight","labelPos","labelElement","prevLabelPos","labelTransform","rangeRadius","getRangeRadius","rangeSegments","segmentsCount","createRange","rangeGeom","rangePlaceholderColor","tickArc","majorTickAngles","allTicks","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","minor","newPoint","xDiff","yDiff","RadialPointerAnimation","newAngle","oldAngle","Circle","radial_pointer_Group","RadialPointer","setAngle","_renderNeedle","_renderCap","capSize","cap","needleColor","needlePath","capColor","RadialGauge","_initialPlotArea","fitScale","alignScale","_buildPointers","getDiff","midDiff","oldDiff","staleFlag","getPlotBox","scaleArc","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","pointersArr","ArcScale","rangeLineCap","placeholderRangeAngle","setEndAngle","setStartAngle","addRange","RangePointerAnimation","startColor","currentColor","RangePointer","rangeColor","arc_gauge","ArcGauge","centerLabelPosition","yLimit","circular_gauge","CircularGauge","Encoding","initProperties","quietZoneLength","addQuietZone","convertedValue","initValue","addData","invalidCharacterError","addCheckSum","extend","Code11","characterMap","cCheckSumTotal","kCheckSumTotal","kCheckSumMinLength","checkSumMod","DASH_VALUE","DASH","START","STOP","addPattern","addCharacter","setBaseUnit","cValue","getWeightedSum","checksum","kValue","weightedSum","weightedValue","Code39Base","minBaseUnitLength","addStart","pushCheckSum","addStop","prepareValues","characterData","addBase","Code39","minRatio","maxRatio","gapWidth","splitCharacter","patternMappings","B","W","A","C","D","F","I","J","K","L","N","O","P","R","T","U","V","Z","$","patternString","minBaseUnit","getBaseUnit","getBaseWidth","addCharacterGap","Code39ExtendedBase","addExtended","patterns","extendedMappings","patternIndex","shiftCharacters","dataCharacter","specialAsciiCodes","shiftValuesAsciiCodes","Code93","SHIFT0","SHIFT1","SHIFT2","SHIFT3","TERMINATION_BAR","checkSumLength","charData","checkValues","_getCheckValues","_findCharacterByValue","wightedSum","numberRegex","alphanumericRegex","State128","encoding","isCode","State128AB","_initMoves","FNC4","SHIFT","encodingState","_moves","numberMatch","_moveFNC","_shiftState","_moveState","fnc","previousState","shifted","MOVE","states128","next4","getSubstring","_initSubStates","dependentStates","subState","_getSubState","_initSubState","_pushStart","pushData","subStates","_getAll","FNC1","startState","startAI","endAI","applicationIdentifiers","multiKey","ids","nextStart","separatorLength","regexSeparators","getBySeparator","getByLength","ai","applicationIdentifier","getApplicationIdentifier","unsupportedAIError","Code128Base","_initStates","checkSum","getNextState","MsiBase","checkSumType","checkSums","startStopLength","Modulo10","evenSum","oddSum","Modulo11","weight","checkValue","Modulo11Modulo10","mod11Value","Modulo10Modulo10","mod10Value","Ean13","keyTable","valueAsString","calculateChecksum","leftKey","leftPart","rightPart","addPieces","addSide","arrToAdd","limitedHeight","Encodings","code11","code39","code39extended","Code39Extended","code93","code93extended","Code93Extended","characterByValue","code128","Code128","code128a","Code128a","code128b","Code128b","code128c","Code128c","CodeGS1128","msimod10","MsiMod10","msimod11","MsiMod11","msimod1010","MsiMod1010","msimod1110","MsiMod1110","postnet","Postnet","VALID_CODE_LENGTHS","DIGIT_SEPARATOR","baseHeight","ean8","Ean8","ean13","surfaceSize","surfaceType","Barcode","errorHandler","onError","_setOptions","_initSurfaceElement","_createSurface","_destroySurfaceElement","_render","textMargin","encodedValue","textToDisplay","textHeight","barHeight","_getBackground","_getText","_bandsGroup","_getBands","stepX","patternItem","_textbox","splitInto","chunkLength","toBitsString","bitString","toDecimal","FreeCellVisitor","startColumn","getNextCell","getNextRemainderCell","EncodingResult","dataString","IsoEncoder","getEncodingResult","inputString","errorCorrectionLevel","modes","getModes","previousMode","chooseMode","modeString","nextMode","dataCodewordsCount","getDataCodewordsCount","DataModeInstances","getStringBitsLength","getVersion","getDataString","QRDataMode","modeIndicator","bitsInCharacterCount","getVersionIndex","getBitsCharacterCount","getModeCountString","numeric","NumericQRDataMode","inputLength","mod3","alphanumeric","AlphaNumericQRDataMode","characters","byte","ByteQRDataMode","Utf8Encoder","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","bytesCount","getBytesCount","bc","significantOnes","VersionsCodewordsInformation","totalDataCodewords","errorCodewordsPerBlock","ALPHA_NUMERIC","powersOfTwo","powersOfTwoResult","irregularAlignmentPatternsStartDistance","finderPattern","alignmentPattern","errorCorrectionPatterns","paddingCodewords","maskPatternConditions","alphaPattern","alphaRegex","alphaNumericRegex","byteRegex","generatorPolynomials","fillFunctionCell","matrices","bit","fillDataCell","xorPolynomials","multiplyPolynomials","multiplyByConstant","polynomial","generateErrorCodewords","errorCodewordsCount","generator","generatorPolynomial","errorCodewords","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","encodeBCH","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","dividePolynomials","numberX","numberY","yLength","xLength","getNumberAt","addFormatInformation","addVersionInformation","quotient","mod","modules","addCentricPattern","addFinderSeparator","nextX","nextY","scoreFinderPatternOccurance","scores","rowColumn","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","percent","mod5","generatePowersOfTwo","generateGeneratorPolynomials","crossPattern","squarePattern","QRCode","elementWidth","quietZoneSize","dataSize","contentSize","encodeData","encoder","createQRCodeDataEncoder","encodingResult","versionInformation","padDataString","initialDataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","blocks","getBlocks","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","blockIdx","codewordIdx","initMatrices","addFinderPatterns","addAlignmentPatterns","startDistance","addTimingFunctions","fillData","block","cellVisitor","scoreMaskMatrixes","adjacentSameBits","modulesLength","columnIndex","matrixIndex","optimalMatrix","encodeVersionInformation","encodeFormatInformation","encodedString","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","_hasCustomLogo","_renderLogo","_isSwiss","_renderSwissCode","qrSize","image","imageRect","logoSize","_getLogoSize","logoUrl","crossSize","crossOffset","_renderShape","matrixSize","defautLogoSize","datums","WGS84","toSquare","math","atan","tan","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","dest","datum","greatCircleTo","initialBearing","initialDatum","bearing","fromLat","fromLng","dToR","initialDest","azimuthFrom","azimuthTo","prevLambda","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","converged","sinA","u2","deltao","lngAndLat","fromLatLng","PI_DIV_2","PI_DIV_4","DEG_TO_RAD","Mercator","_initOptions","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","forward","proj","lng0","centralMeridian","_projectLat","ecc","ts","con","inverse","_inverseY","ecch","phi","dphi","SphericalMercator","EPSG3857","_proj","_tm","_itm","toLocation","convertToHtml","removeChildren","prepend","originElement","toHyphens","toPixels","detectOS","minorVersion","agentRxs","wp","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","agent","testRegex","majorVersion","flatVersion","regexes","dflt","getEventMap","eventMap","getSupportedFeatures","msPointers","documentMode","detectBrowser","mobileChrome","crios","PointerEvent","MSPointerEvent","mouseAndTouchPresent","eventCapture","transforms","hasTransitions","lowPrefix","css","delayedClick","meta","eventFilter","eventHandler","closestMatchingTarget","applyEventMap","queryEventMap","setDefaultEvents","renderPos","FUNCTION","one","handlersIsFunction","_setEvents","Attribution","extent","_extent","_itemText","appendHtml","showElement","hideElement","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","newMin","newMax","directionsMap","createButton","navigateUpButton","icons","navigateRightlButton","navigateDownButton","navigateLeftButton","_keyroot","_tabindex","_keydownHandler","_keydown","TABINDEX","_pan","panStep","ZoomControl","zoomInButton","zoomOutButton","_change","zoomStep","PLUS","MINUS","Extent","initialNw","initialSe","nw","se","containsAny","locs","include","includeAll","edges","ne","World","CENTER_CHANGE","widgetService","_anchor","documentPoint","Layer","scrollElement","_beforeReset","_reset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","_readData","_hasData","_layerIndex","layers","compileTemplate","renderSize","TileLayer","subdomains","_viewType","_view","locationToLayer","viewOrigin","_updateView","TileView","extentToPoint","tileSize","urlTemplate","pool","TilePool","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","tile","createTile","tileOptions","wrapIndex","subdomain","errorUrlTemplate","boundary","wrapValue","wrappedValue","ImageTile","urlOptions","errorUrl","z","quadkey","q","_remove","_create","maxDist","CHANGE","TapCapture","domElement","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","scrollSize","makeVirtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","rescale","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","movable","dragMove","dragDelta","resistance","translateAxis","elastic","dimensions","userEvents","gesture","closestAnchor","previousGesture","previousCenter","scaleWith","Movable","transformStyle","webkitTransformOrigin","_saveCoordinates","by","scaleTo","moveAxis","newCoordinates","ShapeLayer","_initRoot","_markers","_handler","_translateSurface","_load","geometries","_clearMarkers","_loader","GeoJsonLoader","shapeCreated","cancelled","renderPointsAsMarkers","_createMarker","layer","featureCreated","_panning","locationToView","_eventArgs","layerIndex","shapeIndex","_tooltipAnchor","_tooltipContext","eventOffset","_panHandler","panHandler","locator","unwrap","_loadGeometryTo","_featureCreated","_shapeCreated","_loadPolygon","_setLineFill","_loadPoint","_loadShape","rings","_buildPolygon","viewToLocation","BubbleLayer","newData","scaleType","_scaleType","locationField","_createSymbol","_drawSymbol","Scales","Symbols","SqrtScale","domainRange","_ratio","rel","square","MOUSE_ENTER","MOUSE_LEAVE","MARKER_CLASS_NAME","MARKER_CLASS","MarkerLayer","_markerClickHandler","_markerClick","_addOne","Marker","addTo","titleField","_kendoNode","markerIndex","_markerMouseEnter","_createMarkerEventArgs","_markerMouseLeave","_mouseEnterHandler","_mouseEnter","_mouseLeaveHandler","_mouseLeave","templateHtml","_compileTemplate","templateElement","svgIcon","_createEventArgs","paramName","useWithBlock","requestAnimationFrame","_tickProxy","_tick","onEnd","onCancel","Transition","timePassed","_easeProxy","ease","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","TAP","DOUBLETAP","RELEASE","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","api","mouse","getTouches","pointerId","TouchAxis","invalidZeroEvents","_updateLocationData","velocity","timeStamp","timeDelta","client","screen","Touch","touchInfo","useClickAsTap","threshold","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_holdTimeout","_hold","minHold","_trigger","_clickTimeout","_shouldNotMove","_withinIgnoreThreshold","UserEvents","activeTouches","activeTouchIndex","isMoved","jQueryEvent","xDelta","yDelta","withEachUpEvent","downEvents","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","ownerDocument","pressed","_surfaceMoveHandler","_surfaceEndHandler","_elementStartHandler","_elementClickHandler","defaultAction","preventDragEvent","_elementDragStartHandler","_elementSelectHandler","preventIfMovingProxy","preventIfMoving","_isMoved","_disposeAll","_isMultiTouch","touchDelta","touch1","touch2","_apiCall","_maxTouchesReached","_eachTouch","matchingTouch","dict","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","scrollMovable","paneSize","sizeRatio","Scroller","hasScrolling","hasNativeScrolling","_native","useNative","scrollHeader","fixedContainer","wrapInner","inner","avoidScrolling","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","ownsElement","verticalSwipe","zoomSnapBack","animatedScroller","mousewheelScrolling","_wheelScrollHandler","_wheelScroll","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelTimeout","wheelDeltaY","VERTICAL_AXIS","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","_paneChange","scrollBar","visibleScrollHints","pullOffset","pullTemplate","releaseTemplate","refreshTemplate","MARKER","LOCATION","layersMap","Xv","_init","zoomControl","markerLayer","initObserver","_notifyObserver","crs","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","mousewheelThrottled","MapService","_setExtent","_getExtent","wraparound","locationObject","_layerSize","layerToLocation","pointObject","translateWith","pointResult","eventToView","eventToLayer","eventToLocation","viewSize","_setOrigin","originLocation","_origin","newExtent","raw","layerWidth","layerHeight","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPosition","posSelector","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_doubleTap","defs","_createLayer","layerDefaults","layerOptions","markerDefaults","layerConstructor","_scrollOffset","_panComplete","_panEndTimestamp","_scaleToZoom","gestureCenter","centerLocation","originPoint","tiles","_resetScroller","xBounds","yBounds","_renderLayers","newZoom","toZoom","fromZoom","SANS","SANS12","SANS16","TRANSPARENT","pyramidSeries","rangeArea","verticalRangeArea","outliersField","meanField","heatmap","funnel","pyramid","rangeBar","baseTheme","desktopBrowserRxs","mobileBrowserRxs","testRx","rxs","cordova","PhoneGap","appMode","browserInfo","fieldList","_match","setterCache","nextField","arrays","isNumeric","isDate","isCompositeFilterDescriptor","filters","ifElse","pairwise","accessor","isNotEmpty","isNotEmptyArray","runOrEmpty","formatDescriptors","formatter","sanitizeDateLiterals","removeAfterDot","directionFormatter","formatSort","formatGroup","formatAggregates","formatDateValue","UTC","transformSkip","transformTake","transformGroup","transformSort","transformAggregates","filterFormatter","isNotNullOrEmptyString","g1","toCamelCase","convert","translateAggregate","translateAggregates","translateGroup","hasSubgroups","Member","member","HasSubgroups","Items","Key","compare","localeCompare","compareDesc","descriptorAsFunc","isTransformerResult","__value","aggregateBy","descriptors","transformers","expandAggregates","functions","fieldAccessor","aggregateName","aggregateAccessor","fieldAggregates","aggregateFunction","calc","NEGATIVE_INFINITY","POSITIVE_INFINITY","aggregatesFuncs","aggregatesCombinator","normalizeOperator","equal","equalto","ge","greater","greaterthan","greaterthanequal","isempty","isequalto","isgreaterthan","isgreaterthanorequalto","islessthan","islessthanorequalto","isnotempty","isnotequalto","isnull","le","less","lessthan","lessthanequal","notequal","notequals","notequalto","notsubstringof","operatorMap","normalizeFilters","logic","normalizeDescriptor","or","and","operatorsMap","eq","gt","gte","isnotnull","lt","lte","neq","dateRegExp","transformCompositeFilter","combiner","itemProp","typedGetter","convertValue","op","transformFilter","compileFilter","filterBy","normalizeGroups","groupBy","groupValue","valueToString","__position","groupCombinator","aggregateResult","filteredData","orderBy","composeSortDescriptors","skipCount","takeCount","filterDescriptor","sortDescriptors","hasFilters","hasGroups","counter","reduced","touchRegExp","normalizeEvent","mouseOnly","_pressHandler","_dragHandler","_releaseHandler","_ignoreMouse","_mouseOnly","_touchstart","_touchmove","_touchend","_restoreMouse","_mousedown","_mouseup","_pointerdown","isPrimary","_pointermove","_pointerup","_unbindFromCurrent","_bindToCurrent","_usePointers","supportPointerEvent","default","renderPoints","renderPath","cors","exportRoot","surfaceOptions","traversable","renderTo","save","setTransform","setClip","setOpacity","restore","onLoad","createPromise","img","Image","crossOrigin","drawImage","BaseNode","initClip","clearClip","beginPath","loadElements","childNode","insertAt","globalAlpha","opactity","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","LinearGradient","createLinearGradient","RadialGradient","createRadialGradient","addGradientStops","addColorStop","toCssRgba","strokeStyle","mozDash","webkitLineDash","invalidateHandler","_invalidate","_rescale","_devicePixelRatio","fixedScale","clearRect","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","_surfacePoint","pointShape","loadingStates","resolveDataURL","toDataURL","promiseAll","ShapesQuadTree","rootElements","_enableTracking","SurfaceCursor","_resetCursor","_shapeCursor","_defaultCursor","_getCursor","_setCursor","_suspendedTracking","currentShape","_currentShape","textAlign","fillText","strokeText","prevOut","bezierCurveTo","closePath","animationFrameProxy","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","__WEBPACK_DEFAULT_EXPORT__","formats","resolvedColor","resolveColor","processor","re","normalizeByte","padDigit","namedColors","percBrightness","Bytes","RGB","HSV","HSL","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","matchNamedColor","colorNames","regexp","BaseColor","toHSV","toRGB","toBytes","toDisplay","hue2rgb","alphaFromHex","ret","matchUserAgent","lastExecTime","throttled","elapsed","removeSelf","childrenChange","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","HasObservers","_suspended","_observerField","OptionsStore","_wrap","composite","_clear","wrapped","getArray","_kendoExportVisual","domNode","elementPadding","coord","closeOrLess","tolerance","accessors","withAccessors","setCenter","anticlockwise","xRotation","getCenter","radian","_arcInterval","subIntervalsCount","subIntervalAngle","transformation","nextAngle","_intervalCurvePoints","cp1","cp2","extremeAngles","ellipseExtremeAngles","extremeX","extremeY","currentAngleX","bboxStartAngle","currentAngleY","currentPoint","currentPointX","currentPointY","oldStart","p1Derivative","_derivativeAt","p2Derivative","angleRad","pointRadius","PRECISION","lineIntersection","s1x","s2x","s1y","s2y","nx","ny","calculateAngle","inAngleRange","largeArc","swipe","arcParameters","normalizeArcParameters","parameters","xT","yT","xt2","yt2","rx2","ry2","constT","cxT","cyT","uX","uY","vX","vY","acos","angleCosine","signEndAngle","_pointAt","lineIntersectionsCount","intersects","minX","maxX","minY","maxY","det","IDENTITY","scaleCopy","toMatrix","doRound","arg0","arg1","MAX_NUM","MIN_NUM","getCornerRadius","br","expandCopy","rectOuter","rectInner","rect1","rect2","isOutOfEndPoint","calculateCurveAt","toCubicPolynomial","ComplexNumber","real","cNumber","addConstant","negate","multiplyConstant","nthRoot","nthR","isReal","solveCubicEquation","solveQuadraticEquation","squareRoot","b3a","y3","z1","z2","hasRootsInRange","rootField","Segment","withPoints","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","arrayLimits","yLimits","_curveExtremes","x3","x4","_intersectionsTo","intersectionsCount","curveIntersectionsCount","rayIntersection","intersectsRay","_isOnCurveTo","endSegment","rotatedPoints","_isOnLineTo","_isOnPathTo","isOnPath","Transformation","_matrix","_optionsChange","optionsAccessor","GradientStop","TBase","defineOptionsAccessors","withOptions","StopsArray","ElementsArray","Gradient","_createStops","_userSpace","definitionId","removeStop","_radius","_fallbackFill","IDENTITY_MATRIX_HASH","combinedMatrix","currentTransform","matrixHash","_bboxCache","_matrixHash","strokeWidth","newFill","setAccessor","getAccessor","defineAccessors","capitalized","geometryAccessor","defineGeometryAccessors","pointAccessor","definePointAccessors","toLineParamaters","insertPosition","reflectionPoint","third","quadraticToCubicControlPoints","scaledPoint","isRelative","arcTo","previousCommand","lastControlIn","cubicControlPoints","SEGMENT_REGEX","SPLIT_REGEX","parse_path","pathInstance","parseParameters","ShapeMap","QuadNode","QuadRoot","inBounds","nodeRect","nodeBottomRight","pointShapes","inserted","shapes","_add","_initChildren","_quadNode","ROOT_SIZE","zIndexComparer","_zIndex","initRoots","sectorRoot","assignZindex","levelWeight","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","GeometryCircle","parentTransform","elementTransform","elementMatrix","_clippedBBox","transformedPoint","_hasFill","_hasStroke","_splice","howMany","_clearObserver","_setObserver","_reparent","removeAt","elementsBoundingBox","elementsClippedBoundingBox","newParent","GeometryElementsArray","getControlPoints","getTangent","secondCP","firstCP","segmentStart","segmentEnd","_addArcSegments","print","currentType","pathWidth","boundingBox","segmentBox","pointsToCurve","pointsIn","measureText","applyTransform","elementBoundingBox","ClipNode","DefinitionNode","definitionMap","definitionChange","addDefinitions","removeDefinitions","createDefinition","LinearGradientNode","RadialGradientNode","addDefinition","mapItem","removeDefinition","exportGroup","skipBaseHref","rootGroup","encodeBase64","GradientNode","loadStops","stopNode","GradientStopNode","mapCoordinates","renderCoordinates","mapSpace","renderOffset","TRANSFORM","DefinitionMap","isDefinition","clearDefinitions","createDefinitions","setElement","updateDefinition","allCss","mapTransform","ariaLabel","ariaRoleDescription","hasDefinitions","definition","refUrl","mapDefinitions","hashIndex","styleAttr","replaceStyleAttr","restoreStyleAttr","styleString","applyStyle","testFragment","testContainer","hasParser","DOMParser","namespaceURI","chartDoc","parseFromString","importedDoc","adoptNode","LRUCache","_length","put","_head","_tail","newer","older","TextMetrics","baselineMarkerSize","defaultMeasureBox","_cache","styleKey","cachedResult","baselineMarker","_baselineMarker","textStr","REPLACE_REGEX","literals","arabicToRoman","roman","resolveFn","rejectFn","defId","pageYOffset","clientTop","pageXOffset","clientLeft","getPixels","KEY_STR","utfInput","encodeUTF8","chr1","chr2","chr3","enc1","enc2","enc3","enc4","BOM","hi","encodeUnit","codeUnit","encodeUTF16BE","trail","mergeSort","cmp","bi","formatRegExp","IntlError","flattenValues","formattedMessage","NoSupplementalCurrency","cldr","en","_unicodeVersion","_cldrVersion","territory","numbers","percentSign","plusSign","minusSign","exponential","superscriptingExponent","perMille","infinity","nan","timeSeparator","approximatelySign","scientific","currency","currencies","BGN","displayName","EUR","USD","localeCurrency","accounting","gmtFormat","gmtZeroFormat","dateTimeFormats","long","short","availableFormats","Bh","Bhm","Bhms","EBhm","EBhms","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMd","GyMMM","GyMMMd","GyMMMEd","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","yQQQ","yQQQQ","timeFormats","abbreviated","wide","quarters","midnight","noon","morning1","afternoon1","evening1","night1","eras","dateFields","era","quarter","weekOfMonth","dayOfYear","weekday","weekdayOfMonth","dayperiod","supplemental","likelySubtags","currencyData","region","US","_from","weekData","weekendStart","weekendEnd","getLocaleInfo","localeInfo","suffixes","fullName","localeFullName","availableLocaleInfo","DECIMAL","CURRENCY","ACCOUNTING","PERCENT","SCIENTIFIC","POINT","DEFAULT_LOCALE","LATIN_NUMBER_FORMATS","patternRegExp","cldrCurrencyRegExp","getPatterns","loadCurrencyUnitPatterns","currencyInfo","currencyFormats","loadNumbersInfo","standard","predefinedDatePatterns","YEAR_REGEX","SHORT_DATE","datePatterns","getCalendarNames","formatType","loadCalendarNames","localeCalendar","getEraNames","eraNameMap","eraAbbr","eraNames","eraNarrow","eraFormatName","loadCalendarDateFields","fieldInfo","getPredefinedFormat","pathIdx","loadCalendarPatterns","cldrCalendar","loadCalendarInfo","gregorian","localeTerritory","territoryFromName","likelyName","variant","MILLISECOND","placeholderPattern","extractUnit","loadUnits","loadLocale","main","fractions","fieldNameInfo","standAlone","lowerNameType","formatNames","cloneLower","lowerArray","lowerObject","parseRangeDate","SYMBOL","GLOBAL_CURRENCIES","getCurrencyInfo","throwIfNoValid","currencyDisplayInfo","lengthComparer","territoryCurrencyCode","regionCurrencies","regionCurrency","latestValidUntil","latestValidUntilRange","latestStillValid","latestStillValidDate","_tender","_to","validFrom","validTo","stillValidDate","DAYS_OF_WEEK","isNegativeZero","formatCurrencySymbol","currencyDisplay","groupInteger","decimalIndex","groupSizes","integerEnd","integer","integerLength","newGroupSize","isCurrencyStyle","trailingZeroRegex","standardNumberFormat","isCurrency","minimumFractionDigits","toExponential","maximumFractionDigits","fractionOptions","currencyFractions","currencyFractionOptions","_digits","negativeZero","minimumIntegerDigits","useGrouping","currencyUnitPattern","applyPattern","ch","literalRegExp","setStyleOptions","formatOptions","setFormatLiterals","quoteChar","literal","trailingZerosRegExp","trailingPointRegExp","commaRegExp","placeholderIndex","index1","index2","customNumberFormat","setValueSpecificFormat","hasNegativeFormat","zeroFormat","isConstantFormat","constant","setGroupOptions","hasGroup","roundNumber","zeroIndex","sharpIndex","hasZero","hasSharp","trailingZeros","trimTrailingZeros","lastZero","trimRegex","setPlaceholderIndices","lastZeroIndex","applyCustomFormat","replacePlaceHolders","replacement","replaceStyleSymbols","replaceLiterals","standardFormatRegExp","standardFormatOptions","formatAndPrecision","exponentRegExp","nonBreakingSpaceRegExp","cleanNegativePattern","isPercent","cleanLiterals","negativeCurrency","currencyNumber","cleanCurrencyNumber","displays","currencyDisplays","cleanNumber","negativeSignIndex","isNegative","divideBy100","strNumber","LENGHT_DELTA","PENALTIES","VALUE_FORMAT_LENGTH","TIME_SPECIFIERS_REGEX","DATE_OPTIONS_MAP","specifier","getSpecifier","getHourSpecifier","hour12","STAND_ALONE_SPECIFIERS","specifiersRegex","resolvedFormats","getSpecifierRegex","skeletonSpecifiers","findBestMatch","specifiers","specifiersLength","bestMatches","maxScore","score","REMOVAL_PENALTY","bestMatch","matchSpecifier","datePattern","datetime","skeletonFromOptions","spcifier","skeletonFormat","timeStartIndex","dateSkeleton","timeSkeleton","cacheFormat","dateNameType","formatLength","HOUR","ZONE","WEEKDAY","QUARTER","DATE_FIELD_MAP","k","dateFormatRegExp","formatMonth","formatQuarter","formatTimeZone","shortHours","optionalMinutes","localizedName","zZeroOffset","hoursMinutes","formatDayOfWeek","formatDayOfWeekIndex","firstDayIndex","dayIndex","formatters","convertTimeZone","fromOffset","toOffset","fromLocalOffset","offsetDate","toLocalOffset","timeZoneOffsetRegExp","offsetRegExp","numberRegExp","leadingSpacesRegex","trailingSpacesRegex","standardDateFormats","FORMATS_SEQUENCE","outOfRange","lookAhead","getNumber","valueIdx","getIndexByName","nameLength","subValue","matchLength","matchIdx","checkLiteral","parseTimeZoneOffset","noSeparator","zLiteral","calendarGmtFormats","hoursMatch","minutesMatch","hoursOffset","minutesOffset","parseMonth","parseDayOfWeek","parsers","addFormatSpaces","parseExact","pmHour","hasTime","parseValue","parseMicrosoftDateFormat","tzoffset","parseMicrosoftDateOffset","parseFormats","defaultFormats","periodFormats","shortFormat","NAME_TYPES","minLength","LITERAL","addLiteral","lastPart","isHour12","_0x56e23b","_0x123c92","_0x123c","_0x1ad168","_0x5db12a","_0x5db1","mDmIXL","OJevEY","_0x393855","_0xbe983e","_0x49e1b","_0x4e5e56","_0x3fed70","_0x750334","_0x494368","_0x82b829","_0x4fd1c0","_0x1833b4","_0x311e8e","_0x25bc51","uhbvSS","_0x3ef435","_0x47ac40","_0x577700","_0x25c0dd","_0x4e1054","_0x53e7a9","_0x10ea86","_0x318388","KendoLicensing","_0x138cec","matchProduct","_0x5c0afe","_0x18e99f","_0x15a028","_0x2b664c","_0x4a7445","_0x5541dc","_0x5bc7e3","packageName","docsUrl","getCurrentDate","expiryDate","_0x5989d0","_0x40d4ef","_0x2cec00","_0x11cec0","_0x100b95","_0x1fce89","_0x45012f","_0x3616c6","_0x1cb080","es2015_align","anchorHorizontal","anchorVertical","elementHorizontal","elementVertical","horizontalMargin","verticalMargin","defaultView","es2015_document","cachedWidth","windowViewport","scrollbarWidth","viewport","es2015_offset","rectOfHiddenElement","until","docElement","offset_parent","position_with_scroll","offsetParentElement","offsetRect","parentStyles","parentScrollPosition","offsetParentScrollPosition","positionScale","viewPortSize","anchorSize","anchorAlignPoint","elementAlignPoint","marginToAdd","isBeforeAnchor","restrict_to_view","elementTop","elementLeft","viewPortHeight","viewPortWidth","isVerticalFit","isHorizontalFit","isVerticalFlip","isHorizontalFlip","flippedVertical","flippedHorizontal","fittedVertical","fittedHorizontal","fitted","sibling_container","siblingElements","elementSource","canUseDOM","currentDocument","exportName","VENDOR_PREFIXES","TEST_ELEMENT","setTimeoutContext","bindFn","invokeArrayArg","each","deprecate","deprecationMessage","nextKey","inherit","childP","baseP","boolOrFn","ifUndefined","val1","val2","splitStr","inStr","findByKey","uniqueArray","prefixed","_uniqueId","getWindowForElement","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","PROPS_XY","PROPS_CLIENT_XY","Input","inputTarget","domHandler","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","computeInputData","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","deltaTime","getAngle","getDistance","computeDeltaXY","offsetDelta","prevDelta","prevInput","offsetDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","getScale","getRotation","maxPointers","computeIntervalInputData","lastInterval","recognize","evEl","evTarget","evWin","MOUSE_INPUT_MAP","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","removePointer","eventTypeNormalized","storeIndex","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","allTouches","targetTouches","changedTargetTouches","TouchMouseInput","primaryTouch","lastTouches","recordTouches","setLastTouch","lastTouch","lts","isSyntheticEvent","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","getTouchActionProps","touchMap","cssSupports","CSS","supports","TouchAction","Recognizer","uniqueId","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","preset","Manager","oldCssProps","createInputInstance","inputClass","toggleCssProps","recognizeWith","requireFailure","cssProps","compute","getTouchAction","cleanTouchActions","hasPanX","hasPanY","preventDefaults","hasNone","DIRECTION_LEFT","DIRECTION_UP","preventSrc","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","attrTest","optionPointers","isRecognized","DIRECTION_HORIZONTAL","directionTest","hasMoved","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","stopped","curRecognizer","existing","triggerDomEvent","gestureEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Swipe","Rotate","define","elMatches","mozMatchesSelector","queryChildren","scrollingClassTimeout","addScrollingClass","removeScrollingClass","isAlive","scrollingThreshold","EventElement","prototypeAccessors","this$1","unbindAll","defineProperties","EventManager","eventElements","CustomEvent","initCustomEvent","processScrollDiff","useScrollingClass","forceFireReachEvent","processScrollDiff$1","ref","containerHeight","reach","setScrollingClassInstantly","toInt","ee","once","onceHandler","isWebKit","supportsTouch","maxTouchPoints","DocumentTouch","supportsIePointer","msMaxTouchPoints","isChrome","updateGeometry","roundedScrollTop","contentWidth","scrollbarXRail","scrollbarYRail","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","updateCss","xRailOffset","isRtl","isScrollbarXUsingBottom","scrollbarXBottom","scrollbarXTop","yRailOffset","isScrollbarYUsingRight","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","thumbSize","minScrollbarLength","maxScrollbarLength","bindMouseScrollHandler","startingScrollTop","startingMousePageY","scrollBy","mouseMoveHandler","mouseUpHandler","bindMoves","touchMode","clickRail","positionTop","positionLeft","dragThumb","keyboard","contentDocument","shadowRoot","isEditable","shouldPreventDefault","wheelPropagation","wheel","getDeltaFromEvent","wheelDeltaX","deltaMode","shouldBeConsumedByChild","maxScrollTop","maxScrollLeft","shouldPrevent","useBothWheelAxes","wheelSpeed","isTop","isBottom","isLeft","isRight","onwheel","onmousewheel","startOffset","easingLoop","touchStart","touchMove","touchEnd","applyTouchMove","differenceX","differenceY","shouldHandle","MSPOINTER_TYPE_MOUSE","timeGap","magnitudeX","magnitudeY","scrollY","swipeEasing","PerfectScrollbar","userSettings","originalScrollLeft","isNegativeScroll","railXStyle","marginRight","railYStyle","outerWidth","borderBottomWidth","marginBottom","handlerName","lastScrollLeft","removePsClasses","MapShim","getIndex","__entries__","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","leadingCall","trailingCall","lastCallTime","resolvePending","timeoutCallback","connect_","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","childList","subtree","getInstance","instance_","defineConfigurable","writable","getWindowOf","emptyRect","createRectInit","toFloat","getBordersSize","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getContentRect","getSVGContentRect","getHTMLElementContentRect","paddings","getPaddings","positions_1","horizPad","vertPad","boxSizing","isDocumentElement","vertScrollbar","horizScrollbar","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","broadcastRect","ResizeObserverEntry","rectInit","contentRect","createReadOnlyRect","Constr","DOMRectReadOnly","ResizeObserverSPI","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","unobserve","clearActive","observation","PerfectScrollbarComponent_div_3_Template","rf","ɵngcc0","indicatorY","interaction","indicatorX","Geometry","Position","PerfectScrollbarEvents","PerfectScrollbarConfig","PerfectScrollbarDirective","ro","configDiff","ngDestroy","psScrollY","psScrollX","psScrollUp","psScrollDown","psScrollLeft","psScrollRight","psYReachEnd","psYReachStart","psXReachEnd","psXReachStart","ps","absolute","animateScrolling","scrollToX","scrollToY","scrollToTop","scrollToLeft","scrollToRight","scrollToElement","elementPos","scrollerPos","cancelAnimationFrame","scrollCount","oldTimestamp","cosParameter","newTimestamp","outputs","exportAs","PerfectScrollbarComponent","cdRef","scrollPositionX","scrollPositionY","scrollDirectionX","scrollDirectionY","usePropagationX","usePropagationY","allowPropagationX","allowPropagationY","stateTimeout","stateUpdate","usePSClass","autoPropagation","scrollIndicators","directiveRef","checkPropagation","mapTo","hostVars","hostBindings","vars","consts","ɵngcc1","_subscribe","hasError","thrownError","_throwIfClosed","lift","observerOrNext","isSubscriber","Subscriber","isObserver","isSubscription","SafeSubscriber","errorContext","_trySubscribe","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","pipeFromArray","_bufferSize","Infinity","_windowTime","_timestampProvider","dateTimestampProvider","_infiniteTimeWindow","isStopped","_trimBuffer","_innerSubscribe","_checkFinalizedStatuses","adjustedBufferSize","ObjectUnsubscribedError","createErrorClass","currentObservers","AnonymousSubject","observed","EMPTY_SUBSCRIPTION","arrRemove","COMPLETE_NOTIFICATION","createNotification","EMPTY_OBSERVER","handleStoppedNotification","nextNotification","errorNotification","_error","_complete","_bind","ConsumerObserver","partialObserver","handleUnhandledError","captureError","reportUnhandledError","onStoppedNotification","timeoutProvider","UnsubscriptionError","initialTeardown","_parentage","_finalizers","initialFinalizer","finalizer","execFinalizer","_hasParent","_addParent","_removeParent","onUnhandledError","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","firstValueFrom","hasConfig","EmptyError","_refCount","_connection","hasLift","getSubject","_teardown","refCount","higherOrderRefCount","scheduler","popScheduler","resultSelector","popResultSelector","argsArgArrayOrObject","combineLatestInit","valueTransform","maybeSchedule","remainingFirstValues","hasFirstValue","createObject","mapOneOrManyArgs","execute","executeSchedule","concatAll","mergeAll","observableFactory","forkJoin","remainingCompletions","remainingEmissions","sourceIndex","observeOn","subscribeOn","scheduleAsyncIterable","Symbol","asyncIterator","isInteropObservable","scheduleObservable","isArrayLike","scheduleArray","isPromise","schedulePromise","isAsyncIterable","isIterable","scheduleIterable","Symbol_iterator","return","isReadableStreamLike","scheduleReadableStreamLike","readableStreamLikeToAsyncGenerator","createInvalidObservableTypeError","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","isEventTarget","isNodeStyleEventEmitter","addListener","removeListener","toCommonHandlerRegistry","isJQueryStyleEventEmitter","mergeMap","subTarget","fromInteropObservable","obs","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","iterable","fromReadableStreamLike","readableStream","asyncIterable","asyncIterable_1","asyncIterable_1_1","e_1","__awaiter","__asyncValues","e_1_1","asyncScheduler","timer","concurrent","popNumber","errorOrErrorFactory","errorFactory","dueTime","intervalOrScheduler","intervalDuration","isScheduler","due","isValidDate","zip","argsOrArgArray","buffers","onNext","onFinalize","OperatorSubscriber","shouldUnsubscribe","audit","durationSelector","durationSubscriber","isComplete","endDuration","cleanupDuration","handledResult","innerSub","syncUnsub","activeTask","lastTime","emitWhenIdle","targetTime","defaultIfEmpty","delayWhen","delayDurationSelector","subscriptionDelay","ignoreElements","comparator","keySelector","defaultCompare","previousKey","currentKey","hasDefaultValue","throwIfEmpty","ii","mergeInternals","onBeforeNext","innerSubScheduler","additionalFinalizer","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","refCounter","sharedConnection","conn","scanInternals","accumulator","seed","hasSeed","emitOnNext","emitBeforeComplete","hasState","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","resetConnection","hasCompleted","hasErrored","cancelReset","resetAndUnsubscribe","handleReset","onSubscriber","shareReplay","configOrBufferSize","windowTime","bufferSize","startWith","innerSubscriber","innerIndex","outerIndex","seen","notifier","inclusive","tapObserver","isUnsub","duration$","leading","trailing","sendValue","endThrottling","cleanupThrottling","startThrottle","defaultErrorFactory","work","intervalProvider","AsyncAction","pending","recycleAsyncId","requestAsyncId","_scheduler","_execute","errored","Scheduler","schedulerActionCtor","AsyncScheduler","SchedulerAction","animationFrameProvider","timestamp","AnimationFrameScheduler","flushId","_scheduled","AnimationFrameAction","getSymbolIterator","objectProto","getKeys","isPOJO","createImpl","ctorFunc","isRoot","errorThrown","parentSubscription","scheduleSubscription","isObservable","__asyncGenerator","reader","getReader","__await","read","releaseLock","liftedSource","callOrApply","fns","stateChangeExpr","stagger","scheduleMicroTask","_position","_onStart","triggerMicrotask","AnimationGroupPlayer","_players","doneCount","destroyCount","startCount","timeAtPosition","longestPlayer","longestSoFar","_DOM","getDOM","setRootDomAdapter","adapter","DomAdapter","PlatformLocation","historyGo","relativePosition","useBrowserPlatformLocation","ɵɵinject","BrowserPlatformLocation","LOCATION_INITIALIZED","getBaseHrefFromDOM","getBaseHref","onPopState","getGlobalEventTarget","onHashChange","newPath","supportsState","back","go","getState","createBrowserPlatformLocation","joinWithSlash","slashes","stripTrailingSlash","pathEndIdx","normalizeQueryParams","LocationStrategy","inject","PathLocationStrategy","APP_BASE_HREF","_platformLocation","_removeListenerFns","_baseHref","prepareExternalUrl","includeHash","externalUrl","HashLocationStrategy","locationStrategy","_urlChangeListeners","_urlChangeSubscription","_locationStrategy","browserBaseHref","_stripIndexHtml","isCurrentPathEqualTo","_stripBaseHref","_notifyUrlChangeListeners","fnIndex","onThrow","onReturn","createLocation","CURRENCIES_EN","ADP","AFN","ALL","AMD","AOA","ARS","AUD","AZN","BAM","BBD","BDT","BHD","BIF","BMD","BND","BOB","BRL","BSD","BWP","BYN","BYR","BZD","CAD","CHF","CLF","CLP","CNY","COP","CRC","CUC","CUP","CZK","DJF","DKK","DOP","EGP","ESP","FJD","FKP","GBP","GEL","GHS","GIP","GNF","GTQ","GYD","HKD","HNL","HRK","HUF","IDR","ILS","INR","IQD","IRR","ISK","ITL","JMD","JOD","JPY","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LTL","LUF","LVL","LYD","MGA","MGF","MMK","MNT","MRO","MUR","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PHP","PKR","PLN","PYG","RON","RSD","RUB","RWF","SBD","SEK","SGD","SHP","SLE","SLL","SOS","SRD","SSP","STD","STN","SYP","THB","TMM","TND","TRL","TRY","TTD","TWD","TZS","UAH","UGX","UYI","UYU","UYW","UZS","VEF","VND","VUV","XAF","XCD","XOF","XPF","XXX","YER","ZAR","ZMK","ZMW","ZWD","NumberFormatStyle","Decimal","Percent","Currency","Scientific","FormStyle","Format","Standalone","TranslationWidth","Narrow","Abbreviated","Wide","Short","FormatWidth","Medium","Long","NumberSymbol","PercentSign","PlusSign","MinusSign","Exponential","SuperscriptingExponent","PerMille","TimeSeparator","CurrencyDecimal","CurrencyGroup","getLocaleDateFormat","getLastDefinedValue","ɵfindLocaleData","ɵLocaleDataIndex","getLocaleTimeFormat","getLocaleDateTimeFormat","dateTimeFormatData","getLocaleNumberSymbol","getLocaleNumberFormat","checkFullData","extractTime","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","ShortGMT","Extended","DateType","FullYear","Month","Hours","Minutes","Seconds","FractionalSeconds","TranslationType","DayPeriods","Days","Months","Eras","timezone","parsedNb","isoStringToDate","tzHour","tzMin","dateSetter","setUTCFullYear","timeSetter","setUTCHours","getNamedFormat","dateTimezoneOffset","timezoneToOffset","convertTimezoneToLocal","addDateMinutes","dateFormatter","getDateFormatter","DATE_FORMATS","dateStrGetter","dateGetter","weekNumberingYearGetter","weekGetter","timeZoneGetter","getLocaleId","shortTime","shortDate","formatDateTime","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","opt_values","negWrap","neg","strNum","getDatePart","formatFractionalSeconds","localeMinus","form","getDateTranslation","getLocaleMonthNames","formStyle","getLocaleDayNames","currentHours","currentMinutes","rules","getLocaleExtraDayPeriodRules","rule","getLocaleExtraDayPeriods","afterFrom","beforeTo","getLocaleDayPeriods","amPm","getLocaleEraNames","erasData","getThursdayThisWeek","monthBased","nbDaysBefore1stDayOfMonth","thisThurs","firstThurs","getFirstThursdayOfYear","firstDayOfYear","THURSDAY","fallback","requestedTimezoneOffset","valueOf","NUMBER_FORMAT_REGEXP","formatNumberToLocaleString","groupSymbol","decimalSymbol","digitsInfo","formattedText","isZero","parsedNumber","integerLen","zeros","numStr","exponent","MAX_DIGITS","toPercent","fractionLen","minInt","minFraction","minFrac","maxFraction","maxFrac","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","fractionSize","roundAt","digit","dropTrailingZeros","minLen","carry","lgSize","gSize","negPre","negSuf","posPre","posSuf","parseNumberFormat","patternParts","positiveParts","trunkLen","parseCookieValue","cookieStr","eqIndex","cookieName","NgClass","_iterableDiffers","_keyValueDiffers","_ngEl","_iterableDiffer","_keyValueDiffer","_initialClasses","_rawClass","klass","_removeClasses","_applyClasses","ngClass","ɵisListLikeIterable","iterableChanges","_applyIterableChanges","keyValueChanges","_applyKeyValueChanges","forEachAddedItem","_toggleClass","forEachChangedItem","forEachRemovedItem","ɵstringify","rawClassVal","NgForOfContext","ngForOf","NgForOf","_ngForOf","_ngForOfDirty","ngForTrackBy","_trackByFn","ngForTemplate","viewContainer","adjustedPreviousIndex","previousIndex","applyViewChange","ilen","forEachIdentityChange","NgIf","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","ngIf","condition","ngIfThen","assertTemplate","ngIfElse","SwitchView","_viewContainerRef","_templateRef","_created","enforceState","created","NgSwitch","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","ngSwitch","_ngSwitch","_updateDefaultCases","_addCase","_addDefault","_defaultViews","_matchCase","useDefault","NgSwitchCase","ngSwitchCase","NgSwitchDefault","NgStyle","_ngStyle","ngStyle","_setStyle","nameAndUnit","RendererStyleFlags2","NgTemplateOutlet","_viewRef","ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector","invalidPipeArgumentError","DATE_PIPE_DEFAULT_TIMEZONE","DatePipe","defaultTimezone","ɵpipe","pure","DecimalPipe","_locale","isValue","strToNumber","PercentPipe","formatPercent","_defaultCurrencyCode","currencyCode","getCurrencySymbol","getLocaleCurrencies","symbolNarrow","formatCurrency","getNumberOfCurrencyDigits","DEFAULT_CURRENCY_CODE","SlicePipe","PLATFORM_BROWSER_ID","ViewportScroller","ɵɵdefineInjectable","BrowserViewportScroller","getScrollPosition","supportsScrolling","scrollToPosition","scrollToAnchor","elSelected","findAnchorFromDocument","documentResult","getElementsByName","createTreeWalker","createShadowRoot","attachShadow","treeWalker","NodeFilter","SHOW_ELEMENT","nextNode","setHistoryScrollRestoration","scrollRestoration","supportScrollRestoration","scrollRestorationDescriptor","getScrollRestorationProperty","getOwnPropertyDescriptor","XhrFactory","HttpHandler","HttpBackend","HttpHeaders","normalizedNames","lazyUpdate","lazyInit","maybeSetNormalizedName","getAll","lcName","copyFrom","applyUpdate","toDelete","HttpUrlEncodingCodec","encodeKey","standardEncoding","encodeValue","decodeKey","decodeValue","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","HttpParams","updates","cloneFrom","fromString","fromObject","paramParser","rawParams","codec","param","eqIdx","appendAll","eKey","HttpContext","isBlob","isFormData","FormData","HttpRequest","fourth","reportProgress","mightHaveBody","urlWithParams","qIdx","serializeBody","isUrlSearchParams","URLSearchParams","detectContentTypeHeader","setHeaders","setParams","HttpEventType","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","HttpResponseBase","defaultStatus","defaultStatusText","HttpHeaderResponse","addBody","events$","res$","jsonp","callbackParam","patch","HttpInterceptorHandler","interceptor","NoopInterceptor","XSSI_PREFIX","HttpXhrBackend","xhrFactory","detectedType","reqBody","headerResponse","partialFromXhr","getAllResponseHeaders","getResponseUrl","originalBody","sentHeaders","onDownProgress","progressEvent","lengthComputable","partialText","onUpProgress","upload","DONE","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","HttpXsrfTokenExtractor","HttpXsrfCookieExtractor","lastCookieString","lastToken","parseCount","getToken","cookieString","ɵparseCookieValue","HttpXsrfInterceptor","tokenService","lcUrl","HttpInterceptingHandler","backend","interceptors","HttpClientXsrfModule","XhrFactory$1","getClosureSafeProperty","objWithPropertyToExtract","fillProperties","overriddenName","newLineIndex","concatStringsWithSpace","__forward_ref__","forwardRefFn","resolveForwardRef","isForwardRef","RuntimeError","formatRuntimeError","renderStringify","throwProviderNotFoundError","injectorName","actual","comparison","ɵɵdefineInjector","getInjectableDef","getOwnDefinition","NG_PROV_DEF","NG_INJECTABLE_DEF","isInjectable","getInjectorDef","NG_INJ_DEF","NG_INJECTOR_DEF","ngInjectableDef","ngInjectorDef","InjectFlags","Host","Self","SkipSelf","Optional","_injectImplementation","setInjectImplementation","injectRootLimpMode","injectableDef","noSideEffects","ChangeDetectionStrategy","OnPush","ViewEncapsulation$1","Emulated","ShadowDom","EMPTY_OBJ","EMPTY_ARRAY","NG_COMP_DEF","NG_DIR_DEF","NG_PIPE_DEF","NG_MOD_DEF","NG_FACTORY_DEF","NG_ELEMENT_ID","__NG_ELEMENT_ID__","componentDefCount","ɵɵdefineComponent","componentDefinition","declaredInputs","providersResolver","hostAttrs","contentQueries","onPush","changeDetection","directiveDefs","pipeDefs","getStandaloneInjector","setInput","schemas","tView","feature","invertObject","extractDirectiveDef","nonNull","getPipeDef$1","getComponentDef","getDirectiveDef","ɵɵdefineNgModule","declarations","exports","transitiveCompileScopes","ɵɵsetNgModuleScope","ngModuleDef","getNgModuleDef","secondary","newLookup","minifiedKey","publicName","declaredName","ɵɵdefineDirective","ɵɵdefinePipe","pipeDef","isStandalone","throwNotFound","isLView","isLContainer","isContentQueryHost","tNode","isComponentHost","isDirectiveHost","isComponentDef","isRootView","getFactoryDef","ɵɵNgOnChangesFeature","NgOnChangesFeatureImpl","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","privateName","setSimpleChangesStore","SIMPLE_CHANGES_STORE","previousChange","ngInherit","unwrapRNode","getNativeByIndex","lView","getNativeByTNode","getTNode","getComponentLViewByIndex","slotValue","viewAttachedToChangeDetector","getConstant","resetPreOrderHookFlags","updateTransplantedViewCount","lContainer","viewOrContainer","instructionState","lFrame","createLFrame","bindingsEnabled","getBindingsEnabled","getLView","getTView","ɵɵrestoreView","viewToRestore","contextLView","ɵɵresetView","getCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","getCurrentParentTNode","isParent","setCurrentTNode","isCurrentTNodeParent","setCurrentTNodeAsNotParent","getBindingRoot","bindingRootIndex","bindingStartIndex","getBindingIndex","bindingIndex","nextBindingIndex","incrementBindingIndex","setInI18nBlock","isInI18nBlock","inI18n","setBindingRootForHostBindings","currentDirectiveIndex","setCurrentDirectiveIndex","getCurrentDirectiveDef","tData","getCurrentQueryIndex","setCurrentQueryIndex","getDeclarationTNode","declTNode","enterDI","parentTNode","parentLView","allocLFrame","enterView","newView","newLFrame","currentLFrame","childLFrame","elementDepthCount","currentNamespace","leaveViewLight","oldLFrame","leaveDI","leaveView","getSelectedIndex","setSelectedIndex","getSelectedTNode","ɵɵnamespaceSVG","ɵɵnamespaceHTML","namespaceHTMLInternal","registerPostOrderHooks","directiveStart","directiveEnd","lifecycleHooks","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","executeCheckHooks","callHooks","executeInitAndCheckHooks","initPhase","incrementInitPhaseFlags","currentView","currentNodeIndex","nodeIndexLimit","lastNodeIndexFound","callHook","isInitHook","directive","NodeInjectorFactory","isViewProvider","injectImplementation","resolving","canSeeViewProviders","injectImpl","setUpAttributes","native","attrName","attrVal","isAnimationProp","isNameOnlyAttributeMarker","mergeHostAttrs","dst","srcMarker","mergeHostAttribute","markerInsertPosition","dstValue","hasParentInjector","parentLocation","getParentInjectorIndex","getParentInjectorView","startView","getParentInjectorViewOffset","parentView","includeViewProviders","setIncludeViewProviders","nextNgElementId","NOT_FOUND","getOrCreateNodeInjectorForNode","existingInjectorIndex","getInjectorIndex","firstCreatePass","injectorIndex","insertBloom","blueprint","parentLoc","getParentInjectorLocation","parentData","footer","declarationViewOffset","lViewCursor","getTNodeFromLView","diPublicInInjector","bloomAdd","bloomHash","notFoundValueOrThrow","lookupTokenUsingModuleInjector","moduleInjector","previousInjectImplementation","getOrCreateInjectable","embeddedInjectorValue","lookupTokenUsingEmbeddedInjector","currentLView","nodeInjectorValue","lookupTokenUsingNodeInjector","embeddedViewInjector","embeddedViewInjectorValue","bloomHashBitOrFactory","tokenId","createNodeInjector","previousTView","hostTElementNode","shouldSearchParent","bloomHasToken","searchTokensOnInjector","currentTView","injectableIdx","locateDirectiveOrProvider","getNodeInjectable","canAccessViewProviders","isHostSpecialCase","nodeProviderIndexes","providerIndexes","tInjectables","injectablesStart","directivesStart","cptViewProvidersCount","providerTokenOrDef","dirDef","isFactory","throwCyclicDependencyError","depPath","stringifyForError","previousIncludeViewProviders","registerPreOrderHooks","directiveIndex","directiveDef","wrappedOnChanges","preOrderHooks","preOrderCheckHooks","injectorView","isFirstHostTNode","NodeInjector","_tNode","_lView","ɵɵgetInheritedFactory","ownConstructor","ownFactory","getFactoryOf","objectPrototype","tViewType","ɵɵinjectAttribute","attrNameToInject","injectAttributeImpl","attrsLength","PARAMETERS","makeParamDecorator","parentClass","metaCtor","makeMetadataCtor","propName","ParamDecoratorFactory","annotationInstance","ParamDecorator","annotation","unusedKey","ngMetadataName","annotationCls","_desc","deepForEach","addToArray","removeFromArray","newArray","keyValueArraySet","keyValueArray","keyValueArrayIndexOf","arrayInsert2","keyValueArrayGet","_arrayIndexOfSorted","THROW_IF_NOT_FOUND","DI_DECORATOR_FLAG","NG_TEMP_TOKEN_PATH","NEW_LINE","SOURCE","_currentInjector","setCurrentInjector","former","injectInjectorOnly","getInjectImplementation","skipSelf","injectArgs","getInjectFlag","attachInjectFlag","decorator","Inject","Important","DashCase","COMMENT_DISALLOWED","COMMENT_DELIMITER","TRACKED_LVIEWS","uniqueIdCounter","MONKEY_PATCH_KEY_NAME","attachPatchData","registerLView","_icuContainerIterate","icuContainerIterate","tIcuContainerNode","getLViewParent","getFirstLContainer","getNearestLContainer","getNextLContainer","applyToElementOrContainer","lNodeToHandle","beforeNode","isComponent","rNode","nativeAppendChild","nativeInsertBefore","nativeRemoveNode","applyContainer","parentRElement","applyView","createTextNode","updateTextNode","createCommentNode","escapeCommentText","createElementNode","detachMovedView","declarationContainer","movedViews","declarationViewIndex","insertionLContainer","detachView","removeIndex","indexInContainer","viewToDetach","declarationLContainer","removedLView","removeViewFromContainer","lQueries","destroyLView","destroyViewTree","rootView","lViewOrLContainer","cleanUpView","firstView","executeOnDestroys","toCall","callContext","processCleanups","tCleanup","cleanup","lCleanup","lastLCleanupIndex","idxOrTargetGetter","useCaptureOrSubIdx","instanceCleanupFn","unregisterLView","getParentRElement","getClosestRElement","nativeAppendOrInsertBefore","nativeParentNode","getInsertInFrontOfRNode","_getInsertInFrontOfRNodeWithI18n","getInsertInFrontOfRNodeWithNoI18n","_processI18nInsertBefore","policy$1","policy","setI18nHandling","getInsertInFrontOfRNodeWithI18n","processI18nInsertBefore","childRNode","childTNode","parentRNode","anchorNode","getFirstNativeNode","tNodeType","getBeforeNodeForView","elIcuContainerChild","rNodeOrLContainer","projectionNodes","getProjectionNodes","projection","viewIndexInContainer","nextViewIndex","firstTNodeOfView","nativeParent","nativeRemoveChild","applyNodes","isProjection","rawSlotValue","nextRNode","applyProjectionRecursive","projectionNext","tProjectionNode","componentLView","nodeToProjectOrRNodes","writeDirectStyle","writeDirectClass","trustedHTMLFromString","getPolicy$1","trustedTypes","createPolicy","createHTML","createScript","createScriptURL","setDocument","trustedHTMLFromStringBypass","getPolicy","SafeValueImpl","changingThisBreaksApplicationSecurity","SafeHtmlImpl","getTypeName","SafeStyleImpl","SafeScriptImpl","SafeUrlImpl","SafeResourceUrlImpl","unwrapSafeValue","allowSanitizationBypassAndThrow","actualType","getSanitizationBypassType","bypassSanitizationTrustHtml","trustedHtml","bypassSanitizationTrustStyle","trustedStyle","bypassSanitizationTrustScript","trustedScript","bypassSanitizationTrustUrl","trustedUrl","bypassSanitizationTrustResourceUrl","trustedResourceUrl","getInertBodyHelper","defaultDoc","inertDocumentHelper","InertDocumentHelper","isDOMParserAvailable","DOMParserHelper","getInertBodyElement","inertDocument","createHTMLDocument","inertHtml","inertBodyElement","templateEl","inertBody","stripCustomNsAttrs","elAttrs","ELEMENT_NODE","SAFE_URL_PATTERN","_sanitizeUrl","tagSet","sets","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","VALID_ATTRS","SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS","SanitizingHtmlSerializer","sanitizedSomething","buf","sanitizeChildren","traverseContent","TEXT_NODE","nodeValue","endElement","checkClobberedElement","elAttr","encodeEntities","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","inertBodyHelper","_sanitizeHtml","unsafeHtmlInput","unsafeHtml","mXSSAttempts","parsedHtml","getTemplateContent","isTemplateElement","SecurityContext","HTML","STYLE","RESOURCE_URL","ɵɵsanitizeHtml","sanitizer","getSanitizer","sanitize","ɵɵsanitizeUrl","unsafeUrl","ENVIRONMENT_INITIALIZER","INJECTOR","INJECTOR_DEF_TYPES","NullInjector","importProvidersFrom","ɵproviders","internalImportProvidersFrom","checkForStandaloneCmp","providersOut","dedup","injectorTypesWithProviders","internalSource","walkProviderTree","processInjectorTypesWithProviders","typesWithProviders","defType","injDef","cmpDef","isDuplicate","dep","importTypesWithProviders","imported","defProviders","USE_VALUE$1","isValueProvider","isTypeProvider","INJECTOR_SCOPE","NOT_YET","CIRCULAR","NULL_INJECTOR$1","getNullInjector","EnvironmentInjector","R3Injector","scopes","records","_ngOnDestroyHooks","_onDestroyHooks","forEachSingleProvider","processProvider","makeRecord","injectorDefTypes","assertNotDestroyed","runInContext","previousInjector","couldBeInjectableType","injectableDefInScope","injectableDefOrInjectorDefFactory","hydrate","catchInjectorError","injectorErrorName","tokenPath","NG_TOKEN_PATH","resolveInjectorInitializers","providerToRecord","providerToFactory","multiRecord","hasOnDestroy","getUndecoratedInjectableFactory","paramLength","inheritedInjectableDef","getInheritedInjectableDef","ngModuleType","unwrappedProvider","isFactoryProvider","isExistingProvider","classRef","hasDeps","isImportedNgModuleProviders","ComponentFactory$1","_NullComponentFactoryResolver","noComponentFactoryError","ERROR_COMPONENT","ComponentFactoryResolver$1","NULL","injectElementRef","createElementRef","unwrapElementRef","injectRenderer2","nodeAtIndex","Sanitizer","major","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","getOriginalError","ERROR_ORIGINAL_ERROR","_console","originalError","_findOriginalError","ɵɵresolveWindow","ɵɵresolveDocument","maybeUnwrapFn","classIndexOf","classToSearch","startingIndex","foundIndex","NG_TEMPLATE_SELECTOR","isCssClassMatching","cssClassToMatch","isProjectionMode","isInlineTemplate","hasTagAndTypeMatch","currentSelector","isNodeMatchingSelector","nodeAttrs","nameOnlyMarkerIdx","getNameOnlyMarkerIndex","skipToNextSelector","isPositive","selectorAttrValue","attrIndexInNode","findAttrIndexInNode","nodeAttrValue","compareAgainstClassName","bindingsMode","maybeAttrName","matchTemplateAttribute","isNodeMatchingSelectorList","isSelectorInSelectorList","selectorListLoop","currentSelectorInList","maybeWrapInNotSelector","isNegativeMode","chunk","stringifyCSSSelector","currentChunk","valueOrMarker","attrValue","NO_CHANGE","ɵɵadvance","selectIndexInternal","checkNoChangesMode","createInjector","additionalProviders","createInjectorWithoutInjectorInstances","ɵɵdirectiveInject","ɵɵinvalidFactory","toTStylingRange","getTStylingRangePrev","tStylingRange","setTStylingRangePrevDuplicate","getTStylingRangeNext","setTStylingRangeNext","setTStylingRangeNextDuplicate","refreshContentQueries","queryStartIdx","directiveDefIdx","createLView","tHostNode","rendererFactory","getUniqueLViewId","getOrCreateTNode","createTNodeAtIndex","createTNode","tParent","insertBeforeIndex","directiveStylingLast","propertyBindings","mergedAttrs","localNames","initialInputs","tViews","stylesWithoutHost","residualStyles","classesWithoutHost","residualClasses","classBindings","styleBindings","allocExpando","numSlotsToAlloc","allocIdx","renderView","executeViewQueryFn","templateFn","executeTemplate","staticContentQueries","staticViewQueries","renderChildComponents","hostLView","renderComponent","incompleteFirstPass","refreshView","setBindingIndex","hooksInitPhaseCompleted","markTransplantedViewsForRefresh","movedLView","refreshEmbeddedViews","embeddedLView","embeddedTView","processHostBindingOpCodes","hostBindingOpCodes","opCode","directiveIdx","bindingRootIndx","hostBindingFn","refreshChildComponents","refreshComponent","firstUpdatePass","prevSelectedIndex","isUpdatePhase","executeContentQueries","createDirectivesInstances","instantiateAllDirectives","addComponentLogic","setInputsFromAttrs","invokeDirectivesHostBindings","elementIndex","getCurrentDirectiveIndex","invokeHostBindingsInCreationMode","saveResolvedLocalsInData","viewData","localRefExtractor","localIndex","getOrCreateComponentTView","createTView","directives","pipes","constsOrFactory","initialViewLength","createViewBlueprint","queries","expandoStartIndex","directiveRegistry","pipeRegistry","storeCleanupWithContext","cleanupFn","getOrCreateLViewCleanup","getOrCreateTViewCleanup","generatePropertyAliases","inputAliasMap","propStore","internalName","initializeInputAndOutputAliases","tViewData","tNodeAttrs","inputsFromAttrs","inputsStore","outputsStore","directiveInputs","generateInitialInputs","elementPropertyInternal","nativeOnly","dataValue","setInputsForProperty","markDirtyIfOnPush","mapPropName","viewIndex","childComponentLView","resolveDirectives","localRefs","hasDirectives","findDirectiveDefMatches","markAsComponentHost","exportsMap","initTNodeFlags","preOrderHooksFound","preOrderCheckHooksFound","configureViewWithDirective","saveNameToExportMap","lifeCycleHooks","cacheMatchingLocalNames","registerHostBindingOpCodes","directiveVarsIdx","elementIndx","lastSelectedElementIdx","hostTNode","numberOfDirectives","directiveFactory","nodeInjectorFactory","componentView","addToViewTree","setElementAttribute","initialInputData","inputsToStore","createLContainer","hostNative","componentHostIdx","refreshContainsDirtyView","componentTView","syncViewWithBlueprint","markViewDirty","detectChangesInternal","notifyErrorHandler","viewQueryFn","textBindingInternal","computeStaticStyling","writeToHost","collectNativeNodes","lNode","lViewInAContainer","lViewFirstChildTNode","nodesInSlot","ViewRef$1","_cdRefInjectingView","_appRef","_attachedToViewContainer","rootNodes","viewRefs","reattach","checkNoChanges","attachToViewContainerRef","detachFromAppRef","renderDetachView","attachToAppRef","RootViewRef","ComponentFactoryResolver","componentDef","ComponentFactory","toRefArray","nonMinified","templateName","ChainedInjector","stringifyCSSSelectorList","selectorList","isBoundToModule","projectableNodes","rootSelectorOrNode","environmentInjector","realEnvironmentInjector","rootViewInjector","hostRenderer","elementName","hostRNode","locateHostElement","elementOrSelector","getNamespace","rootFlags","rootTView","rootLView","tElementNode","createRootComponentView","viewRenderer","extractAttrsAndClassesFromSelector","nodesforSlot","createRootComponent","hostFeatures","instantiateRootComponent","rootTNode","LifecycleHooksFeature","ComponentRef","ComponentRef$1","_rootLView","ɵɵInheritDefinitionFeature","superType","getSuperType","shouldInheritFields","inheritanceChain","superDef","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","defData","mergeHostAttrsAcrossInheritance","prevViewQuery","prevContentQueries","prevHostBindings","_symbolIterator","isListLikeIterable","isJsObject","updateBinding","getBinding","bindingUpdated","bindingUpdated2","exp1","exp2","different","bindingUpdated3","exp3","bindingUpdated4","exp4","ɵɵattribute","elementAttributeInternal","interpolation1","v0","interpolation2","v1","ɵɵtemplate","attrsIndex","localRefsIndex","adjustedIndex","templateFirstCreatePass","tViewConsts","comment","ɵɵreference","getContextLView","ɵɵproperty","setDirectiveInputsWhichShadowsStyling","isClassBased","ɵɵelementStart","getNamespace$1","elementStartFirstCreatePass","getElementDepthCount","increaseElementDepthCount","ɵɵelementEnd","decreaseElementDepthCount","elementEnd","hasClassInput","hasStyleInput","ɵɵelement","ɵɵelementContainerStart","elementContainerStartFirstCreatePass","ɵɵelementContainerEnd","ɵɵelementContainer","ɵɵgetCurrentView","isSubscribable","ɵɵlistener","listenerFn","eventTargetResolver","listenerInternal","isTNodeDirectiveHost","processOutputs","lCleanupIndex","existingListener","findExistingListener","tNodeIdx","cleanupEventName","listenerIdxInLCleanup","__ngLastListenerFn__","__ngNextListenerFn__","wrapListener","propsLength","executeListenerWithErrorHandling","profiler","wrapWithPreventDefault","wrapListenerIn_markDirtyAndPreventDefault","nextListenerFn","ɵɵnextContext","nextContextImpl","walkUpViews","nestingLevel","matchingProjectionSlotIndex","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","getProjectAsAttrValue","ngProjectAsAttrIdx","ɵɵprojectionDef","componentNode","projectionHeads","tails","componentChild","slotIndex","ɵɵprojection","selectorIndex","applyProjection","ɵɵpropertyInterpolate","ɵɵpropertyInterpolate1","interpolatedValue","ɵɵpropertyInterpolate2","markDuplicates","tStylingKey","isPrevDir","isClassBinding","tStylingAtIndex","isMap","foundDuplicate","tStyleRangeAtCursor","isStylingMatch","tStylingKeyCursor","parserState","textEnd","keyEnd","getLastParsedKey","getLastParsedValue","parseClassNameNext","consumeClassToken","consumeWhitespace","parseStyleNext","consumeStyleKey","consumeSeparator","consumeStyleValue","ch1","ch2","ch3","lastChIndex","consumeQuotedText","resetParserState","quoteCharCode","ɵɵstyleProp","checkStylingProperty","ɵɵclassProp","ɵɵstyleMap","checkStylingMap","styleKeyValueArraySet","styleStringParser","parseStyle","ɵɵclassMap","classStringParser","parseClassName","stylingFirstUpdatePass","updateStyling","normalizeSuffix","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","updateStylingMap","oldKeyValueArray","newKeyValueArray","oldKey","newKey","setKey","toStylingKeyValueArray","styleKeyValueArray","unwrappedValue","isHostBindings","wrapInStaticStylingKey","stylingKey","hostDirectiveDef","residual","collectStylingFromTAttrs","collectStylingFromDirectives","templateStylingKey","getTemplateHeadTStylingKey","bindings","setTemplateHeadTStylingKey","collectResidual","insertTStylingBinding","tStylingKeyWithStatic","isHostBinding","tBindings","tmplHead","tmplTail","isKeyDuplicateOfStatic","staticKeyValueArray","setTStylingRangePrev","markDuplicateOfResidualStyling","currentDirective","desiredMarker","currentMarker","tRange","isStylingValuePresent","getTStylingRangeNextDuplicate","findStylingValue","getTStylingRangePrevDuplicate","applyStyling","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","ɵɵtext","textNative","ɵɵtextInterpolate","ɵɵtextInterpolate1","interpolated","ɵɵtextInterpolate2","ɵɵtextInterpolate3","v2","interpolation3","ɵɵtextInterpolate5","v3","v4","interpolation5","ɵɵclassMapInterpolate1","ɵɵhostProperty","ɵɵsyntheticHostProperty","loadComponentRenderer","currentDef","unwrapLView","localeEn","plural","LOCALE_DATA","findLocaleData","normalizedLocale","normalizeLocale","getLocaleData","parentLocale","getLocalePluralCase","LocaleDataIndex","PluralCase","ng","common","locales","LocaleId","DayPeriodsFormat","DayPeriodsStandalone","DaysFormat","DaysStandalone","MonthsFormat","MonthsStandalone","FirstDayOfWeek","WeekendRange","DateFormat","TimeFormat","DateTimeFormat","NumberSymbols","NumberFormats","CurrencyCode","CurrencySymbol","CurrencyName","Currencies","Directionality","ExtraData","pluralMapping","DEFAULT_LOCALE_ID","ELEMENT_MARKER","ICU_MARKER","I18nCreateOpCode","APPEND_EAGERLY","COMMENT","LOCALE_ID$1","setLocaleId","assertDefined","tNodeInsertBeforeIndex","i18nParent","anchorRNode","addTNodeAndUpdateInsertBeforeIndex","previousTNodes","newTNode","existingTNode","isI18nText","isNewTNodeCreatedBefore","getInsertBeforeIndex","setInsertBeforeIndex","getTIcu","createTNodePlaceholder","getCurrentICUCaseIndex","tIcu","currentCase","currentCaseLViewIndex","getParentFromIcuCreateOpCode","mergedCode","getRefFromIcuCreateOpCode","changeMask","changeMaskCounter","applyMutableOpCodes","mutableOpCodes","rootRNode","rootIdx","textNodeIndex","parentIdx","insertInFrontOf","refIdx","caseIndex","commentValue","commentNodeIndex","elementNodeIndex","applyUpdateOpCodes","updateOpCodes","bindingsStartIndex","checkBit","skipCodes","sanitizeFn","tNodeOrTagName","rText","applyIcuSwitchCase","applyIcuUpdateCase","activeCaseIndex","getCaseIndex","icuExpression","bindingValue","cases","resolvedCase","getPluralCase","applyIcuSwitchCaseRemove","removeCodes","nodeOrIcuIndex","loadIcuContainerVisitor","_stack","_removes","enterIcu","icuContainerIteratorNext","removeOpCode","icuContainerIteratorStart","BINDING_REGEXP","ICU_REGEXP","NESTED_ICU","ICU_BLOCK_REGEXP","SUBTEMPLATE_REGEXP","PH_REGEXP","NGSP_UNICODE_REGEXP","createTNodeAndAddOpCode","existingTNodes","createOpCodes","isICU","i18nNodeIdx","ensureIcuContainerVisitorLoaded","setTNodeInsertBeforeIndex","assertEqual","i18nStartFirstCreatePassProcessTextNode","hasBinding","generateBindingUpdateOpCodes","destinationNode","bindingStart","maskIndex","sizeIndex","textParts","textValue","toMaskBit","countBindings","opCodes","removeInnerTemplateTranslation","tagMatched","inTemplate","icuStart","bindingMask","addUpdateIcuSwitch","mainBinding","setTIcu","valueArr","nestedIcus","icuIndex","parseIcuCase","addUpdateIcuUpdate","parseICUBlock","icuType","i18nParseTextIntoPartsAndICU","binding","prevPos","braceStack","braces","caseName","unsafeCaseHtml","inertRootNode","walkIcuTree","sharedUpdateOpCodes","addCreateNodeAndAppend","lowerAttrName","addCreateAttribute","addRemoveNode","COMMENT_NODE","isNestedIcu","addRemoveNestedIcu","appendToParentIdx","createAtIdx","icuCreateOpCode","ɵɵi18nStart","messageIndex","subTemplateIndex","i18nStartFirstCreatePass","parentTNodeIndex","existingTNodeStack","getTranslationForTemplate","isRootTemplateMessage","msgParts","replaceNgsp","isClosing","tI18n","applyCreateOpCodes","isComment","appendNow","ɵɵi18n","ɵɵi18nEnd","ɵɵi18nAttributes","i18nAttributesFirstPass","previousElementIndex","ɵɵi18nExp","setMaskBit","ɵɵi18nApply","applyI18n","resolveProvider","lInjectablesBlueprint","providerFactory","beginIndex","existingFactoryIndex","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesProvidersFactoryExist","doesViewProvidersFactoryExist","multiFactory","factoryFn","componentProviders","multiFactoryAdd","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","contextIndex","indexInFactory","providerIsTypeProvider","providerIsClassProvider","isClassProvider","existingCallbacksIndex","isComponentProvider","lData","multiResolve","factories","componentCount","multiProviders","ɵɵProvidersFeature","viewProviders","processProvidersFn","NgModuleRef$1","NgModuleFactory$1","createNgModule","NgModuleRef","_parent","_bootstrapComponents","destroyCbs","_r3Injector","NgModuleFactory","moduleType","EnvironmentNgModuleRefAdapter","createEnvironmentInjector","debugName","StandaloneService","_injector","cachedInjectors","getOrCreateStandaloneInjector","standaloneInjector","ɵɵStandaloneFeature","ɵɵpureFunction0","slotOffset","pureFn","ɵɵpureFunction1","pureFunction1Internal","ɵɵpureFunction2","pureFunction2Internal","ɵɵpureFunction3","pureFunction3Internal","ɵɵpureFunction4","pureFunction4Internal","ɵɵpureFunction6","exp5","exp6","ɵɵpureFunction7","exp7","ɵɵpureFunction8","exp8","ɵɵpureFunctionV","exps","pureFunctionVInternal","bindingRoot","getPureFunctionReturnValue","returnValueIndex","lastReturnValue","ɵɵpipe","pipeName","getPipeDef","pipeFactory","pipeInstance","ɵɵpipeBind1","isPure","ɵɵpipeBind2","ɵɵpipeBind3","ɵɵpipeBind4","_wrapInTimeout","EventEmitter_","__isAsync","nextFn","errorFn","completeFn","symbolIterator","_results","_emitDistinctChangesOnly","_changesDetected","_changes","resultsTree","identityAccessor","newResultFlat","arrayEquals","valueA","valueB","notifyOnChanges","setDirty","injectTemplateRef","ViewEngineTemplateRef","R3TemplateRef","_declarationLView","_declarationTContainer","declarationViewLQueries","createTemplateRef","injectViewContainerRef","createContainerRef","VE_ViewContainerRef","R3ViewContainerRef","_lContainer","_hostTNode","_hostLView","getViewRefs","indexOrOptions","viewRef","componentFactoryOrType","isComponentFactory","isType","ngModuleRef","componentFactory","contextInjector","viewAttachedToContainer","prevIdx","prevLContainer","prevVCRef","adjustedIdx","_adjustIndex","insertView","containerLength","trackMovedView","addViewToContainer","parentNativeNode","getOrCreateViewRefs","viewRefsArr","detachedView","commentNode","nativeNextSibling","LQuery_","queryList","LQueries_","tQueries","noOfInheritedQueries","viewLQueries","tQuery","getByIndex","indexInDeclarationView","dirtyQueriesWithMatches","getTQuery","TQueryMetadata_","TQueries_","queriesForTemplateRef","childQueryIndex","tqueryClone","tquery","TQuery_","crossesNgTemplate","_appliesToNextNode","_declarationNodeIndex","isApplyingToNode","matchTNode","addMatch","declarationNodeIdx","matchTNodeWithReadOption","getIdxOfMatchingSelector","nodeMatchIdx","directiveOrProviderIdx","createResultForNode","matchingIdx","createResultByTNodeType","createSpecialToken","materializeViewResults","queryIndex","lQuery","tQueryMatches","matchedNodeIdx","collectQueryResults","lViewResults","embeddedLViews","ɵɵqueryRefresh","isCreationMode","ɵɵviewQuery","createTQuery","createLQuery","ɵɵcontentQuery","saveContentQueryAndDirectiveIndex","tViewContentQueries","ɵɵloadQuery","loadQueryInternal","ɵɵtemplateRefExtractor","ApplicationInitStatus","appInits","donePromise","rej","runInitializers","asyncInitPromises","initResult","observableAsPromise","APP_ID","_appIdRandomProviderFactory","_randomChar","PLATFORM_INITIALIZER","APP_BOOTSTRAP_LISTENER","Console","getGlobalLocale","ModuleWithComponentFactories","ngModuleFactory","componentFactories","Compiler","compileModuleSync","compileModuleAsync","compileModuleAndAllComponentsSync","declaration","compileModuleAndAllComponentsAsync","clearCacheFor","getModuleId","Zone","enableLongStackTrace","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","hasPendingMacrotasks","hasPendingMicrotasks","onUnstable","onMicrotaskEmpty","assertZonePatched","_nesting","_outer","_inner","AsyncStackTaggingZoneSpec","TaskTrackingZoneSpec","longStackTraceZoneSpec","lastRequestAnimationFrameId","nativeRequestAnimationFrame","getNativeRequestAnimationFrame","nativeCancelAnimationFrame","unpatchedRequestAnimationFrame","__symbol__","unpatchedCancelAnimationFrame","forkInnerZoneWithAngularBehavior","delayChangeDetectionForEventsDelegate","delayChangeDetectionForEvents","isCheckStableRunning","fakeTopEventTask","scheduleEventTask","updateMicroTaskStatus","checkStable","isAngularZone","onInvokeTask","task","applyThis","applyArgs","onEnter","invokeTask","onLeave","onInvoke","onHasTask","hasTaskState","hasTask","_hasPendingMicrotasks","microTask","macroTask","onHandleError","isInAngularZone","runTask","EMPTY_PAYLOAD","cancelTask","runGuarded","NoopNgZone","TESTABILITY","TESTABILITY_GETTER","_testabilityGetter","Testability","_ngZone","testabilityGetter","_pendingCount","_isZoneStable","_didWork","taskTrackingZone","setTestabilityGetter","addToWindow","_watchAngularEvents","assertNotInAngularZone","_runCallbacksIfReady","increasePendingRequestCount","decreasePendingRequestCount","doneCb","getPendingTasks","updateCb","macroTasks","creationLocation","addCallback","getPendingRequestCount","registerApplication","unregisterApplication","findProviders","using","TestabilityRegistry","_applications","testability","unregisterAllApplications","getTestability","getAllTestabilities","getAllRootElements","findTestabilityInTree","findInAncestors","_platformInjector","ALLOW_MULTIPLE_PLATFORMS","PLATFORM_DESTROY_LISTENERS","NgProbeToken","createPlatformFactory","parentPlatformFactory","desc","extraProviders","getPlatform","platformProviders","createPlatform","PlatformRef","runPlatformInitializers","inits","createPlatformInjector","assertPlatform","requiredToken","_modules","_destroyListeners","bootstrapModuleFactory","moduleFactory","getNgZone","ngZoneToUse","getNgZoneOptions","ngZoneEventCoalescing","ngZoneRunCoalescing","ngZoneInjector","moduleRef","exceptionHandler","_callAndReportToErrorHandler","initStatus","_moduleDoBootstrap","compilerOptions","optionsReducer","compileNgModuleFactory","ngDoBootstrap","module","destroyListeners","objs","_exceptionHandler","_bootstrapListeners","_views","_runningTick","_stable","componentTypes","_onMicrotaskEmptySubscription","isCurrentlyStable","stableSub","unstableSub","assertInAngularZone","merge$1","componentOrFactory","cf","compRef","_loadComponent","NG_DEV_MODE","viewCount","warnIfDestroyed","_devMode","_runModeLocked","ChangeDetectorRef","injectChangeDetectorRef","createViewRef","isPipe","DefaultIterableDifferFactory","trackByFn","DefaultIterableDiffer","trackByIdentity","_linkedRecords","_unlinkedRecords","_previousItHead","_itHead","_itTail","_additionsHead","_additionsTail","_movesHead","_movesTail","_removalsHead","_removalsTail","_identityChangesHead","_identityChangesTail","forEachItem","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","_nextRemoved","localMovePreviousIndex","localCurrentIndex","forEachPreviousItem","_nextPrevious","_nextAdded","forEachMovedItem","_nextMoved","_nextIdentityChange","check","itemTrackBy","mayBeDirty","trackById","_verifyReinsertion","_addIdentityChange","_mismatch","iterateListLike","_truncate","isDirty","previousRecord","_prev","_reinsertAfter","_moveAfter","_addAfter","IterableChangeRecord_","reinsertRecord","_addToMoves","nextRecord","_addToRemovals","_unlink","prevRecord","_prevRemoved","_insertAfter","_DuplicateMap","_prevDup","_nextDup","_DuplicateItemRecordList","atOrAfterIndex","duplicates","recordList","moveOffset","DefaultKeyValueDifferFactory","DefaultKeyValueDiffer","_records","_mapHead","_appendAfter","_previousMapHead","_changesHead","_changesTail","_nextChanged","_forEach","_maybeAddToChanges","_getOrCreateRecordForKey","_insertBeforeOrAppend","KeyValueChangeRecord_","_addToAdditions","_addToChanges","defaultIterableDiffersFactory","IterableDiffers","copied","defaultKeyValueDiffersFactory","KeyValueDiffers","platformCore","ApplicationModule","coerceToBoolean","elementInjector","BaseControlValueAccessor","_elementRef","onTouched","BuiltInControlValueAccessor","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","_isAndroid","ɵgetDOM","getUserAgent","_handleInput","_compositionStart","_compositionEnd","isEmptyInputValue","hasValidLength","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","requiredValidator","requiredTrueValidator","required","emailValidator","email","minLengthValidator","maxLengthValidator","patternValidator","validators","composeAsync","minlength","requiredLength","actualLength","maxlength","nullValidator","regexStr","requiredPattern","actualValue","toObservable","ɵisPromise","mergeErrors","arrayOfErrors","executeValidators","validator","normalizeValidators","isValidatorFn","presentValidators","composeValidators","composeAsyncValidators","mergeValidators","controlValidators","dirValidator","getControlValidators","_rawValidators","getControlAsyncValidators","_rawAsyncValidators","makeValidatorsArray","hasValidator","addValidators","currentValidators","validatorsToAdd","removeValidators","AbstractControlDirective","_onDestroyCallbacks","pristine","untouched","statusChanges","_setValidators","_composedValidatorFn","_setAsyncValidators","_composedAsyncValidatorFn","asyncValidator","_registerOnDestroy","_invokeOnDestroyCallbacks","errorCode","getError","ControlContainer","formDirective","valueAccessor","AbstractControlStatus","_cd","isTouched","isPristine","isInvalid","isPending","isSubmitted","submitted","NgControlStatus","NgControlStatusGroup","VALID","INVALID","PENDING","DISABLED","pickValidators","validatorOrOpts","isOptionsObj","coerceToValidator","pickAsyncValidators","asyncValidators","coerceToAsyncValidator","assertControlPresent","isGroup","assertAllValuesPresent","_forEachChild","AbstractControl","_pendingDirty","_hasOwnPendingAsyncValidator","_pendingTouched","_onCollectionChange","_onDisabledChange","validatorFn","asyncValidatorFn","_updateOn","setValidators","setAsyncValidators","addAsyncValidators","removeAsyncValidators","hasAsyncValidator","clearValidators","clearAsyncValidators","onlySelf","markAllAsTouched","_updateTouched","markAsDirty","markAsPristine","_updatePristine","markAsPending","skipPristineCheck","_parentMarkedDirty","_updateValue","_updateAncestors","changeFn","updateValueAndValidity","setParent","getRawValue","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","_allControlsDisabled","_asyncValidationSubscription","setErrors","_updateControlsErrors","currPath","_find","_initObservables","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_registerOnCollectionChange","_setUpdateStrategy","FormGroup","_setUpControls","registerControl","addControl","removeControl","setControl","controlName","patchValue","_reduceChildren","_syncPendingControls","subtreeUpdated","updated","_reduceValue","FormRecord","controlPath","setUpControl","setUpValidators","setUpViewChangePipeline","_pendingValue","_pendingChange","updateControl","setUpModelChangePipeline","emitModelEvent","viewToModelUpdate","_unregisterOnChange","setUpBlurPipeline","setUpDisabledChangeHandler","onDisabledChange","registerOnDisabledChange","_unregisterOnDisabledChange","cleanUpControl","validateControlPresenceOnChange","cleanUpValidators","isControlUpdated","updatedValidators","updatedAsyncValidators","emitModelToViewChange","setUpFormContainer","isPropertyUpdated","viewModel","syncPendingControls","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","isBuiltInAccessor","formDirectiveProvider$1","NgForm","resolvedPromise$1","_directives","ngSubmit","_findContainer","getControl","addFormGroup","removeFormGroup","getFormGroup","updateModel","onSubmit","onReset","resetForm","removeListItem","isFormControlState","formState","FormControl","_onChange","_applyFormState","nonNullable","initialValueIsDefault","emitViewToModelChange","UntypedFormControl","AbstractFormGroupDirective","_checkParentType","formControlBinding$1","NgModel","_changeDetectorRef","_registered","_checkForErrors","_checkName","oldName","_getPath","_setUpControl","_updateDisabled","_isStandalone","_setUpStandalone","disabledValue","ɵcoerceToBoolean","ɵNgNoValidate","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistryModule","RadioControlRegistry","_accessors","_isSameGroup","fireUncheck","controlPair","_control","_fn","formControlName","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding","FormControlDirective","_ngModelWarningConfig","_ngModelWarningSent","_isControlChanged","previousForm","_ngModelWarningSentOnce","formDirectiveProvider","FormGroupDirective","_updateDomValue","_checkFormPresent","_updateValidators","_updateRegistrations","_oldForm","removeListItem$1","_setUpFormContainer","_cleanUpFormContainer","addFormArray","removeFormArray","getFormArray","oldCtrl","newCtrl","isFormControl","cleanUpFormContainer","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString$1","_optionMap","_idCounter","_compareWith","compareWith","_getOptionId","_getOptionValue","_registerOption","_extractId$1","NgSelectOption","ngValue","_setElementValue","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString","optionSelectedStateSetter","opt","_setSelected","selectedOptions","_extractId","ɵNgSelectMultipleOption","toInteger","AbstractValidatorDirective","_validator","inputName","normalizeInput","createValidator","REQUIRED_VALIDATOR","RequiredValidator","MIN_LENGTH_VALIDATOR","MinLengthValidator","MAX_LENGTH_VALIDATOR","MaxLengthValidator","PATTERN_VALIDATOR","PatternValidator","ɵInternalFormsSharedModule","warnOnNgModelWithFormControl","FormArray","at","_registerControl","UntypedFormArray","isAbstractControlOptions","FormBuilder","useNonNullable","nnfb","reducedControls","_reduceControls","createdControls","_createControl","UntypedFormBuilder","controlsConfig","GenericBrowserDomAdapter","ɵDomAdapter","supportsDOMEvents","BrowserDomAdapter","ɵsetRootDomAdapter","onAndCancel","getDefaultDocument","createHtmlDocument","isShadowRoot","DocumentFragment","getBaseElementHref","baseElement","relativePath","urlParsingNode","resetBaseElement","TRANSITION_ID","SERVER_TRANSITION_PROVIDERS","appInitializerFactory","transitionId","BrowserXhr","EVENT_MANAGER_PLUGINS","_eventNameToPlugin","_plugins","_findPluginFor","addGlobalEventListener","getZone","EventManagerPlugin","SharedStylesHost","_stylesSet","addStyles","additions","onStylesAdded","getAllStyles","DomSharedStylesHost","_hostNodes","_addStylesToHost","styleNodes","styleEl","addHost","hostNode","removeHost","styleNode","NAMESPACE_URIS","xhtml","xlink","xml","xmlns","COMPONENT_REGEX","compId","decoratePreventDefault","DomRendererFactory2","eventManager","sharedStylesHost","rendererByCompId","defaultRenderer","DefaultDomRenderer2","EmulatedEncapsulationDomRenderer2","applyToHost","ShadowDomRenderer","isTemplateNode","namespaceUri","setAttributeNS","removeAttributeNS","removeProperty","contentAttr","shimContentAttribute","componentShortId","hostAttr","shimHostAttribute","hostEl","nodeOrShadowRoot","DomEventsPlugin","MODIFIER_KEYS","_keyMap","Del","Menu","Scroll","Win","MODIFIER_KEY_GETTERS","KeyEventsPlugin","parseEventName","outsideHandler","eventCallback","fullKey","domEventName","_normalizeKey","codeIX","modifierName","fullKeyCode","keycode","modifierGetter","matchEventFullKeyCode","keyName","platformBrowser","ɵPLATFORM_BROWSER_ID","initDomAdapter","makeCurrent","ɵsetDocument","BROWSER_MODULE_PROVIDERS_MARKER","TESTABILITY_PROVIDERS","ɵTESTABILITY_GETTER","BrowserGetTestability","ɵglobal","testabilities","didWork","decrement","didWork_","ɵTESTABILITY","BROWSER_MODULE_PROVIDERS","ɵINJECTOR_SCOPE","providersAlreadyPresent","Meta","addTag","forceCreation","_getOrCreateElement","addTags","getTag","attrSelector","getTags","_parseSelector","_setMetaElementAttributes","removeTagElement","_containsAttributes","_getMetaKeyMap","META_KEYS_MAP","createMeta","httpEquiv","newTitle","DomSanitizer","DomSanitizerImpl","ɵallowSanitizationBypassAndThrow","ɵunwrapSafeValue","ɵ_sanitizeHtml","ɵ_sanitizeUrl","bypassSecurityTrustHtml","ɵbypassSanitizationTrustHtml","bypassSecurityTrustStyle","ɵbypassSanitizationTrustStyle","bypassSecurityTrustScript","ɵbypassSanitizationTrustScript","bypassSecurityTrustUrl","ɵbypassSanitizationTrustUrl","bypassSecurityTrustResourceUrl","ɵbypassSanitizationTrustResourceUrl","domSanitizerImplFactory","takeLast","PRIMARY_OUTLET","RouteTitleKey","ParamsAsMap","convertToParamMap","defaultUrlMatcher","segmentGroup","posParams","consumed","shallowEqual","equalArraysOrString","aSorted","bSorted","wrapIntoObservable","ɵisObservable","pathCompareMap","exact","equalSegmentGroups","containee","matrixParams","equalPath","matrixParamsMatch","numberOfChildren","subset","containsSegmentGroup","paramCompareMap","equalParams","containsParams","ignored","containsTree","fragment","containsSegmentGroupHelper","containeePaths","containerPaths","containeeSegment","UrlTree","queryParamMap","_queryParamMap","DEFAULT_SERIALIZER","UrlSegmentGroup","serializePaths","UrlSegment","parameterMap","_parameterMap","serializePath","UrlSerializer","DefaultUrlSerializer","UrlParser","parseRootSegment","parseQueryParams","parseFragment","tree","serializeSegment","serializeQueryParams","strParams","encodeUriQuery","encodeUriFragment","mapChildrenIntoArray","childOutlet","encodeUriString","encodeUriSegment","decode","decodeQuery","serializeMatrixParams","SEGMENT_RE","matchSegments","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","parseParens","parseMatrixParams","parseParam","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodedVal","currentVal","allowPrimary","outletName","createRoot","rootCandidate","jn","squashSegmentGroup","newChildren","childCandidate","mergeTrivialChildren","isUrlTree","createUrlTree","urlTree","commands","computeNavigation","Navigation","numberOfDoubleDots","isAbsolute","cmd","cmdIdx","outlets","segmentPath","urlPart","partIndex","toRoot","createTreeUsingPathIndex","lastPathIndex","startingPosition","findStartingPosition","createPositionApplyingDoubleDots","dd","isMatrixParams","_urlSegment","processChildren","updateSegmentGroupChildren","updateSegmentGroup","_lastPathIndex","isCommandWithOutlets","oldRoot","oldSegmentGroup","newSegmentGroup","qp","replaceSegment","newRoot","oldSegment","newSegment","cmdWithOutlet","prefixedWith","currentCommandIndex","currentPathIndex","noMatch","pathIndex","commandIndex","slicedCommands","createNewSegmentGroup","getOutlets","outlet","createNewSegmentChildren","RouterEvent","NavigationStart","navigationTrigger","restoredState","NavigationEnd","urlAfterRedirects","NavigationCancel","NavigationError","RoutesRecognized","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","RouteConfigLoadEnd","ChildActivationStart","routeConfig","ChildActivationEnd","ActivationStart","ActivationEnd","routerEvent","Tree","pathFromRoot","findPath","cc","TreeNode","nodeChildrenAsMap","RouterState","setRouterState","createEmptyState","rootComponent","createEmptyStateSnapshot","ActivatedRouteSnapshot","RouterStateSnapshot","emptyUrl","emptyParams","emptyData","emptyQueryParams","ActivatedRoute","futureSnapshot","_futureSnapshot","_routerState","paramMap","_paramMap","inheritedParamsDataResolve","paramsInheritanceStrategy","inheritingStartingFrom","flattenInherited","_resolvedData","urlSegment","correctedLastPathIndex","_correctedLastPathIndex","_resolve","serializeNode","advanceActivatedRoute","nextSnapshot","shallowEqualArrays","equalParamsAndUrlSegments","equalUrlParams","equalSegments","createNode","routeReuseStrategy","prevState","shouldReuseRoute","createOrReuseChildren","shouldAttach","detachedRouteHandle","retrieve","createActivatedRoute","NAVIGATION_CANCELING_ERROR","redirectingNavigationError","urlSerializer","navigationBehaviorOptions","navigationCancelingError","cancellationCode","isRedirectingNavigationCancelingError$1","isNavigationCancelingError$1","OutletContext","ChildrenOutletContexts","attachRef","contexts","onChildOutletCreated","childName","getOrCreateContext","onChildOutletDestroyed","onOutletDeactivated","onOutletReAttached","NG_DEV_MODE$7","RouterOutlet","parentContexts","_activatedRoute","activateEvents","deactivateEvents","attachEvents","detachEvents","attach","activateWith","isActivated","activatedRoute","activatedRouteData","resolverOrInjector","childContexts","OutletInjector","isComponentFactoryResolver","ɵEmptyOutletComponent","getOrCreateRouteInjectorIfNeeded","currentInjector","standardizeConfig","loadComponent","getOutlet","sortByMatchingOutlets","routes","sortedConfig","getClosestRouteInjector","_loadedInjector","ActivateRoutes","futureState","currState","forwardEvent","futureRoot","currRoot","deactivateChildRoutes","activateChildRoutes","futureNode","currNode","futureChild","childOutletName","deactivateRoutes","deactivateRouteAndItsChildren","future","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","activateRoutes","stored","cmpFactoryResolver","CanActivate","CanDeactivate","getAllRouteGuards","getChildRouteGuards","getTokenOrFunctionIdentity","tokenOrFunction","ɵisInjectable","futurePath","canDeactivateChecks","canActivateChecks","prevChildren","getRouteGuards","shouldRun","shouldRunGuardsAndResolvers","runGuardsAndResolvers","isEmptyError","INITIAL_VALUE","prioritizedGuardValue","redirectIfUrlTree","noMatch$1","consumedSegments","remainingSegments","positionalParamSegments","matchWithChecks","runCanMatchGuards","canMatch","canMatchObservables","injectionToken","guard","isCanMatch","slicedSegments","containsEmptyPathMatchesWithNamedOutlets","emptyPathMatch","createChildrenForEmptyPaths","primarySegment","_sourceSegment","_segmentIndexShift","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","isImmediateMatch","rawSegment","noLeftoversInUrl","NG_DEV_MODE$6","NoMatch$1","AbsoluteRedirect","absoluteRedirect","newTree","ApplyRedirects","configLoader","allowRedirects","splitGroup","rootSegmentGroup","expandSegmentGroup","noMatchError","expandChildren","expandSegment","childOutlets","sortedRoutes","expandedChild","last$1","expandSegmentAgainstRoute","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","lineralizeSegments","newSegments","rawSegmentGroup","_loadedRoutes","cfg","getChildConfig","routerConfig","childInjector","childConfig","splitSegmentGroup","matchedOnOutlet","runCanLoadGuards","canLoad","canLoadObservables","isCanLoad","shouldLoadResult","canLoadFails","applyRedirectCreateUrlTree","createSegmentGroup","createQueryParams","redirectToParams","actualParams","sourceName","updatedSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","NoMatch","rootComponentType","processSegmentGroup","routeState","inheritParamsAndData","routeNode","processSegment","outletChildren","mergedChildren","mergeEmptyPathMatches","sortActivatedRouteSnapshots","processSegmentAgainstRoute","matchResult","pathIndexShift","getPathIndexShift","_loadedComponent","getSourceSegmentGroup","getResolve","hasEmptyPathConfig","mergedNodes","duplicateEmptyPathNode","resultNode","mergedNode","hasStaticTitle","switchTap","nextResult","TitleStrategy","buildTitle","pageTitle","getResolvedTitleForRoute","DefaultTitleStrategy","updateTitle","RouteReuseStrategy","DefaultRouteReuseStrategy","BaseRouteReuseStrategy","detachedTree","ROUTER_CONFIGURATION","ROUTES","RouterConfigLoader","compiler","componentLoaders","childrenLoaders","onLoadStartListener","loadRunner","onLoadEndListener","loadModuleFactoryOrRoutes","factoryOrRoutes","rawRoutes","requireStandaloneComponents","NG_DEV_MODE$3","UrlHandlingStrategy","DefaultUrlHandlingStrategy","shouldProcessUrl","extract","newUrlPart","wholeUrl","defaultMalformedUriErrorHandler","exactMatchOptions","subsetMatchOptions","setupRouter","defaultTitleStrategy","titleStrategy","urlHandlingStrategy","Router","assignExtraOptionsToRouter","malformedUriErrorHandler","urlUpdateStrategy","canceledNavigationResolution","rootContexts","lastSuccessfulNavigation","currentNavigation","disposed","navigationId","currentPageId","isNgZoneEnabled","navigated","lastSuccessfulId","afterPreactivation","triggerEvent","ɵConsole","resetConfig","currentUrlTree","createEmptyUrlTree","rawUrlTree","browserUrlTree","routerState","targetPageId","currentRawUrl","extractedUrl","rawUrl","extras","targetSnapshot","currentRouterState","targetRouterState","guards","guardsResult","navigations","setupNavigations","processNavigations","browserPageId","ɵrouterPageId","eventsSubject","overallTransitionState","initialUrl","previousNavigation","urlTransition","isBrowserTriggeredNavigation","serializeUrl","applyRedirects","applyRedirects$1","finalUrl","serializer","recognize$1","newObservableError","skipLocationChange","setBrowserUrl","routesRecognized","navStart","replaceUrl","guardsStart","checkGuards","runCanDeactivateChecks","futureRSS","currRSS","runCanDeactivate","currARS","canDeactivate","canDeactivateObservables","closestInjector","isCanDeactivate","runCanActivateChecks","fireChildActivationStart","fireActivationStart","runCanActivateChild","futureARS","canActivateChildGuardsMapped","getCanActivateChild","canActivateChild","guardsMapped","isCanActivateChild","runCanActivate","canActivateObservables","isCanActivate","guardsEnd","restoreHistory","cancelNavigationTransition","resolveStart","dataResolved","resolveData","canActivateChecksResolved","runResolve","resolveNode","getDataKeys","getOwnPropertySymbols","getResolver","resolvedData","resolveEnd","loadComponents","loaders","loadedComponent","createRouterState","navCancel","mergedTree","scheduleNavigation","navError","resetRootComponentType","setTransition","setUpLocationChangeListener","locationSubscription","stateCopy","parseUrl","getCurrentNavigation","navigationExtras","relativeTo","queryParamsHandling","preserveFragment","removeEmptyProps","validateCommands","matchOptions","priorPromise","generateNgRouterState","restoringFromCaughtError","targetPagePosition","resetState","resetUrlToCurrentUrlTree","routerPageId","RouterLink","tabIndexAttribute","_preserveFragment","_skipLocationChange","_replaceUrl","onChanges","setTabIndexIfNotOnNativeEl","newTabIndex","routerLink","RouterLinkWithHref","updateTargetUrlAndHref","PreloadingStrategy","RouterPreloader","preloadingStrategy","setUpPreloading","preload","processRoutes","injectorForCurrentRoute","injectorForChildren","preloadConfig","loadedChildren$","recursiveLoadChildren$","loadComponent$","ROUTER_SCROLLER","RouterScroller","viewportScroller","lastId","lastSource","restoredId","routerEventsSubscription","createScrollEvents","scrollEventsSubscription","consumeScrollEvents","scheduleScrollEvent","routerFeature","ɵkind","provideRoutes","getBootstrapListener","bootstrappedComponentRef","bootstrapDone","BOOTSTRAP_DONE","INITIAL_NAVIGATION","ROUTER_PRELOADER","withPreloading","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","rootRoute","routerNgProbeToken","provideForRootGuard","useHash","provideInitialNavigation","ROUTER_INITIALIZER","locationInitialized","initNavigation","afterNextNavigation","getOppositePlacement","placement","getBasePlacement","getOppositeVariationPlacement","basePlacements","popper","variationPlacements","placements","modifierPhases","isElement","isHTMLElement","ShadowRoot","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","visualViewport","addVisualOffsets","offsetLeft","getWindowScroll","getWindowScrollBarX","getNodeName","getParentNode","assignedSlot","isScrollParent","_getComputedStyle","getScrollParent","listScrollParents","_element$ownerDocumen","scrollParent","isBody","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","getContainingBlock","perspective","contain","willChange","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","getViewportRect","layoutViewport","getInnerBoundingClientRect","getDocumentRect","winScroll","getVariation","getMainAxisFromPlacement","computeOffsets","_ref","reference","basePlacement","variation","commonX","commonY","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","popperRect","rects","clippingClientRect","getClippingRect","mainClippingParents","getClippingParents","clippingParents","clipperElement","clippingRect","accRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","getExpandedFallbackPlacements","oppositePlacement","computeAutoPlacement","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","_loop","fittingPlacement","requiresIfExists","within","mathMax","mathMin","getLayoutRect","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","getAltAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_len","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","modifiers_arrow","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","effect","_ref2","_options$element","requires","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","getNodeScroll","getHTMLElementScroll","order","depModifier","debounce","areValidElements","popperGenerator","generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","orderedModifiers","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","scrollParents","orderModifiers","mergeByName","runModifierEffects","_ref$options","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","passive","unsetSides","mapToStyles","_Object$assign2","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","roundOffsetsByDPR","dpr","createPopper","_options$scroll","_options$resize","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","applyStyles","_options$offset","distanceAndSkiddingToXY","invertDistance","skidding","_data$state$placement","_r34","selectPage","_r40","_r43","_r46","_r49","isContainedIn","matchesSelectorIfAny","isMobile","ngbAutoClose","closed$","insideElements","insideSelector","wrapAsyncForMobile","escapes$","mouseDowns$","closeableClicks$","withLatestFrom","shouldClose","race","raceInit","FOCUSABLE_ELEMENTS_SELECTOR","placementSeparator","spacesRegExp","bootstrapPopperMatches","popperStartPrimaryPlacement","popperEndPrimaryPlacement","popperStartSecondaryPlacement","popperEndSecondaryPlacement","getPopperOptions","baseClass","placementVals","hasAuto","popperPlacements","_placement","getPopperClassPlacement","leftClass","rightClass","bsClassRegExp","popperElement","popperPlacement","getBootstrapBaseClassPlacement","newPrimary","classnames","newSecondary","classname","NgbRTL","NgbDropdownConfig","popperOptions","NgbNavbar","NgbDropdownItem","NgbDropdownMenu","dropdown","NgbDropdown","NgbDropdownAnchor","NgbDropdownToggle","_changeDetector","ngbNavbar","_destroyCloseHandlers$","_bodyContainer","openChange","_positioning","ngbPositioning","popperInstance","positioningOption","updatePopperOptions","createPopperLite","_applyPlacementClasses","_setCloseHandlers","_applyContainer","_menu","appendToBody","dropdownClass","_applyCustomDropdownClass","addPopperOffset","offset$1","_zoneSubscription","_positionMenu","_resetContainer","itemElements","_getMenuElements","itemElement","isEventFromToggle","_isEventFromToggle","_isDropup","focusableElements","menu","menuItems","_getFirstPlacement","dropdownMenuElement","bodyContainer","newClass","oldClass","dropdownElement","NgbPaginationConfig","boundaryLinks","directionLinks","ellipses","NgbPaginationEllipsis","NgbPaginationFirst","NgbPaginationLast","NgbPaginationNext","NgbPaginationNumber","NgbPaginationPrevious","NgbPaginationPages","NgbPagination","pageCount","pages","page","hasPrevious","nextDisabled","previousDisabled","pageNumber","_updatePages","isEllipsis","_applyEllipses","_applyRotation","leftOffset","_applyPagination","_setPageInRange","newPageNo","prevPageNo","getValueInRange","collectionSize","newPage","i18n_40","i18n_44","i18n_47","i18n_50","i18n_52","NgbPaginationModule","ARIA_LIVE_DELAY_FACTORY","NgbModule","TranslateFakeLoader","MissingTranslationHandler","FakeMissingTranslationHandler","o1","o2","keySet","isDefined","mergeDeep","ut","TranslateParser","TranslateDefaultParser","templateMatcher","interpolate","interpolateString","interpolateFunction","TranslateCompiler","TranslateFakeCompiler","compileTranslations","translations","TranslateStore","currentLang","defaultLang","onTranslationChange","onLangChange","onDefaultLangChange","USE_STORE","USE_DEFAULT_LANG","DEFAULT_LANGUAGE","USE_EXTEND","TranslateService","currentLoader","parser","missingTranslationHandler","useDefaultLang","isolate","defaultLanguage","_onTranslationChange","_onLangChange","_onDefaultLangChange","_langs","_translations","_translationRequests","_defaultLang","_currentLang","retrieveTranslations","changeDefaultLang","getDefaultLang","changeLang","loadingTranslations","updateLangs","setTranslation","shouldMerge","getLangs","addLangs","getParsedResult","translateService","getStreamOnTranslationChange","instant","reloadLang","resetLang","getBrowserLang","languages","browserLanguage","userLanguage","getBrowserCultureLang","browserCultureLang","TranslateDirective","onTranslationChangeSub","checkNodes","onLangChangeSub","onDefaultLangChangeSub","translateParams","currentParams","setContent","lastKey","lookupKey","getContent","trimmedContent","originalContent","lastParams","onTranslation","TranslatePipe","validArgs","SyntaxError","_dispose","timeoutErrorFactory","retryWhen","errors$","syncResub","subscribeForRetryWhen","configOrCount","resetOnSuccess","soFar","subscribeForRetry","resub","notifierSubscriber","base64UrlEncoding","bits","base64url","string","_opts$out","codes","loose","written","HttpBaseService","prepareHeaders","prepareParams","headersParams","ConfigLoaded","CheckingAuth","CheckingAuthFinished","CheckingAuthFinishedWithError","ConfigLoadingFailed","CheckSessionReceived","UserDataChanged","NewAuthenticationResult","TokenExpired","IdTokenExpired","SilentRenewStarted","Warn","AbstractLoggerService","LoggerService","abstractLoggerService","logError","configuration","loggingIsTurnedOff","messageToLog","logWarning","logLevelIsSet","currentLogLevelIsEqualOrSmallerThan","logDebug","logLevelToCompare","possibleObject","BrowserStorageService","loggerService","abstractSecurityStorage","hasStorage","storedConfig","write","Storage","StoragePersistenceService","browserStorageService","resetStorageFlowData","resetAuthStateInStorage","getAccessToken","getIdToken","id_token","getRefreshToken","refreshToken","refresh_token","allowUnsafeReuseRefreshToken","getAuthenticationResult","PublicEventsService","fireEvent","TokenHelperService","getTokenExpirationDate","dataIdToken","setUTCSeconds","getSigningInputFromToken","encoded","tokenIsValid","getHeaderFromToken","getPayloadFromToken","getPartOfToken","getSignatureFromToken","partOfToken","extractPartOfToken","urlBase64Decode","decoded","Buffer","JwkExtractor","extractJwk","spec","throwOnEmpty","InvalidArgumentError","foundKeys","kid","kty","NoMatchingKeysError","SeveralMatchingKeysError","buildErrorName","CryptoService","crypto","msCrypto","JwkWindowCryptoService","cryptoService","importVerificationKey","algorithm","subtle","importKey","verifyKey","verifyAlgorithm","cryptoKey","signature","signingInput","verify","TextEncoder","JwtWindowCryptoService","generateCodeChallenge","codeVerifier","calcHash","challengeRaw","base64UrlEncode","generateAtHash","tokenHash","btoa","valueToHash","msgBuffer","digest","hashBuffer","hashArray","toHashString","byteArray","TokenValidationService","tokenHelperService","jwkExtractor","jwkWindowCryptoService","jwtWindowCryptoService","keyAlgorithms","hasIdTokenExpired","offsetSeconds","disableIdTokenValidation","validateIdTokenExpNotExpired","decodedIdToken","tokenExpirationDate","tokenExpirationValue","nowWithOffset","calculateNowWithOffset","tokenNotExpired","millisToMinutesAndSeconds","toLocaleTimeString","validateAccessTokenNotExpired","accessTokenExpiresAt","accessTokenExpirationValue","validateRequiredIdToken","validated","validateIdTokenIatMaxOffset","maxOffsetAllowedInSeconds","disableIatOffsetValidation","dateTimeIatIdToken","iat","maxOffsetAllowedInMilliseconds","validateIdTokenNonce","localNonce","refreshTokenNoncePlaceholder","validateIdTokenIss","authWellKnownEndpointsIssuer","iss","validateIdTokenAud","aud","validateIdTokenAzpExistsIfMoreThanOneAud","azp","validateIdTokenAzpValid","validateStateFromHashCallback","localState","validateSignatureIdToken","idToken","jwtkeys","headerData","alg","alg2kty","getImportAlg","rawSignature","getVerifyAlg","namedCurve","validateIdTokenAtHash","atHash","idTokenAlg","sha","newHash","millis","DEFAULT_AUTHRESULT","allConfigsAuthenticated","AuthStateService","storagePersistenceService","publicEventsService","tokenValidationService","authenticatedInternal$","authenticated$","setAuthenticatedAndFireEvent","allConfigs","composeAuthenticatedResult","setUnauthenticatedAndFireEvent","currentConfig","composeUnAuthenticatedResult","updateAndPublishAuthState","authenticationResult","setAuthorizationData","authResult","persistAccessTokenExpirationTime","decodeURIComponentSafely","areAuthStorageTokensValid","hasIdTokenExpiredAndRenewCheckIsEnabled","hasAccessTokenExpiredIfExpiryExists","enableIdTokenExpiredValidationInRenew","tokenToCheck","idTokenExpired","accessTokenExpiresIn","hasExpired","hasAccessToken","hasIdToken","expires_in","accessTokenExpiryTime","checkAllConfigsIfTheyAreAuthenticated","IFrameService","getExistingIFrame","iFrameOnParent","getIFrameFromParentWindow","isIFrameElement","iFrameOnSelf","getIFrameFromWindow","addIFrameToWindowBody","sessionIframe","iFrameElement","HTMLIFrameElement","IFRAME_FOR_CHECK_SESSION_IDENTIFIER","CheckSessionService","iFrameService","checkSessionReceived","lastIFrameRefresh","outstandingMessages","heartBeatInterval","iframeRefreshInterval","checkSessionChangedInternal$","checkSessionChanged$","isCheckSessionConfigured","startCheckSession","scheduledHeartBeatRunning","pollServerSession","clearScheduledHeartBeat","serverStateChanged","getExistingIframe","authWellKnownEndPoints","existingIframe","getOrCreateIframe","checkSessionIframe","contentWindow","pollServerSessionRecur","sessionState","iframeOrigin","messageHandler","existingIFrame","bindMessageEventToIframe","iframeMessageEvent","CurrentUrlService","getStateParamFromCurrentUrl","getCurrentUrl","currentUrlHasStateParam","ValidationResult","NotSet","StatesDoNotMatch","SignatureFailed","IncorrectNonce","RequiredPropertyMissing","MaxOffsetExpired","IssDoesNotMatchIssuer","NoAuthWellKnownEndPoints","IncorrectAud","IncorrectIdTokenClaimsAfterRefresh","IncorrectAzp","IncorrectAtHash","Ok","LoginRequired","SecureTokenServerError","UriEncoder","RandomService","createRandom","randomString","dec","FlowsDataService","randomService","createNonce","setNonce","getAuthStateControl","setAuthStateControl","authStateControl","getExistingOrCreateAuthStateControl","setSessionState","getCodeVerifier","createCodeVerifier","isCodeFlowInProgress","storageObject","getCodeFlowInProgressStorageEntry","setCodeFlowInProgress","resetCodeFlowInProgress","storageEntry","isSilentRenewRunning","silentRenewTimeoutInSeconds","getSilentRenewRunningStorageEntry","timeOutInMilliseconds","dateOfLaunchedProcessUtc","currentDateUtc","resetSilentRenewRunning","setSilentRenewRunning","FlowHelper","isCurrentFlowCodeFlow","currentFlowIs","isCurrentFlowAnyImplicitFlow","isCurrentFlowImplicitFlowWithAccessToken","isCurrentFlowImplicitFlowWithoutAccessToken","isCurrentFlowCodeFlowWithRefreshTokens","flowTypes","CALLBACK_PARAMS_TO_CHECK","UrlService","flowsDataService","flowHelper","getUrlParameter","urlToCheck","isCallbackFromSts","getRefreshSessionSilentRenewUrl","customParams","createUrlCodeFlowWithSilentRenew","createUrlImplicitFlowWithSilentRenew","getAuthorizeParUrl","requestUri","authorizationEndpoint","urlParts","authorizationUrl","createHttpParams","getAuthorizeUrl","authOptions","createUrlCodeFlowAuthorize","createUrlImplicitFlowAuthorize","createEndSessionUrl","idTokenHint","customParamsEndSession","isAuth0Endpoint","composeAuth0Endpoint","endSessionEndpoint","authorizationEndSessionUrl","getPostLogoutRedirectUrl","appendCustomParams","createRevocationEndpointBodyAccessToken","getClientId","createRevocationEndpointBodyRefreshToken","getRevocationEndpointUrl","revocationEndpoint","createBodyForCodeFlowCodeRequest","customTokenParams","disablePkce","silentRenewUrl","getSilentRenewUrl","getRedirectUrl","createBodyForCodeFlowRefreshTokensRequest","customParamsRefresh","createBodyForParCodeFlowRequest","customParamsRequest","codeChallenge","hdParam","customParamsAuthRequest","createAuthorizeUrl","customRequestParams","mergedParams","overWriteParam","getCodeChallenge","existingParams","CodeFlowCallbackHandlerService","urlService","codeFlowCallback","isRenewProcess","jwtKeys","validationResult","existingIdToken","codeFlowCodeRequest","callbackContext","tokenEndpoint","bodyForCodeFlow","customParamsCodeRequest","session_state","handleRefreshRetry","refreshTokenRetryInSeconds","DEFAULT_USERRESULT","allUserData","oidcDataService","userDataInternal$","userData$","getAndPersistUserDataInStore","currentConfiguration","existingUserDataFromStorage","getUserDataFromStore","haveUserData","setUserDataToStore","getUserDataOidcFlowAndSave","publishUserDataIfExists","fireUserDataEvent","resetUserDataInStore","idTokenSub","getIdentityUserData","validateUserDataSubIdToken","userInfoEndpoint","userDataSub","passedUserData","composeSingleOrMultipleUserDataObject","composeSingleUserDataResult","currentConfigIsToUpdate","alreadySavedUserData","ResetAuthDataService","authStateService","resetAuthorizationData","ImplicitFlowCallbackHandlerService","resetAuthDataService","implicitFlowCallback","isRenewProcessData","resultData","SigninKeyDataService","getSigningKeys","jwksUri","handleErrorGetSigningKeys","errorResponse","errMsg","JWT_KEYS","HistoryJwtKeysCallbackHandlerService","signInKeyDataService","callbackHistoryAndResetJwtKeys","historyCleanUpTurnedOn","resetBrowserHistory","handleResultErrorFromCallback","storeSigningKeys","storedJwtKeys","readSigningKeys","historyCleanupOff","UserCallbackHandlerService","callbackUser","publishAuthState","publishUnauthenticatedState","stateValidationResult","StateValidationResult","authResponseIsValid","at_hash","EqualityService","isStringEqualOrNonOrderedArrayEqual","oneValueIsStringAndTheOtherIsArray","bothValuesAreStrings","arraysHaveEqualContent","areEqual","bothValuesAreArrays","arraysStrictEqual","bothValuesAreObjects","valueIsString","valueIsObject","arr1","arr2","StateValidationService","equalityService","getValidatedStateResult","validateState","toReturn","handleUnsuccessfulValidation","access_token","issValidationOff","isSignatureIdTokenValid","authNonce","isIdTokenAfterRefreshTokenRequestValid","validateDefault","handleSuccessfulValidation","idTokenHeader","newIdToken","disableRefreshIdTokenAuthTimeValidation","auth_time","StateValidationCallbackHandlerService","stateValidationService","callbackStateValidation","publishUnauthorizedState","RefreshSessionCallbackHandlerService","refreshSessionWithRefreshTokens","stateData","RefreshTokenCallbackHandlerService","refreshTokensRequestTokens","FlowsService","codeFlowCallbackHandlerService","implicitFlowCallbackHandlerService","historyJwtKeysCallbackHandlerService","userHandlerService","stateValidationCallbackHandlerService","refreshSessionCallbackHandlerService","refreshTokenCallbackHandlerService","processCodeFlowCallback","processSilentRenewCodeFlowCallback","firstContext","processImplicitFlowCallback","processRefreshToken","IntervalService","runTokenValidationRunning","isTokenValidationRunning","stopPeriodicTokenCheck","startPeriodicTokenCheck","repeatAfterSeconds","millisecondsDelayBetweenTokenCheck","intervalId","ImplicitFlowCallbackService","flowsService","intervalService","authenticatedImplicitFlowCallback","IFRAME_FOR_SILENT_RENEW_IDENTIFIER","SilentRenewService","implicitFlowCallbackService","refreshSessionWithIFrameCompletedInternal$","refreshSessionWithIFrameCompleted$","isSilentRenewConfigured","codeFlowCallbackSilentRenewIframe","silentRenewEventHandler","callback$","CodeFlowCallbackService","authenticatedCallbackWithCode","CallbackService","codeFlowCallbackService","stsCallbackInternal$","stsCallback$","isCallback","handleCallbackAndFireEvents","currentCallbackUrl","WELL_KNOWN_SUFFIX","AuthWellKnownDataService","getWellKnownEndPointsForConfig","authWellknownEndpointUrl","getWellKnownDocument","wellKnownEndpoints","jwks_uri","authorization_endpoint","token_endpoint","userinfo_endpoint","end_session_endpoint","check_session_iframe","revocation_endpoint","introspectionEndpoint","introspection_endpoint","parEndpoint","pushed_authorization_request_endpoint","wellKnownEndpoint","AuthWellKnownService","storeWellKnownEndpoints","mappedWellKnownEndpoints","queryAndStoreAuthWellKnownEndPoints","alreadySavedWellKnownEndpoints","RefreshSessionIframeService","silentRenewService","refreshSessionWithIframe","sendAuthorizeRequestUsingSilentRenew","initSilentRenewRequest","onLoadHandler","instanceId","initDestroyHandler","renewDestroyHandler","RefreshSessionRefreshTokenService","RefreshSessionService","authWellKnownService","refreshSessionIframeService","refreshSessionRefreshTokenService","userForceRefreshSession","extraCustomParams","persistCustomParams","forceRefreshSession","customParamsRefreshTokenRequest","startRefreshSession","timeOutTime","schedulerArg","with","_with","originalSourceSubscription","timerSubscription","startTimer","timeoutRetryStrategy","errorAttempts","currentAttempt","MAX_RETRY_ATTEMPTS","scalingDuration","usePushedAuthorisationRequests","customParamsEndSessionRequest","tokenRefreshInSeconds","POSITIVE_VALIDATION_RESULT","allRules","passedConfig","hasRefreshToken","hasSilentRenew","hasOfflineScope","allMultipleConfigRules","passedConfigs","allIdentifiers","createIdentifierToCheck","arrayHasDuplicates","ConfigValidationService","validateConfigs","validateConfigsInternal","validateConfig","validateConfigInternal","allRulesToUse","allValidationResults","overallErrorCount","processValidationResultsAndGetErrorCount","allMessages","allErrorMessages","getAllMessagesOfType","allWarnings","PlatformProvider","StsConfigLoader","StsConfigStaticLoader","loadConfigs","configValidationService","platformProvider","configsInternal","hasManyConfigs","getOpenIDConfiguration","configsAlreadySaved","getOpenIDConfigurations","prepareAndSaveConfigs","allPreparedConfigs","hasAtLeastOneConfig","saveConfig","readyConfig","createUniqueIds","allHandleConfigs$","handleConfig","usedConfig","prepareConfig","configWithAuthWellKnown","enhanceConfigWithWellKnownEndpoint","alreadyExistingAuthWellKnownEndpoints","passedAuthWellKnownEndpoints","openIdConfigurationInternal","setSpecialCases","PeriodicallyTokenCheckService","startTokenValidationPeriodically","configsWithSilentRenewEnabled","getConfigsWithSilentRenewEnabled","refreshTimeInSeconds","getSmallestRefreshTimeFromConfigs","periodicallyCheck$","objectWithConfigIdsAndRefreshEvent","getRefreshEvent","objectWithConfigIds","shouldStartPeriodicallyCheckForConfig","refreshEvent$","createRefreshEventForConfig","isCodeFlowinProgress","userDataFromStore","idTokenStillValid","accessTokenHasExpired","PopUpService","STORAGE_IDENTIFIER","resultInternal$","result$","windowInternal","isCurrentlyInPopup","canAccessSessionStorage","opener","openPopUp","popupOptions","optionsToPass","getOptions","popUp","userClosed","receivedUrl","sendMessageToMainWindow","screenTop","outerHeight","screenLeft","AutoLoginService","storageService","checkSavedRedirectRouteAndNavigate","savedRouteForRedirect","getStoredRedirectRoute","deleteStoredRedirectRoute","saveRedirectRoute","CheckAuthService","checkSessionService","currentUrlService","callbackService","refreshSessionService","periodicallyTokenCheckService","autoLoginService","stateParamFromUrl","getConfigurationWithUrlState","checkAuthWithConfig","checkAuthMultiple","composeMultipleLoginResults","configs","allChecks$","checkAuthIncludingServer","loginResponseAfterRefreshSession","startCheckSessionAndValidation","configurations","stateFromUrl","activeConfig","allOtherConfigs","currentConfigResult","allOtherConfigResults","ClosestMatchingRouteService","getConfigIdForClosestMatchingRoute","configuredRoute","matchingRoute","matchingConfig","ConsoleLoggerService","ResponseTypeValidationService","hasConfigValidResponseType","RedirectService","ParService","postParRequest","authWellKnownEndpoints","expiresIn","request_uri","ParLoginService","responseTypeValidationService","redirectService","checkAuthService","parService","loginPar","loginWithPopUpPar","PopUpLoginService","loginWithPopUpStandard","StandardLoginService","loginStandard","LoginService","parLoginService","popUpLoginService","standardLoginService","login","loginWithPopUp","LogoffRevocationService","endSessionUrl","getEndSessionUrl","logoffLocal","logoffLocalMultiple","logoffAndRevokeTokens","revokeRefreshToken","revokeAccessToken","accessTok","sendRevokeRequest","refreshTok","OidcSecurityService","logoffRevocationService","loginService","finishLoading","finishLoadingOnError","isAuthenticated$","isLoading$","preloadAuthWellKnownDocument","getConfigurations","getConfiguration","getUserData","getPayloadFromIdToken","getPayloadFromAccessToken","authorizeWithPopUp","DefaultSessionStorageService","createStaticLoader","PASSED_CONFIG","closestMatchingRouteService","allConfigurations","allRoutesConfigured","_r2","PromptComponent","Required","MaxLength","Prompt","OriginalValue","ConfirmService","yesText","noText","Field","showDialog","yesProperty","dialogSave","additionalContent","LoadingComponent","LoadingText","FontSize","OdataKendoComboBoxComponent","comboboxDataRef","valuePrimative","class","filterSubscribed","i2$1","CADLearningLightboxComponent","modalOpen","Source","Caption","OpenModal","CADLearningCommonModule","isValidEmail","IsValidPassword","isValidPassword","IsValidUri","isValidUri","ReturnCardType","cardNumber","PaymentMethods","OrgInfoFilled","accountType","organizationName","organizationDomain","numberOfUsers","AreEqual","passwordControl","confirmControl","Range","AtLeastOneChecked","atLeastOneChecked","IsTrue","isFalse","ConfirmEmail","emailField","confirmEmailField","emailControl","confirmEmailControl","RoutingNumber","aba","iTotal","routingNumber","CardNumber","paymentMethod","cardNo","doubleDigit","starting","starting3","starting2","AzureBlobUploadService","$http","DefaultBlockSize","initializeState","FileReader","onloadend","requestData","fileUrl","blockIds","file","bytesUploaded","percentComplete","uploadFileInBlocks","blockSize","maxBlockSize","numberOfBlocks","fileSize","totalBytesRemaining","currentFilePointer","blockIdPrefix","submitUri","sasToken","fileContent","blockId","readAsArrayBuffer","commitBlockList","requestBody","BaseClient","clientService","GetFile","fileType","GetData","willHandleError","parseResponse","processError","ListData","ListDataRaw","PutMany","PutOne","PostMany","PostPageable","dateReviver","PostOne","DeleteAny","PARAMETER_CODEC","Result","ParameterCodec","GetWorkflowStatus","UpdateWorkflowStep","UpdateWorkflowTask","ListAssignees","UpdateAssignees","ListQuestions","$select","$filter","$orderby","$skip","$top","$count","ListWithParents","AddResource","ListResourcesByType","RemoveResource","InvitePreHireUser","InvitePreHireNewUser","InvitePreHireExistingUser","ListAvailableAssessmentsByCourseId","AddAssessmentToCourse","RemoveAssessmentFromCourse","GetTranslation","UpdateTranslation","GetAssessmentQuestionsWithParents","ListCourses","ListBadges","ListMedallions","UpdateCourses","UpdateBadges","UpdateMedallions","ListCustomAssessments","RemoveAssessmentInvitation","ListAssessmentDynamicItems","ListAvailableAssessments","UpdateAssessmentDynamicItems","UpdateQuestions","GenerateAssessmentGamification","GenerateAssessment","GenerateGapAssessment","GetQuestions","GetQuestionsByCourseId","GetQuestionsWithParents","ListUserTranscript","includeIncompletes","ListTakenAssessments","GetAssessmentResults","userAssessmentId","ListAssessmentInvitations","RecordUserAssessmentAnswer","GetUserAssessmentById","GetUserAssessment","parentType","DeleteUserAssessment","GetAssessmentByPlayList","playListId","ListByCourseId","showPrehire","DeleteTranslation","GetQuestionOfTheDayAssessment","badgeId","medallionId","RecordQuestionOfTheDayAnswer","RecalculateEarnedBadge","ListBadgesByMedallion","ListLessons","UpdateLessons","AddImageResource","RemoveImageResource","GetLearningPath","GetTranslations","ListSyndicationProviders","UpdateSyndicationProviders","ListHeaderLessons","UpdateHeaderLessons","ListAvailableLessons","ListGroups","UpdateGroups","CopyBadgeToOrganization","EditBody","ListByBlogId","blogId","ListByBlogIdAndTag","GetArticlePublic","articleId","ListLinks","UpdateLinks","GetBlogByUrl","GetRecentTagsByBlogId","ListArticlesByBlogAdmin","ListRoles","UpdateRoles","UpdateOverrideDrip","SendTest","dripId","ListSubscriptions","campaignId","UpdateSubscriptions","SetEditingStatus","ListItemsByCourseId","ListSuggestedCustomCourses","GetWithUserInfo","GetCourseDownloadDetails","ListLessonQuestions","EditVersionPlan","CreateCourse","ImportCourse","DeactivateCourse","ListLessonsByCourse","ListLessonsByCourseAndVersion","EditIntroduction","EditConclusion","GetAdmin","CreateTopic","CreateLesson","ListCourseResourcesByTypeAdmin","ListTopicsWithSyndicatedContent","ListSyndications","UpdateSyndications","GetCourseFeed","portalUrl","UpdateCoursePath","GetCoursePaths","UpdateOrganizations","UpsertPublicVideos","UpdateProductVersions","ListProductVersions","CreateCustomCourse","ListCoursesByProductId","ListCoursesByProducts","CanSell","GetWithTranslation","ListResourcesByTypeAdmin","GetStructureWithUserInfo","GetStructurePublic","showOnlyCadlearningVersions","GetSCORMPackage","ListCoursesByOwner","ownerId","ListCoursesByExternalPartner","partnerId","CourseForHireDashboard","PublishCourse","ListJiraTasks","EditRawAssets","AdminList","RecalculateEarnedDiscipline","disciplineId","GetOwned","ListOwned","ListWithDisplayImages","ListWithProducts","ListWithProductsByIndustry","industryId","ListIndustries","UpdateIndustries","ListProducts","UpdateProducts","GetCertificateInfo","ListDisciplinesByProductVersion","GetDisciplineStructureForEditing","sourceProductId","sourceVersionId","SaveDisciplineStructure","ListByCategory","categoryId","ListDocumentCategories","InsertOrUpdateDocumentCategory","UpdateDocumentCategories","GetDocumentCategory","DeleteDocumentCategory","ListDocumentLinks","documentId","UpdateDocumentLinks","UploadDocument","requireWrite","ListDocumentsByOrganization","UpdateAuthMethods","UploadStyleSheet","GetStyleSheet","domainId","fallbackUrl","ListDomainsByOrganizationId","GetDomainByEmailAddress","emailAddress","GetDomainWithAuthMethodsByUrl","siteUrl","ListAuthMethodsByDomainId","ListAuthMethodsByDomainIdAdmin","RegisterOfflineContent","ListActivations","entitlementId","AddActivation","ListPaymentHistory","ListOrgToolSubscriptionsByOrganizationId","RenewSubscription","billingAddressId","paymentId","RenewPartnerSubscription","PurchaseSubscription","ListByUserId","ListByOrganizationId","CancelEntitlement","UpdateEntitlementPaymentDetails","UpdateOrganizationEntitlementUsers","BulkCreateEntitlements","UpdateItems","GetBySku","sku","ListItems","inventoryId","GetWithPriceBySku","ListWebProducts","subscriptionsOnly","ListWebSkusByCourse","RequestSalesTaxes","CalculateTaxes","CopyQuote","VoidPayment","ShipInvoice","UnlockInvoice","invoiceId","LockInvoiceForPayment","CompleteInvoice","sendToCustomer","PostPaymentToInvoice","ListStoredPaymentCredentials","contactId","ListQuotesByOrganization","ListBillsByOrganizationId","ListRfqsByDeal","AcceptQuote","RejectQuote","ListForDisplay","GetForDisplay","SubmitQuote","UpdateInventory","ListQuotesByRFQ","rfqid","GetInventoryItemPrice","fromContactId","toContactId","toContactType","DisputeInvoice","ListInventory","ListPayments","JobsV1Client","ListAvailableProductsAndVersions","jobId","ListJobsWithDisciplineIds","ListJobsWithProducts","jobIds","ListDisciplines","UpdateDisciplines","RecalculateEarnedJob","ApproveWorkflowStep","RejectWorkflowStep","lessonId","SetCurrentUserRating","GetLessonScript","GetNextAndPreviousLessons","GetNextAndPreviousLessonsByGoal","goalId","GetNextAndPreviousLessonsByPlaylist","GetLessonCoursesList","ForceReloadBody","GetRawAssetFiles","GetPossibleLessonVersions","ListLabels","ListAllLabels","UpdateLabels","ListDependencies","UpdateDependencies","RemoveFromProduction","lessonid","CopyLesson","ListLessonsWithCourses","ListLessonsWithCoursesForAssessment","nameFilter","ImportResource","CreateCustomLesson","ListCommands","ListPossibleLessonCommands","UpdateCommands","ListLessonResourcesByType","ListLessonResourcesByTypeAdmin","LogLessonView","GetPromoVideoUri","GetLessonVideos","GetOrganizationNote","UpdateOrganizationNotes","GetLessonDetailsWithUserInfo","GetLessonPublicDetails","GetLessonWorkflows","SaveLessonOverrideThumbnail","PublishLesson","GetPublicationStatus","ListJobs","JiraCompleteLessonDependencies","JiraCompleteLessonCommands","JiraCompleteLessonQuestions","JiraCompleteLessonResources","ViewedInProduction","SearchJiraIssues","searchKeywords","RecalculateEarnedMedallion","CopyMedallionToOrganization","GetLessonDetails","resolution","fingerPrint","AddIndividualSubscriptionToPartner","AddSubscriptionToPartnerOrganization","EnterpriseRequestInformation","AddSubscriptionToOrganization","CompleteInvite","CompletePartnerSubscription","CompletePartnerSmbSubscription","GetOrganizationUser","CanOrganizationSellResale","ListOrganizationUserJobs","UpdateOrganizationUserJobs","UpdateOrganizationUser","DeleteOrganizationUser","GetxApiCredentials","UpdatexApiCredentials","ListEmailDomains","UpdateEmailDomains","AdminUpsert","SearchDynamics","UnlinkDynamics","CreateOrganizationFromDynamics","LinkToDynamics","RemoveDynamics","GetDynamicsDetails","AssignRolesToUser","ListUserRoles","Broadcast","GetOrganizationMessages","GetMessages","UpdateMessages","ListUserGroupCourses","UpdateOrganizationGroupCourses","InviteUser","GetOrganizationContentCreationCapabilities","ListCustomers","ListOrganizationUsers","PartnerHasResaleSku","IsSmb","IsEduOrganization","ListExpiringEntitlements","GetEmailTemplate","UpdateEmailTemplates","UpdatePartnerProspect","UpdatePartnerProspects","ListPartnerProspects","ListProspectContacts","ListPartnerOrganizations","isLead","ListUserFields","ListPaymentCredentials","AdminGet","ListPermissions","PermissionRequestSearch","AcceptPermissionRequest","UpdatePermission","DenyPermissionRequest","RevokePermission","CreatePermissionRequest","HasEntitlementSku","HasUnusedEntitlements","GetOrganizationFeatures","ListAddresses","UpdateAddresses","RunSmbRollup","ListUserGroupsByUser","UpdateUserGroupsByUser","GetPartnerOrganizationGroups","UploadPartnerUsers","sendEmailInvites","portalId","SKU","ListCoursesWithSyndicatedContent","MigrateCustomProductImages","GetOrganizationContentOptions","GetPublicOrganizationInfo","GetCurrentPriceList","GetStoredPaymentCredential","storedPaymentCredentialId","UpdateCreditCardPaymentCredentials","InsertOrUpdatePaymentCredential","DeletePaymentCredential","credentialId","ListImplementations","providerId","UpdateImplementations","ListPlayListsByOwningOrganization","owningOrganization","GenerateGapLessons","playlistId","version2Id","InviteUsersByGroups","InviteUsersToPlayList","GetDefaultGridLayout","gridKey","ListGridLayouts","UpsertGridLayout","DeleteGridLayout","CopyRevision","revisionId","ListPartnerResaleBillingInventory","ListRevisions","priceListId","ChangesFeed","GetVersionFromWebUrl","GetVersionFromVendorInfo","productVendor","versionVendor","ListVendorIds","UpdateVendorIds","ListTranslationCategories","UpdateTranslationCategories","ListCategories","UpdateCategories","GetProductVersionIdsFromAppInfo","productVersion","ListVersionCommands","ListVersionCommandLessons","GetProductVersionCommandWithTranslations","UpsertProductVersionCommandWithTranslations","RemoveProductVersionCommand","ListLessonsByProductVersion","ListLessonsByProductVersionForAddVersion","AddVersion","ListCoursesByProductVersion","UpdateVersions","ListCustomProducts","AddProductImageResource","RemoveProductImage","CreateCustomProduct","ListProductWebAddresses","UpdateProductWebAddresses","ListActiveProducts","onlyShowOwnedOrganizations","owningOrganizationId","ListCoursesByVersion","ListCoursesByVersionAdmin","ListWorkflowsByVersion","GetProductCourse","GetProductVersionCourse","GetVersionsAdmin","onlyWithCourse","GetVersions","GetVersionByProductIds","GetWithLanguage","ListSites","UpdateSites","CreatePrehireAssessment","DeleteJob","projectJobId","GetJob","UpsertJob","MatchProjectJobToUsers","publicVideoId","UpsertCourses","ListByCourse","ListByLesson","ListByDiscipline","ListByJob","UpsertLessons","UpsertDisciplines","UpsertJobs","GetVideoCaptions","DeleteVideo","DeleteCaption","captionId","GetRelatedVideosByCourses","GetRelatedVideosByLessons","GetRelatedVideosByDisciplines","GetRelatedVideosByJobs","questionId","ListAnswerPossibleLessons","answerId","ListLessonsWithTime","UpdateLessonsWithTime","ListAnswerBranchingQuestions","ListAvailableForQuestionBranch","UpdateBranchingQuestions","UpdateAnswers","ListByAssessmentId","AddLesson","HelpQuestionAddLesson","RemoveLesson","HelpQuestionRemoveLesson","ListAvailableForLessonAdd","ListAnswerSuggestedLessons","ImportQuestionToOrganization","ListAvailableForAssessmentAdd","UpdateAnswerSuggestedLessons","PublicListByLessonId","ListByLessonId","ListByLessonIdWithAnswers","ListByLessonIdWithWorkflow","ListHelpQuestionsByLessonId","ListHelpQuestions","UpsertHelpQuestions","ListOrphanedQuestions","CourseCompletionByUser","CourseCompletionLessonsByUser","MostPopularLessons","SignupsByMonth","dtStart","dtEnd","SignupsByMonthDetail","TimeSavedAcrossOrganization","SubscriptionsPerInvoice","GetBadgeWithUsersAchieved","CompetenciesAchievedByOrganization","UserActivity","ListReports","GetReport","reportId","ActiveUsersByMonth","numberOfMonths","MostRecentBadges","asOf","OrganizationStats","GrossMRR","GrossARR","GrossMRRTrends","GrossARRTrends","MonthlyChurnTrends","YearlyChurnTrends","MonthlyChurnRate","YearlyChurnRate","OrganizationEngagementTrends","OrganizationSkillsGaps","OrganizationSkillsGapsAtDate","OrganizationMostImprovedEmployees","OrganizationStrugglingEmployees","OrganizationMostEngaged","OrganizationLeastEngaged","OrganizationRockStars","EmployeesAssignedToRoles","EmployeesAssignedToGoals","EmployeeRoleSummary","EmployeeGoalSummary","EmployeeRoleSummaryFlattened","EmployeeGoalSummaryFlattened","DownloadGoalData","DownloadRoleData","ScheduleReport","GetReportSchedule","report","ListReportSchedules","TotalInActiveUsersByOrganization","TotalAssessmentsOverEntitlementPeriod","TotalActiveUsersByOrganization","MostTakenAssessmentsByOrganization","MostActiveProductsByOrganization","TotalUsersByOrganization","ListTrials","GetPartnerSalesRepInfo","ListPartnerRedeemedTokens","ListBillableInventory","GetUserActivity","WorkflowStalledItems","WorkflowErrors","dtFrom","dtTo","WorkflowAgingItems","WorkflowTaskChanges","TotalActiveMonthlies","TotalActiveYearlies","UsersOnline","PlatformTotals","CourseGlanceReport","TopPartnersByLeads","TopPartnersByDollarsSold","TopSales","TopOrganizationsByDollarsSold","UpcomingEnterpriseRenewals","MostActiveProducts","ListPartnerActivity","AssessmentUserHistory","AssessmentDistributionReport","AssessmentReportCard","ListProjectLessonViews","CourseList","DownloadAssessmentData","userName","password","ListLessonActivityDetails","ListUserLessonViews","ListProjectUserViews","ListProjectLessonActivity","ListProductVersionViews","ListProductLessonViews","ListProductCommandViews","ListLessonViews","ListActivity","ListResourceViews","ListGroupViews","ListGroupProductViews","groupName","OrganizationUserEntitlements","OrganizationUsers","ListPartnerTokens","GetResourcesByParentAndType","resourceType","videoId","QueueCreateVideoFromResources","AddCaptionsToVideo","itemType","CreateCaptionsFromScript","AddLink","preferedLanguage","GetVideoPermissions","resourceId","VideoPublic","VideoFromLesson","video","VideoPlayback","playbackUrl","armoredAuthToken","VideoCaptions","GetResourceUrl","secret","GetVideoTokenUrl","VideoToken","LogResourceView","ListProviders","ListSalesTaxExemptionsByContact","contactType","ListSalesTaxExemptions","RequestCertificateAccessToken","requestId","requestWrite","GetSalesTaxExemption","UpdateSalesTaxExemption","RequestSalesTaxExemption","AcceptSalesTaxExemptionRequest","RejectSalesTaxExemptionRequest","RemoveSalesTaxExemptionRequest","searchPhrase","SearchBlogArticles","SearchLessons","SearchLessonsByProductCodes","productVendorId","versionVendorId","SearchQuestionsTest","question","ListQuestionsByAnswer","UpdateAnswerQuestions","ListSystemSettings","ListEmailDomainBlackLists","AddEmailDomainBlack","DeleteEmailDomainBlack","ListEduDomains","UpdateEduDomains","CreateAudience","RegenerateAudienceKey","DeleteAudience","ListAudiences","ListClients","DeleteClient","UpsertClient","ChangeClientSecret","GetLatestClientVersion","ListMergeFields","emailKey","ListEmailTemplates","showInternal","GetDefaultEmailTemplate","PostPing","GetTermsOfServiceDate","UpdateSystemSettings","BroadcastSystemMessage","ReportError","GetPageTranslation","UpdatePageTranslation","GetPageTranslationLanguages","CopyFromPage","DeletePageLanguage","ImportExcelLanguagesDummy","SeverSharepointLinks","Redeem","ListByRedeemedById","topicId","ListItemsByTopicId","UpdateTopicStructure","ListSyndicatedLessons","CreateCustomTopic","PublishTopic","ListUserProductPreferences","UpdateProductVersionCoursePreferences","showAdmin","ListEmailPreferences","UpdateEmailPreferences","GetUserAndOrganizationDetails","AdminChangePassword","AdminResetPassword","InsertOrUpdateUserAndProspectUserDetails","UpsertUserAndProspectUserDetails","HasUserHadTrial","GetProductVersionOwnership","UpdateProductVersionCoursePreference","GetExpiredUserEntitlements","GetSuggestedContent","showAll","GetSuggestedProductsAdmin","GetCommandContentCount","ReportPage","ReportPageCommand","ReportCommand","GetUserByName","username","RemoveByEncryption","GetRecommendedLessons","NewContentSinceLastSeen","CreateDataRequest","ApproveDataRequest","RejectDataRequest","DeleteDataRequest","GetUserDataRequestsWithDocuments","GetUserDataRequestWithDocuments","ListUserDataRequests","AttachActivityToUserRequest","userRequestId","RemoveUserRequestDocument","AddResourceToUserDataRequest","GetUserRequestDocumentAccessToken","userDocumentId","SetDisciplines","UpsertDiscipline","RemoveDiscipline","RemoveJob","userJobId","ListSelectedUserDisciplines","GetEarnedGamificationAwards","AchievementsReady","JobStatus","ProgressStats","Progress","GetDisciplineAverageScores","GetJobAverageScores","WhatsNext","GetOrganizationalMessage","InsertOrUpdateUserAndOrganizationDetails","UpsertUserAndOrganizationDetails","ClearSSOLogins","InsertOrUpdateUserAndOrganizationDetailsWithOrganization","UpsertUserAndOrganizationDetailsWithOrganization","GetUserAndOrganizationDetailsWithOrganization","GetProspectOrgUserDetails","ResumePreHireAssessment","CompleteAssessmentInvite","GetUsersByRolesAndOrganization","roleId","SubmitConversationQuestionAnswer","GetConversation","ListCustomReports","GetSavedReport","reportName","GetCustomReport","UpsertReport","DeleteReportById","RequestAccess","RequestResetPassword","ResetPassword","VerifyRequestAccess","RequestVerifyEduWithCode","AddEduSubscriptionToUser","AddTrialToUser","AddSubscriptionToUser","AddEduSubscriptionPaymentToUser","AddSubscriptionTokenToUser","RequestLessonRights","AdminSendEmail","UpdateJobs","GetUnclaimedQuestions","GetCurrentAssignments","GetSMEContractorAssignments","ListCoursesInProcess","ListCMSRecentActivity","ReportTranslationError","ListTranslationErrors","RemoveTranslationError","ChangePassword","UpdateTranslationAssignees","ListHistoryByItem","workflowId","GetTaskStatus","GetWorkloadByUser","ListWorkflowSteps","GetAssessmentDtoForm","dto","CreatedOn","UpdatedOn","FollowBranch","AllowBack","Dynamic","NumberOfQuestions","Static","JobId","GetBadgeDtoForm","DisplayImageId","DisplayImage","AssignedToId","AssignedTo","GetDisciplineDtoForm","AddedByJob","GetDisciplineMedallionDtoForm","GetDisciplineProductVersionDtoForm","GetJobDisciplineDtoForm","GetJobDtoForm","GetJobProductDtoForm","GetMedallionBadgeDtoForm","GetMedallionDtoForm","GetProductVersionCoursePreferenceDtoForm","ProductVersionId","ProductVersion","GetProductVersionDtoForm","Major","Minor","Revision","ReleasedOn","VendorId","DefaultCourseId","DefaultCourse","GetProjectDtoForm","StartedOn","EndsOn","ProjectManagerUserId","ProjectManagerUser","GetProjectJobDtoForm","Project","Job","PreHireAssessmentId","PreHireAssessment","Users","GetProjectJobUserDtoForm","StartsOn","Notes","Status","UserJobId","Score","GetReportScheduleDetailForm","Report","LastRunOn","NextRunOn","Schedule","Recipients","GetReportScheduleRecipientDetailForm","Receive","GetRequestSalesTaxExemptionDtoForm","Billing","Shipping","Street1","Street2","City","State","PostalCode","Country","SalesTaxId","ContactId","ContactType","OrganizationName","LastName","PhoneNumber","HowDidYouHearAboutUs","Password","ExemptionNubmer","ExpiresOn","Provider","ProviderKey","ExternalAccessToken","GetResourceDtoForm","FileName","DateTimeFileUpdated","ChildResources","GetChildResourceDtoForm","Directions","GetUserJobDtoForm","Products","GetUserJobProductDtoForm","Language","PageTranslation","SystemClient","Translate","GetActivatedRouteSegments","Fields","MapTranslationFields","english","Tag","TranslateValue","GetTranslationString","ActionMessage","actionTimer","actionTimerSubscription","CMSRoles","Ctl","fg","CtlIndicator","ctl","CtlHasErrors","CtlsDisable","CtlsEnable","CtlsReset","Validate","ResetForm","SetActionMessage","CtlValue","FormToObject","FormToNewObject","includeFields","skipFields","unassignedFields","ObjectToForm","MapFormArray","fa","ToFormArray","ToFormGroup","EditGridComponent","GridView","grid","editedRowIndex","editHandler","closeEditor","initForm","editRow","addHandler","addRow","cancelHandler","keepForm","closeRow","LoadGrid","removeHandler","dataStateChange","HasPartnerAccomplishments","current_organization_id","project_id","given_name","family_name","OrganizationIds","organization_ids","DisciplineIds","discipline_ids","BotEscallation","Accomplishments","PartnerAccomplishments","ProjectManagement","TermsAccepted","GroupLogo","roles","rr","GetTransationText","AccountTypes","Checking","Savings","SharedDraft","AccountTypesTranslation","Aggregations","Sum","Average","Maximum","Minimum","Count","AssessmentTypes","NA","Overall","Skills","PreHire","QA","Gap","QuestionOfTheDay","Achievement","AssessmentTypesTranslation","AuthTypes","CADLearning","LegacySSO","Social","LDAP","Facebook","Microsoft","Google","Twitter","LinkedIn","Azure","OpenIdConnect","SAML2","Autodesk","Slack","Apple","CampaignDripUnits","Weeks","Years","ReleaseDate","CampaignTypes","NewTrialUser","NewUser","NewOrganizationalUser","NewPartner","CustomerCancelation","CustomerSubscriptionExpiry","OrganizationSubscriptionExpiry","PartnerExpiringEntitlements","ReleaseDriven","CampaignTypesTranslation","ChartTypes","Line","Pie","Area","ColumnDetailTypes","DateTimeOffset","Percentage","StringType","LengthAsTime","Lesson","Enum","ContactTypes","Course","Topic","Video","CaptionSet","Resource","AuthMethod","Answer","Domain","Question","Document","BlogArticle","Blog","Discipline","Medallion","Badge","PublicVideo","ContentItemTypesTranslation","EduSubscriptionStatusCodes","Success","OrganizationAlreadyHadTrial","UserNotFound","PasswordsDontMatch","UserCouldNotBeSaved","UserExists","SubscriptionNotFound","UnknownError","CouldNotCreateEntitlement","OrganizationAlreadyExists","OrganizationDomainAlreadyExists","OrganizationNotFound","InvalidEmailAddress","PasswordComplexityRequirementsNotMet","UserIsNotVerifiedEdu","UserAddressCouldNotBeSaved","InvoiceCouldNotBeSaved","InventoryPriceCouldNotBeFound","InvoiceInventoryCouldNotBeSaved","InvoicePaymentCouldNotBeProcessed","InvoiceCouldNotBeCompleted","PaymentCredentialsNotConfiguredProperly","AutodeskCredentialsNotProvided","VelocityCheck","AutodeskUniversity","SocialMedia","AutodeskKnowledgeNetwork","TheBlast","CustomerReferral","Email","WebSearch","OnlineAd","Other","AutodeskReseller","BILT","MidwestU","HowDidYouHearAboutUsTranslation","Importance","Backlog","Low","High","InventoryItemTypes","Training","CourseDVD","AllAccess","OrganizationAllAccess","OrganizationProduct","OrganizationCourse","OrganizationDivisionAllAccess","OrganizationDivisionProduct","OrganizationDivisionCourse","OrganizationProjectManagement","PartnerBenefit","LMSIntegration","ContentCreation","SharedContentCreation","InventoryItemTypesTranslation","InvoiceStatuses","Pending","AwaitingPayment","PaidAwaitingShipment","Complete","Rolling","Draft","Submitted","Rejected","Disputed","InvoiceStatusesTranslation","InvoiceTypes","PO","Invoice","Bill","RequestForQuote","Quote","InvoiceTypesTranslation","ItemChangeStatuses","Unchanged","EditsRequired","Remove","Published","Logic","Equals","LessThan","GreaterThan","LessThanOrEqualTo","GreaterThanOrEqualTo","Contains","NotContains","EndsWidth","StartsWith","NotEqual","NotStartsWith","NotEndsWith","Between","Informational","Custom","Operators","And","Or","OrderDirections","Ascending","Descending","OrganizationAnswerSharingOptions","InternalOnly","Everyone","OrganizationAnswerSharingOptionsTranslation","OrganizationBotEscallationRules","OrgOnly","CommunityOnly","CommunityThenCADLearning","OrgThenCommunity","OrgThenCommunityThenCADLearning","OrgThenCADLearning","OrganizationBotEscallationRulesTranslation","OrganizationReportTypes","LessonActivity","ProductActivity","ProductCommandActivity","ProductVersionActivity","GroupActivity","SignUpsByMonth","OrganizationScoreSettings","Industry","Own","OrganizationScoreSettingsTranslation","OrganizationSubscriptionCreationResultCodes","NotImplemented","OrganizationDomainRequired","OrganizationNameRequired","OrganizationCouldNotBeSaved","OrganizationDomainNotValid","BillingAddressDoesntExist","EmailsDoNotMatch","SuccessButFailedToAddDomain","MustBeLoggedIn","PartnerBillingType","Individual","CreditDebitCard","Visa","MasterCard","Amex","Discover","DinersClub","EFT","ACH","WireTransfer","Check","ProjectJobStatuses","InHouse","PreHireAssessmentComplete","ProjectJobStatusesTranslation","OpenUrl","Fail","InitialRequest","EscallationExpertRequest","Restart","ClarifyingQuestion","CADSME","RecurringPeriods","SevenDayTrial","Monthly","ThirtyDayTrial","NinetyDay","BiAnnual","Annual","TwoYear","ThreeYear","FiveYear","Perpetual","ReportDateRange","Last30Days","Last60Days","Last90Days","CustomRange","ReportDetailTypes","Grid","Pivot","ReportEndpoints","EmployeeActivity","Employees","OrganizationEmployees","ReportSchedules","Weekly","Daily","ReportVisibilities","Standard","ResourceLocations","Legacy","External","ExerciseFile","DemoFile","Link","ExerciseFileDownloadCourse","ExerciseFileDownloadAssessment","IsoFile","RawVideo","Captions","RawAudio","PostProcessedVideo","LessonExercise","LessonResource","StyleSheet","ResourceTypesTranslation","CADAdmin","OrgAdmin","CADCopyEditor","CADVideoCreator","CADAudioCreator","CADContentManager","CADVideoProducer","CADVideoQA","CADContentPublisher","CADVideoProductionManager","CADAudioQA","CADMarketing","CADSupport","CADSupportManager","CADBusinessManager","CADSales","CADAccounting","OrgContentCreator","Reporting","PartnerAdmin","CADBlogger","ContentPublishingPartner","PartnerSales","CADTranslator","UserAdmin","ScriptApprover","NarrationApprover","QuestionApprover","FinalApprover","SMEContractor","CADTechnicalWriter","LearningPathAdmin","RolesTranslation","SubscriptionTypes","Online","Mobile","UserExpertBotEscallationAvailabilities","Unavailable","OrganizationOnly","UserExpertBotEscallationAvailabilitiesTranslation","UserSubscriptionCreationResultCodes","TokenInvalidOrMissing","TokenCannotBeRedeemed","UserTrialCreationResultCodes","UserAlreadyHadTrial","TrialNotFound","VideoProviders","WorkflowActions","NextStep","Assign","UpdateTask","Approved","WorkflowActionsTranslation","WorkflowTypes","Translation","defaultModules","toolbar","indent","QUILL_CONFIG_TOKEN","getFormat","configFormat","QuillService","quill$","Quill","maybePatchedAddEventListener","__zone_symbol__addEventListener","quillImport","customOptions","customOption","newCustomOption","import","whitelist","suppressGlobalRegisterWarning","registerCustomModules","customModules","getQuill","QuillEditorBase","domSanitizer","customToolbarPosition","strict","preserveWhitespace","trimOnValidation","compareValues","filterNull","defaultEmptyValue","onEditorCreated","onEditorChanged","onContentChanged","onSelectionChanged","preserve","toolbarPosition","quillSubscription","quillEditor","editorElement","modelValue","getContents","valueSetter","clipboard","selectionChangeHandler","shouldTriggerOnModelTouched","onModelTouched","editor","textChangeHandler","oldDelta","editorElem","trackChanges","shouldTriggerOnModelChange","onModelChange","editorChangeHandler","cur","beforeRender","toolbarElem","readOnly","scrollingContainer","linkPlaceholder","dataset","link","setText","setContents","getModule","addQuillEventListeners","onValidatorChanged","currentStyling","previousStyling","currentClasses","previousClasses","removeClasses","normalizeClassNames","currentEditorValue","deltaOperations","ops","onlyEmptyOperation","minLengthError","given","maxLengthError","requiredError","textChange$","editorChange$","QuillEditorComponent","QuillViewHTMLComponent","themeClass","QuillViewComponent","asyncGeneratorStep","adopt","verb","settle","__values"],"sourceRoot":"webpack:///","sources":["./node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js","./node_modules/@microsoft/signalr/dist/esm/Errors.js","./node_modules/@microsoft/signalr/dist/esm/HttpClient.js","./node_modules/@microsoft/signalr/dist/esm/ILogger.js","./node_modules/@microsoft/signalr/dist/esm/Loggers.js","./node_modules/@microsoft/signalr/dist/esm/Utils.js","./node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js","./node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js","./node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js","./node_modules/@microsoft/signalr/dist/esm/HeaderNames.js","./node_modules/@microsoft/signalr/dist/esm/ITransport.js","./node_modules/@microsoft/signalr/dist/esm/AbortController.js","./node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js","./node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js","./node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js","./node_modules/@microsoft/signalr/dist/esm/HttpConnection.js","./node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js","./node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js","./node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js","./node_modules/@microsoft/signalr/dist/esm/Subject.js","./node_modules/@microsoft/signalr/dist/esm/HubConnection.js","./node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js","./node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js","./src/app/SignalR/SignalRService.ts","./src/app/authentication/user.service.ts","./node_modules/@microsoft/dynamicproto-js/lib/dist/esm/dynamicproto-js.js","./node_modules/@microsoft/applicationinsights-shims/dist-esm/Constants.js","./node_modules/@microsoft/applicationinsights-shims/dist-esm/Helpers.js","./node_modules/@microsoft/applicationinsights-shims/dist-esm/TsLibShims.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/__DynamicConstants.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/InternalConstants.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/HelperFuncs.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/__DynamicConstants.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/HelperFuncs.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/EnvUtils.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/DbgExtensionUtils.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/DiagnosticLogger.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK.Enums/EnumHelperFuncs.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Enums.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/StorageHelperFuncs.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/applicationinsights-common.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Common/DataSanitizer.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Constants.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/TelemetryItemCreator.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Event.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Trace.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Common/DataPoint.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Metric.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/PageView.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/PageViewPerformance.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Exception.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/CookieMgr.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/RandomHelper.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/DataCacheHelper.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/EventHelpers.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/CoreUtils.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/W3cTraceParent.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/DomHelperFuncs.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/RequestResponseHeaders.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/UrlHelperFuncs.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Util.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/RemoteDependencyData.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/PerfManager.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/TelemetryHelpers.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/ProcessTelemetryContext.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/InstrumentHooks.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/UnloadHandlerContainer.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/BaseTelemetryPlugin.js","./node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/__DynamicConstants.js","./node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/Telemetry/PageViewManager.js","./node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/Telemetry/PageViewPerformanceManager.js","./node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/Telemetry/PageVisitTimeManager.js","./node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/Timing.js","./node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/AnalyticsPlugin.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Interfaces/Contracts/ContextTagKeys.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Interfaces/PartAExtensions.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Common/Envelope.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Telemetry/Common/Data.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/InternalConstants.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/__DynamicConstants.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/EnvelopeCreator.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/Offline.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/SendBuffer.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/Sender.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/Serializer.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/TelemetryProcessors/SamplingScoreGenerators/HashCodeScoreGenerator.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/TelemetryProcessors/SamplingScoreGenerators/SamplingScoreGenerator.js","./node_modules/@microsoft/applicationinsights-channel-js/dist-esm/TelemetryProcessors/Sample.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/ConnectionStringParser.js","./node_modules/@microsoft/applicationinsights-common/dist-esm/Interfaces/Contracts/SeverityLevel.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/ChannelController.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/TelemetryInitializerPlugin.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/BaseCore.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/NotificationManager.js","./node_modules/@microsoft/applicationinsights-core-js/dist-esm/JavaScriptSDK/AppInsightsCore.js","./node_modules/@microsoft/applicationinsights-dependencies-js/dist-esm/InternalConstants.js","./node_modules/@microsoft/applicationinsights-dependencies-js/dist-esm/__DynamicConstants.js","./node_modules/@microsoft/applicationinsights-dependencies-js/dist-esm/ajaxRecord.js","./node_modules/@microsoft/applicationinsights-dependencies-js/dist-esm/ajax.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/Context/Application.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/Context/Device.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/__DynamicConstants.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/Context/Internal.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/Context/Location.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/Context/Session.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/Context/TelemetryTrace.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/Context/User.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/TelemetryContext.js","./node_modules/@microsoft/applicationinsights-properties-js/dist-esm/PropertiesPlugin.js","./node_modules/@microsoft/applicationinsights-web/dist-esm/InternalConstants.js","./node_modules/@microsoft/applicationinsights-web/dist-esm/Initialization.js","./node_modules/@microsoft/applicationinsights-web/dist-esm/__DynamicConstants.js","./src/app/constants.ts","./src/app/dialogs/dialogs.module.ts","./src/app/directives/directives.module.ts","./src/app/guards/CanActivatePartnerSalesGuard.ts","./src/app/guards/CanActiviateOrganizationAdminGuard.ts","./src/app/guards/CanActiviateOrganizationContentCreatorGuard.ts","./src/app/guards/CanActiviateOrganizationGuard.ts","./src/app/guards/CanActiviateOrganizationReportingGuard.ts","./src/app/guards/CanActiviatePartnerGuard.ts","./src/app/guards/CanActiviateUserGuard.ts","./src/app/guards/OrganizationFeatureGuards.ts","./src/app/legal/TermsOfService/TermsOfService.component.ts","./src/app/legal/TermsOfService/TermsOfService.component.html","./src/app/legal/TermsOfService/TermsOfService.module.ts","./src/app/main/playlist/playlistnew.component.html","./src/app/main/playlist/playlistnew.component.ts","./src/app/pipes/pipes.module.ts","./src/app/shared/shared.module.ts","./src/app/utilities.ts","./src/environments/environment.prod.ts","./node_modules/@angular/animations/fesm2020/browser.mjs","./node_modules/@angular/platform-browser/fesm2020/animations.mjs","./node_modules/rxjs/dist/esm/internal/operators/connect.js","./node_modules/rxjs/dist/esm/internal/observable/fromSubscribable.js","./node_modules/@angular/service-worker/fesm2020/service-worker.mjs","./node_modules/rxjs/dist/esm/internal/operators/publish.js","./node_modules/rxjs/dist/esm/internal/operators/multicast.js","./node_modules/@ngx-translate/http-loader/fesm2020/ngx-translate-http-loader.mjs","./node_modules/@progress/kendo-angular-notification/fesm2015/kendo-angular-notification.js","./src/app/main/yourpath/yourpath.component.html","./src/app/main/yourpath/yourpath.component.ts","./src/app/main/topmenu/library.component.html","./src/app/main/topmenu/library.component.ts","./src/app/main/topmenu/partners.component.html","./src/app/main/topmenu/partners.component.ts","./src/app/main/topmenu/organizations.component.html","./src/app/main/topmenu/organizations.component.ts","./src/app/main/topmenu/users.component.html","./src/app/main/topmenu/users.component.ts","./src/app/main/playlist/playlistshare.component.html","./src/app/main/playlist/playlistshare.component.ts","./src/app/main/playlist/playlist.component.html","./src/app/main/playlist/playlist.component.ts","./src/app/main/custom/customcontent.component.html","./src/app/main/custom/customcontent.component.ts","./src/app/main/plugin/plugin.component.html","./src/app/main/plugin/plugin.component.ts","./src/app/main/chat/chat.service.ts","./src/app/main/chat/chat.component.html","./src/app/main/chat/chat.component.ts","./src/app/main/q/q.component.ts","./src/app/main/q/q.component.html","./src/app/main/expert/expert.component.ts","./src/app/main/expert/expert.component.html","./src/app/main/topmenu/projects.component.html","./src/app/main/topmenu/projects.component.ts","./src/app/main/topmenu/reports.component.html","./src/app/main/topmenu/reports.component.ts","./src/app/app/app.component.html","./src/app/app/app.component.ts","./src/app/authentication/auth-config.module.ts","./src/app/account/acceptterms/acceptterms.component.ts","./src/app/account/acceptterms/acceptterms.component.html","./src/app/guards/AcceptTermsGuard.ts","./src/app/Services/ErrorHandler.service.ts","./src/app/WebApiTranslationLoader.component.ts","./src/app/app.module.ts","./src/main.ts","./node_modules/@progress/kendo-angular-buttons/fesm2015/kendo-angular-buttons.js","./node_modules/@progress/kendo-angular-charts/fesm2015/kendo-angular-charts.js","./node_modules/@progress/kendo-angular-common/fesm2015/kendo-angular-common.js","./node_modules/@progress/kendo-date-math/dist/es2015/clone-date.js","./node_modules/@progress/kendo-date-math/dist/es2015/adjust-dst.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-days.js","./node_modules/@progress/kendo-date-math/dist/es2015/create-date.js","./node_modules/@progress/kendo-date-math/dist/es2015/get-date.js","./node_modules/@progress/kendo-date-math/dist/es2015/is-equal.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-day-of-month.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-months.js","./node_modules/@progress/kendo-date-math/dist/es2015/set-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-years.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-decades.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-centuries.js","./node_modules/@progress/kendo-date-math/dist/es2015/normalize-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-decade-of-century.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-decade-of-century.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-year-of-decade.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-year-of-decade.js","./node_modules/@progress/kendo-date-math/dist/es2015/set-month.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-month-of-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-centuries.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-decades.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-weeks.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-day-of-month.js","./node_modules/@progress/kendo-date-math/dist/es2015/direction.enum.js","./node_modules/@progress/kendo-date-math/dist/es2015/day-of-week.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-months.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-month-of-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-years.js","./node_modules/@progress/kendo-date-math/dist/es2015/day.enum.js","./node_modules/@progress/kendo-date-math/dist/es2015/prev-day-of-week.js","./node_modules/@progress/kendo-date-math/dist/es2015/week-in-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/constants.js","./node_modules/@progress/kendo-angular-dateinputs/fesm2015/kendo-angular-dateinputs.js","./node_modules/@progress/kendo-angular-dialog/fesm2015/kendo-angular-dialog.js","./node_modules/rxjs/dist/esm/internal/util/not.js","./node_modules/rxjs/dist/esm/internal/operators/skipWhile.js","./node_modules/@progress/kendo-angular-dropdowns/fesm2015/kendo-angular-dropdowns.js","./node_modules/rxjs/dist/esm/internal/operators/partition.js","./node_modules/@progress/kendo-angular-inputs/fesm2015/kendo-angular-inputs.js","./node_modules/@progress/kendo-angular-intl/fesm2015/kendo-angular-intl.js","./node_modules/@progress/kendo-angular-l10n/fesm2015/kendo-angular-l10n.js","./node_modules/@progress/kendo-angular-progressbar/fesm2015/kendo-angular-progressbar.js","./node_modules/@progress/kendo-angular-layout/fesm2015/kendo-angular-layout.js","./node_modules/@progress/kendo-angular-popup/fesm2015/kendo-angular-popup.js","./node_modules/@progress/kendo-angular-sortable/fesm2015/kendo-angular-sortable.js","./node_modules/@progress/kendo-angular-treeview/fesm2015/kendo-angular-treeview.js","./node_modules/@progress/kendo-charts/dist/es2015/common/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-array.js","./node_modules/@progress/kendo-charts/dist/es2015/common/add-class.js","./node_modules/@progress/kendo-charts/dist/es2015/common/remove-class.js","./node_modules/@progress/kendo-charts/dist/es2015/common/align-path-to-pixel.js","./node_modules/@progress/kendo-charts/dist/es2015/common/clockwise.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-number.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-string.js","./node_modules/@progress/kendo-charts/dist/es2015/common/convertable-to-number.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-function.js","./node_modules/@progress/kendo-charts/dist/es2015/common/deep-extend.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-object.js","./node_modules/@progress/kendo-charts/dist/es2015/common/style-value.js","./node_modules/@progress/kendo-charts/dist/es2015/common/element-styles.js","./node_modules/@progress/kendo-charts/dist/es2015/common/get-spacing.js","./node_modules/@progress/kendo-charts/dist/es2015/services/template-service.js","./node_modules/@progress/kendo-charts/dist/es2015/common/get-template.js","./node_modules/@progress/kendo-charts/dist/es2015/common/getter.js","./node_modules/@progress/kendo-charts/dist/es2015/common/grep.js","./node_modules/@progress/kendo-charts/dist/es2015/common/has-classes.js","./node_modules/@progress/kendo-charts/dist/es2015/common/hash-map.js","./node_modules/@progress/kendo-charts/dist/es2015/common/in-array.js","./node_modules/@progress/kendo-charts/dist/es2015/common/interpolate-value.js","./node_modules/@progress/kendo-charts/dist/es2015/common/instance-observer.js","./node_modules/@progress/kendo-charts/dist/es2015/common/map.js","./node_modules/@progress/kendo-charts/dist/es2015/common/mousewheel-delta.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/log-to-console.js","./node_modules/@progress/kendo-charts/dist/es2015/drawing-utils.js","./node_modules/@progress/kendo-charts/dist/es2015/common/font-loader.js","./node_modules/@progress/kendo-charts/dist/es2015/common/set-default-options.js","./node_modules/@progress/kendo-charts/dist/es2015/common/render-icon.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-plain-object.js","./node_modules/@progress/kendo-charts/dist/es2015/common/sparse-array-limits.js","./node_modules/@progress/kendo-charts/dist/es2015/common/find.js","./node_modules/@progress/kendo-charts/dist/es2015/common/element-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/common/auto-text-color.js","./node_modules/@progress/kendo-charts/dist/es2015/common/create-hash-set.js","./node_modules/@progress/kendo-charts/dist/es2015/common/default-error-handler.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-major-unit.js","./node_modules/@progress/kendo-charts/dist/es2015/core/point.js","./node_modules/@progress/kendo-charts/dist/es2015/core/box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/ring.js","./node_modules/@progress/kendo-charts/dist/es2015/core/shape-builder.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/easing-functions.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/animation-factory.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/animation.js","./node_modules/@progress/kendo-charts/dist/es2015/core/chart-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/box-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/shape-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/gradients.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/box-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/core/root-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/float-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/text.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/rect-to-box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/text-box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/title.js","./node_modules/@progress/kendo-charts/dist/es2015/core/axis-label.js","./node_modules/@progress/kendo-charts/dist/es2015/core/note.js","./node_modules/@progress/kendo-charts/dist/es2015/services/intl-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/format-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/chart-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/dom-events-builder.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-tick.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-grid-line.js","./node_modules/@progress/kendo-charts/dist/es2015/core/axis.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/absolute-date-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-ticks.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-duration.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/start-of-week.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/floor-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/ceil-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-comparer.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-time.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-equals.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-index.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/duration.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-dates.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/first-day.js","./node_modules/@progress/kendo-charts/dist/es2015/core/category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/core/date-category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/floor.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/ceil.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/limit-coordinate.js","./node_modules/@progress/kendo-charts/dist/es2015/core/numeric-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-min.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-max.js","./node_modules/@progress/kendo-charts/dist/es2015/core/date-value-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/logarithmic-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/mixins/grid-lines-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/polar-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/mixins/radar-numeric-axis-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-numeric-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-logarithmic-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/curve-processor.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/find-axis-by-name.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-pane.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/count-numbers.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/aggregates.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-field.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/series-binder.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-range-calculator.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-bar-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/categorical-error-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/any-has-z-index.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/append-if-not-null.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/are-numbers.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/segment-visible.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/bind-segments.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/categories-count.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/equals-ignore-case.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/eval-options.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/filter-series-by-type.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-date-field.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-gradient-overlay.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-value.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/is-date-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/single-item-or-array.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/create-out-of-range-points.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/categorical-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/point-events-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/note-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/spline-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/line-chart-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/clip-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/clip-animation-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/step-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/spline-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/axis-group-range-tracker.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-label.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/cluster-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/stack-wrap.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/vertical-box-plot.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/scatter-error-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/target.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/base-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/chart-container.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pane.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/plotarea-events-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/series-aggregator.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/default-aggregates.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-line-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/spline-range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/step-range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/trendline-factory.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/calculate-slope.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/calculate-moving-average.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/trendline-registry.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/linear-trendline.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/moving-average.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/categorical-plotarea.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/arc-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/circle-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/group-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/html-encode.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/image-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/multi-path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/rect-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/text-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/surface.js","./node_modules/@progress/kendo-drawing/dist/es2015/surface-factory.js","./node_modules/@progress/kendo-drawing/dist/es2015/surface.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/highlight.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/accept-key.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/to-chart-axis-ranges.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/pannable.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/zoom-selection.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/mousewheel-zoom.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/translate-to-point.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start-reverse.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-item.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-factory.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/selection.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/shared-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bar-chart-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bubble-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/fade-in-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/pie-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/scatter-value-getter.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/scatter-trendline-registry.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/scatter-linear-trendline.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/trendlines/scatter-moving-average.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/xy-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/pie-chart-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/pie-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-scatter-chart/polar-scatter-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-line-chart/polar-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/spline-polar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-line-chart/radar-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/spline-radar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-cluster-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-stack-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/radar-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/pyramid-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/heatmap-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/heatmap-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/color-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/heatmap-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/register-charts.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/donut-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/funnel-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/chart.js","./node_modules/@progress/kendo-charts/dist/es2015/sparkline/shared-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/sparkline/sparkline.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/fade-out-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/navigator-hint.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/navigator.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/stock-chart.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/arc.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/rect.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-align.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/create-stack-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-stack.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-wrap.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/fit.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/path-parser.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/pad.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/build-label-element.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/get-range.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/unpad.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/arc-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/arc-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/circular/circular-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/encoding.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code11.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code39.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code39-extended.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code93.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/postnet.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code128.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/msi.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/ean13.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/ean8.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/main.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code93-extended.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/surface-size.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/barcode.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/barcode-validator.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/free-cell-visitor.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoding-result.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoders/iso-encoder.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoding.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/qr-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/data-mode-instances.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/numeric-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/alpha-numeric-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/byte-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoders/utf8-encoder.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/version-codewords.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/qrcode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/qrcode-validator.js","./node_modules/@progress/kendo-charts/dist/es2015/map/datums.js","./node_modules/@progress/kendo-charts/dist/es2015/map/location.js","./node_modules/@progress/kendo-charts/dist/es2015/map/crs.js","./node_modules/@progress/kendo-charts/dist/es2015/map/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/observable.js","./node_modules/@progress/kendo-charts/dist/es2015/map/attribution.js","./node_modules/@progress/kendo-charts/dist/es2015/map/navigator.js","./node_modules/@progress/kendo-charts/dist/es2015/common/keys.js","./node_modules/@progress/kendo-charts/dist/es2015/map/zoom.js","./node_modules/@progress/kendo-charts/dist/es2015/map/extent.js","./node_modules/@progress/kendo-charts/dist/es2015/map/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/map/tooltip/tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/layer.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/tile.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/draggable.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/shape.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/bubble.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/marker.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/fx.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/user-events.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/scroller.js","./node_modules/@progress/kendo-charts/dist/es2015/map/map.js","./node_modules/@progress/kendo-charts/dist/es2015/services/map-service.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/base-theme.js","./node_modules/@progress/kendo-common/dist/es2015/util.js","./node_modules/@progress/kendo-common/dist/es2015/support.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/field-list.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/getter.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/setter.js","./node_modules/@progress/kendo-data-query/dist/es2015/utils.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-descriptor.interface.js","./node_modules/@progress/kendo-data-query/dist/es2015/funcs.js","./node_modules/@progress/kendo-data-query/dist/es2015/accessor.js","./node_modules/@progress/kendo-data-query/dist/es2015/odata.operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/mvc/operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/filter-serialization.common.js","./node_modules/@progress/kendo-data-query/dist/es2015/mvc/deserialization.js","./node_modules/@progress/kendo-data-query/dist/es2015/sorting/sort-array.operator.js","./node_modules/@progress/kendo-data-query/dist/es2015/transducers.js","./node_modules/@progress/kendo-data-query/dist/es2015/grouping/aggregate.operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter.operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-no-eval.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-expression.factory.js","./node_modules/@progress/kendo-data-query/dist/es2015/grouping/group.operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/array.operators.js","./node_modules/@progress/kendo-draggable/dist/es2015/main.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/arc-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/circle-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/export-image.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/group-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/image-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/multi-path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/node-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/rect-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/root-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface-cursor.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/text-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/utils/render-path.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/animation-frame.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/class.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/color.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/named-colors.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/parse-color.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/support.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/throttle.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/base-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/has-observers.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/options-store.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/observable.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/surface.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close-or-less.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/arc.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersection.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/circle.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/ellipse-extreme-angles.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersections-count.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/matrix.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/point.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/rect.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/is-out-of-end-point.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/calculate-curve-at.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/to-cubic-polynomial.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/complex-number.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/solve-cubic-equation.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/has-roots-in-range.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/segment.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/curve-intersections-count.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/size.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/to-matrix.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/transformation.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/transform.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-options.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient-stop.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/stops-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/linear-gradient.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/radial-gradient.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/measurable.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/paintable.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/traversable.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-accessors.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-geometry.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-points.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/shape-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/parse-path.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/quad-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/quad-root.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/shapes-quad-tree.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/circle.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/element.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/elements-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/group.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/image.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/geometry-elements-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/points-to-curve.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/path.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/text.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-bounding-box.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-clippend-bounding-box.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/clip-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/definition-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/export-group.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/export-svg.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-stop-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/linear-gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/node-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/radial-gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/root-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-all-attributes.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-attribute.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-style.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-svg.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/lru-cache.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/measure-text.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/text-metrics.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/util.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/append.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/arabic-to-roman.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/bind-events.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/create-promise.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/defined.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/definition-id.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/deg.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-offset.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-padding.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-scale.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-size.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-styles.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/encode-base64.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/encode-utf.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/event-coordinates.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/event-element.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/is-transparent.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/last.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/limit-value.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/merge-sort.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/now.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/promise-all.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/rad.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/round.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/unbind-events.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/value-or-default.js","./node_modules/@progress/kendo-intl/dist/es2015/common/is-string.js","./node_modules/@progress/kendo-intl/dist/es2015/error-details.js","./node_modules/@progress/kendo-intl/dist/es2015/errors.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/info.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/default-data.js","./node_modules/@progress/kendo-intl/dist/es2015/common/constants.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/load-numbers.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/load-dates.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/territory.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/load-units.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/load.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/date-field-name.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/date-format-names.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/parse-range-date.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/currency.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/constants.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/first-day.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/weekend-range.js","./node_modules/@progress/kendo-intl/dist/es2015/cldr/number-symbols.js","./node_modules/@progress/kendo-intl/dist/es2015/common/is-negative-zero.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/format-currency-symbol.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/group-integer.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/is-currency-style.js","./node_modules/@progress/kendo-intl/dist/es2015/common/pad.js","./node_modules/@progress/kendo-intl/dist/es2015/common/round.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/standard-number-format.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/utils.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/custom-number-format.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/format-options.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/format-number.js","./node_modules/@progress/kendo-intl/dist/es2015/common/is-number.js","./node_modules/@progress/kendo-intl/dist/es2015/numbers/parse-number.js","./node_modules/@progress/kendo-intl/dist/es2015/common/format-string.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/date-pattern.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/date-name-type.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/format-names.js","./node_modules/@progress/kendo-intl/dist/es2015/common/is-date.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/constants.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/format-date.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/time-utils.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/parse-date.js","./node_modules/@progress/kendo-intl/dist/es2015/dates/split-date-format.js","./node_modules/@progress/kendo-intl/dist/es2015/format.js","./node_modules/@progress/kendo-licensing/dist/index-esm.js","./node_modules/@progress/kendo-popup-common/dist/es2015/align-point.js","./node_modules/@progress/kendo-popup-common/dist/es2015/align.js","./node_modules/@progress/kendo-popup-common/dist/es2015/add-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/owner-document.js","./node_modules/@progress/kendo-popup-common/dist/es2015/window.js","./node_modules/@progress/kendo-popup-common/dist/es2015/document.js","./node_modules/@progress/kendo-popup-common/dist/es2015/scrollbar-width.js","./node_modules/@progress/kendo-popup-common/dist/es2015/window-viewport.js","./node_modules/@progress/kendo-popup-common/dist/es2015/bounding-offset.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset.js","./node_modules/@progress/kendo-popup-common/dist/es2015/parents.js","./node_modules/@progress/kendo-popup-common/dist/es2015/scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/element-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position-with-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/parent-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/remove-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/collision.js","./node_modules/@progress/kendo-popup-common/dist/es2015/restrict-to-view.js","./node_modules/@progress/kendo-popup-common/dist/es2015/siblings.js","./node_modules/@progress/kendo-popup-common/dist/es2015/sibling-container.js","./node_modules/@progress/kendo-popup-common/dist/es2015/utils.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position-element.js","./node_modules/hammerjs/hammer.js","./node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","./node_modules/ngx-perfect-scrollbar/__ivy_ngcc__/fesm2015/ngx-perfect-scrollbar.js","./node_modules/rxjs/dist/esm/internal/BehaviorSubject.js","./node_modules/rxjs/dist/esm/internal/Observable.js","./node_modules/rxjs/dist/esm/internal/ReplaySubject.js","./node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js","./node_modules/rxjs/dist/esm/internal/Subject.js","./node_modules/rxjs/dist/esm/internal/NotificationFactories.js","./node_modules/rxjs/dist/esm/internal/Subscriber.js","./node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js","./node_modules/rxjs/dist/esm/internal/Subscription.js","./node_modules/rxjs/dist/esm/internal/config.js","./node_modules/rxjs/dist/esm/internal/firstValueFrom.js","./node_modules/rxjs/dist/esm/internal/observable/ConnectableObservable.js","./node_modules/rxjs/dist/esm/internal/observable/combineLatest.js","./node_modules/rxjs/dist/esm/internal/observable/concat.js","./node_modules/rxjs/dist/esm/internal/operators/concatAll.js","./node_modules/rxjs/dist/esm/internal/observable/defer.js","./node_modules/rxjs/dist/esm/internal/observable/empty.js","./node_modules/rxjs/dist/esm/internal/observable/forkJoin.js","./node_modules/rxjs/dist/esm/internal/operators/observeOn.js","./node_modules/rxjs/dist/esm/internal/operators/subscribeOn.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/observable/from.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduled.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleObservable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleArray.js","./node_modules/rxjs/dist/esm/internal/scheduled/schedulePromise.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleIterable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/observable/fromEvent.js","./node_modules/rxjs/dist/esm/internal/observable/innerFrom.js","./node_modules/rxjs/dist/esm/internal/observable/interval.js","./node_modules/rxjs/dist/esm/internal/observable/merge.js","./node_modules/rxjs/dist/esm/internal/observable/never.js","./node_modules/rxjs/dist/esm/internal/observable/of.js","./node_modules/rxjs/dist/esm/internal/observable/throwError.js","./node_modules/rxjs/dist/esm/internal/observable/timer.js","./node_modules/rxjs/dist/esm/internal/observable/zip.js","./node_modules/rxjs/dist/esm/internal/operators/OperatorSubscriber.js","./node_modules/rxjs/dist/esm/internal/operators/auditTime.js","./node_modules/rxjs/dist/esm/internal/operators/audit.js","./node_modules/rxjs/dist/esm/internal/operators/catchError.js","./node_modules/rxjs/dist/esm/internal/operators/concatMap.js","./node_modules/rxjs/dist/esm/internal/operators/debounceTime.js","./node_modules/rxjs/dist/esm/internal/operators/defaultIfEmpty.js","./node_modules/rxjs/dist/esm/internal/operators/delayWhen.js","./node_modules/rxjs/dist/esm/internal/operators/ignoreElements.js","./node_modules/rxjs/dist/esm/internal/operators/delay.js","./node_modules/rxjs/dist/esm/internal/operators/distinctUntilChanged.js","./node_modules/rxjs/dist/esm/internal/operators/filter.js","./node_modules/rxjs/dist/esm/internal/operators/finalize.js","./node_modules/rxjs/dist/esm/internal/operators/first.js","./node_modules/rxjs/dist/esm/internal/operators/map.js","./node_modules/rxjs/dist/esm/internal/operators/mapTo.js","./node_modules/rxjs/dist/esm/internal/operators/mergeAll.js","./node_modules/rxjs/dist/esm/internal/operators/mergeMap.js","./node_modules/rxjs/dist/esm/internal/operators/mergeInternals.js","./node_modules/rxjs/dist/esm/internal/operators/refCount.js","./node_modules/rxjs/dist/esm/internal/operators/scanInternals.js","./node_modules/rxjs/dist/esm/internal/operators/scan.js","./node_modules/rxjs/dist/esm/internal/operators/share.js","./node_modules/rxjs/dist/esm/internal/operators/shareReplay.js","./node_modules/rxjs/dist/esm/internal/operators/skip.js","./node_modules/rxjs/dist/esm/internal/operators/startWith.js","./node_modules/rxjs/dist/esm/internal/operators/switchMap.js","./node_modules/rxjs/dist/esm/internal/operators/take.js","./node_modules/rxjs/dist/esm/internal/operators/takeUntil.js","./node_modules/rxjs/dist/esm/internal/operators/takeWhile.js","./node_modules/rxjs/dist/esm/internal/operators/tap.js","./node_modules/rxjs/dist/esm/internal/operators/throttleTime.js","./node_modules/rxjs/dist/esm/internal/operators/throttle.js","./node_modules/rxjs/dist/esm/internal/operators/throwIfEmpty.js","./node_modules/rxjs/dist/esm/internal/scheduler/Action.js","./node_modules/rxjs/dist/esm/internal/scheduler/intervalProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js","./node_modules/rxjs/dist/esm/internal/Scheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AsyncScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrameProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/animationFrame.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameScheduler.js","./node_modules/rxjs/dist/esm/internal/scheduler/AnimationFrameAction.js","./node_modules/rxjs/dist/esm/internal/scheduler/async.js","./node_modules/rxjs/dist/esm/internal/scheduler/dateTimestampProvider.js","./node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js","./node_modules/rxjs/dist/esm/internal/symbol/iterator.js","./node_modules/rxjs/dist/esm/internal/symbol/observable.js","./node_modules/rxjs/dist/esm/internal/util/EmptyError.js","./node_modules/rxjs/dist/esm/internal/util/args.js","./node_modules/rxjs/dist/esm/internal/util/argsArgArrayOrObject.js","./node_modules/rxjs/dist/esm/internal/util/argsOrArgArray.js","./node_modules/rxjs/dist/esm/internal/util/arrRemove.js","./node_modules/rxjs/dist/esm/internal/util/createErrorClass.js","./node_modules/rxjs/dist/esm/internal/util/createObject.js","./node_modules/rxjs/dist/esm/internal/util/errorContext.js","./node_modules/rxjs/dist/esm/internal/util/executeSchedule.js","./node_modules/rxjs/dist/esm/internal/util/identity.js","./node_modules/rxjs/dist/esm/internal/util/isArrayLike.js","./node_modules/rxjs/dist/esm/internal/util/isAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/util/isDate.js","./node_modules/rxjs/dist/esm/internal/util/isFunction.js","./node_modules/rxjs/dist/esm/internal/util/isInteropObservable.js","./node_modules/rxjs/dist/esm/internal/util/isIterable.js","./node_modules/rxjs/dist/esm/internal/util/isObservable.js","./node_modules/rxjs/dist/esm/internal/util/isPromise.js","./node_modules/rxjs/dist/esm/internal/util/isReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/util/isScheduler.js","./node_modules/rxjs/dist/esm/internal/util/lift.js","./node_modules/rxjs/dist/esm/internal/util/mapOneOrManyArgs.js","./node_modules/rxjs/dist/esm/internal/util/noop.js","./node_modules/rxjs/dist/esm/internal/util/pipe.js","./node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js","./node_modules/rxjs/dist/esm/internal/util/throwUnobservableError.js","./node_modules/@angular/animations/fesm2020/animations.mjs","./node_modules/@angular/common/fesm2020/common.mjs","./node_modules/@angular/common/fesm2020/http.mjs","./node_modules/@angular/core/fesm2020/core.mjs","./node_modules/@angular/forms/fesm2020/forms.mjs","./node_modules/@angular/platform-browser/fesm2020/platform-browser.mjs","./node_modules/rxjs/dist/esm/internal/operators/takeLast.js","./node_modules/rxjs/dist/esm/internal/operators/last.js","./node_modules/@angular/router/fesm2020/router.mjs","./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","./node_modules/@popperjs/core/lib/enums.js","./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","./node_modules/@popperjs/core/lib/utils/math.js","./node_modules/@popperjs/core/lib/utils/userAgent.js","./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","./node_modules/@popperjs/core/lib/dom-utils/contains.js","./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","./node_modules/@popperjs/core/lib/utils/getVariation.js","./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","./node_modules/@popperjs/core/lib/utils/computeOffsets.js","./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","./node_modules/@popperjs/core/lib/utils/detectOverflow.js","./node_modules/@popperjs/core/lib/modifiers/flip.js","./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","./node_modules/@popperjs/core/lib/utils/within.js","./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","./node_modules/@popperjs/core/lib/utils/getAltAxis.js","./node_modules/@popperjs/core/lib/modifiers/arrow.js","./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","./node_modules/@popperjs/core/lib/utils/orderModifiers.js","./node_modules/@popperjs/core/lib/utils/debounce.js","./node_modules/@popperjs/core/lib/createPopper.js","./node_modules/@popperjs/core/lib/utils/mergeByName.js","./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","./node_modules/@popperjs/core/lib/popper-lite.js","./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","./node_modules/@popperjs/core/lib/modifiers/offset.js","./node_modules/@ng-bootstrap/ng-bootstrap/fesm2020/ng-bootstrap.mjs","./node_modules/rxjs/dist/esm/internal/operators/withLatestFrom.js","./node_modules/rxjs/dist/esm/internal/observable/race.js","./node_modules/@ngx-translate/core/fesm2020/ngx-translate-core.mjs","./node_modules/rxjs/dist/esm/internal/operators/timeout.js","./node_modules/rxjs/dist/esm/internal/operators/retryWhen.js","./node_modules/rxjs/dist/esm/internal/operators/retry.js","./node_modules/rfc4648/lib/rfc4648.js","./node_modules/angular-auth-oidc-client/fesm2020/angular-auth-oidc-client.mjs","./node_modules/cadlearning.angular/fesm2020/cadlearning.angular.mjs","./node_modules/cadlearning.dto/fesm2020/cadlearning.dto.mjs","./node_modules/ngx-quill/fesm2020/ngx-quill-config.mjs","./node_modules/ngx-quill/fesm2020/ngx-quill.mjs","./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","./node_modules/tslib/tslib.es6.mjs"],"sourcesContent":["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n/** @private */\r\nexport class DefaultReconnectPolicy {\r\n constructor(retryDelays) {\r\n this._retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n nextRetryDelayInMilliseconds(retryContext) {\r\n return this._retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage, statusCode) {\r\n const trueProto = new.target.prototype;\r\n super(`${errorMessage}: Status code '${statusCode}'`);\r\n this.statusCode = statusCode;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport is unsupported by the browser. */\r\n/** @private */\r\nexport class UnsupportedTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.UnsupportedTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'UnsupportedTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport is disabled by the browser. */\r\n/** @private */\r\nexport class DisabledTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.DisabledTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'DisabledTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the selected transport cannot be started. */\r\n/** @private */\r\nexport class FailedToStartTransportError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToStartTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occured on.\r\n */\r\n constructor(message, transport) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'FailedToStartTransportError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when the negotiation with the server failed to complete. */\r\n/** @private */\r\nexport class FailedToNegotiateWithServerError extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToNegotiateWithServerError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n */\r\n constructor(message) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.errorType = 'FailedToNegotiateWithServerError';\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n/** Error thrown when multiple errors have occured. */\r\n/** @private */\r\nexport class AggregateErrors extends Error {\r\n /** Constructs a new instance of {@link @microsoft/signalr.AggregateErrors}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {Error[]} innerErrors The collection of errors this error is aggregating.\r\n */\r\n constructor(message, innerErrors) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.innerErrors = innerErrors;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n constructor(statusCode, statusText, content) {\r\n this.statusCode = statusCode;\r\n this.statusText = statusText;\r\n this.content = content;\r\n }\r\n}\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport class HttpClient {\r\n get(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n post(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n delete(url, options) {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n getCookieString(url) {\r\n return \"\";\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n /** Log level for very low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Trace\"] = 0] = \"Trace\";\r\n /** Log level for low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Debug\"] = 1] = \"Debug\";\r\n /** Log level for informational diagnostic messages. */\r\n LogLevel[LogLevel[\"Information\"] = 2] = \"Information\";\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n LogLevel[LogLevel[\"Warning\"] = 3] = \"Warning\";\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n LogLevel[LogLevel[\"Error\"] = 4] = \"Error\";\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n LogLevel[LogLevel[\"Critical\"] = 5] = \"Critical\";\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n LogLevel[LogLevel[\"None\"] = 6] = \"None\";\r\n})(LogLevel || (LogLevel = {}));\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger {\r\n constructor() { }\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n log(_logLevel, _message) {\r\n }\r\n}\r\n/** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\nNullLogger.instance = new NullLogger();\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\nexport const VERSION = \"6.0.23\";\r\n/** @private */\r\nexport class Arg {\r\n static isRequired(val, name) {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n static isNotEmpty(val, name) {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n static isIn(val, values, name) {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport class Platform {\r\n // react-native has a window but no document so we should check both\r\n static get isBrowser() {\r\n return typeof window === \"object\" && typeof window.document === \"object\";\r\n }\r\n // WebWorkers don't have a window object so the isBrowser check would fail\r\n static get isWebWorker() {\r\n return typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n // react-native has a window but no document\r\n static get isReactNative() {\r\n return typeof window === \"object\" && typeof window.document === \"undefined\";\r\n }\r\n // Node apps shouldn't have a window object, but WebWorkers don't either\r\n // so we need to check for both WebWorker and window\r\n static get isNode() {\r\n return !this.isBrowser && !this.isWebWorker && !this.isReactNative;\r\n }\r\n}\r\n/** @private */\r\nexport function getDataDetail(data, includeContent) {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n }\r\n else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n/** @private */\r\nexport function formatArrayBuffer(data) {\r\n const view = new Uint8Array(data);\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n // Trim of trailing space.\r\n return str.substr(0, str.length - 1);\r\n}\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val) {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n/** @private */\r\nexport async function sendMessage(logger, transportName, httpClient, url, accessTokenFactory, content, options) {\r\n let headers = {};\r\n if (accessTokenFactory) {\r\n const token = await accessTokenFactory();\r\n if (token) {\r\n headers = {\r\n [\"Authorization\"]: `Bearer ${token}`,\r\n };\r\n }\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, options.logMessageContent)}.`);\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...options.headers },\r\n responseType,\r\n timeout: options.timeout,\r\n withCredentials: options.withCredentials,\r\n });\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n/** @private */\r\nexport function createLogger(logger) {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n if (logger.log !== undefined) {\r\n return logger;\r\n }\r\n return new ConsoleLogger(logger);\r\n}\r\n/** @private */\r\nexport class SubjectSubscription {\r\n constructor(subject, observer) {\r\n this._subject = subject;\r\n this._observer = observer;\r\n }\r\n dispose() {\r\n const index = this._subject.observers.indexOf(this._observer);\r\n if (index > -1) {\r\n this._subject.observers.splice(index, 1);\r\n }\r\n if (this._subject.observers.length === 0 && this._subject.cancelCallback) {\r\n this._subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport class ConsoleLogger {\r\n constructor(minimumLogLevel) {\r\n this._minLevel = minimumLogLevel;\r\n this.out = console;\r\n }\r\n log(logLevel, message) {\r\n if (logLevel >= this._minLevel) {\r\n const msg = `[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`;\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.out.error(msg);\r\n break;\r\n case LogLevel.Warning:\r\n this.out.warn(msg);\r\n break;\r\n case LogLevel.Information:\r\n this.out.info(msg);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.out.log(msg);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/** @private */\r\nexport function getUserAgentHeader() {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion())];\r\n}\r\n/** @private */\r\nexport function constructUserAgent(version, os, runtime, runtimeVersion) {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent = \"Microsoft SignalR/\";\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n }\r\n else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n userAgent += `${runtime}`;\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n }\r\n else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getOsName() {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n}\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getRuntimeVersion() {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\nfunction getRuntime() {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n }\r\n else {\r\n return \"Browser\";\r\n }\r\n}\r\n/** @private */\r\nexport function getErrorString(e) {\r\n if (e.stack) {\r\n return e.stack;\r\n }\r\n else if (e.message) {\r\n return e.message;\r\n }\r\n return `${e}`;\r\n}\r\n/** @private */\r\nexport function getGlobalThis() {\r\n // globalThis is semi-new and not available in Node until v12\r\n if (typeof globalThis !== \"undefined\") {\r\n return globalThis;\r\n }\r\n if (typeof self !== \"undefined\") {\r\n return self;\r\n }\r\n if (typeof window !== \"undefined\") {\r\n return window;\r\n }\r\n if (typeof global !== \"undefined\") {\r\n return global;\r\n }\r\n throw new Error(\"could not find global\");\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Platform, getGlobalThis } from \"./Utils\";\r\nexport class FetchHttpClient extends HttpClient {\r\n constructor(logger) {\r\n super();\r\n this._logger = logger;\r\n if (typeof fetch === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this._jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n this._fetchType = requireFunc(\"node-fetch\");\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this._fetchType = requireFunc(\"fetch-cookie\")(this._fetchType, this._jar);\r\n }\r\n else {\r\n this._fetchType = fetch.bind(getGlobalThis());\r\n }\r\n if (typeof AbortController === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this._abortControllerType = requireFunc(\"abort-controller\");\r\n }\r\n else {\r\n this._abortControllerType = AbortController;\r\n }\r\n }\r\n /** @inheritDoc */\r\n async send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n const abortController = new this._abortControllerType();\r\n let error;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n let response;\r\n try {\r\n response = await this._fetchType(request.url, {\r\n body: request.content,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"Content-Type\": \"text/plain;charset=UTF-8\",\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method,\r\n mode: \"cors\",\r\n redirect: \"follow\",\r\n signal: abortController.signal,\r\n });\r\n }\r\n catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${e}.`);\r\n throw e;\r\n }\r\n finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n if (!response.ok) {\r\n const errorMessage = await deserializeContent(response, \"text\");\r\n throw new HttpError(errorMessage || response.statusText, response.status);\r\n }\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n return new HttpResponse(response.status, response.statusText, payload);\r\n }\r\n getCookieString(url) {\r\n let cookies = \"\";\r\n if (Platform.isNode && this._jar) {\r\n // @ts-ignore: unused variable\r\n this._jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\nfunction deserializeContent(response, responseType) {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n return content;\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nexport class XhrHttpClient extends HttpClient {\r\n constructor(logger) {\r\n super();\r\n this._logger = logger;\r\n }\r\n /** @inheritDoc */\r\n send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(request.method, request.url, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n }\r\n else {\r\n reject(new HttpError(xhr.response || xhr.responseText || xhr.statusText, xhr.status));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n xhr.ontimeout = () => {\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n xhr.send(request.content || \"\");\r\n });\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n constructor(logger) {\r\n super();\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this._httpClient = new FetchHttpClient(logger);\r\n }\r\n else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this._httpClient = new XhrHttpClient(logger);\r\n }\r\n else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n /** @inheritDoc */\r\n send(request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return this._httpClient.send(request);\r\n }\r\n getCookieString(url) {\r\n return this._httpClient.getCookieString(url);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nexport class HeaderNames {\r\n}\r\nHeaderNames.Authorization = \"Authorization\";\r\nHeaderNames.Cookie = \"Cookie\";\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport var HttpTransportType;\r\n(function (HttpTransportType) {\r\n /** Specifies no transport preference. */\r\n HttpTransportType[HttpTransportType[\"None\"] = 0] = \"None\";\r\n /** Specifies the WebSockets transport. */\r\n HttpTransportType[HttpTransportType[\"WebSockets\"] = 1] = \"WebSockets\";\r\n /** Specifies the Server-Sent Events transport. */\r\n HttpTransportType[HttpTransportType[\"ServerSentEvents\"] = 2] = \"ServerSentEvents\";\r\n /** Specifies the Long Polling transport. */\r\n HttpTransportType[HttpTransportType[\"LongPolling\"] = 4] = \"LongPolling\";\r\n})(HttpTransportType || (HttpTransportType = {}));\r\n/** Specifies the transfer format for a connection. */\r\nexport var TransferFormat;\r\n(function (TransferFormat) {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Text\"] = 1] = \"Text\";\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Binary\"] = 2] = \"Binary\";\r\n})(TransferFormat || (TransferFormat = {}));\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController {\r\n constructor() {\r\n this._isAborted = false;\r\n this.onabort = null;\r\n }\r\n abort() {\r\n if (!this._isAborted) {\r\n this._isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n get signal() {\r\n return this;\r\n }\r\n get aborted() {\r\n return this._isAborted;\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport {\r\n constructor(httpClient, accessTokenFactory, logger, options) {\r\n this._httpClient = httpClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n this._running = false;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n get pollAborted() {\r\n return this._pollAbort.aborted;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._url = url;\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n const pollOptions = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(pollOptions, token);\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n this._running = true;\r\n }\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n async _getAccessToken() {\r\n if (this._accessTokenFactory) {\r\n return await this._accessTokenFactory();\r\n }\r\n return null;\r\n }\r\n _updateHeaderToken(request, token) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (token) {\r\n request.headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n return;\r\n }\r\n if (request.headers[HeaderNames.Authorization]) {\r\n delete request.headers[HeaderNames.Authorization];\r\n }\r\n }\r\n async _poll(url, pollOptions) {\r\n try {\r\n while (this._running) {\r\n // We have to get the access token on each poll, in case it changes\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(pollOptions, token);\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n this._running = false;\r\n }\r\n else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n }\r\n else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${e.message}`);\r\n }\r\n else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n async send(data) {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url, this._accessTokenFactory, data, this._options);\r\n }\r\n async stop() {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n try {\r\n await this._receiving;\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n const deleteOptions = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n const token = await this._getAccessToken();\r\n this._updateHeaderToken(deleteOptions, token);\r\n await this._httpClient.delete(this._url, deleteOptions);\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request sent.\");\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\n/** @private */\r\nexport class ServerSentEventsTransport {\r\n constructor(httpClient, accessTokenFactory, logger, options) {\r\n this._httpClient = httpClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logger = logger;\r\n this._options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n // set url before accessTokenFactory because this.url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n let eventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials });\r\n }\r\n else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers } });\r\n }\r\n try {\r\n eventSource.onmessage = (e) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent)}.`);\r\n this.onreceive(e.data);\r\n }\r\n catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n }\r\n else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n }\r\n catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n async send(data) {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url, this._accessTokenFactory, data, this._options);\r\n }\r\n stop() {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n _close(e) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n/** @private */\r\nexport class WebSocketTransport {\r\n constructor(httpClient, accessTokenFactory, logger, logMessageContent, webSocketConstructor, headers) {\r\n this._logger = logger;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logMessageContent = logMessageContent;\r\n this._webSocketConstructor = webSocketConstructor;\r\n this._httpClient = httpClient;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this._headers = headers;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n return new Promise((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket;\r\n const cookies = this._httpClient.getCookieString(url);\r\n let opened = false;\r\n if (Platform.isNode) {\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n if (cookies) {\r\n headers[HeaderNames.Cookie] = `${cookies}`;\r\n }\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this._webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this._headers },\r\n });\r\n }\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this._webSocketConstructor(url);\r\n }\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n webSocket.onopen = (_event) => {\r\n this._logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this._webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n webSocket.onerror = (event) => {\r\n let error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = \"There was an error with the transport\";\r\n }\r\n this._logger.log(LogLevel.Information, `(WebSockets transport) ${error}.`);\r\n };\r\n webSocket.onmessage = (message) => {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this._logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n }\r\n catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n webSocket.onclose = (event) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this._close(event);\r\n }\r\n else {\r\n let error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = \"WebSocket failed to connect. The connection could not be found on the server,\"\r\n + \" either the endpoint may not be a SignalR endpoint,\"\r\n + \" the connection ID is not present on the server, or there is a proxy blocking WebSockets.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\";\r\n }\r\n reject(new Error(error));\r\n }\r\n };\r\n });\r\n }\r\n send(data) {\r\n if (this._webSocket && this._webSocket.readyState === this._webSocketConstructor.OPEN) {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this._logMessageContent)}.`);\r\n this._webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n stop() {\r\n if (this._webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this._close(undefined);\r\n }\r\n return Promise.resolve();\r\n }\r\n _close(event) {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this._webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this._webSocket.onclose = () => { };\r\n this._webSocket.onmessage = () => { };\r\n this._webSocket.onerror = () => { };\r\n this._webSocket.close();\r\n this._webSocket = undefined;\r\n }\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n if (this.onclose) {\r\n if (this._isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason || \"no reason given\"}).`));\r\n }\r\n else if (event instanceof Error) {\r\n this.onclose(event);\r\n }\r\n else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n _isCloseEvent(event) {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { AggregateErrors, DisabledTransportError, FailedToNegotiateWithServerError, FailedToStartTransportError, HttpError, UnsupportedTransportError } from \"./Errors\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\nconst MAX_REDIRECTS = 100;\r\n/** @private */\r\nexport class HttpConnection {\r\n constructor(url, options = {}) {\r\n this._stopPromiseResolver = () => { };\r\n this.features = {};\r\n this._negotiateVersion = 1;\r\n Arg.isRequired(url, \"url\");\r\n this._logger = createLogger(options.logger);\r\n this.baseUrl = this._resolveUrl(url);\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n }\r\n else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;\r\n let webSocketModule = null;\r\n let eventSourceModule = null;\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n }\r\n else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n }\r\n else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n this._httpClient = options.httpClient || new DefaultHttpClient(this._logger);\r\n this._connectionState = \"Disconnected\" /* Disconnected */;\r\n this._connectionStarted = false;\r\n this._options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async start(transferFormat) {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n if (this._connectionState !== \"Disconnected\" /* Disconnected */) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n this._connectionState = \"Connecting\" /* Connecting */;\r\n this._startInternalPromise = this._startInternal(transferFormat);\r\n await this._startInternalPromise;\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this._logger.log(LogLevel.Error, message);\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this._stopPromise;\r\n return Promise.reject(new Error(message));\r\n }\r\n else if (this._connectionState !== \"Connected\" /* Connected */) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this._logger.log(LogLevel.Error, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n this._connectionStarted = true;\r\n }\r\n send(data) {\r\n if (this._connectionState !== \"Connected\" /* Connected */) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n if (!this._sendQueue) {\r\n this._sendQueue = new TransportSendQueue(this.transport);\r\n }\r\n // Transport will not be null if state is connected\r\n return this._sendQueue.send(data);\r\n }\r\n async stop(error) {\r\n if (this._connectionState === \"Disconnected\" /* Disconnected */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n this._connectionState = \"Disconnecting\" /* Disconnecting */;\r\n this._stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this._stopPromiseResolver = resolve;\r\n });\r\n // stopInternal should never throw so just observe it.\r\n await this._stopInternal(error);\r\n await this._stopPromise;\r\n }\r\n async _stopInternal(error) {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this._stopError = error;\r\n try {\r\n await this._startInternalPromise;\r\n }\r\n catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this._stopConnection();\r\n }\r\n this.transport = undefined;\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n async _startInternal(transferFormat) {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this._accessTokenFactory = this._options.accessTokenFactory;\r\n try {\r\n if (this._options.skipNegotiation) {\r\n if (this._options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this._constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this._startTransport(url, transferFormat);\r\n }\r\n else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n }\r\n else {\r\n let negotiateResponse = null;\r\n let redirects = 0;\r\n do {\r\n negotiateResponse = await this._getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */ || this._connectionState === \"Disconnected\" /* Disconnected */) {\r\n throw new Error(\"The connection was stopped during negotiation.\");\r\n }\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n if (negotiateResponse.ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this._accessTokenFactory = () => accessToken;\r\n }\r\n redirects++;\r\n } while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n await this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);\r\n }\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n if (this._connectionState === \"Connecting\" /* Connecting */) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this._logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this._connectionState = \"Connected\" /* Connected */;\r\n }\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this._connectionState = \"Disconnected\" /* Disconnected */;\r\n this.transport = undefined;\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this._stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n async _getNegotiationResponse(url) {\r\n const headers = {};\r\n if (this._accessTokenFactory) {\r\n const token = await this._accessTokenFactory();\r\n if (token) {\r\n headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n }\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n const negotiateUrl = this._resolveNegotiateUrl(url);\r\n this._logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this._httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n });\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n const negotiateResponse = JSON.parse(response.content);\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n return negotiateResponse;\r\n }\r\n catch (e) {\r\n let errorMessage = \"Failed to complete negotiation with the server: \" + e;\r\n if (e instanceof HttpError) {\r\n if (e.statusCode === 404) {\r\n errorMessage = errorMessage + \" Either this is not a SignalR endpoint or there is a proxy blocking the connection.\";\r\n }\r\n }\r\n this._logger.log(LogLevel.Error, errorMessage);\r\n return Promise.reject(new FailedToNegotiateWithServerError(errorMessage));\r\n }\r\n }\r\n _createConnectUrl(url, connectionToken) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n async _createTransport(url, requestedTransport, negotiateResponse, requestedTransferFormat) {\r\n let connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this._isITransport(requestedTransport)) {\r\n this._logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n const transportExceptions = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed:`);\r\n transportExceptions.push(transportOrError);\r\n }\r\n else if (this._isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this._getNegotiationResponse(url);\r\n }\r\n catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this._createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n }\r\n catch (ex) {\r\n this._logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(new FailedToStartTransportError(`${endpoint.transport} failed: ${ex}`, HttpTransportType[endpoint.transport]));\r\n if (this._connectionState !== \"Connecting\" /* Connecting */) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this._logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n }\r\n }\r\n }\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new AggregateErrors(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`, transportExceptions));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n _constructTransport(transport) {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this._options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent, this._options.WebSocket, this._options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this._options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options);\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n _startTransport(url, transferFormat) {\r\n this.transport.onreceive = this.onreceive;\r\n this.transport.onclose = (e) => this._stopConnection(e);\r\n return this.transport.connect(url, transferFormat);\r\n }\r\n _resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat) {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n }\r\n else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this._options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this._options.EventSource)) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new UnsupportedTransportError(`'${HttpTransportType[transport]}' is not supported in your environment.`, transport);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n return this._constructTransport(transport);\r\n }\r\n catch (ex) {\r\n return ex;\r\n }\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new DisabledTransportError(`'${HttpTransportType[transport]}' is disabled by the client.`, transport);\r\n }\r\n }\r\n }\r\n _isITransport(transport) {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n _stopConnection(error) {\r\n this._logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this._connectionState}.`);\r\n this.transport = undefined;\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this._stopError || error;\r\n this._stopError = undefined;\r\n if (this._connectionState === \"Disconnected\" /* Disconnected */) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n if (this._connectionState === \"Connecting\" /* Connecting */) {\r\n this._logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n if (this._connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this._stopPromiseResolver();\r\n }\r\n if (error) {\r\n this._logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n if (this._sendQueue) {\r\n this._sendQueue.stop().catch((e) => {\r\n this._logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this._sendQueue = undefined;\r\n }\r\n this.connectionId = undefined;\r\n this._connectionState = \"Disconnected\" /* Disconnected */;\r\n if (this._connectionStarted) {\r\n this._connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n _resolveUrl(url) {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n if (!Platform.isBrowser) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n this._logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n _resolveNegotiateUrl(url) {\r\n const index = url.indexOf(\"?\");\r\n let negotiateUrl = url.substring(0, index === -1 ? url.length : index);\r\n if (negotiateUrl[negotiateUrl.length - 1] !== \"/\") {\r\n negotiateUrl += \"/\";\r\n }\r\n negotiateUrl += \"negotiate\";\r\n negotiateUrl += index === -1 ? \"\" : url.substring(index);\r\n if (negotiateUrl.indexOf(\"negotiateVersion\") === -1) {\r\n negotiateUrl += index === -1 ? \"?\" : \"&\";\r\n negotiateUrl += \"negotiateVersion=\" + this._negotiateVersion;\r\n }\r\n return negotiateUrl;\r\n }\r\n}\r\nfunction transportMatches(requestedTransport, actualTransport) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n/** @private */\r\nexport class TransportSendQueue {\r\n constructor(_transport) {\r\n this._transport = _transport;\r\n this._buffer = [];\r\n this._executing = true;\r\n this._sendBufferedData = new PromiseSource();\r\n this._transportResult = new PromiseSource();\r\n this._sendLoopPromise = this._sendLoop();\r\n }\r\n send(data) {\r\n this._bufferData(data);\r\n if (!this._transportResult) {\r\n this._transportResult = new PromiseSource();\r\n }\r\n return this._transportResult.promise;\r\n }\r\n stop() {\r\n this._executing = false;\r\n this._sendBufferedData.resolve();\r\n return this._sendLoopPromise;\r\n }\r\n _bufferData(data) {\r\n if (this._buffer.length && typeof (this._buffer[0]) !== typeof (data)) {\r\n throw new Error(`Expected data to be of type ${typeof (this._buffer)} but was of type ${typeof (data)}`);\r\n }\r\n this._buffer.push(data);\r\n this._sendBufferedData.resolve();\r\n }\r\n async _sendLoop() {\r\n while (true) {\r\n await this._sendBufferedData.promise;\r\n if (!this._executing) {\r\n if (this._transportResult) {\r\n this._transportResult.reject(\"Connection stopped.\");\r\n }\r\n break;\r\n }\r\n this._sendBufferedData = new PromiseSource();\r\n const transportResult = this._transportResult;\r\n this._transportResult = undefined;\r\n const data = typeof (this._buffer[0]) === \"string\" ?\r\n this._buffer.join(\"\") :\r\n TransportSendQueue._concatBuffers(this._buffer);\r\n this._buffer.length = 0;\r\n try {\r\n await this._transport.send(data);\r\n transportResult.resolve();\r\n }\r\n catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n static _concatBuffers(arrayBuffers) {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n return result.buffer;\r\n }\r\n}\r\nclass PromiseSource {\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this._resolver, this._rejecter] = [resolve, reject]);\r\n }\r\n resolve() {\r\n this._resolver();\r\n }\r\n reject(reason) {\r\n this._rejecter(reason);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n static write(output) {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n static parse(input) {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\nTextMessageFormat.RecordSeparatorCode = 0x1e;\r\nTextMessageFormat.RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n writeHandshakeRequest(handshakeRequest) {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n parseHandshakeResponse(data) {\r\n let messageData;\r\n let remainingData;\r\n if (isArrayBuffer(data)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n }\r\n else {\r\n const textData = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n const responseMessage = response;\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** Defines the type of a Hub Message. */\r\nexport var MessageType;\r\n(function (MessageType) {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n MessageType[MessageType[\"Invocation\"] = 1] = \"Invocation\";\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n MessageType[MessageType[\"StreamItem\"] = 2] = \"StreamItem\";\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n MessageType[MessageType[\"Completion\"] = 3] = \"Completion\";\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n MessageType[MessageType[\"StreamInvocation\"] = 4] = \"StreamInvocation\";\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n MessageType[MessageType[\"CancelInvocation\"] = 5] = \"CancelInvocation\";\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n MessageType[MessageType[\"Ping\"] = 6] = \"Ping\";\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n MessageType[MessageType[\"Close\"] = 7] = \"Close\";\r\n})(MessageType || (MessageType = {}));\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { SubjectSubscription } from \"./Utils\";\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject {\r\n constructor() {\r\n this.observers = [];\r\n }\r\n next(item) {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n error(err) {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n complete() {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n subscribe(observer) {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { HandshakeProtocol } from \"./HandshakeProtocol\";\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg, getErrorString, Platform } from \"./Utils\";\r\nconst DEFAULT_TIMEOUT_IN_MS = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS = 15 * 1000;\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport var HubConnectionState;\r\n(function (HubConnectionState) {\r\n /** The hub connection is disconnected. */\r\n HubConnectionState[\"Disconnected\"] = \"Disconnected\";\r\n /** The hub connection is connecting. */\r\n HubConnectionState[\"Connecting\"] = \"Connecting\";\r\n /** The hub connection is connected. */\r\n HubConnectionState[\"Connected\"] = \"Connected\";\r\n /** The hub connection is disconnecting. */\r\n HubConnectionState[\"Disconnecting\"] = \"Disconnecting\";\r\n /** The hub connection is reconnecting. */\r\n HubConnectionState[\"Reconnecting\"] = \"Reconnecting\";\r\n})(HubConnectionState || (HubConnectionState = {}));\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n constructor(connection, logger, protocol, reconnectPolicy) {\r\n this._nextKeepAlive = 0;\r\n this._freezeEventListener = () => {\r\n this._logger.log(LogLevel.Warning, \"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://docs.microsoft.com/aspnet/core/signalr/javascript-client#bsleep\");\r\n };\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS;\r\n this._logger = logger;\r\n this._protocol = protocol;\r\n this.connection = connection;\r\n this._reconnectPolicy = reconnectPolicy;\r\n this._handshakeProtocol = new HandshakeProtocol();\r\n this.connection.onreceive = (data) => this._processIncomingData(data);\r\n this.connection.onclose = (error) => this._connectionClosed(error);\r\n this._callbacks = {};\r\n this._methods = {};\r\n this._closedCallbacks = [];\r\n this._reconnectingCallbacks = [];\r\n this._reconnectedCallbacks = [];\r\n this._invocationId = 0;\r\n this._receivedHandshakeResponse = false;\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n this._cachedPingMessage = this._protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n static create(connection, logger, protocol, reconnectPolicy) {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy);\r\n }\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state() {\r\n return this._connectionState;\r\n }\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId() {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl() {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url) {\r\n if (this._connectionState !== HubConnectionState.Disconnected && this._connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n this.connection.baseUrl = url;\r\n }\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n start() {\r\n this._startPromise = this._startWithStateTransitions();\r\n return this._startPromise;\r\n }\r\n async _startWithStateTransitions() {\r\n if (this._connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n this._connectionState = HubConnectionState.Connecting;\r\n this._logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n try {\r\n await this._startInternal();\r\n if (Platform.isBrowser) {\r\n // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working\r\n window.document.addEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n this._connectionState = HubConnectionState.Connected;\r\n this._connectionStarted = true;\r\n this._logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n }\r\n catch (e) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n async _startInternal() {\r\n this._stopDuringStartError = undefined;\r\n this._receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this._handshakeResolver = resolve;\r\n this._handshakeRejecter = reject;\r\n });\r\n await this.connection.start(this._protocol.transferFormat);\r\n try {\r\n const handshakeRequest = {\r\n protocol: this._protocol.name,\r\n version: this._protocol.version,\r\n };\r\n this._logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n this._logger.log(LogLevel.Information, `Using HubProtocol '${this._protocol.name}'.`);\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this._cleanupTimeout();\r\n this._resetTimeoutPeriod();\r\n this._resetKeepAliveInterval();\r\n await handshakePromise;\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this._stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\r\n throw this._stopDuringStartError;\r\n }\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n async stop() {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this._startPromise;\r\n this._stopPromise = this._stopInternal();\r\n await this._stopPromise;\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n }\r\n catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n _stopInternal(error) {\r\n if (this._connectionState === HubConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n this._connectionState = HubConnectionState.Disconnecting;\r\n this._logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n if (this._reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this._logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n clearTimeout(this._reconnectDelayHandle);\r\n this._reconnectDelayHandle = undefined;\r\n this._completeClose();\r\n return Promise.resolve();\r\n }\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n this._stopDuringStartError = error || new Error(\"The connection was stopped before the hub handshake could complete.\");\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult} An object that yields results from the server as they are received.\r\n */\r\n stream(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createStreamInvocation(methodName, args, streamIds);\r\n // eslint-disable-next-line prefer-const\r\n let promiseQueue;\r\n const subject = new Subject();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation = this._createCancelInvocation(invocationDescriptor.invocationId);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n return promiseQueue.then(() => {\r\n return this._sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent, error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n }\r\n else {\r\n subject.complete();\r\n }\r\n }\r\n else {\r\n subject.next((invocationEvent.item));\r\n }\r\n }\r\n };\r\n promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n this._launchStreams(streams, promiseQueue);\r\n return subject;\r\n }\r\n _sendMessage(message) {\r\n this._resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n _sendWithProtocol(message) {\r\n return this._sendMessage(this._protocol.writeMessage(message));\r\n }\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n send(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const sendPromise = this._sendWithProtocol(this._createInvocation(methodName, args, true, streamIds));\r\n this._launchStreams(streams, sendPromise);\r\n return sendPromise;\r\n }\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n invoke(methodName, ...args) {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createInvocation(methodName, args, false, streamIds);\r\n const p = new Promise((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent, error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n }\r\n else {\r\n resolve(invocationEvent.result);\r\n }\r\n }\r\n else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n const promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n this._launchStreams(streams, promiseQueue);\r\n });\r\n return p;\r\n }\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n on(methodName, newMethod) {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n if (!this._methods[methodName]) {\r\n this._methods[methodName] = [];\r\n }\r\n // Preventing adding the same handler multiple times.\r\n if (this._methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n this._methods[methodName].push(newMethod);\r\n }\r\n off(methodName, method) {\r\n if (!methodName) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n const handlers = this._methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n }\r\n else {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n onclose(callback) {\r\n if (callback) {\r\n this._closedCallbacks.push(callback);\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n onreconnecting(callback) {\r\n if (callback) {\r\n this._reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n onreconnected(callback) {\r\n if (callback) {\r\n this._reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n _processIncomingData(data) {\r\n this._cleanupTimeout();\r\n if (!this._receivedHandshakeResponse) {\r\n data = this._processHandshakeResponse(data);\r\n this._receivedHandshakeResponse = true;\r\n }\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this._protocol.parseMessages(data, this._logger);\r\n for (const message of messages) {\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this._invokeClientMethod(message);\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion: {\r\n const callback = this._callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this._callbacks[message.invocationId];\r\n }\r\n try {\r\n callback(message);\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream callback threw error: ${getErrorString(e)}`);\r\n }\r\n }\r\n break;\r\n }\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close: {\r\n this._logger.log(LogLevel.Information, \"Close message received from server.\");\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(error);\r\n }\r\n else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this._stopPromise = this._stopInternal(error);\r\n }\r\n break;\r\n }\r\n default:\r\n this._logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n this._resetTimeoutPeriod();\r\n }\r\n _processHandshakeResponse(data) {\r\n let responseMessage;\r\n let remainingData;\r\n try {\r\n [remainingData, responseMessage] = this._handshakeProtocol.parseHandshakeResponse(data);\r\n }\r\n catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this._logger.log(LogLevel.Error, message);\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this._logger.log(LogLevel.Error, message);\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n else {\r\n this._logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n this._handshakeResolver();\r\n return remainingData;\r\n }\r\n _resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this._nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n this._cleanupPingTimer();\r\n }\r\n _resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this._timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n // Set keepAlive timer if there isn't one\r\n if (this._pingServerHandle === undefined) {\r\n let nextPing = this._nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this._pingServerHandle = setTimeout(async () => {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n try {\r\n await this._sendMessage(this._cachedPingMessage);\r\n }\r\n catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this._cleanupPingTimer();\r\n }\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n _invokeClientMethod(invocationMessage) {\r\n const methods = this._methods[invocationMessage.target.toLowerCase()];\r\n if (methods) {\r\n try {\r\n methods.forEach((m) => m.apply(this, invocationMessage.arguments));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `A callback for the method ${invocationMessage.target.toLowerCase()} threw error '${e}'.`);\r\n }\r\n if (invocationMessage.invocationId) {\r\n // This is not supported in v1. So we return an error to avoid blocking the server waiting for the response.\r\n const message = \"Server requested a response, which is not supported in this version of the client.\";\r\n this._logger.log(LogLevel.Error, message);\r\n // We don't want to wait on the stop itself.\r\n this._stopPromise = this._stopInternal(new Error(message));\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Warning, `No client method with the name '${invocationMessage.target}' found.`);\r\n }\r\n }\r\n _connectionClosed(error) {\r\n this._logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this._connectionState}.`);\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this._stopDuringStartError = this._stopDuringStartError || error || new Error(\"The underlying connection was closed before the hub handshake could complete.\");\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this._handshakeResolver) {\r\n this._handshakeResolver();\r\n }\r\n this._cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose(error);\r\n }\r\n else if (this._connectionState === HubConnectionState.Connected && this._reconnectPolicy) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._reconnect(error);\r\n }\r\n else if (this._connectionState === HubConnectionState.Connected) {\r\n this._completeClose(error);\r\n }\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n _completeClose(error) {\r\n if (this._connectionStarted) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n if (Platform.isBrowser) {\r\n window.document.removeEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n try {\r\n this._closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n async _reconnect(error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n let nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, 0, retryError);\r\n if (nextRetryDelay === null) {\r\n this._logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this._completeClose(error);\r\n return;\r\n }\r\n this._connectionState = HubConnectionState.Reconnecting;\r\n if (error) {\r\n this._logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n }\r\n else {\r\n this._logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n if (this._reconnectingCallbacks.length !== 0) {\r\n try {\r\n this._reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n while (nextRetryDelay !== null) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts} will start in ${nextRetryDelay} ms.`);\r\n await new Promise((resolve) => {\r\n this._reconnectDelayHandle = setTimeout(resolve, nextRetryDelay);\r\n });\r\n this._reconnectDelayHandle = undefined;\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n try {\r\n await this._startInternal();\r\n this._connectionState = HubConnectionState.Connected;\r\n this._logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n if (this._reconnectedCallbacks.length !== 0) {\r\n try {\r\n this._reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n return;\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, `Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose();\r\n }\r\n return;\r\n }\r\n retryError = e instanceof Error ? e : new Error(e.toString());\r\n nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n this._logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n this._completeClose();\r\n }\r\n _getNextRetryDelay(previousRetryCount, elapsedMilliseconds, retryReason) {\r\n try {\r\n return this._reconnectPolicy.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n _cancelCallbacksWithError(error) {\r\n const callbacks = this._callbacks;\r\n this._callbacks = {};\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n try {\r\n callback(null, error);\r\n }\r\n catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream 'error' callback called with '${error}' threw error: ${getErrorString(e)}`);\r\n }\r\n });\r\n }\r\n _cleanupPingTimer() {\r\n if (this._pingServerHandle) {\r\n clearTimeout(this._pingServerHandle);\r\n this._pingServerHandle = undefined;\r\n }\r\n }\r\n _cleanupTimeout() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n _createInvocation(methodName, args, nonblocking, streamIds) {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n else {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n _launchStreams(streams, promiseQueue) {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // eslint-disable-next-line guard-for-in\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n }\r\n else if (err && err.toString) {\r\n message = err.toString();\r\n }\r\n else {\r\n message = \"Unknown error\";\r\n }\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n _replaceStreamingParams(args) {\r\n const streams = [];\r\n const streamIds = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this._isObservable(argument)) {\r\n const streamId = this._invocationId;\r\n this._invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n return [streams, streamIds];\r\n }\r\n _isObservable(arg) {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n _createStreamInvocation(methodName, args, streamIds) {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n _createCancelInvocation(id) {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n _createStreamItemMessage(id, item) {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n _createCompletionMessage(id, error, result) {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nconst JSON_HUB_PROTOCOL_NAME = \"json\";\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol {\r\n constructor() {\r\n /** @inheritDoc */\r\n this.name = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n this.version = 1;\r\n /** @inheritDoc */\r\n this.transferFormat = TransferFormat.Text;\r\n }\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input, logger) {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n if (!input) {\r\n return [];\r\n }\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message);\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n return hubMessages;\r\n }\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n writeMessage(message) {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n _isInvocationMessage(message) {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n _isStreamItemMessage(message) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n _isCompletionMessage(message) {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n _assertNotEmptyString(value, errorMessage) {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n","// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\nconst LogLevelNameMapping = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\nfunction parseLogLevel(name) {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n }\r\n else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n configureLogging(logging) {\r\n Arg.isRequired(logging, \"logging\");\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n }\r\n else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n }\r\n else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n return this;\r\n }\r\n withUrl(url, transportTypeOrOptions) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n this.url = url;\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n }\r\n else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n return this;\r\n }\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n withHubProtocol(protocol) {\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n withAutomaticReconnect(retryDelaysOrReconnectPolicy) {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n }\r\n else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n }\r\n else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n return this;\r\n }\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n build() {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n return HubConnection.create(connection, this.logger || NullLogger.instance, this.protocol || new JsonHubProtocol(), this.reconnectPolicy);\r\n }\r\n}\r\nfunction isLogger(logger) {\r\n return logger.log !== undefined;\r\n}\r\n","import { isPlatformServer } from '@angular/common';\r\nimport { EventEmitter, Inject, Injectable, Injector, ModuleWithProviders, NgModule, PLATFORM_ID } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { API_URL } from '@app/constants';\r\nimport { HubConnection, HubConnectionBuilder, LogLevel } from '@microsoft/signalr';\r\nimport { CommandNotificationDto, QExpertEscallationResponseDto, QMessageDto, Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class SignalRService {\r\n\tpublic connectionEstablished = new EventEmitter();\r\n\tpublic SystemBroadcast = new EventEmitter();\r\n\tpublic OrganizationBroadcast = new EventEmitter();\r\n\tpublic UserBroadcast = new EventEmitter();\r\n\tpublic PluginBroadcast = new EventEmitter();\r\n\r\n\tpublic PartnerBroadcast = new EventEmitter();\r\n\tpublic QBroadcast = new EventEmitter();\r\n\tpublic QExpertBroadcast = new EventEmitter();\r\n\tpublic QExpertCompleteBroadcast = new EventEmitter();\r\n\r\n\tpublic _recording: boolean = false;\r\n\tpublic PluginRecordCommands: CommandNotificationDto[] = [];\r\n\r\n\tget PluginRecording() {\r\n\t\treturn this._recording;\r\n\t}\r\n\tset PluginRecording(val: boolean) {\r\n\t\tif (val) {\r\n\t\t\tthis.PluginRecordCommands.splice(0, this.PluginRecordCommands.length);\r\n\t\t}\r\n\r\n\t\tthis._recording = val;\r\n\t}\r\n\r\n\tprivate connections: ConnectionInfo[] = [];\r\n\r\n\tconstructor(private userService: UserService, @Inject(API_URL) private apiUrl: string, private injector: Injector) {\r\n\t\tif (isPlatformServer(PLATFORM_ID) || typeof window === 'undefined') return;\r\n\r\n\t\t//this.StartConnection();\r\n\t}\r\n\r\n\tpublic CloseConnections() {\r\n\t\tthis.connections.forEach((c) => {\r\n\t\t\tc.ManuallyStopped = true;\r\n\t\t\tc.Connection.stop();\r\n\t\t});\r\n\r\n\t\tthis.connections = [];\r\n\t}\r\n\r\n\tprivate createConnection(path: string): ConnectionInfo {\r\n\t\tlet connection: HubConnection;\r\n\t\tif (this.userService.IsLoggedIn) {\r\n\t\t\tconnection = new HubConnectionBuilder()\r\n\t\t\t\t.withUrl(this.apiUrl + '/Hubs/' + path, {\r\n\t\t\t\t\taccessTokenFactory: () => this.userService.GetAccessToken(),\r\n\t\t\t\t})\r\n\t\t\t\t.configureLogging(LogLevel.Information)\r\n\t\t\t\t.build();\r\n\t\t} else {\r\n\t\t\tconnection = new HubConnectionBuilder()\r\n\t\t\t\t.withUrl(this.apiUrl + '/Hubs/' + path)\r\n\t\t\t\t.configureLogging(LogLevel.Information)\r\n\t\t\t\t.build();\r\n\t\t}\r\n\r\n\t\tconnection.serverTimeoutInMilliseconds = 30 * 1000 * 10; //Server is 30 seconds, should be much longer.\r\n\t\tconnection.keepAliveIntervalInMilliseconds = 30 * 1000; //30 seconds. Server will kill after 1 minute of no response.\r\n\r\n\t\tconst conInfo: ConnectionInfo = {\r\n\t\t\tConnection: connection,\r\n\t\t\tManuallyStopped: false,\r\n\t\t\tName: path,\r\n\t\t};\r\n\t\tconnection.onclose((error) => {\r\n\t\t\tif (!conInfo.ManuallyStopped) {\r\n\t\t\t\tconsole.log('Connection Error: ' + error);\r\n\t\t\t\tthis.retryConnect(connection);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn conInfo;\r\n\t}\r\n\r\n\tprivate async retryConnect(connection: HubConnection) {\r\n\t\tsetTimeout(async () => {\r\n\t\t\ttry {\r\n\t\t\t\tawait connection.start();\r\n\t\t\t} catch {\r\n\t\t\t\tthis.retryConnect(connection);\r\n\t\t\t}\r\n\t\t}, 1000 * 5);\r\n\t}\r\n\r\n\t//  check in the browser console for either signalr connected or not\r\n\tpublic StartConnection(): void {\r\n\t\tconst self = this;\r\n\t\tconst systemConnection = this.createConnection('Web');\r\n\t\tsystemConnection.Connection.on('Broadcast', (message) => {\r\n\t\t\tself.SystemBroadcast.emit(message);\r\n\t\t});\r\n\t\tthis.connections.push(systemConnection);\r\n\r\n\t\tif (this.userService.User) {\r\n\t\t\tconst orgConection = this.createConnection('Organizations');\r\n\t\t\torgConection.Connection.on('Broadcast', (message) => {\r\n\t\t\t\tself.OrganizationBroadcast.emit(message);\r\n\t\t\t});\r\n\t\t\tthis.connections.push(orgConection);\r\n\r\n\t\t\tif (this.userService.User.IsInRole(Roles.PartnerAdmin, Roles.PartnerSales)) {\r\n\t\t\t\tconst partnerConnection = this.createConnection('Partners');\r\n\t\t\t\tpartnerConnection.Connection.on('Broadcast', (message) => {\r\n\t\t\t\t\tself.PartnerBroadcast.emit(message);\r\n\t\t\t\t});\r\n\t\t\t\tthis.connections.push(partnerConnection);\r\n\t\t\t}\r\n\r\n\t\t\tconst userConnection = this.createConnection('Users');\r\n\t\t\tuserConnection.Connection.on('Broadcast', (message) => {\r\n\t\t\t\tself.UserBroadcast.emit(message);\r\n\t\t\t});\r\n\t\t\tthis.connections.push(userConnection);\r\n\r\n\t\t\tconst pluginConnection = this.createConnection('Plugin');\r\n\t\t\tpluginConnection.Connection.on('Broadcast', (message) => {\r\n\t\t\t\tself.PluginBroadcast.emit(message);\r\n\t\t\t});\r\n\t\t\tthis.connections.push(pluginConnection);\r\n\r\n\t\t\tpluginConnection.Connection.on('BroadcastData', (message: CommandNotificationDto) => {\r\n\t\t\t\tif (self.PluginRecording) {\r\n\t\t\t\t\tself.PluginRecordCommands.push(message);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.PluginBroadcast.emit(message);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst qConnection = this.createConnection('Q');\r\n\t\tqConnection.Connection.on('BroadcastData', (message: QMessageDto) => {\r\n\t\t\tself.QBroadcast.emit(message);\r\n\t\t});\r\n\r\n\t\tqConnection.Connection.on('BroadcastExpertData', (message: QMessageDto) => {\r\n\t\t\tself.QExpertBroadcast.emit(message);\r\n\t\t});\r\n\r\n\t\tqConnection.Connection.on('BroadcastExpertComplete', (conversationId: number) => {\r\n\t\t\tself.QExpertCompleteBroadcast.emit(conversationId);\r\n\t\t});\r\n\t\tthis.connections.push(qConnection);\r\n\r\n\t\tthis.connections.forEach((c) => {\r\n\t\t\tc.Connection.start()\r\n\t\t\t\t.then((data: any) => {\r\n\t\t\t\t\tif (data) console.log('Now connected ' + data.transport.name + ', connection ID= ' + data.id);\r\n\t\t\t\t\tthis.connectionEstablished.emit(c);\r\n\t\t\t\t})\r\n\t\t\t\t.catch((error: any) => {\r\n\t\t\t\t\tconsole.log('Could not connect ' + error);\r\n\t\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tpublic SendMessage(message: QMessageDto) {\r\n\t\tconst qConnection = this.connections.find((c) => c.Name === 'Q').Connection;\r\n\t\tqConnection.invoke('SendMessage', message);\r\n\t}\r\n\r\n\tpublic SendProductAndVersionId(productId?: number, versionId?: number) {\r\n\t\tconst qConnection = this.connections.find((c) => c.Name === 'Q').Connection;\r\n\t\t//qConnection.invoke('SendMessage', message);\r\n\t}\r\n\r\n\tpublic RespondToEscallationRequest(message: QExpertEscallationResponseDto) {\r\n\t\tconst qConnection = this.connections.find((c) => c.Name === 'Q').Connection;\r\n\t\tqConnection.invoke('RespondToEscallationRequest', message);\r\n\t}\r\n}\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: []\r\n})\r\nexport class SignalRModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: SignalRModule,\r\n\t\t\tproviders: [SignalRService],\r\n\t\t};\r\n\t}\r\n}\r\n\r\ninterface ConnectionInfo {\r\n\tName: string;\r\n\tConnection: HubConnection;\r\n\tManuallyStopped: boolean;\r\n}\r\n","declare let browser: any;\r\n\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { APP_INSIGHTS, AUTH_CONFIG_ID, FORBIDDEN_PATH, LOGOUT_PATH, PASSTHROUGH_URLS, UNAUTHORIZED_PATH } from '@app/constants';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { ConfigurationService, LoginResponse, OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { BaseUserService, User, UsersV1Client } from 'cadlearning.angular';\r\nimport { CommandNotificationDto } from 'cadlearning.dto';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n\tdeps: [OidcSecurityService, Router, ApplicationInsights, UsersV1Client],\r\n})\r\nexport class UserService extends BaseUserService {\r\n\tpublic CommandNotifications: CommandNotificationDto[] = [];\r\n\tprivate AuthToken?: string;\r\n\r\n\t/* to-do\r\n\t * 1. Add Org Features and Terms Accepted to token\r\n\t */\r\n\tconstructor(\r\n\t\tprivate oidcSecurityService: OidcSecurityService,\r\n\t\tprivate router: Router,\r\n\t\t@Inject(APP_INSIGHTS) private appInsights: ApplicationInsights,\r\n\t\tprivate userClient: UsersV1Client,\r\n\t\tprivate configurationService: ConfigurationService\r\n\t) {\r\n\t\tsuper();\r\n\t}\r\n\r\n\tpublic Init() {\r\n\t\tthis.oidcSecurityService.checkAuth().subscribe((loginResponse) => {\r\n\t\t\tthis.AuthChanged(loginResponse);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic async AuthChanged(loginResponse: LoginResponse) {\r\n\t\ttry {\r\n\t\t\tawait this.SetAuth(loginResponse);\r\n\r\n\t\t\tconst currentUrl = location.pathname + location.search + location.hash;\r\n\t\t\tlet url = sessionStorage.getItem('CurrentPath') ?? currentUrl; //The URL that the user was on before they started login\r\n\t\t\tsessionStorage.removeItem('CurrentPath');\r\n\r\n\t\t\tif (PASSTHROUGH_URLS.find((u) => currentUrl.startsWith(u))) {\r\n\t\t\t\t//ignore session path and use current path in this case\r\n\t\t\t\turl = currentUrl;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tlocation.href.includes(LOGOUT_PATH) ||\r\n\t\t\t\tlocation.href.includes(FORBIDDEN_PATH) ||\r\n\t\t\t\tlocation.href.includes(UNAUTHORIZED_PATH)\r\n\t\t\t) {\r\n\t\t\t\turl = '/'; //Hard coded to go to home page to override it.\r\n\t\t\t}\r\n\r\n\t\t\tif (!loginResponse.isAuthenticated) {\r\n\t\t\t\tif (PASSTHROUGH_URLS.find((u) => url.startsWith(u))) {\r\n\t\t\t\t\tthis.router.navigateByUrl(url);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.Login(url);\r\n\r\n\t\t\t\t\treturn; //Don't want to call the event, because we're going to login.\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis.router.navigateByUrl(url);\r\n\t\t\t}\r\n\r\n\t\t\tthis.AuthenticationChanged.emit(this.User);\r\n\t\t} finally {\r\n\t\t\tthis.IsAuthenticationReady = true;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async SetAuth(loginResponse: LoginResponse) {\r\n\t\tif (!loginResponse.isAuthenticated) {\r\n\t\t\tthis.IsLoggedIn = false;\r\n\t\t\tthis.appInsights.clearAuthenticatedUserContext();\r\n\t\t\tthis.User = null;\r\n\t\t\tthis.AuthToken = null;\r\n\t\t} else {\r\n\t\t\tthis.AuthToken = loginResponse.accessToken;\r\n\t\t\tthis.User = new User(loginResponse.userData);\r\n\t\t\tthis.IsLoggedIn = true;\r\n\t\t\tthis.appInsights.setAuthenticatedUserContext(this.User.UserName, this.User.Id.toString(), true);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic Login(redirectUrl: string = null, silent = false, thirdPartyOnly = false, thirdPartyProvider: string = null): Promise {\r\n\t\tconst promise = new Promise((resolve) => {\r\n\t\t\tsessionStorage.setItem('CurrentPath', redirectUrl || location.pathname + location.search);\r\n\t\t\tthis.oidcSecurityService.authorize(AUTH_CONFIG_ID, {\r\n\t\t\t\turlHandler: (authUrl) => {\r\n\t\t\t\t\tif (thirdPartyOnly) authUrl += (!authUrl.includes('?') ? '?' : '&') + 'thirdpartyonly=true';\r\n\t\t\t\t\tif (thirdPartyProvider) authUrl += (!authUrl.includes('?') ? '?' : '&') + `thirdpartyprovider=${thirdPartyProvider}`;\r\n\r\n\t\t\t\t\tif (browser !== undefined && browser && browser.runtime && browser.runtime.id) {\r\n\t\t\t\t\t\tbrowser.identity.launchWebAuthFlow(\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\turl: authUrl,\r\n\t\t\t\t\t\t\t\tinteractive: !silent,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t(responseUrl: string) => {\r\n\t\t\t\t\t\t\t\tif (responseUrl.indexOf('#') >= 0) {\r\n\t\t\t\t\t\t\t\t\tresponseUrl = responseUrl.substring(responseUrl.indexOf('#') + 1);\r\n\t\t\t\t\t\t\t\t} else if (responseUrl.indexOf('?') >= 0) {\r\n\t\t\t\t\t\t\t\t\tresponseUrl = responseUrl.substring(responseUrl.indexOf('?') + 1);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tresolve(true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (silent) authUrl += (!authUrl.includes('?') ? '?' : '&') + 'silent=true';\r\n\t\t\t\t\t\tlocation.assign(authUrl);\r\n\t\t\t\t\t\tresolve(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn promise;\r\n\t}\r\n\r\n\tpublic Logout() {\r\n\t\tthis.oidcSecurityService.logoff();\r\n\t}\r\n\r\n\tpublic Register3rdParty(provider: number) {\r\n\t\tsessionStorage.setItem('ExternalCurrentPath', location.pathname + location.search);\r\n\t\tconst redirectUrl = `${location.protocol}//${location.host}/register-complete.html`;\r\n\t\tlocation.assign(\r\n\t\t\t`${this.configurationService.getAllConfigurations()[0].authWellknownEndpoints.issuer\r\n\t\t\t}identity/account/externallogin?returnUrl=${encodeURIComponent(redirectUrl)}®isterOnly=true&provider=${provider}`\r\n\t\t);\r\n\t}\r\n\r\n\tpublic async SetLanguage(languageCode = 'EN') {\r\n\t\tlanguageCode = languageCode.toUpperCase();\r\n\t\tawait this.userClient.SetLanguage({\r\n\t\t\tLanguageCode: languageCode,\r\n\t\t});\r\n\r\n\t\tawait this.RefreshSession();\r\n\t}\r\n\r\n\tpublic async SetOrganization(organizationId?: number) {\r\n\t\tawait this.userClient.SetOrganization({\r\n\t\t\tOrganizationId: organizationId,\r\n\t\t});\r\n\r\n\t\tawait this.RefreshSession();\r\n\t}\r\n\r\n\tpublic async SetProject(projectId?: number) {\r\n\t\tawait this.userClient.SetProject({\r\n\t\t\tProjectId: projectId,\r\n\t\t});\r\n\r\n\t\tawait this.RefreshSession();\r\n\t}\r\n\r\n\tpublic async AcceptTerms() {\r\n\t\tif (!this.IsLoggedIn) return;\r\n\t\tawait this.userClient.AcceptTerms();\r\n\r\n\t\tconsole.log('Accepted Terms');\r\n\r\n\t\tawait this.RefreshSession();\r\n\t}\r\n\r\n\tpublic async UpdateAvailability(available: boolean) {\r\n\t\tawait this.userClient.UpdateAvailability({\r\n\t\t\tAvailable: available,\r\n\t\t\tUserId: this.User.Id,\r\n\t\t});\r\n\r\n\t\tawait this.RefreshSession();\r\n\t}\r\n\r\n\tpublic async RefreshSession() {\r\n\t\tawait this.Login(null, true);\r\n\t\t// const loginResponse = await firstValueFrom(this.oidcSecurityService.forceRefreshSession({ 'prompt': 'none' }));\r\n\t\t// this.oidcSecurityService.authorize(null, {\r\n\r\n\t\t// })\r\n\t\t// loginResponse.isAuthenticated = this.IsLoggedIn || false;\r\n\r\n\t\t// console.log('Login Response: ', loginResponse);\r\n\t\t// await this.AuthChanged(loginResponse);\r\n\t}\r\n\r\n\tpublic GetAccessToken() {\r\n\t\treturn this.AuthToken;\r\n\t}\r\n\r\n\tpublic GetCookie(cname: string): string | null {\r\n\t\tconst name = cname + '=';\r\n\t\tconst decodedCookie: string = decodeURIComponent(document.cookie);\r\n\t\tconst ca = decodedCookie.split(';');\r\n\t\tfor (let i = 0; i < ca.length; i++) {\r\n\t\t\tlet c = ca[i];\r\n\t\t\twhile (c.charAt(0) === ' ') {\r\n\t\t\t\tc = c.substring(1);\r\n\t\t\t}\r\n\t\t\tif (c.indexOf(name) === 0) {\r\n\t\t\t\treturn c.substring(name.length, c.length);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic SetCookie(cname: string, cvalue: string, exdays: number) {\r\n\t\tconst d = new Date();\r\n\t\td.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n\t\tconst expires = 'expires=' + d.toUTCString();\r\n\t\tdocument.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\r\n\t}\r\n}\r\n","/*!\n * Microsoft Dynamic Proto Utility, 1.1.9\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nvar _a;\r\nvar UNDEFINED = \"undefined\";\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar Constructor = 'constructor';\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar Prototype = 'prototype';\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar strFunction = 'function';\r\n/**\r\n * Used to define the name of the instance function lookup table\r\n * @ignore\r\n */\r\nvar DynInstFuncTable = '_dynInstFuncs';\r\n/**\r\n * Name used to tag the dynamic prototype function\r\n * @ignore\r\n */\r\nvar DynProxyTag = '_isDynProxy';\r\n/**\r\n * Name added to a prototype to define the dynamic prototype \"class\" name used to lookup the function table\r\n * @ignore\r\n */\r\nvar DynClassName = '_dynClass';\r\n/**\r\n * Prefix added to the classname to avoid any name clashes with other instance level properties\r\n * @ignore\r\n */\r\nvar DynClassNamePrefix = '_dynCls$';\r\n/**\r\n * A tag which is used to check if we have already to attempted to set the instance function if one is not present\r\n * @ignore\r\n */\r\nvar DynInstChkTag = '_dynInstChk';\r\n/**\r\n * A tag which is used to check if we are allows to try and set an instance function is one is not present. Using the same\r\n * tag name as the function level but a different const name for readability only.\r\n */\r\nvar DynAllowInstChkTag = DynInstChkTag;\r\n/**\r\n * The global (imported) instances where the global performance options are stored\r\n */\r\nvar DynProtoDefaultOptions = '_dfOpts';\r\n/**\r\n * Value used as the name of a class when it cannot be determined\r\n * @ignore\r\n */\r\nvar UnknownValue = '_unknown_';\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar str__Proto = \"__proto__\";\r\n/**\r\n * The polyfill version of __proto__ so that it doesn't cause issues for anyone not expecting it to exist\r\n */\r\nvar DynProtoBaseProto = \"_dyn\" + str__Proto;\r\n/**\r\n * Runtime Global holder for dynamicProto settings\r\n */\r\nvar DynProtoGlobalSettings = \"__dynProto$Gbl\";\r\n/**\r\n * Track the current prototype for IE8 as you can't look back to get the prototype\r\n */\r\nvar DynProtoCurrent = \"_dynInstProto\";\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar strUseBaseInst = 'useBaseInst';\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar strSetInstFuncs = 'setInstFuncs';\r\nvar Obj = Object;\r\n/**\r\n * Pre-lookup to check if we are running on a modern browser (i.e. not IE8)\r\n * @ignore\r\n */\r\nvar _objGetPrototypeOf = Obj[\"getPrototypeOf\"];\r\n/**\r\n * Pre-lookup to check for the existence of this function\r\n */\r\nvar _objGetOwnProps = Obj[\"getOwnPropertyNames\"];\r\n/**\r\n * Gets the runtime global reference\r\n * @returns\r\n */\r\nfunction _getGlobal() {\r\n var result;\r\n if (typeof globalThis !== UNDEFINED) {\r\n result = globalThis;\r\n }\r\n if (!result && typeof self !== UNDEFINED) {\r\n result = self;\r\n }\r\n if (!result && typeof window !== UNDEFINED) {\r\n result = window;\r\n }\r\n if (!result && typeof global !== UNDEFINED) {\r\n result = global;\r\n }\r\n return result || {};\r\n}\r\n// Since 1.1.7 moving these to the runtime global to work around mixed version and module issues\r\n// See Issue https://github.com/microsoft/DynamicProto-JS/issues/57 for details\r\nvar _gbl = _getGlobal();\r\nvar _gblInst = _gbl[DynProtoGlobalSettings] || (_gbl[DynProtoGlobalSettings] = {\r\n o: (_a = {},\r\n _a[strSetInstFuncs] = true,\r\n _a[strUseBaseInst] = true,\r\n _a),\r\n n: 1000 // Start new global index @ 1000 so we \"fix\" some cases when mixed with 1.1.6 or earlier\r\n});\r\n/**\r\n * Helper to check if the object contains a property of the name\r\n * @ignore\r\n */\r\nfunction _hasOwnProperty(obj, prop) {\r\n return obj && Obj[Prototype].hasOwnProperty.call(obj, prop);\r\n}\r\n/**\r\n * Helper used to check whether the target is an Object prototype or Array prototype\r\n * @ignore\r\n */\r\nfunction _isObjectOrArrayPrototype(target) {\r\n return target && (target === Obj[Prototype] || target === Array[Prototype]);\r\n}\r\n/**\r\n * Helper used to check whether the target is an Object prototype, Array prototype or Function prototype\r\n * @ignore\r\n */\r\nfunction _isObjectArrayOrFunctionPrototype(target) {\r\n return _isObjectOrArrayPrototype(target) || target === Function[Prototype];\r\n}\r\n/**\r\n * Helper used to get the prototype of the target object as getPrototypeOf is not available in an ES3 environment.\r\n * @ignore\r\n */\r\nfunction _getObjProto(target) {\r\n var newProto;\r\n if (target) {\r\n // This method doesn't exist in older browsers (e.g. IE8)\r\n if (_objGetPrototypeOf) {\r\n return _objGetPrototypeOf(target);\r\n }\r\n var curProto = target[str__Proto] || target[Prototype] || (target[Constructor] ? target[Constructor][Prototype] : null);\r\n // Using the pre-calculated value as IE8 doesn't support looking up the prototype of a prototype and thus fails for more than 1 base class\r\n newProto = target[DynProtoBaseProto] || curProto;\r\n if (!_hasOwnProperty(target, DynProtoBaseProto)) {\r\n // As this prototype doesn't have this property then this is from an inherited class so newProto is the base to return so save it\r\n // so we can look it up value (which for a multiple hierarchy dynamicProto will be the base class)\r\n delete target[DynProtoCurrent]; // Delete any current value allocated to this instance so we pick up the value from prototype hierarchy\r\n newProto = target[DynProtoBaseProto] = target[DynProtoCurrent] || target[DynProtoBaseProto];\r\n target[DynProtoCurrent] = curProto;\r\n }\r\n }\r\n return newProto;\r\n}\r\n/**\r\n * Helper to get the properties of an object, including none enumerable ones as functions on a prototype in ES6\r\n * are not enumerable.\r\n * @param target\r\n */\r\nfunction _forEachProp(target, func) {\r\n var props = [];\r\n if (_objGetOwnProps) {\r\n props = _objGetOwnProps(target);\r\n }\r\n else {\r\n for (var name_1 in target) {\r\n if (typeof name_1 === \"string\" && _hasOwnProperty(target, name_1)) {\r\n props.push(name_1);\r\n }\r\n }\r\n }\r\n if (props && props.length > 0) {\r\n for (var lp = 0; lp < props.length; lp++) {\r\n func(props[lp]);\r\n }\r\n }\r\n}\r\n/**\r\n * Helper function to check whether the provided function name is a potential candidate for dynamic\r\n * callback and prototype generation.\r\n * @param target The target object, may be a prototype or class object\r\n * @param funcName The function name\r\n * @param skipOwn Skips the check for own property\r\n * @ignore\r\n */\r\nfunction _isDynamicCandidate(target, funcName, skipOwn) {\r\n return (funcName !== Constructor && typeof target[funcName] === strFunction && (skipOwn || _hasOwnProperty(target, funcName)));\r\n}\r\n/**\r\n * Helper to throw a TypeError exception\r\n * @param message the message\r\n * @ignore\r\n */\r\nfunction _throwTypeError(message) {\r\n throw new TypeError(\"DynamicProto: \" + message);\r\n}\r\n/**\r\n * Returns a collection of the instance functions that are defined directly on the thisTarget object, it does\r\n * not return any inherited functions\r\n * @param thisTarget The object to get the instance functions from\r\n * @ignore\r\n */\r\nfunction _getInstanceFuncs(thisTarget) {\r\n // Get the base proto\r\n var instFuncs = {};\r\n // Save any existing instance functions\r\n _forEachProp(thisTarget, function (name) {\r\n // Don't include any dynamic prototype instances - as we only want the real functions\r\n if (!instFuncs[name] && _isDynamicCandidate(thisTarget, name, false)) {\r\n // Create an instance callback for passing the base function to the caller\r\n instFuncs[name] = thisTarget[name];\r\n }\r\n });\r\n return instFuncs;\r\n}\r\n/**\r\n * Returns whether the value is included in the array\r\n * @param values The array of values\r\n * @param value The value\r\n */\r\nfunction _hasVisited(values, value) {\r\n for (var lp = values.length - 1; lp >= 0; lp--) {\r\n if (values[lp] === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Returns an object that contains callback functions for all \"base/super\" functions, this is used to \"save\"\r\n * enabling calling super.xxx() functions without requiring that the base \"class\" has defined a prototype references\r\n * @param target The current instance\r\n * @ignore\r\n */\r\nfunction _getBaseFuncs(classProto, thisTarget, instFuncs, useBaseInst) {\r\n function _instFuncProxy(target, funcHost, funcName) {\r\n var theFunc = funcHost[funcName];\r\n if (theFunc[DynProxyTag] && useBaseInst) {\r\n // grab and reuse the hosted looking function (if available) otherwise the original passed function\r\n var instFuncTable = target[DynInstFuncTable] || {};\r\n if (instFuncTable[DynAllowInstChkTag] !== false) {\r\n theFunc = (instFuncTable[funcHost[DynClassName]] || {})[funcName] || theFunc;\r\n }\r\n }\r\n return function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n return theFunc.apply(target, arguments);\r\n };\r\n }\r\n // Start creating a new baseFuncs by creating proxies for the instance functions (as they may get replaced)\r\n var baseFuncs = {};\r\n _forEachProp(instFuncs, function (name) {\r\n // Create an instance callback for passing the base function to the caller\r\n baseFuncs[name] = _instFuncProxy(thisTarget, instFuncs, name);\r\n });\r\n // Get the base prototype functions\r\n var baseProto = _getObjProto(classProto);\r\n var visited = [];\r\n // Don't include base object functions for Object, Array or Function\r\n while (baseProto && !_isObjectArrayOrFunctionPrototype(baseProto) && !_hasVisited(visited, baseProto)) {\r\n // look for prototype functions\r\n _forEachProp(baseProto, function (name) {\r\n // Don't include any dynamic prototype instances - as we only want the real functions\r\n // For IE 7/8 the prototype lookup doesn't provide the full chain so we need to bypass the \r\n // hasOwnProperty check we get all of the methods, main difference is that IE7/8 doesn't return\r\n // the Object prototype methods while bypassing the check\r\n if (!baseFuncs[name] && _isDynamicCandidate(baseProto, name, !_objGetPrototypeOf)) {\r\n // Create an instance callback for passing the base function to the caller\r\n baseFuncs[name] = _instFuncProxy(thisTarget, baseProto, name);\r\n }\r\n });\r\n // We need to find all possible functions that might be overloaded by walking the entire prototype chain\r\n // This avoids the caller from needing to check whether it's direct base class implements the function or not\r\n // by walking the entire chain it simplifies the usage and issues from upgrading any of the base classes.\r\n visited.push(baseProto);\r\n baseProto = _getObjProto(baseProto);\r\n }\r\n return baseFuncs;\r\n}\r\nfunction _getInstFunc(target, funcName, proto, currentDynProtoProxy) {\r\n var instFunc = null;\r\n // We need to check whether the class name is defined directly on this prototype otherwise\r\n // it will walk the proto chain and return any parent proto classname.\r\n if (target && _hasOwnProperty(proto, DynClassName)) {\r\n var instFuncTable = target[DynInstFuncTable] || {};\r\n instFunc = (instFuncTable[proto[DynClassName]] || {})[funcName];\r\n if (!instFunc) {\r\n // Avoid stack overflow from recursive calling the same function\r\n _throwTypeError(\"Missing [\" + funcName + \"] \" + strFunction);\r\n }\r\n // We have the instance function, lets check it we can speed up further calls\r\n // by adding the instance function back directly on the instance (avoiding the dynamic func lookup)\r\n if (!instFunc[DynInstChkTag] && instFuncTable[DynAllowInstChkTag] !== false) {\r\n // If the instance already has an instance function we can't replace it\r\n var canAddInst = !_hasOwnProperty(target, funcName);\r\n // Get current prototype\r\n var objProto = _getObjProto(target);\r\n var visited = [];\r\n // Lookup the function starting at the top (instance level prototype) and traverse down, if the first matching function\r\n // if nothing is found or if the first hit is a dynamic proto instance then we can safely add an instance shortcut\r\n while (canAddInst && objProto && !_isObjectArrayOrFunctionPrototype(objProto) && !_hasVisited(visited, objProto)) {\r\n var protoFunc = objProto[funcName];\r\n if (protoFunc) {\r\n canAddInst = (protoFunc === currentDynProtoProxy);\r\n break;\r\n }\r\n // We need to find all possible initial functions to ensure that we don't bypass a valid override function\r\n visited.push(objProto);\r\n objProto = _getObjProto(objProto);\r\n }\r\n try {\r\n if (canAddInst) {\r\n // This instance doesn't have an instance func and the class hierarchy does have a higher level prototype version\r\n // so it's safe to directly assign for any subsequent calls (for better performance)\r\n target[funcName] = instFunc;\r\n }\r\n // Block further attempts to set the instance function for any\r\n instFunc[DynInstChkTag] = 1;\r\n }\r\n catch (e) {\r\n // Don't crash if the object is readonly or the runtime doesn't allow changing this\r\n // And set a flag so we don't try again for any function\r\n instFuncTable[DynAllowInstChkTag] = false;\r\n }\r\n }\r\n }\r\n return instFunc;\r\n}\r\nfunction _getProtoFunc(funcName, proto, currentDynProtoProxy) {\r\n var protoFunc = proto[funcName];\r\n // Check that the prototype function is not a self reference -- try to avoid stack overflow!\r\n if (protoFunc === currentDynProtoProxy) {\r\n // It is so lookup the base prototype\r\n protoFunc = _getObjProto(proto)[funcName];\r\n }\r\n if (typeof protoFunc !== strFunction) {\r\n _throwTypeError(\"[\" + funcName + \"] is not a \" + strFunction);\r\n }\r\n return protoFunc;\r\n}\r\n/**\r\n * Add the required dynamic prototype methods to the the class prototype\r\n * @param proto - The class prototype\r\n * @param className - The instance classname\r\n * @param target - The target instance\r\n * @param baseInstFuncs - The base instance functions\r\n * @param setInstanceFunc - Flag to allow prototype function to reset the instance function if one does not exist\r\n * @ignore\r\n */\r\nfunction _populatePrototype(proto, className, target, baseInstFuncs, setInstanceFunc) {\r\n function _createDynamicPrototype(proto, funcName) {\r\n var dynProtoProxy = function () {\r\n // Use the instance or prototype function\r\n var instFunc = _getInstFunc(this, funcName, proto, dynProtoProxy) || _getProtoFunc(funcName, proto, dynProtoProxy);\r\n // eslint-disable-next-line prefer-rest-params\r\n return instFunc.apply(this, arguments);\r\n };\r\n // Tag this function as a proxy to support replacing dynamic proxy elements (primary use case is for unit testing\r\n // via which can dynamically replace the prototype function reference)\r\n dynProtoProxy[DynProxyTag] = 1;\r\n return dynProtoProxy;\r\n }\r\n if (!_isObjectOrArrayPrototype(proto)) {\r\n var instFuncTable = target[DynInstFuncTable] = target[DynInstFuncTable] || {};\r\n var instFuncs_1 = instFuncTable[className] = (instFuncTable[className] || {}); // fetch and assign if as it may not exist yet\r\n // Set whether we are allow to lookup instances, if someone has set to false then do not re-enable\r\n if (instFuncTable[DynAllowInstChkTag] !== false) {\r\n instFuncTable[DynAllowInstChkTag] = !!setInstanceFunc;\r\n }\r\n _forEachProp(target, function (name) {\r\n // Only add overridden functions\r\n if (_isDynamicCandidate(target, name, false) && target[name] !== baseInstFuncs[name]) {\r\n // Save the instance Function to the lookup table and remove it from the instance as it's not a dynamic proto function\r\n instFuncs_1[name] = target[name];\r\n delete target[name];\r\n // Add a dynamic proto if one doesn't exist or if a prototype function exists and it's not a dynamic one\r\n if (!_hasOwnProperty(proto, name) || (proto[name] && !proto[name][DynProxyTag])) {\r\n proto[name] = _createDynamicPrototype(proto, name);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Checks whether the passed prototype object appears to be correct by walking the prototype hierarchy of the instance\r\n * @param classProto The class prototype instance\r\n * @param thisTarget The current instance that will be checked whether the passed prototype instance is in the hierarchy\r\n * @ignore\r\n */\r\nfunction _checkPrototype(classProto, thisTarget) {\r\n // This method doesn't existing in older browsers (e.g. IE8)\r\n if (_objGetPrototypeOf) {\r\n // As this is primarily a coding time check, don't bother checking if running in IE8 or lower\r\n var visited = [];\r\n var thisProto = _getObjProto(thisTarget);\r\n while (thisProto && !_isObjectArrayOrFunctionPrototype(thisProto) && !_hasVisited(visited, thisProto)) {\r\n if (thisProto === classProto) {\r\n return true;\r\n }\r\n // This avoids the caller from needing to check whether it's direct base class implements the function or not\r\n // by walking the entire chain it simplifies the usage and issues from upgrading any of the base classes.\r\n visited.push(thisProto);\r\n thisProto = _getObjProto(thisProto);\r\n }\r\n return false;\r\n }\r\n // If objGetPrototypeOf doesn't exist then just assume everything is ok.\r\n return true;\r\n}\r\n/**\r\n * Gets the current prototype name using the ES6 name if available otherwise falling back to a use unknown as the name.\r\n * It's not critical for this to return a name, it's used to decorate the generated unique name for easier debugging only.\r\n * @param target\r\n * @param unknownValue\r\n * @ignore\r\n */\r\nfunction _getObjName(target, unknownValue) {\r\n if (_hasOwnProperty(target, Prototype)) {\r\n // Look like a prototype\r\n return target.name || unknownValue || UnknownValue;\r\n }\r\n return (((target || {})[Constructor]) || {}).name || unknownValue || UnknownValue;\r\n}\r\n/**\r\n * Helper function when creating dynamic (inline) functions for classes, this helper performs the following tasks :-\r\n * - Saves references to all defined base class functions\r\n * - Calls the delegateFunc with the current target (this) and a base object reference that can be used to call all \"super\" functions.\r\n * - Will populate the class prototype for all overridden functions to support class extension that call the prototype instance.\r\n * Callers should use this helper when declaring all function within the constructor of a class, as mentioned above the delegateFunc is\r\n * passed both the target \"this\" and an object that can be used to call any base (super) functions, using this based object in place of\r\n * super.XXX() (which gets expanded to _super.prototype.XXX()) provides a better minification outcome and also ensures the correct \"this\"\r\n * context is maintained as TypeScript creates incorrect references using super.XXXX() for dynamically defined functions i.e. Functions\r\n * defined in the constructor or some other function (rather than declared as complete typescript functions).\r\n * ### Usage\r\n * ```typescript\r\n * import dynamicProto from \"@microsoft/dynamicproto-js\";\r\n * class ExampleClass extends BaseClass {\r\n * constructor() {\r\n * dynamicProto(ExampleClass, this, (_self, base) => {\r\n * // This will define a function that will be converted to a prototype function\r\n * _self.newFunc = () => {\r\n * // Access any \"this\" instance property\r\n * if (_self.someProperty) {\r\n * ...\r\n * }\r\n * }\r\n * // This will define a function that will be converted to a prototype function\r\n * _self.myFunction = () => {\r\n * // Access any \"this\" instance property\r\n * if (_self.someProperty) {\r\n * // Call the base version of the function that we are overriding\r\n * base.myFunction();\r\n * }\r\n * ...\r\n * }\r\n * _self.initialize = () => {\r\n * ...\r\n * }\r\n * // Warnings: While the following will work as _self is simply a reference to\r\n * // this, if anyone overrides myFunction() the overridden will be called first\r\n * // as the normal JavaScript method resolution will occur and the defined\r\n * // _self.initialize() function is actually gets removed from the instance and\r\n * // a proxy prototype version is created to reference the created method.\r\n * _self.initialize();\r\n * });\r\n * }\r\n * }\r\n * ```\r\n * @typeparam DPType This is the generic type of the class, used to keep intellisense valid\r\n * @typeparam DPCls The type that contains the prototype of the current class\r\n * @param theClass - This is the current class instance which contains the prototype for the current class\r\n * @param target - The current \"this\" (target) reference, when the class has been extended this.prototype will not be the 'theClass' value.\r\n * @param delegateFunc - The callback function (closure) that will create the dynamic function\r\n * @param options - Additional options to configure how the dynamic prototype operates\r\n */\r\nfunction dynamicProto(theClass, target, delegateFunc, options) {\r\n // Make sure that the passed theClass argument looks correct\r\n if (!_hasOwnProperty(theClass, Prototype)) {\r\n _throwTypeError(\"theClass is an invalid class definition.\");\r\n }\r\n // Quick check to make sure that the passed theClass argument looks correct (this is a common copy/paste error)\r\n var classProto = theClass[Prototype];\r\n if (!_checkPrototype(classProto, target)) {\r\n _throwTypeError(\"[\" + _getObjName(theClass) + \"] not in hierarchy of [\" + _getObjName(target) + \"]\");\r\n }\r\n var className = null;\r\n if (_hasOwnProperty(classProto, DynClassName)) {\r\n // Only grab the class name if it's defined on this prototype (i.e. don't walk the prototype chain)\r\n className = classProto[DynClassName];\r\n }\r\n else {\r\n // As not all browser support name on the prototype creating a unique dynamic one if we have not already\r\n // assigned one, so we can use a simple string as the lookup rather than an object for the dynamic instance\r\n // function table lookup.\r\n className = DynClassNamePrefix + _getObjName(theClass, \"_\") + \"$\" + _gblInst.n;\r\n _gblInst.n++;\r\n classProto[DynClassName] = className;\r\n }\r\n var perfOptions = dynamicProto[DynProtoDefaultOptions];\r\n var useBaseInst = !!perfOptions[strUseBaseInst];\r\n if (useBaseInst && options && options[strUseBaseInst] !== undefined) {\r\n useBaseInst = !!options[strUseBaseInst];\r\n }\r\n // Get the current instance functions\r\n var instFuncs = _getInstanceFuncs(target);\r\n // Get all of the functions for any base instance (before they are potentially overridden)\r\n var baseFuncs = _getBaseFuncs(classProto, target, instFuncs, useBaseInst);\r\n // Execute the delegate passing in both the current target \"this\" and \"base\" function references\r\n // Note casting the same type as we don't actually have the base class here and this will provide some intellisense support\r\n delegateFunc(target, baseFuncs);\r\n // Don't allow setting instance functions for older IE instances\r\n var setInstanceFunc = !!_objGetPrototypeOf && !!perfOptions[strSetInstFuncs];\r\n if (setInstanceFunc && options) {\r\n setInstanceFunc = !!options[strSetInstFuncs];\r\n }\r\n // Populate the Prototype for any overridden instance functions\r\n _populatePrototype(classProto, className, target, instFuncs, setInstanceFunc !== false);\r\n}\r\n/**\r\n * Exposes the default global options to allow global configuration, if the global values are disabled these will override\r\n * any passed values. This is primarily exposed to support unit-testing without the need for individual classes to expose\r\n * their internal usage of dynamic proto.\r\n */\r\ndynamicProto[DynProtoDefaultOptions] = _gblInst.o;\n\nexport { dynamicProto as default };\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nexport var strShimFunction = \"function\";\r\nexport var strShimObject = \"object\";\r\nexport var strShimUndefined = \"undefined\";\r\nexport var strShimPrototype = \"prototype\";\r\nexport var strShimHasOwnProperty = \"hasOwnProperty\";\r\nexport var strDefault = \"default\";\r\nexport var ObjClass = Object;\r\nexport var ObjProto = ObjClass[strShimPrototype];\r\nexport var ObjAssign = ObjClass[\"assign\"];\r\nexport var ObjCreate = ObjClass[\"create\"];\r\nexport var ObjDefineProperty = ObjClass[\"defineProperty\"];\r\nexport var ObjHasOwnProperty = ObjProto[strShimHasOwnProperty];\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { ObjCreate, strShimFunction, strShimObject, strShimPrototype, strShimUndefined } from \"./Constants\";\r\nvar _cachedGlobal = null;\r\n/**\r\n * Returns the current global scope object, for a normal web page this will be the current\r\n * window, for a Web Worker this will be current worker global scope via \"self\". The internal\r\n * implementation returns the first available instance object in the following order\r\n * - globalThis (New standard)\r\n * - self (Will return the current window instance for supported browsers)\r\n * - window (fallback for older browser implementations)\r\n * - global (NodeJS standard)\r\n * - (When all else fails)\r\n * While the return type is a Window for the normal case, not all environments will support all\r\n * of the properties or functions.\r\n */\r\nexport function getGlobal(useCached) {\r\n if (useCached === void 0) { useCached = true; }\r\n var result = useCached === false ? null : _cachedGlobal;\r\n if (!result) {\r\n if (typeof globalThis !== strShimUndefined) {\r\n result = globalThis;\r\n }\r\n if (!result && typeof self !== strShimUndefined) {\r\n result = self;\r\n }\r\n if (!result && typeof window !== strShimUndefined) {\r\n result = window;\r\n }\r\n if (!result && typeof global !== strShimUndefined) {\r\n result = global;\r\n }\r\n _cachedGlobal = result;\r\n }\r\n return result;\r\n}\r\nexport function throwTypeError(message) {\r\n throw new TypeError(message);\r\n}\r\n/**\r\n * Creates an object that has the specified prototype, and that optionally contains specified properties. This helper exists to avoid adding a polyfil\r\n * for older browsers that do not define Object.create eg. ES3 only, IE8 just in case any page checks for presence/absence of the prototype implementation.\r\n * Note: For consistency this will not use the Object.create implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param obj Object to use as a prototype. May be null\r\n */\r\nexport function objCreateFn(obj) {\r\n var func = ObjCreate;\r\n // Use build in Object.create\r\n if (func) {\r\n // Use Object create method if it exists\r\n return func(obj);\r\n }\r\n if (obj == null) {\r\n return {};\r\n }\r\n var type = typeof obj;\r\n if (type !== strShimObject && type !== strShimFunction) {\r\n throwTypeError(\"Object prototype may only be an Object:\" + obj);\r\n }\r\n function tmpFunc() { }\r\n tmpFunc[strShimPrototype] = obj;\r\n return new tmpFunc();\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { ObjAssign, ObjClass, ObjCreate, ObjDefineProperty, ObjHasOwnProperty, ObjProto, strDefault, strShimFunction, strShimHasOwnProperty, strShimPrototype } from \"./Constants\";\r\nimport { getGlobal, objCreateFn, throwTypeError } from \"./Helpers\";\r\n// Most of these functions have been directly shamelessly \"lifted\" from the https://github.com/@microsoft/tslib and\r\n// modified to be ES3 compatible and applying several minification and tree-shaking techniques so that Application Insights\r\n// can successfully use TypeScript \"importHelpers\" which imports tslib during compilation but it will use these at runtime\r\n// Which is also why all of the functions have not been included as Application Insights currently doesn't use or require\r\n// them.\r\nexport var SymbolObj = (getGlobal() || {})[\"Symbol\"];\r\nexport var ReflectObj = (getGlobal() || {})[\"Reflect\"];\r\nexport var __hasSymbol = !!SymbolObj;\r\nexport var __hasReflect = !!ReflectObj;\r\nvar strDecorate = \"decorate\";\r\nvar strMetadata = \"metadata\";\r\nvar strGetOwnPropertySymbols = \"getOwnPropertySymbols\";\r\nvar strIterator = \"iterator\";\r\nexport var __objAssignFnImpl = function (t) {\r\n // tslint:disable-next-line: ban-comma-operator\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) {\r\n if (ObjProto[strShimHasOwnProperty].call(s, p)) {\r\n t[p] = s[p];\r\n }\r\n }\r\n }\r\n return t;\r\n};\r\nexport var __assignFn = ObjAssign || __objAssignFnImpl;\r\n// tslint:disable-next-line: only-arrow-functions\r\nvar extendStaticsFn = function (d, b) {\r\n extendStaticsFn = ObjClass[\"setPrototypeOf\"] ||\r\n // tslint:disable-next-line: only-arrow-functions\r\n ({ __proto__: [] } instanceof Array && function (d, b) {\r\n d.__proto__ = b;\r\n }) ||\r\n // tslint:disable-next-line: only-arrow-functions\r\n function (d, b) {\r\n for (var p in b) {\r\n if (b[strShimHasOwnProperty](p)) {\r\n d[p] = b[p];\r\n }\r\n }\r\n };\r\n return extendStaticsFn(d, b);\r\n};\r\nexport function __extendsFn(d, b) {\r\n if (typeof b !== strShimFunction && b !== null) {\r\n throwTypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n }\r\n extendStaticsFn(d, b);\r\n function __() {\r\n this.constructor = d;\r\n }\r\n // tslint:disable-next-line: ban-comma-operator\r\n d[strShimPrototype] = b === null ? objCreateFn(b) : (__[strShimPrototype] = b[strShimPrototype], new __());\r\n}\r\nexport function __restFn(s, e) {\r\n var t = {};\r\n for (var k in s) {\r\n if (ObjHasOwnProperty.call(s, k) && e.indexOf(k) < 0) {\r\n t[k] = s[k];\r\n }\r\n }\r\n if (s != null && typeof ObjClass[strGetOwnPropertySymbols] === strShimFunction) {\r\n for (var i = 0, p = ObjClass[strGetOwnPropertySymbols](s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && ObjProto[\"propertyIsEnumerable\"].call(s, p[i])) {\r\n t[p[i]] = s[p[i]];\r\n }\r\n }\r\n }\r\n return t;\r\n}\r\nexport function __decorateFn(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = ObjClass[\"getOwnPropertyDescriptor\"](target, key) : desc, d;\r\n if (__hasReflect && typeof ReflectObj[strDecorate] === strShimFunction) {\r\n r = ReflectObj[strDecorate](decorators, target, key, desc);\r\n }\r\n else {\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n // eslint-disable-next-line no-cond-assign\r\n if (d = decorators[i]) {\r\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n }\r\n }\r\n }\r\n // tslint:disable-next-line:ban-comma-operator\r\n return c > 3 && r && ObjDefineProperty(target, key, r), r;\r\n}\r\nexport function __paramFn(paramIndex, decorator) {\r\n return function (target, key) {\r\n decorator(target, key, paramIndex);\r\n };\r\n}\r\nexport function __metadataFn(metadataKey, metadataValue) {\r\n if (__hasReflect && ReflectObj[strMetadata] === strShimFunction) {\r\n return ReflectObj[strMetadata](metadataKey, metadataValue);\r\n }\r\n}\r\nexport function __exportStarFn(m, o) {\r\n for (var p in m) {\r\n if (p !== strDefault && !ObjHasOwnProperty.call(o, p)) {\r\n __createBindingFn(o, m, p);\r\n }\r\n }\r\n}\r\nexport function __createBindingFn(o, m, k, k2) {\r\n if (k2 === undefined) {\r\n k2 = k;\r\n }\r\n if (!!ObjCreate) {\r\n ObjDefineProperty(o, k2, {\r\n enumerable: true,\r\n get: function () {\r\n return m[k];\r\n }\r\n });\r\n }\r\n else {\r\n o[k2] = m[k];\r\n }\r\n}\r\nexport function __valuesFn(o) {\r\n var s = typeof SymbolObj === strShimFunction && SymbolObj[strIterator], m = s && o[s], i = 0;\r\n if (m) {\r\n return m.call(o);\r\n }\r\n if (o && typeof o.length === \"number\") {\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) {\r\n o = void 0;\r\n }\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n }\r\n throwTypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\nexport function __readFn(o, n) {\r\n var m = typeof SymbolObj === strShimFunction && o[SymbolObj[strIterator]];\r\n if (!m) {\r\n return o;\r\n }\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\r\n ar.push(r.value);\r\n }\r\n }\r\n catch (error) {\r\n e = {\r\n error: error\r\n };\r\n }\r\n finally {\r\n try {\r\n // tslint:disable-next-line:no-conditional-assignment\r\n if (r && !r.done && (m = i[\"return\"])) {\r\n m.call(i);\r\n }\r\n }\r\n finally {\r\n if (e) {\r\n // eslint-disable-next-line no-unsafe-finally\r\n throw e.error;\r\n }\r\n }\r\n }\r\n return ar;\r\n}\r\n/** @deprecated */\r\nexport function __spreadArraysFn() {\r\n var theArgs = arguments;\r\n // Calculate new total size\r\n for (var s = 0, i = 0, il = theArgs.length; i < il; i++) {\r\n s += theArgs[i].length;\r\n }\r\n // Create new full array\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\r\n for (var a = theArgs[i], j = 0, jl = a.length; j < jl; j++, k++) {\r\n r[k] = a[j];\r\n }\r\n }\r\n return r;\r\n}\r\nexport function __spreadArrayFn(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) {\r\n to[j] = from[i];\r\n }\r\n return to;\r\n}\r\nexport function __makeTemplateObjectFn(cooked, raw) {\r\n if (ObjDefineProperty) {\r\n ObjDefineProperty(cooked, \"raw\", { value: raw });\r\n }\r\n else {\r\n cooked.raw = raw;\r\n }\r\n return cooked;\r\n}\r\nexport function __importStarFn(mod) {\r\n if (mod && mod.__esModule) {\r\n return mod;\r\n }\r\n var result = {};\r\n if (mod != null) {\r\n for (var k in mod) {\r\n if (k !== strDefault && Object.prototype.hasOwnProperty.call(mod, k)) {\r\n __createBindingFn(result, mod, k);\r\n }\r\n }\r\n }\r\n // Set default module\r\n if (!!ObjCreate) {\r\n ObjDefineProperty(result, strDefault, { enumerable: true, value: mod });\r\n }\r\n else {\r\n result[strDefault] = mod;\r\n }\r\n return result;\r\n}\r\nexport function __importDefaultFn(mod) {\r\n return (mod && mod.__esModule) ? mod : { strDefault: mod };\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// @skip-file-minify\r\n// ##############################################################\r\n// AUTO GENERATED FILE: This file is Auto Generated during build.\r\n// ##############################################################\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\nexport var _DYN_INITIALIZE = \"initialize\"; // Count: 8\r\nexport var _DYN_NAME = \"name\"; // Count: 11\r\nexport var _DYN_GET_NOTIFY_MGR = \"getNotifyMgr\"; // Count: 3\r\nexport var _DYN_IDENTIFIER = \"identifier\"; // Count: 8\r\nexport var _DYN_PUSH = \"push\"; // Count: 30\r\nexport var _DYN_IS_INITIALIZED = \"isInitialized\"; // Count: 10\r\nexport var _DYN_CONFIG = \"config\"; // Count: 7\r\nexport var _DYN_INSTRUMENTATION_KEY = \"instrumentationKey\"; // Count: 3\r\nexport var _DYN_LOGGER = \"logger\"; // Count: 10\r\nexport var _DYN_LENGTH = \"length\"; // Count: 45\r\nexport var _DYN_TIME = \"time\"; // Count: 5\r\nexport var _DYN_PROCESS_NEXT = \"processNext\"; // Count: 21\r\nexport var _DYN_GET_PROCESS_TEL_CONT0 = \"getProcessTelContext\"; // Count: 2\r\nexport var _DYN_ADD_NOTIFICATION_LIS1 = \"addNotificationListener\"; // Count: 5\r\nexport var _DYN_REMOVE_NOTIFICATION_2 = \"removeNotificationListener\"; // Count: 5\r\nexport var _DYN_STOP_POLLING_INTERNA3 = \"stopPollingInternalLogs\"; // Count: 2\r\nexport var _DYN_ON_COMPLETE = \"onComplete\"; // Count: 6\r\nexport var _DYN_GET_PLUGIN = \"getPlugin\"; // Count: 5\r\nexport var _DYN_FLUSH = \"flush\"; // Count: 5\r\nexport var _DYN__EXTENSIONS = \"_extensions\"; // Count: 4\r\nexport var _DYN_SPLICE = \"splice\"; // Count: 6\r\nexport var _DYN_TEARDOWN = \"teardown\"; // Count: 10\r\nexport var _DYN_MESSAGE_ID = \"messageId\"; // Count: 4\r\nexport var _DYN_MESSAGE = \"message\"; // Count: 7\r\nexport var _DYN_IS_ASYNC = \"isAsync\"; // Count: 7\r\nexport var _DYN__DO_TEARDOWN = \"_doTeardown\"; // Count: 4\r\nexport var _DYN_UPDATE = \"update\"; // Count: 7\r\nexport var _DYN_GET_NEXT = \"getNext\"; // Count: 12\r\nexport var _DYN_DIAG_LOG = \"diagLog\"; // Count: 8\r\nexport var _DYN_SET_NEXT_PLUGIN = \"setNextPlugin\"; // Count: 5\r\nexport var _DYN_CREATE_NEW = \"createNew\"; // Count: 6\r\nexport var _DYN_COOKIE_CFG = \"cookieCfg\"; // Count: 3\r\nexport var _DYN_INDEX_OF = \"indexOf\"; // Count: 7\r\nexport var _DYN_SUBSTRING = \"substring\"; // Count: 10\r\nexport var _DYN_USER_AGENT = \"userAgent\"; // Count: 5\r\nexport var _DYN_SPLIT = \"split\"; // Count: 6\r\nexport var _DYN_SET_ENABLED = \"setEnabled\"; // Count: 5\r\nexport var _DYN_SUBSTR = \"substr\"; // Count: 6\r\nexport var _DYN_NODE_TYPE = \"nodeType\"; // Count: 3\r\nexport var _DYN_APPLY = \"apply\"; // Count: 6\r\nexport var _DYN_REPLACE = \"replace\"; // Count: 10\r\nexport var _DYN_ENABLE_DEBUG_EXCEPTI4 = \"enableDebugExceptions\"; // Count: 2\r\nexport var _DYN_LOG_INTERNAL_MESSAGE = \"logInternalMessage\"; // Count: 2\r\nexport var _DYN_TO_LOWER_CASE = \"toLowerCase\"; // Count: 8\r\nexport var _DYN_CALL = \"call\"; // Count: 18\r\nexport var _DYN_TYPE = \"type\"; // Count: 14\r\nexport var _DYN_HANDLER = \"handler\"; // Count: 5\r\nexport var _DYN_LISTENERS = \"listeners\"; // Count: 6\r\nexport var _DYN_IS_CHILD_EVT = \"isChildEvt\"; // Count: 3\r\nexport var _DYN_GET_CTX = \"getCtx\"; // Count: 6\r\nexport var _DYN_SET_CTX = \"setCtx\"; // Count: 10\r\nexport var _DYN_COMPLETE = \"complete\"; // Count: 3\r\nexport var _DYN_TRACE_ID = \"traceId\"; // Count: 5\r\nexport var _DYN_SPAN_ID = \"spanId\"; // Count: 5\r\nexport var _DYN_TRACE_FLAGS = \"traceFlags\"; // Count: 6\r\nexport var _DYN_VERSION = \"version\"; // Count: 4\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// ###################################################################################################################################################\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// ###################################################################################################################################################\r\nexport var STR_EMPTY = \"\";\r\nexport var STR_CHANNELS = \"channels\";\r\nexport var STR_CORE = \"core\";\r\nexport var STR_CREATE_PERF_MGR = \"createPerfMgr\";\r\nexport var STR_DISABLED = \"disabled\";\r\nexport var STR_EXTENSION_CONFIG = \"extensionConfig\";\r\nexport var STR_EXTENSIONS = \"extensions\";\r\nexport var STR_PROCESS_TELEMETRY = \"processTelemetry\";\r\nexport var STR_PRIORITY = \"priority\";\r\nexport var STR_EVENTS_SENT = \"eventsSent\";\r\nexport var STR_EVENTS_DISCARDED = \"eventsDiscarded\";\r\nexport var STR_EVENTS_SEND_REQUEST = \"eventsSendRequest\";\r\nexport var STR_PERF_EVENT = \"perfEvent\";\r\nexport var STR_ERROR_TO_CONSOLE = \"errorToConsole\";\r\nexport var STR_WARN_TO_CONSOLE = \"warnToConsole\";\r\nexport var STR_GET_PERF_MGR = \"getPerfMgr\";\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { ObjAssign, ObjClass, ObjDefineProperty, ObjHasOwnProperty, ObjProto, strShimFunction, strShimObject, strShimPrototype, strShimUndefined, throwTypeError } from \"@microsoft/applicationinsights-shims\";\r\nimport { _DYN_APPLY, _DYN_CALL, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_NAME, _DYN_PUSH, _DYN_REPLACE } from \"../__DynamicConstants\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\n// RESTRICT and AVOID circular dependencies you should not import other contained modules or export the contents of this file directly\r\n// Added to help with minfication\r\nvar strToISOString = \"toISOString\";\r\nvar cStrEndsWith = \"endsWith\";\r\nvar cStrStartsWith = \"startsWith\";\r\nvar strIndexOf = \"indexOf\";\r\nvar strMap = \"map\";\r\nvar strReduce = \"reduce\";\r\nvar cStrTrim = \"trim\";\r\nvar strToString = \"toString\";\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar str__Proto = \"__proto__\";\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar strConstructor = \"constructor\";\r\nvar _objDefineProperty = ObjDefineProperty;\r\nvar _objFreeze = ObjClass.freeze;\r\nvar _objSeal = ObjClass.seal;\r\nvar _objKeys = ObjClass.keys;\r\nvar StringProto = String[strShimPrototype];\r\nvar _strTrim = StringProto[cStrTrim];\r\nvar _strEndsWith = StringProto[cStrEndsWith];\r\nvar _strStartsWith = StringProto[cStrStartsWith];\r\nvar DateProto = Date[strShimPrototype];\r\nvar _dataToISOString = DateProto[strToISOString];\r\nvar _isArray = Array.isArray;\r\nvar _objToString = ObjProto[strToString];\r\nvar _fnToString = ObjHasOwnProperty[strToString];\r\n// Cache what this browser reports as the object function constructor (as a string)\r\nvar _objFunctionString = _fnToString[_DYN_CALL /* @min:%2ecall */](ObjClass);\r\nvar rCamelCase = /-([a-z])/g;\r\nvar rNormalizeInvalid = /([^\\w\\d_$])/g;\r\nvar rLeadingNumeric = /^(\\d+[\\w\\d_$])/;\r\n/**\r\n * Pre-lookup to check if we are running on a modern browser (i.e. not IE8)\r\n * @ignore\r\n */\r\nvar _objGetPrototypeOf = Object[\"getPrototypeOf\"];\r\n/**\r\n * Helper used to get the prototype of the target object as getPrototypeOf is not available in an ES3 environment.\r\n * @ignore\r\n */\r\nexport function _getObjProto(target) {\r\n if (target) {\r\n // This method doesn't existing in older browsers (e.g. IE8)\r\n if (_objGetPrototypeOf) {\r\n return _objGetPrototypeOf(target);\r\n }\r\n // target[Constructor] May break if the constructor has been changed or removed\r\n var newProto = target[str__Proto] || target[strShimPrototype] || target[strConstructor];\r\n if (newProto) {\r\n return newProto;\r\n }\r\n }\r\n return null;\r\n}\r\nexport function objToString(obj) {\r\n return _objToString[_DYN_CALL /* @min:%2ecall */](obj);\r\n}\r\nexport function isTypeof(value, theType) {\r\n return typeof value === theType;\r\n}\r\nexport function isUndefined(value) {\r\n return value === undefined || typeof value === strShimUndefined;\r\n}\r\nexport function isNotUndefined(value) {\r\n return !isUndefined(value);\r\n}\r\nexport function isNullOrUndefined(value) {\r\n return (value === null || isUndefined(value));\r\n}\r\nexport function isNotNullOrUndefined(value) {\r\n return !isNullOrUndefined(value);\r\n}\r\nexport function hasOwnProperty(obj, prop) {\r\n return !!(obj && ObjHasOwnProperty[_DYN_CALL /* @min:%2ecall */](obj, prop));\r\n}\r\nexport function isObject(value) {\r\n // Changing to inline for performance\r\n return !!(value && typeof value === strShimObject);\r\n}\r\nexport function isFunction(value) {\r\n // Changing to inline for performance\r\n return !!(value && typeof value === strShimFunction);\r\n}\r\nexport function isPromiseLike(value) {\r\n return value && isFunction(value.then);\r\n}\r\n/**\r\n * Validates that the string name conforms to the JS IdentifierName specification and if not\r\n * normalizes the name so that it would. This method does not identify or change any keywords\r\n * meaning that if you pass in a known keyword the same value will be returned.\r\n * This is a simplified version\r\n * @param name The name to validate\r\n */\r\nexport function normalizeJsName(name) {\r\n var value = name;\r\n if (value && isString(value)) {\r\n // CamelCase everything after the \"-\" and remove the dash\r\n value = value[_DYN_REPLACE /* @min:%2ereplace */](rCamelCase, function (_all, letter) {\r\n return letter.toUpperCase();\r\n });\r\n value = value[_DYN_REPLACE /* @min:%2ereplace */](rNormalizeInvalid, \"_\");\r\n value = value[_DYN_REPLACE /* @min:%2ereplace */](rLeadingNumeric, function (_all, match) {\r\n return \"_\" + match;\r\n });\r\n }\r\n return value;\r\n}\r\n/**\r\n * This is a helper function for the equivalent of arForEach(objKeys(target), callbackFn), this is a\r\n * performance optimization to avoid the creation of a new array for large objects\r\n * @param target The target object to find and process the keys\r\n * @param callbackfn The function to call with the details\r\n */\r\nexport function objForEachKey(target, callbackfn) {\r\n if (target) {\r\n for (var prop in target) {\r\n if (ObjHasOwnProperty[_DYN_CALL /* @min:%2ecall */](target, prop)) {\r\n callbackfn[_DYN_CALL /* @min:%2ecall */](target, prop, target[prop]);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * The strEndsWith() method determines whether a string ends with the characters of a specified string, returning true or false as appropriate.\r\n * @param value - The value to check whether it ends with the search value.\r\n * @param search - The characters to be searched for at the end of the value.\r\n * @returns true if the given search value is found at the end of the string, otherwise false.\r\n */\r\nexport function strEndsWith(value, search) {\r\n var result = false;\r\n if (value && search && !(result = value === search)) {\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n result = _strEndsWith ? value[cStrEndsWith](search) : _strEndsWithPoly(value, search);\r\n }\r\n return result;\r\n}\r\n/**\r\n * The _strEndsWith() method determines whether a string ends with the characters of a specified string, returning true or false as appropriate.\r\n * @param value - The value to check whether it ends with the search value.\r\n * @param search - The characters to be searched for at the end of the value.\r\n * @returns true if the given search value is found at the end of the string, otherwise false.\r\n */\r\nexport function _strEndsWithPoly(value, search) {\r\n var result = false;\r\n var searchLen = search ? search[_DYN_LENGTH /* @min:%2elength */] : 0;\r\n var valLen = value ? value[_DYN_LENGTH /* @min:%2elength */] : 0;\r\n if (searchLen && valLen && valLen >= searchLen && !(result = value === search)) {\r\n var pos = valLen - 1;\r\n for (var lp = searchLen - 1; lp >= 0; lp--) {\r\n if (value[pos] != search[lp]) {\r\n return false;\r\n }\r\n pos--;\r\n }\r\n result = true;\r\n }\r\n return result;\r\n}\r\n/**\r\n * The strStartsWith() method determines whether a string starts with the characters of the specified string, returning true or false as appropriate.\r\n * @param value - The value to check whether it ends with the search value.\r\n * @param checkValue - The characters to be searched for at the start of the value.\r\n * @returns true if the given search value is found at the start of the string, otherwise false.\r\n */\r\nexport function strStartsWith(value, checkValue) {\r\n var result = false;\r\n if (value && checkValue && !(result = value === checkValue)) {\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n result = _strStartsWith ? value[cStrStartsWith](checkValue) : _strStartsWithPoly(value, checkValue);\r\n }\r\n return result;\r\n}\r\n/**\r\n * The strStartsWith() method determines whether a string starts with the characters of the specified string, returning true or false as appropriate.\r\n * @param value - The value to check whether it ends with the search value.\r\n * @param checkValue - The characters to be searched for at the start of the value.\r\n * @returns true if the given search value is found at the start of the string, otherwise false.\r\n */\r\nexport function _strStartsWithPoly(value, checkValue) {\r\n // Using helper for performance and because string startsWith() is not available on IE\r\n var result = false;\r\n var chkLen = checkValue ? checkValue[_DYN_LENGTH /* @min:%2elength */] : 0;\r\n if (value && chkLen && value[_DYN_LENGTH /* @min:%2elength */] >= chkLen && !(result = value === checkValue)) {\r\n for (var lp = 0; lp < chkLen; lp++) {\r\n if (value[lp] !== checkValue[lp]) {\r\n return false;\r\n }\r\n }\r\n result = true;\r\n }\r\n return result;\r\n}\r\n/**\r\n * A simple wrapper (for minification support) to check if the value contains the search string.\r\n * @param value - The string value to check for the existence of the search value\r\n * @param search - The value search within the value\r\n */\r\nexport function strContains(value, search) {\r\n if (value && search) {\r\n return value[_DYN_INDEX_OF /* @min:%2eindexOf */](search) !== -1;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Check if an object is of type Date\r\n */\r\nexport function isDate(obj) {\r\n return !!(obj && _objToString[_DYN_CALL /* @min:%2ecall */](obj) === \"[object Date]\");\r\n}\r\n/**\r\n * Check if an object is of type Array with optional generic T, the generic type is not validated\r\n * and exists to help with TypeScript validation only.\r\n */\r\nexport var isArray = _isArray || _isArrayPoly;\r\nfunction _isArrayPoly(obj) {\r\n return !!(obj && _objToString[_DYN_CALL /* @min:%2ecall */](obj) === \"[object Array]\");\r\n}\r\n/**\r\n * Check if an object is of type Error\r\n */\r\nexport function isError(obj) {\r\n return !!(obj && _objToString[_DYN_CALL /* @min:%2ecall */](obj) === \"[object Error]\");\r\n}\r\n/**\r\n * Checks if the type of value is a string.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a string, false otherwise.\r\n */\r\nexport function isString(value) {\r\n // Changing to inline for performance\r\n return typeof value === \"string\";\r\n}\r\n/**\r\n * Checks if the type of value is a number.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a number, false otherwise.\r\n */\r\nexport function isNumber(value) {\r\n // Changing to inline for performance\r\n return typeof value === \"number\";\r\n}\r\n/**\r\n * Checks if the type of value is a boolean.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a boolean, false otherwise.\r\n */\r\nexport function isBoolean(value) {\r\n // Changing to inline for performance\r\n return typeof value === \"boolean\";\r\n}\r\n/**\r\n * Checks if the type of value is a Symbol.\r\n * This only returns a boolean as returning value is Symbol will cause issues for older TypeScript consumers\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a Symbol, false otherwise.\r\n */\r\nexport function isSymbol(value) {\r\n return typeof value === \"symbol\";\r\n}\r\n/**\r\n * Checks if the type of the value is a normal plain object (not a null or data)\r\n * @param value\r\n */\r\nexport function isPlainObject(value) {\r\n var result = false;\r\n if (value && typeof value === \"object\") {\r\n // Inlining _objGetPrototypeOf for performance to avoid an additional function call\r\n var proto = _objGetPrototypeOf ? _objGetPrototypeOf(value) : _getObjProto(value);\r\n if (!proto) {\r\n // No prototype found so this is a plain Object eg. 'Object.create(null)'\r\n result = true;\r\n }\r\n else {\r\n // Objects that have a prototype are plain only if they were created using the Object global (native) function\r\n if (proto[strConstructor] && ObjHasOwnProperty[_DYN_CALL /* @min:%2ecall */](proto, strConstructor)) {\r\n proto = proto[strConstructor];\r\n }\r\n result = typeof proto === strShimFunction && _fnToString[_DYN_CALL /* @min:%2ecall */](proto) === _objFunctionString;\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Convert a date to I.S.O. format in IE8\r\n */\r\nexport function toISOString(date) {\r\n if (date) {\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n return _dataToISOString ? date[strToISOString]() : _toISOStringPoly(date);\r\n }\r\n}\r\n/**\r\n * Convert a date to I.S.O. format in IE8\r\n */\r\nexport function _toISOStringPoly(date) {\r\n if (date && date.getUTCFullYear) {\r\n var pad = function (num) {\r\n var r = String(num);\r\n if (r[_DYN_LENGTH /* @min:%2elength */] === 1) {\r\n r = \"0\" + r;\r\n }\r\n return r;\r\n };\r\n return date.getUTCFullYear()\r\n + \"-\" + pad(date.getUTCMonth() + 1)\r\n + \"-\" + pad(date.getUTCDate())\r\n + \"T\" + pad(date.getUTCHours())\r\n + \":\" + pad(date.getUTCMinutes())\r\n + \":\" + pad(date.getUTCSeconds())\r\n + \".\" + String((date.getUTCMilliseconds() / 1000).toFixed(3)).slice(2, 5)\r\n + \"Z\";\r\n }\r\n}\r\n/**\r\n * Performs the specified action for each element in an array. This helper exists to avoid adding a polyfil for older browsers\r\n * that do not define Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page checks for presence/absence of the prototype\r\n * implementation. Note: For consistency this will not use the Array.prototype.xxxx implementation if it exists as this would\r\n * cause a testing requirement to test with and without the implementations\r\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. It can return -1 to break out of the loop\r\n * @param thisArg [Optional] An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\r\n */\r\nexport function arrForEach(arr, callbackfn, thisArg) {\r\n var len = arr[_DYN_LENGTH /* @min:%2elength */];\r\n try {\r\n for (var idx = 0; idx < len; idx++) {\r\n if (idx in arr) {\r\n if (callbackfn[_DYN_CALL /* @min:%2ecall */](thisArg || arr, arr[idx], idx, arr) === -1) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // This can happen with some native browser objects, but should not happen for the type we are checking for\r\n }\r\n}\r\n/**\r\n * Returns the index of the first occurrence of a value in an array. This helper exists to avoid adding a polyfil for older browsers\r\n * that do not define Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page checks for presence/absence of the prototype\r\n * implementation. Note: For consistency this will not use the Array.prototype.xxxx implementation if it exists as this would\r\n * cause a testing requirement to test with and without the implementations\r\n * @param searchElement The value to locate in the array.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport function arrIndexOf(arr, searchElement, fromIndex) {\r\n if (arr) {\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n if (arr[strIndexOf]) {\r\n return arr[strIndexOf](searchElement, fromIndex);\r\n }\r\n var len = arr[_DYN_LENGTH /* @min:%2elength */];\r\n var from = fromIndex || 0;\r\n try {\r\n for (var lp = Math.max(from >= 0 ? from : len - Math.abs(from), 0); lp < len; lp++) {\r\n if (lp in arr && arr[lp] === searchElement) {\r\n return lp;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // This can happen with some native browser objects, but should not happen for the type we are checking for\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Calls a defined callback function on each element of an array, and returns an array that contains the results. This helper exists\r\n * to avoid adding a polyfil for older browsers that do not define Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page\r\n * checks for presence/absence of the prototype implementation. Note: For consistency this will not use the Array.prototype.xxxx\r\n * implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\r\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\r\n */\r\nexport function arrMap(arr, callbackfn, thisArg) {\r\n var results;\r\n if (arr) {\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n if (arr[strMap]) {\r\n return arr[strMap](callbackfn, thisArg);\r\n }\r\n var len = arr[_DYN_LENGTH /* @min:%2elength */];\r\n var _this = thisArg || arr;\r\n results = new Array(len);\r\n try {\r\n for (var lp = 0; lp < len; lp++) {\r\n if (lp in arr) {\r\n results[lp] = callbackfn[_DYN_CALL /* @min:%2ecall */](_this, arr[lp], arr);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // This can happen with some native browser objects, but should not happen for the type we are checking for\r\n }\r\n }\r\n return results;\r\n}\r\n/**\r\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is\r\n * provided as an argument in the next call to the callback function. This helper exists to avoid adding a polyfil for older browsers that do not define\r\n * Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page checks for presence/absence of the prototype implementation. Note: For consistency\r\n * this will not use the Array.prototype.xxxx implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\r\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\r\n */\r\nexport function arrReduce(arr, callbackfn, initialValue) {\r\n var value;\r\n if (arr) {\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n if (arr[strReduce]) {\r\n return arr[strReduce](callbackfn, initialValue);\r\n }\r\n var len = arr[_DYN_LENGTH /* @min:%2elength */];\r\n var lp = 0;\r\n // Specifically checking the number of passed arguments as the value could be anything\r\n if (arguments[_DYN_LENGTH /* @min:%2elength */] >= 3) {\r\n value = arguments[2];\r\n }\r\n else {\r\n while (lp < len && !(lp in arr)) {\r\n lp++;\r\n }\r\n value = arr[lp++];\r\n }\r\n while (lp < len) {\r\n if (lp in arr) {\r\n value = callbackfn(value, arr[lp], lp, arr);\r\n }\r\n lp++;\r\n }\r\n }\r\n return value;\r\n}\r\n/**\r\n * helper method to trim strings (IE8 does not implement String.prototype.trim)\r\n */\r\nexport function strTrim(str) {\r\n if (str) {\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n str = (_strTrim && str[cStrTrim]) ? str[cStrTrim]() : (str[_DYN_REPLACE /* @min:%2ereplace */] ? str[_DYN_REPLACE /* @min:%2ereplace */](/^\\s+|(?=\\s)\\s+$/g, STR_EMPTY) : str);\r\n }\r\n return str;\r\n}\r\nvar _objKeysHasDontEnumBug = !({ toString: null }).propertyIsEnumerable(\"toString\");\r\nvar _objKeysDontEnums = [\r\n \"toString\",\r\n \"toLocaleString\",\r\n \"valueOf\",\r\n \"hasOwnProperty\",\r\n \"isPrototypeOf\",\r\n \"propertyIsEnumerable\",\r\n \"constructor\"\r\n];\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object. This helper exists to avoid adding a polyfil for older browsers\r\n * that do not define Object.keys eg. ES3 only, IE8 just in case any page checks for presence/absence of the prototype implementation.\r\n * Note: For consistency this will not use the Object.keys implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param obj Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\nexport function objKeys(obj) {\r\n var objType = typeof obj;\r\n if (objType !== strShimFunction && (objType !== strShimObject || obj === null)) {\r\n throwTypeError(\"objKeys called on non-object\");\r\n }\r\n // For Performance try and use the native instance, using string lookup of the function to easily pass the ES3 build checks and minification\r\n if (!_objKeysHasDontEnumBug && _objKeys) {\r\n return _objKeys(obj);\r\n }\r\n var result = [];\r\n for (var prop in obj) {\r\n if (obj && ObjHasOwnProperty[_DYN_CALL /* @min:%2ecall */](obj, prop)) {\r\n result[_DYN_PUSH /* @min:%2epush */](prop);\r\n }\r\n }\r\n if (_objKeysHasDontEnumBug) {\r\n var dontEnumsLength = _objKeysDontEnums[_DYN_LENGTH /* @min:%2elength */];\r\n for (var lp = 0; lp < dontEnumsLength; lp++) {\r\n if (obj && ObjHasOwnProperty[_DYN_CALL /* @min:%2ecall */](obj, _objKeysDontEnums[lp])) {\r\n result[_DYN_PUSH /* @min:%2epush */](_objKeysDontEnums[lp]);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Try to define get/set object property accessors for the target object/prototype, this will provide compatibility with\r\n * existing API definition when run within an ES5+ container that supports accessors but still enable the code to be loaded\r\n * and executed in an ES3 container, providing basic IE8 compatibility.\r\n * @param target The object on which to define the property.\r\n * @param prop The name of the property to be defined or modified.\r\n * @param getProp The getter function to wire against the getter.\r\n * @param setProp The setter function to wire against the setter.\r\n * @returns True if it was able to create the accessors otherwise false\r\n */\r\nexport function objDefineAccessors(target, prop, getProp, setProp) {\r\n if (_objDefineProperty) {\r\n try {\r\n var descriptor = {\r\n enumerable: true,\r\n configurable: true\r\n };\r\n if (getProp) {\r\n descriptor.get = getProp;\r\n }\r\n if (setProp) {\r\n descriptor.set = setProp;\r\n }\r\n _objDefineProperty(target, prop, descriptor);\r\n return true;\r\n }\r\n catch (e) {\r\n // IE8 Defines a defineProperty on Object but it's only supported for DOM elements so it will throw\r\n // We will just ignore this here.\r\n }\r\n }\r\n return false;\r\n}\r\nfunction _doNothing(value) {\r\n return value;\r\n}\r\nexport function deepFreeze(obj) {\r\n if (_objFreeze) {\r\n objForEachKey(obj, function (name, value) {\r\n if (isArray(value) || isObject(value)) {\r\n _objFreeze(value);\r\n }\r\n });\r\n }\r\n return objFreeze(obj);\r\n}\r\nexport var objFreeze = _objFreeze || _doNothing;\r\nexport var objSeal = _objSeal || _doNothing;\r\n/**\r\n * Return the current time via the Date now() function (if available) and falls back to (new Date()).getTime() if now() is unavailable (IE8 or less)\r\n * https://caniuse.com/#search=Date.now\r\n */\r\nexport function dateNow() {\r\n var dt = Date;\r\n return dt.now ? dt.now() : new dt().getTime();\r\n}\r\n/**\r\n * Returns the name of object if it's an Error. Otherwise, returns empty string.\r\n */\r\nexport function getExceptionName(object) {\r\n if (isError(object)) {\r\n return object[_DYN_NAME /* @min:%2ename */];\r\n }\r\n return STR_EMPTY;\r\n}\r\n/**\r\n * Sets the provided value on the target instance using the field name when the provided chk function returns true, the chk\r\n * function will only be called if the new value is no equal to the original value.\r\n * @param target - The target object\r\n * @param field - The key of the target\r\n * @param value - The value to set\r\n * @param valChk - [Optional] Callback to check the value that if supplied will be called check if the new value can be set\r\n * @param srcChk - [Optional] Callback to check to original value that if supplied will be called if the new value should be set (if allowed)\r\n * @returns The existing or new value, depending what was set\r\n */\r\nexport function setValue(target, field, value, valChk, srcChk) {\r\n var theValue = value;\r\n if (target) {\r\n theValue = target[field];\r\n if (theValue !== value && (!srcChk || srcChk(theValue)) && (!valChk || valChk(value))) {\r\n theValue = value;\r\n target[field] = theValue;\r\n }\r\n }\r\n return theValue;\r\n}\r\n/**\r\n * Returns the current value from the target object if not null or undefined otherwise sets the new value and returns it\r\n * @param target - The target object to return or set the default value\r\n * @param field - The key for the field to set on the target\r\n * @param defValue - [Optional] The value to set if not already present, when not provided a empty object will be added\r\n */\r\nexport function getSetValue(target, field, defValue) {\r\n var theValue;\r\n if (target) {\r\n theValue = target[field];\r\n if (!theValue && isNullOrUndefined(theValue)) {\r\n // Supports having the default as null\r\n theValue = !isUndefined(defValue) ? defValue : {};\r\n target[field] = theValue;\r\n }\r\n }\r\n else {\r\n // Expanded for performance so we only check defValue if required\r\n theValue = !isUndefined(defValue) ? defValue : {};\r\n }\r\n return theValue;\r\n}\r\n/**\r\n * Get the mapped config value, if null or undefined any supplied defaultValue will be returned.\r\n * @param field - The name of the field as the named enum value (number) or the string name.\r\n * @param defaultValue - The default value to return if the config field is not present, null or undefined.\r\n */\r\nexport function getCfgValue(theValue, defaultValue) {\r\n return !isNullOrUndefined(theValue) ? theValue : defaultValue;\r\n}\r\nexport function isNotTruthy(value) {\r\n return !value;\r\n}\r\nexport function isTruthy(value) {\r\n return !!value;\r\n}\r\nexport function throwError(message) {\r\n throw new Error(message);\r\n}\r\nfunction _createProxyFunction(source, funcName) {\r\n var srcFunc = null;\r\n var src = null;\r\n if (isFunction(source)) {\r\n srcFunc = source;\r\n }\r\n else {\r\n src = source;\r\n }\r\n return function () {\r\n // Capture the original arguments passed to the method\r\n var originalArguments = arguments;\r\n if (srcFunc) {\r\n src = srcFunc();\r\n }\r\n if (src) {\r\n return src[funcName][_DYN_APPLY /* @min:%2eapply */](src, originalArguments);\r\n }\r\n };\r\n}\r\n/**\r\n * Effectively assigns all enumerable properties (not just own properties) and functions (including inherited prototype) from\r\n * the source object to the target, it attempts to use proxy getters / setters (if possible) and proxy functions to avoid potential\r\n * implementation issues by assigning prototype functions as instance ones\r\n *\r\n * This method is the primary method used to \"update\" the snippet proxy with the ultimate implementations.\r\n *\r\n * Special ES3 Notes:\r\n * Updates (setting) of direct property values on the target or indirectly on the source object WILL NOT WORK PROPERLY, updates to the\r\n * properties of \"referenced\" object will work (target.context.newValue = 10 => will be reflected in the source.context as it's the\r\n * same object). ES3 Failures: assigning target.myProp = 3 -> Won't change source.myProp = 3, likewise the reverse would also fail.\r\n * @param target - The target object to be assigned with the source properties and functions\r\n * @param source - The source object which will be assigned / called by setting / calling the targets proxies\r\n * @param chkSet - An optional callback to determine whether a specific property/function should be proxied\r\n */\r\nexport function proxyAssign(target, source, chkSet) {\r\n if (target && source && isObject(target) && isObject(source)) {\r\n var _loop_1 = function (field) {\r\n if (isString(field)) {\r\n var value = source[field];\r\n if (isFunction(value)) {\r\n if (!chkSet || chkSet(field, true, source, target)) {\r\n // Create a proxy function rather than just copying the (possible) prototype to the new object as an instance function\r\n target[field] = _createProxyFunction(source, field);\r\n }\r\n }\r\n else if (!chkSet || chkSet(field, false, source, target)) {\r\n if (hasOwnProperty(target, field)) {\r\n // Remove any previous instance property\r\n delete target[field];\r\n }\r\n if (!objDefineAccessors(target, field, function () {\r\n return source[field];\r\n }, function (theValue) {\r\n source[field] = theValue;\r\n })) {\r\n // Unable to create an accessor, so just assign the values as a fallback\r\n // -- this will (mostly) work for objects\r\n // -- but will fail for accessing primitives (if the source changes it) and all types of \"setters\" as the source won't be modified\r\n target[field] = value;\r\n }\r\n }\r\n }\r\n };\r\n // effectively apply/proxy full source to the target instance\r\n for (var field in source) {\r\n _loop_1(field);\r\n }\r\n }\r\n return target;\r\n}\r\n/**\r\n * Creates a proxy function on the target which internally will call the source version with all arguments passed to the target method.\r\n *\r\n * @param target - The target object to be assigned with the source properties and functions\r\n * @param name - The function name that will be added on the target\r\n * @param source - The source object which will be assigned / called by setting / calling the targets proxies\r\n * @param theFunc - The function name on the source that will be proxied on the target\r\n * @param overwriteTarget - If `false` this will not replace any pre-existing name otherwise (the default) it will overwrite any existing name\r\n */\r\nexport function proxyFunctionAs(target, name, source, theFunc, overwriteTarget) {\r\n if (target && name && source) {\r\n if (overwriteTarget !== false || isUndefined(target[name])) {\r\n target[name] = _createProxyFunction(source, theFunc);\r\n }\r\n }\r\n}\r\n/**\r\n * Creates proxy functions on the target which internally will call the source version with all arguments passed to the target method.\r\n *\r\n * @param target - The target object to be assigned with the source properties and functions\r\n * @param source - The source object which will be assigned / called by setting / calling the targets proxies\r\n * @param functionsToProxy - An array of function names that will be proxied on the target\r\n * @param overwriteTarget - If false this will not replace any pre-existing name otherwise (the default) it will overwrite any existing name\r\n */\r\nexport function proxyFunctions(target, source, functionsToProxy, overwriteTarget) {\r\n if (target && source && isObject(target) && isArray(functionsToProxy)) {\r\n arrForEach(functionsToProxy, function (theFuncName) {\r\n if (isString(theFuncName)) {\r\n proxyFunctionAs(target, theFuncName, source, theFuncName, overwriteTarget);\r\n }\r\n });\r\n }\r\n return target;\r\n}\r\n/**\r\n * Simpler helper to create a dynamic class that implements the interface and populates the values with the defaults.\r\n * Only instance properties (hasOwnProperty) values are copied from the defaults to the new instance\r\n * @param defaults Simple helper\r\n */\r\nexport function createClassFromInterface(defaults) {\r\n return /** @class */ (function () {\r\n function class_1() {\r\n var _this_1 = this;\r\n if (defaults) {\r\n objForEachKey(defaults, function (field, value) {\r\n _this_1[field] = value;\r\n });\r\n }\r\n }\r\n return class_1;\r\n }());\r\n}\r\n/**\r\n * A helper function to assist with JIT performance for objects that have properties added / removed dynamically\r\n * this is primarily for chromium based browsers and has limited effects on Firefox and none of IE. Only call this\r\n * function after you have finished \"updating\" the object, calling this within loops reduces or defeats the benefits.\r\n * This helps when iterating using for..in, objKeys() and objForEach()\r\n * @param theObject - The object to be optimized if possible\r\n */\r\nexport function optimizeObject(theObject) {\r\n // V8 Optimization to cause the JIT compiler to create a new optimized object for looking up the own properties\r\n // primarily for object with <= 19 properties for >= 20 the effect is reduced or non-existent\r\n if (theObject && ObjAssign) {\r\n theObject = ObjClass(ObjAssign({}, theObject));\r\n }\r\n return theObject;\r\n}\r\nexport function objExtend(obj1, obj2, obj3, obj4, obj5, obj6) {\r\n // Variables\r\n var theArgs = arguments;\r\n var extended = theArgs[0] || {};\r\n var argLen = theArgs[_DYN_LENGTH /* @min:%2elength */];\r\n var deep = false;\r\n var idx = 1;\r\n // Check for \"Deep\" flag\r\n if (argLen > 0 && isBoolean(extended)) {\r\n deep = extended;\r\n extended = theArgs[idx] || {};\r\n idx++;\r\n }\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if (!isObject(extended)) {\r\n extended = {};\r\n }\r\n // Loop through each remaining object and conduct a merge\r\n for (; idx < argLen; idx++) {\r\n var arg = theArgs[idx];\r\n var isArgArray = isArray(arg);\r\n var isArgObj = isObject(arg);\r\n for (var prop in arg) {\r\n var propOk = (isArgArray && (prop in arg)) || (isArgObj && (ObjHasOwnProperty[_DYN_CALL /* @min:%2ecall */](arg, prop)));\r\n if (!propOk) {\r\n continue;\r\n }\r\n var newValue = arg[prop];\r\n var isNewArray = void 0;\r\n // If deep merge and property is an object, merge properties\r\n if (deep && newValue && ((isNewArray = isArray(newValue)) || isPlainObject(newValue))) {\r\n // Grab the current value of the extended object\r\n var clone = extended[prop];\r\n if (isNewArray) {\r\n if (!isArray(clone)) {\r\n // We can't \"merge\" an array with a non-array so overwrite the original\r\n clone = [];\r\n }\r\n }\r\n else if (!isPlainObject(clone)) {\r\n // We can't \"merge\" an object with a non-object\r\n clone = {};\r\n }\r\n // Never move the original objects always clone them\r\n newValue = objExtend(deep, clone, newValue);\r\n }\r\n // Assign the new (or previous) value (unless undefined)\r\n if (newValue !== undefined) {\r\n extended[prop] = newValue;\r\n }\r\n }\r\n }\r\n return extended;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// @skip-file-minify\r\n// ##############################################################\r\n// AUTO GENERATED FILE: This file is Auto Generated during build.\r\n// ##############################################################\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\nexport var _DYN_SPLIT = \"split\"; // Count: 6\r\nexport var _DYN_LENGTH = \"length\"; // Count: 41\r\nexport var _DYN_TO_LOWER_CASE = \"toLowerCase\"; // Count: 6\r\nexport var _DYN_INGESTIONENDPOINT = \"ingestionendpoint\"; // Count: 4\r\nexport var _DYN_TO_STRING = \"toString\"; // Count: 12\r\nexport var _DYN_REMOVE_ITEM = \"removeItem\"; // Count: 3\r\nexport var _DYN_NAME = \"name\"; // Count: 11\r\nexport var _DYN_MESSAGE = \"message\"; // Count: 10\r\nexport var _DYN_COUNT = \"count\"; // Count: 8\r\nexport var _DYN_PRE_TRIGGER_DATE = \"preTriggerDate\"; // Count: 4\r\nexport var _DYN_DISABLED = \"disabled\"; // Count: 3\r\nexport var _DYN_INTERVAL = \"interval\"; // Count: 3\r\nexport var _DYN_DAYS_OF_MONTH = \"daysOfMonth\"; // Count: 3\r\nexport var _DYN_DATE = \"date\"; // Count: 5\r\nexport var _DYN_GET_UTCDATE = \"getUTCDate\"; // Count: 3\r\nexport var _DYN_STRINGIFY = \"stringify\"; // Count: 4\r\nexport var _DYN_PATHNAME = \"pathname\"; // Count: 4\r\nexport var _DYN_CORRELATION_HEADER_E0 = \"correlationHeaderExcludePatterns\"; // Count: 2\r\nexport var _DYN_INDEX_OF = \"indexOf\"; // Count: 4\r\nexport var _DYN_EXTENSION_CONFIG = \"extensionConfig\"; // Count: 4\r\nexport var _DYN_EXCEPTIONS = \"exceptions\"; // Count: 6\r\nexport var _DYN_PARSED_STACK = \"parsedStack\"; // Count: 13\r\nexport var _DYN_PROPERTIES = \"properties\"; // Count: 9\r\nexport var _DYN_MEASUREMENTS = \"measurements\"; // Count: 9\r\nexport var _DYN_SIZE_IN_BYTES = \"sizeInBytes\"; // Count: 11\r\nexport var _DYN_TYPE_NAME = \"typeName\"; // Count: 11\r\nexport var _DYN_SEVERITY_LEVEL = \"severityLevel\"; // Count: 5\r\nexport var _DYN_PROBLEM_GROUP = \"problemGroup\"; // Count: 3\r\nexport var _DYN_IS_MANUAL = \"isManual\"; // Count: 3\r\nexport var _DYN__CREATE_FROM_INTERFA1 = \"CreateFromInterface\"; // Count: 2\r\nexport var _DYN_ASSEMBLY = \"assembly\"; // Count: 7\r\nexport var _DYN_FILE_NAME = \"fileName\"; // Count: 8\r\nexport var _DYN_HAS_FULL_STACK = \"hasFullStack\"; // Count: 6\r\nexport var _DYN_LEVEL = \"level\"; // Count: 5\r\nexport var _DYN_METHOD = \"method\"; // Count: 7\r\nexport var _DYN_LINE = \"line\"; // Count: 6\r\nexport var _DYN_DURATION = \"duration\"; // Count: 4\r\nexport var _DYN_RECEIVED_RESPONSE = \"receivedResponse\"; // Count: 2\r\nexport var _DYN_SUBSTRING = \"substring\"; // Count: 6\r\nexport var _DYN_SANITIZE_KEY_AND_ADD2 = \"sanitizeKeyAndAddUniqueness\"; // Count: 2\r\nexport var _DYN_SANITIZE_EXCEPTION = \"sanitizeException\"; // Count: 2\r\nexport var _DYN_SANITIZE_PROPERTIES = \"sanitizeProperties\"; // Count: 2\r\nexport var _DYN_SANITIZE_MEASUREMENT3 = \"sanitizeMeasurements\"; // Count: 2\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { arrForEach, isString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_LENGTH, _DYN_TO_LOWER_CASE } from \"./__DynamicConstants\";\r\nvar strEmpty = \"\";\r\nexport function stringToBoolOrDefault(str, defaultValue) {\r\n if (defaultValue === void 0) { defaultValue = false; }\r\n if (str === undefined || str === null) {\r\n return defaultValue;\r\n }\r\n return str.toString()[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]() === \"true\";\r\n}\r\n/**\r\n * Convert ms to c# time span format\r\n */\r\nexport function msToTimeSpan(totalms) {\r\n if (isNaN(totalms) || totalms < 0) {\r\n totalms = 0;\r\n }\r\n totalms = Math.round(totalms);\r\n var ms = strEmpty + totalms % 1000;\r\n var sec = strEmpty + Math.floor(totalms / 1000) % 60;\r\n var min = strEmpty + Math.floor(totalms / (1000 * 60)) % 60;\r\n var hour = strEmpty + Math.floor(totalms / (1000 * 60 * 60)) % 24;\r\n var days = Math.floor(totalms / (1000 * 60 * 60 * 24));\r\n ms = ms[_DYN_LENGTH /* @min:%2elength */] === 1 ? \"00\" + ms : ms[_DYN_LENGTH /* @min:%2elength */] === 2 ? \"0\" + ms : ms;\r\n sec = sec[_DYN_LENGTH /* @min:%2elength */] < 2 ? \"0\" + sec : sec;\r\n min = min[_DYN_LENGTH /* @min:%2elength */] < 2 ? \"0\" + min : min;\r\n hour = hour[_DYN_LENGTH /* @min:%2elength */] < 2 ? \"0\" + hour : hour;\r\n return (days > 0 ? days + \".\" : strEmpty) + hour + \":\" + min + \":\" + sec + \".\" + ms;\r\n}\r\nexport function getExtensionByName(extensions, identifier) {\r\n var extension = null;\r\n arrForEach(extensions, function (value) {\r\n if (value.identifier === identifier) {\r\n extension = value;\r\n return -1;\r\n }\r\n });\r\n return extension;\r\n}\r\nexport function isCrossOriginError(message, url, lineNumber, columnNumber, error) {\r\n return !error && isString(message) && (message === \"Script error.\" || message === \"Script error\");\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport { getGlobal, strShimObject, strShimPrototype, strShimUndefined } from \"@microsoft/applicationinsights-shims\";\r\nimport { _DYN_CALL, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_NAME, _DYN_SPLIT, _DYN_TO_LOWER_CASE, _DYN_USER_AGENT } from \"../__DynamicConstants\";\r\nimport { isFunction, isString, isUndefined, strContains } from \"./HelperFuncs\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\n/**\r\n * This file exists to hold environment utilities that are required to check and\r\n * validate the current operating environment. Unless otherwise required, please\r\n * only use defined methods (functions) in this class so that users of these\r\n * functions/properties only need to include those that are used within their own modules.\r\n */\r\nvar strWindow = \"window\";\r\nvar strDocument = \"document\";\r\nvar strDocumentMode = \"documentMode\";\r\nvar strNavigator = \"navigator\";\r\nvar strHistory = \"history\";\r\nvar strLocation = \"location\";\r\nvar strConsole = \"console\";\r\nvar strPerformance = \"performance\";\r\nvar strJSON = \"JSON\";\r\nvar strCrypto = \"crypto\";\r\nvar strMsCrypto = \"msCrypto\";\r\nvar strReactNative = \"ReactNative\";\r\nvar strMsie = \"msie\";\r\nvar strTrident = \"trident/\";\r\nvar strXMLHttpRequest = \"XMLHttpRequest\";\r\nvar _isTrident = null;\r\nvar _navUserAgentCheck = null;\r\nvar _enableMocks = false;\r\nvar _useXDomainRequest = null;\r\nvar _beaconsSupported = null;\r\nfunction _hasProperty(theClass, property) {\r\n var supported = false;\r\n if (theClass) {\r\n try {\r\n supported = property in theClass;\r\n if (!supported) {\r\n var proto = theClass[strShimPrototype];\r\n if (proto) {\r\n supported = property in proto;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Do Nothing\r\n }\r\n if (!supported) {\r\n try {\r\n var tmp = new theClass();\r\n supported = !isUndefined(tmp[property]);\r\n }\r\n catch (e) {\r\n // Do Nothing\r\n }\r\n }\r\n }\r\n return supported;\r\n}\r\n/**\r\n * Enable the lookup of test mock objects if requested\r\n * @param enabled\r\n */\r\nexport function setEnableEnvMocks(enabled) {\r\n _enableMocks = enabled;\r\n}\r\n/**\r\n * Return the named global object if available, will return null if the object is not available.\r\n * @param name The globally named object\r\n */\r\nexport function getGlobalInst(name) {\r\n var gbl = getGlobal();\r\n if (gbl && gbl[name]) {\r\n return gbl[name];\r\n }\r\n // Test workaround, for environments where .window (when global == window) doesn't return the base window\r\n if (name === strWindow && hasWindow()) {\r\n // tslint:disable-next-line: no-angle-bracket-type-assertion\r\n return window;\r\n }\r\n return null;\r\n}\r\n/**\r\n * Checks if window object is available, this is required as we support the API running without a\r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a window\r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: window is not defined\"\r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasWindow() {\r\n return Boolean(typeof window === strShimObject && window);\r\n}\r\n/**\r\n * Returns the global window object if it is present otherwise null.\r\n * This helper is used to access the window object without causing an exception\r\n * \"Uncaught ReferenceError: window is not defined\"\r\n */\r\nexport function getWindow() {\r\n if (hasWindow()) {\r\n return window;\r\n }\r\n // Return the global instance or null\r\n return getGlobalInst(strWindow);\r\n}\r\n/**\r\n * Checks if document object is available, this is required as we support the API running without a\r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a document\r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: document is not defined\"\r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasDocument() {\r\n return Boolean(typeof document === strShimObject && document);\r\n}\r\n/**\r\n * Returns the global document object if it is present otherwise null.\r\n * This helper is used to access the document object without causing an exception\r\n * \"Uncaught ReferenceError: document is not defined\"\r\n */\r\nexport function getDocument() {\r\n if (hasDocument()) {\r\n return document;\r\n }\r\n return getGlobalInst(strDocument);\r\n}\r\n/**\r\n * Checks if navigator object is available, this is required as we support the API running without a\r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a navigator\r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: navigator is not defined\"\r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasNavigator() {\r\n return Boolean(typeof navigator === strShimObject && navigator);\r\n}\r\n/**\r\n * Returns the global navigator object if it is present otherwise null.\r\n * This helper is used to access the navigator object without causing an exception\r\n * \"Uncaught ReferenceError: navigator is not defined\"\r\n */\r\nexport function getNavigator() {\r\n if (hasNavigator()) {\r\n return navigator;\r\n }\r\n return getGlobalInst(strNavigator);\r\n}\r\n/**\r\n * Checks if history object is available, this is required as we support the API running without a\r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a history\r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: history is not defined\"\r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasHistory() {\r\n return Boolean(typeof history === strShimObject && history);\r\n}\r\n/**\r\n * Returns the global history object if it is present otherwise null.\r\n * This helper is used to access the history object without causing an exception\r\n * \"Uncaught ReferenceError: history is not defined\"\r\n */\r\nexport function getHistory() {\r\n if (hasHistory()) {\r\n return history;\r\n }\r\n return getGlobalInst(strHistory);\r\n}\r\n/**\r\n * Returns the global location object if it is present otherwise null.\r\n * This helper is used to access the location object without causing an exception\r\n * \"Uncaught ReferenceError: location is not defined\"\r\n */\r\nexport function getLocation(checkForMock) {\r\n if (checkForMock && _enableMocks) {\r\n var mockLocation = getGlobalInst(\"__mockLocation\");\r\n if (mockLocation) {\r\n return mockLocation;\r\n }\r\n }\r\n if (typeof location === strShimObject && location) {\r\n return location;\r\n }\r\n return getGlobalInst(strLocation);\r\n}\r\n/**\r\n * Returns the global console object\r\n */\r\nexport function getConsole() {\r\n if (typeof console !== strShimUndefined) {\r\n return console;\r\n }\r\n return getGlobalInst(strConsole);\r\n}\r\n/**\r\n * Returns the performance object if it is present otherwise null.\r\n * This helper is used to access the performance object from the current\r\n * global instance which could be window or globalThis for a web worker\r\n */\r\nexport function getPerformance() {\r\n return getGlobalInst(strPerformance);\r\n}\r\n/**\r\n * Checks if JSON object is available, this is required as we support the API running without a\r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a history\r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: JSON is not defined\"\r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasJSON() {\r\n return Boolean((typeof JSON === strShimObject && JSON) || getGlobalInst(strJSON) !== null);\r\n}\r\n/**\r\n * Returns the global JSON object if it is present otherwise null.\r\n * This helper is used to access the JSON object without causing an exception\r\n * \"Uncaught ReferenceError: JSON is not defined\"\r\n */\r\nexport function getJSON() {\r\n if (hasJSON()) {\r\n return JSON || getGlobalInst(strJSON);\r\n }\r\n return null;\r\n}\r\n/**\r\n * Returns the crypto object if it is present otherwise null.\r\n * This helper is used to access the crypto object from the current\r\n * global instance which could be window or globalThis for a web worker\r\n */\r\nexport function getCrypto() {\r\n return getGlobalInst(strCrypto);\r\n}\r\n/**\r\n * Returns the crypto object if it is present otherwise null.\r\n * This helper is used to access the crypto object from the current\r\n * global instance which could be window or globalThis for a web worker\r\n */\r\nexport function getMsCrypto() {\r\n return getGlobalInst(strMsCrypto);\r\n}\r\n/**\r\n * Returns whether the environment is reporting that we are running in a React Native Environment\r\n */\r\nexport function isReactNative() {\r\n // If running in React Native, navigator.product will be populated\r\n var nav = getNavigator();\r\n if (nav && nav.product) {\r\n return nav.product === strReactNative;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Identifies whether the current environment appears to be IE\r\n */\r\nexport function isIE() {\r\n var nav = getNavigator();\r\n if (nav && (nav[_DYN_USER_AGENT /* @min:%2euserAgent */] !== _navUserAgentCheck || _isTrident === null)) {\r\n // Added to support test mocking of the user agent\r\n _navUserAgentCheck = nav[_DYN_USER_AGENT /* @min:%2euserAgent */];\r\n var userAgent = (_navUserAgentCheck || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n _isTrident = (strContains(userAgent, strMsie) || strContains(userAgent, strTrident));\r\n }\r\n return _isTrident;\r\n}\r\n/**\r\n * Gets IE version returning the document emulation mode if we are running on IE, or null otherwise\r\n */\r\nexport function getIEVersion(userAgentStr) {\r\n if (userAgentStr === void 0) { userAgentStr = null; }\r\n if (!userAgentStr) {\r\n var navigator_1 = getNavigator() || {};\r\n userAgentStr = navigator_1 ? (navigator_1[_DYN_USER_AGENT /* @min:%2euserAgent */] || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]() : STR_EMPTY;\r\n }\r\n var ua = (userAgentStr || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n // Also check for documentMode in case X-UA-Compatible meta tag was included in HTML.\r\n if (strContains(ua, strMsie)) {\r\n var doc = getDocument() || {};\r\n return Math.max(parseInt(ua[_DYN_SPLIT /* @min:%2esplit */](strMsie)[1]), (doc[strDocumentMode] || 0));\r\n }\r\n else if (strContains(ua, strTrident)) {\r\n var tridentVer = parseInt(ua[_DYN_SPLIT /* @min:%2esplit */](strTrident)[1]);\r\n if (tridentVer) {\r\n return tridentVer + 4;\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Returns string representation of an object suitable for diagnostics logging.\r\n */\r\nexport function dumpObj(object) {\r\n var objectTypeDump = Object[strShimPrototype].toString[_DYN_CALL /* @min:%2ecall */](object);\r\n var propertyValueDump = STR_EMPTY;\r\n if (objectTypeDump === \"[object Error]\") {\r\n propertyValueDump = \"{ stack: '\" + object.stack + \"', message: '\" + object.message + \"', name: '\" + object[_DYN_NAME /* @min:%2ename */] + \"'\";\r\n }\r\n else if (hasJSON()) {\r\n propertyValueDump = getJSON().stringify(object);\r\n }\r\n return objectTypeDump + propertyValueDump;\r\n}\r\nexport function isSafari(userAgentStr) {\r\n if (!userAgentStr || !isString(userAgentStr)) {\r\n var navigator_2 = getNavigator() || {};\r\n userAgentStr = navigator_2 ? (navigator_2[_DYN_USER_AGENT /* @min:%2euserAgent */] || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]() : STR_EMPTY;\r\n }\r\n var ua = (userAgentStr || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n return (ua[_DYN_INDEX_OF /* @min:%2eindexOf */](\"safari\") >= 0);\r\n}\r\n/**\r\n * Checks if HTML5 Beacons are supported in the current environment.\r\n * @returns True if supported, false otherwise.\r\n */\r\nexport function isBeaconsSupported() {\r\n if (_beaconsSupported === null) {\r\n _beaconsSupported = hasNavigator() && Boolean(getNavigator().sendBeacon);\r\n }\r\n return _beaconsSupported;\r\n}\r\n/**\r\n * Checks if the Fetch API is supported in the current environment.\r\n * @param withKeepAlive - [Optional] If True, check if fetch is available and it supports the keepalive feature, otherwise only check if fetch is supported\r\n * @returns True if supported, otherwise false\r\n */\r\nexport function isFetchSupported(withKeepAlive) {\r\n var isSupported = false;\r\n try {\r\n isSupported = !!getGlobalInst(\"fetch\");\r\n var request = getGlobalInst(\"Request\");\r\n if (isSupported && withKeepAlive && request) {\r\n isSupported = _hasProperty(request, \"keepalive\");\r\n }\r\n }\r\n catch (e) {\r\n // Just Swallow any failure during availability checks\r\n }\r\n return isSupported;\r\n}\r\nexport function useXDomainRequest() {\r\n if (_useXDomainRequest === null) {\r\n _useXDomainRequest = (typeof XDomainRequest !== strShimUndefined);\r\n if (_useXDomainRequest && isXhrSupported()) {\r\n _useXDomainRequest = _useXDomainRequest && !_hasProperty(getGlobalInst(strXMLHttpRequest), \"withCredentials\");\r\n }\r\n }\r\n return _useXDomainRequest;\r\n}\r\n/**\r\n * Checks if XMLHttpRequest is supported\r\n * @returns True if supported, otherwise false\r\n */\r\nexport function isXhrSupported() {\r\n var isSupported = false;\r\n try {\r\n var xmlHttpRequest = getGlobalInst(strXMLHttpRequest);\r\n isSupported = !!xmlHttpRequest;\r\n }\r\n catch (e) {\r\n // Just Swallow any failure during availability checks\r\n }\r\n return isSupported;\r\n}\r\nfunction _getNamedValue(values, name) {\r\n if (values) {\r\n for (var i = 0; i < values[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n var value = values[i];\r\n if (value[_DYN_NAME /* @min:%2ename */]) {\r\n if (value[_DYN_NAME /* @min:%2ename */] === name) {\r\n return value;\r\n }\r\n }\r\n }\r\n }\r\n return {};\r\n}\r\n/**\r\n * Helper function to fetch the named meta-tag from the page.\r\n * @param name\r\n */\r\nexport function findMetaTag(name) {\r\n var doc = getDocument();\r\n if (doc && name) {\r\n // Look for a meta-tag\r\n return _getNamedValue(doc.querySelectorAll(\"meta\"), name).content;\r\n }\r\n return null;\r\n}\r\n/**\r\n * Helper function to fetch the named server timing value from the page response (first navigation event).\r\n * @param name\r\n */\r\nexport function findNamedServerTiming(name) {\r\n var value;\r\n var perf = getPerformance();\r\n if (perf) {\r\n // Try looking for a server-timing header\r\n var navPerf = perf.getEntriesByType(\"navigation\") || [];\r\n value = _getNamedValue((navPerf[_DYN_LENGTH /* @min:%2elength */] > 0 ? navPerf[0] : {}).serverTiming, name).description;\r\n }\r\n return value;\r\n}\r\n// TODO: should reuse this method for analytics plugin\r\nexport function dispatchEvent(target, evnt) {\r\n if (target && target.dispatchEvent && evnt) {\r\n target.dispatchEvent(evnt);\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport function createCustomDomEvent(eventName, details) {\r\n var event = null;\r\n var detail = { detail: details || null };\r\n if (isFunction(CustomEvent)) { // Use CustomEvent constructor when available\r\n event = new CustomEvent(eventName, detail);\r\n }\r\n else { // CustomEvent has no constructor in IE\r\n var doc = getDocument();\r\n if (doc && doc.createEvent) {\r\n event = doc.createEvent(\"CustomEvent\");\r\n event.initCustomEvent(eventName, true, true, detail);\r\n }\r\n }\r\n return event;\r\n}\r\nexport function sendCustomEvent(evtName, cfg, customDetails) {\r\n var global = getGlobal();\r\n if (global && global.CustomEvent) {\r\n try {\r\n var details = { cfg: cfg || null, customDetails: customDetails || null };\r\n return dispatchEvent(global, createCustomDomEvent(evtName, details));\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n return false;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { _DYN_APPLY, _DYN_LENGTH } from \"../__DynamicConstants\";\r\nimport { getGlobalInst } from \"./EnvUtils\";\r\nvar listenerFuncs = [\"eventsSent\", \"eventsDiscarded\", \"eventsSendRequest\", \"perfEvent\"];\r\nvar _aiNamespace = null;\r\nvar _debugListener;\r\nfunction _listenerProxyFunc(name, config) {\r\n return function () {\r\n var args = arguments;\r\n var dbgExt = getDebugExt(config);\r\n if (dbgExt) {\r\n var listener = dbgExt.listener;\r\n if (listener && listener[name]) {\r\n listener[name][_DYN_APPLY /* @min:%2eapply */](listener, args);\r\n }\r\n }\r\n };\r\n}\r\nfunction _getExtensionNamespace() {\r\n // Cache the lookup of the global namespace object\r\n var target = getGlobalInst(\"Microsoft\");\r\n if (target) {\r\n _aiNamespace = target[\"ApplicationInsights\"];\r\n }\r\n return _aiNamespace;\r\n}\r\nexport function getDebugExt(config) {\r\n var ns = _aiNamespace;\r\n if (!ns && config.disableDbgExt !== true) {\r\n ns = _aiNamespace || _getExtensionNamespace();\r\n }\r\n return ns ? ns[\"ChromeDbgExt\"] : null;\r\n}\r\nexport function getDebugListener(config) {\r\n if (!_debugListener) {\r\n _debugListener = {};\r\n for (var lp = 0; lp < listenerFuncs[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n _debugListener[listenerFuncs[lp]] = _listenerProxyFunc(listenerFuncs[lp], config);\r\n }\r\n }\r\n return _debugListener;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _DYN_DIAG_LOG, _DYN_ENABLE_DEBUG_EXCEPTI4, _DYN_LOGGER, _DYN_LOG_INTERNAL_MESSAGE, _DYN_MESSAGE, _DYN_MESSAGE_ID, _DYN_PUSH, _DYN_REPLACE } from \"../__DynamicConstants\";\r\nimport { getDebugExt } from \"./DbgExtensionUtils\";\r\nimport { dumpObj, getConsole, getJSON, hasJSON } from \"./EnvUtils\";\r\nimport { getCfgValue, isFunction, isUndefined } from \"./HelperFuncs\";\r\nimport { STR_EMPTY, STR_ERROR_TO_CONSOLE, STR_WARN_TO_CONSOLE } from \"./InternalConstants\";\r\n/**\r\n * For user non actionable traces use AI Internal prefix.\r\n */\r\nvar AiNonUserActionablePrefix = \"AI (Internal): \";\r\n/**\r\n * Prefix of the traces in portal.\r\n */\r\nvar AiUserActionablePrefix = \"AI: \";\r\n/**\r\n * Session storage key for the prefix for the key indicating message type already logged\r\n */\r\nvar AIInternalMessagePrefix = \"AITR_\";\r\nfunction _sanitizeDiagnosticText(text) {\r\n if (text) {\r\n return \"\\\"\" + text[_DYN_REPLACE /* @min:%2ereplace */](/\\\"/g, STR_EMPTY) + \"\\\"\";\r\n }\r\n return STR_EMPTY;\r\n}\r\nfunction _logToConsole(func, message) {\r\n var theConsole = getConsole();\r\n if (!!theConsole) {\r\n var logFunc = \"log\";\r\n if (theConsole[func]) {\r\n logFunc = func;\r\n }\r\n if (isFunction(theConsole[logFunc])) {\r\n theConsole[logFunc](message);\r\n }\r\n }\r\n}\r\nvar _InternalLogMessage = /** @class */ (function () {\r\n function _InternalLogMessage(msgId, msg, isUserAct, properties) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n var _self = this;\r\n _self[_DYN_MESSAGE_ID /* @min:%2emessageId */] = msgId;\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] =\r\n (isUserAct ? AiUserActionablePrefix : AiNonUserActionablePrefix) +\r\n msgId;\r\n var strProps = STR_EMPTY;\r\n if (hasJSON()) {\r\n strProps = getJSON().stringify(properties);\r\n }\r\n var diagnosticText = (msg ? \" message:\" + _sanitizeDiagnosticText(msg) : STR_EMPTY) +\r\n (properties ? \" props:\" + _sanitizeDiagnosticText(strProps) : STR_EMPTY);\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] += diagnosticText;\r\n }\r\n _InternalLogMessage.dataType = \"MessageData\";\r\n return _InternalLogMessage;\r\n}());\r\nexport { _InternalLogMessage };\r\nexport function safeGetLogger(core, config) {\r\n return (core || {})[_DYN_LOGGER /* @min:%2elogger */] || new DiagnosticLogger(config);\r\n}\r\nvar DiagnosticLogger = /** @class */ (function () {\r\n function DiagnosticLogger(config) {\r\n this.identifier = \"DiagnosticLogger\";\r\n /**\r\n * The internal logging queue\r\n */\r\n this.queue = [];\r\n /**\r\n * Count of internal messages sent\r\n */\r\n var _messageCount = 0;\r\n /**\r\n * Holds information about what message types were already logged to console or sent to server.\r\n */\r\n var _messageLogged = {};\r\n var _loggingLevelConsole;\r\n var _loggingLevelTelemetry;\r\n var _maxInternalMessageLimit;\r\n var _enableDebug;\r\n dynamicProto(DiagnosticLogger, this, function (_self) {\r\n _setDefaultsFromConfig(config || {});\r\n _self.consoleLoggingLevel = function () { return _loggingLevelConsole; };\r\n _self.telemetryLoggingLevel = function () { return _loggingLevelTelemetry; };\r\n _self.maxInternalMessageLimit = function () { return _maxInternalMessageLimit; };\r\n _self[_DYN_ENABLE_DEBUG_EXCEPTI4 /* @min:%2eenableDebugExceptions */] = function () { return _enableDebug; };\r\n /**\r\n * This method will throw exceptions in debug mode or attempt to log the error as a console warning.\r\n * @param severity {LoggingSeverity} - The severity of the log message\r\n * @param message {_InternalLogMessage} - The log message.\r\n */\r\n _self.throwInternal = function (severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n var message = new _InternalLogMessage(msgId, msg, isUserAct, properties);\r\n if (_enableDebug) {\r\n throw dumpObj(message);\r\n }\r\n else {\r\n // Get the logging function and fallback to warnToConsole of for some reason errorToConsole doesn't exist\r\n var logFunc = severity === 1 /* eLoggingSeverity.CRITICAL */ ? STR_ERROR_TO_CONSOLE : STR_WARN_TO_CONSOLE;\r\n if (!isUndefined(message[_DYN_MESSAGE /* @min:%2emessage */])) {\r\n if (isUserAct) {\r\n // check if this message type was already logged to console for this page view and if so, don't log it again\r\n var messageKey = +message[_DYN_MESSAGE_ID /* @min:%2emessageId */];\r\n if (!_messageLogged[messageKey] && _loggingLevelConsole >= severity) {\r\n _self[logFunc](message[_DYN_MESSAGE /* @min:%2emessage */]);\r\n _messageLogged[messageKey] = true;\r\n }\r\n }\r\n else {\r\n // Only log traces if the console Logging Level is >= the throwInternal severity level\r\n if (_loggingLevelConsole >= severity) {\r\n _self[logFunc](message[_DYN_MESSAGE /* @min:%2emessage */]);\r\n }\r\n }\r\n _logInternalMessage(severity, message);\r\n }\r\n else {\r\n _debugExtMsg(\"throw\" + (severity === 1 /* eLoggingSeverity.CRITICAL */ ? \"Critical\" : \"Warning\"), message);\r\n }\r\n }\r\n };\r\n /**\r\n * This will write a warning to the console if possible\r\n * @param message {string} - The warning message\r\n */\r\n _self[STR_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */] = function (message) {\r\n _logToConsole(\"warn\", message);\r\n _debugExtMsg(\"warning\", message);\r\n };\r\n /**\r\n * This will write an error to the console if possible\r\n * @param message {string} - The error message\r\n */\r\n _self[STR_ERROR_TO_CONSOLE /* @min:%2eerrorToConsole */] = function (message) {\r\n _logToConsole(\"error\", message);\r\n _debugExtMsg(\"error\", message);\r\n };\r\n /**\r\n * Resets the internal message count\r\n */\r\n _self.resetInternalMessageCount = function () {\r\n _messageCount = 0;\r\n _messageLogged = {};\r\n };\r\n /**\r\n * Logs a message to the internal queue.\r\n * @param severity {LoggingSeverity} - The severity of the log message\r\n * @param message {_InternalLogMessage} - The message to log.\r\n */\r\n _self[_DYN_LOG_INTERNAL_MESSAGE /* @min:%2elogInternalMessage */] = _logInternalMessage;\r\n function _logInternalMessage(severity, message) {\r\n if (_areInternalMessagesThrottled()) {\r\n return;\r\n }\r\n // check if this message type was already logged for this session and if so, don't log it again\r\n var logMessage = true;\r\n var messageKey = AIInternalMessagePrefix + message[_DYN_MESSAGE_ID /* @min:%2emessageId */];\r\n // if the session storage is not available, limit to only one message type per page view\r\n if (_messageLogged[messageKey]) {\r\n logMessage = false;\r\n }\r\n else {\r\n _messageLogged[messageKey] = true;\r\n }\r\n if (logMessage) {\r\n // Push the event in the internal queue\r\n if (severity <= _loggingLevelTelemetry) {\r\n _self.queue[_DYN_PUSH /* @min:%2epush */](message);\r\n _messageCount++;\r\n _debugExtMsg((severity === 1 /* eLoggingSeverity.CRITICAL */ ? \"error\" : \"warn\"), message);\r\n }\r\n // When throttle limit reached, send a special event\r\n if (_messageCount === _maxInternalMessageLimit) {\r\n var throttleLimitMessage = \"Internal events throttle limit per PageView reached for this app.\";\r\n var throttleMessage = new _InternalLogMessage(23 /* _eInternalMessageId.MessageLimitPerPVExceeded */, throttleLimitMessage, false);\r\n _self.queue[_DYN_PUSH /* @min:%2epush */](throttleMessage);\r\n if (severity === 1 /* eLoggingSeverity.CRITICAL */) {\r\n _self[STR_ERROR_TO_CONSOLE /* @min:%2eerrorToConsole */](throttleLimitMessage);\r\n }\r\n else {\r\n _self[STR_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */](throttleLimitMessage);\r\n }\r\n }\r\n }\r\n }\r\n function _setDefaultsFromConfig(config) {\r\n _loggingLevelConsole = getCfgValue(config.loggingLevelConsole, 0);\r\n _loggingLevelTelemetry = getCfgValue(config.loggingLevelTelemetry, 1);\r\n _maxInternalMessageLimit = getCfgValue(config.maxMessageLimit, 25);\r\n _enableDebug = getCfgValue(config.enableDebug, getCfgValue(config[_DYN_ENABLE_DEBUG_EXCEPTI4 /* @min:%2eenableDebugExceptions */], false));\r\n }\r\n function _areInternalMessagesThrottled() {\r\n return _messageCount >= _maxInternalMessageLimit;\r\n }\r\n function _debugExtMsg(name, data) {\r\n var dbgExt = getDebugExt(config || {});\r\n if (dbgExt && dbgExt[_DYN_DIAG_LOG /* @min:%2ediagLog */]) {\r\n dbgExt[_DYN_DIAG_LOG /* @min:%2ediagLog */](name, data);\r\n }\r\n }\r\n });\r\n }\r\n// Removed Stub for DiagnosticLogger.prototype.enableDebugExceptions.\r\n// Removed Stub for DiagnosticLogger.prototype.consoleLoggingLevel.\r\n// Removed Stub for DiagnosticLogger.prototype.telemetryLoggingLevel.\r\n// Removed Stub for DiagnosticLogger.prototype.maxInternalMessageLimit.\r\n// Removed Stub for DiagnosticLogger.prototype.throwInternal.\r\n// Removed Stub for DiagnosticLogger.prototype.warnToConsole.\r\n// Removed Stub for DiagnosticLogger.prototype.errorToConsole.\r\n// Removed Stub for DiagnosticLogger.prototype.resetInternalMessageCount.\r\n// Removed Stub for DiagnosticLogger.prototype.logInternalMessage.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n DiagnosticLogger.__ieDyn=1;\n\n return DiagnosticLogger;\r\n}());\r\nexport { DiagnosticLogger };\r\nfunction _getLogger(logger) {\r\n return (logger || new DiagnosticLogger());\r\n}\r\n/**\r\n * This is a helper method which will call throwInternal on the passed logger, will throw exceptions in\r\n * debug mode or attempt to log the error as a console warning. This helper is provided mostly to better\r\n * support minification as logger.throwInternal() will not compress the publish \"throwInternal\" used throughout\r\n * the code.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param severity {LoggingSeverity} - The severity of the log message\r\n * @param message {_InternalLogMessage} - The log message.\r\n */\r\nexport function _throwInternal(logger, severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n _getLogger(logger).throwInternal(severity, msgId, msg, properties, isUserAct);\r\n}\r\n/**\r\n * This is a helper method which will call warnToConsole on the passed logger with the provided message.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param message {_InternalLogMessage} - The log message.\r\n */\r\nexport function _warnToConsole(logger, message) {\r\n _getLogger(logger)[STR_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */](message);\r\n}\r\n/**\r\n * Logs a message to the internal queue.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param severity {LoggingSeverity} - The severity of the log message\r\n * @param message {_InternalLogMessage} - The message to log.\r\n */\r\nexport function _logInternalMessage(logger, severity, message) {\r\n _getLogger(logger)[_DYN_LOG_INTERNAL_MESSAGE /* @min:%2elogInternalMessage */](severity, message);\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { deepFreeze, objForEachKey } from \"../JavaScriptSDK/HelperFuncs\";\r\n/**\r\n * Create an enum style object which has both the key => value and value => key mappings\r\n * @param values - The values to populate on the new object\r\n * @returns\r\n */\r\nexport function createEnumStyle(values) {\r\n var enumClass = {};\r\n objForEachKey(values, function (field, value) {\r\n enumClass[field] = value;\r\n enumClass[value] = field;\r\n });\r\n return deepFreeze(enumClass);\r\n}\r\n/**\r\n * Create a 2 index map that maps an enum's key as both the key and value, X[\"key\"] => \"key\" and X[0] => \"keyof 0\".\r\n * @param values - The values to populate on the new object\r\n * @returns\r\n */\r\nexport function createEnumMap(values) {\r\n var mapClass = {};\r\n objForEachKey(values, function (field, value) {\r\n mapClass[field] = field;\r\n mapClass[value] = field;\r\n });\r\n return deepFreeze(mapClass);\r\n}\r\n/**\r\n * Create a 2 index map that maps an enum's key and value to the defined map value, X[\"key\"] => mapValue and X[0] => mapValue.\r\n * Generic values\r\n * - E = the const enum type (typeof eRequestHeaders);\r\n * - V = Identifies the valid values for the keys, this should include both the enum numeric and string key of the type. The\r\n * resulting \"Value\" of each entry identifies the valid values withing the assignments.\r\n * @param values - The values to populate on the new object\r\n * @returns\r\n */\r\nexport function createValueMap(values) {\r\n var mapClass = {};\r\n objForEachKey(values, function (field, value) {\r\n mapClass[field] = value[1];\r\n mapClass[value[0]] = value[1];\r\n });\r\n return deepFreeze(mapClass);\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { createEnumStyle } from \"@microsoft/applicationinsights-core-js\";\r\nexport var StorageType = createEnumStyle({\r\n LocalStorage: 0 /* eStorageType.LocalStorage */,\r\n SessionStorage: 1 /* eStorageType.SessionStorage */\r\n});\r\nexport var DistributedTracingModes = createEnumStyle({\r\n AI: 0 /* eDistributedTracingModes.AI */,\r\n AI_AND_W3C: 1 /* eDistributedTracingModes.AI_AND_W3C */,\r\n W3C: 2 /* eDistributedTracingModes.W3C */\r\n});\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { _throwInternal, dumpObj, getExceptionName, getGlobal, getGlobalInst, isNullOrUndefined, objForEachKey } from \"@microsoft/applicationinsights-core-js\";\r\nimport { StorageType } from \"./Enums\";\r\nimport { _DYN_REMOVE_ITEM, _DYN_TO_STRING } from \"./__DynamicConstants\";\r\nvar _canUseLocalStorage = undefined;\r\nvar _canUseSessionStorage = undefined;\r\nvar _storagePrefix = \"\";\r\n/**\r\n * Gets the localStorage object if available\r\n * @return {Storage} - Returns the storage object if available else returns null\r\n */\r\nfunction _getLocalStorageObject() {\r\n if (utlCanUseLocalStorage()) {\r\n return _getVerifiedStorageObject(StorageType.LocalStorage);\r\n }\r\n return null;\r\n}\r\n/**\r\n * Tests storage object (localStorage or sessionStorage) to verify that it is usable\r\n * More details here: https://mathiasbynens.be/notes/localstorage-pattern\r\n * @param storageType Type of storage\r\n * @return {Storage} Returns storage object verified that it is usable\r\n */\r\nfunction _getVerifiedStorageObject(storageType) {\r\n try {\r\n if (isNullOrUndefined(getGlobal())) {\r\n return null;\r\n }\r\n var uid = (new Date)[_DYN_TO_STRING /* @min:%2etoString */]();\r\n var storage = getGlobalInst(storageType === StorageType.LocalStorage ? \"localStorage\" : \"sessionStorage\");\r\n var name_1 = _storagePrefix + uid;\r\n storage.setItem(name_1, uid);\r\n var fail = storage.getItem(name_1) !== uid;\r\n storage[_DYN_REMOVE_ITEM /* @min:%2eremoveItem */](name_1);\r\n if (!fail) {\r\n return storage;\r\n }\r\n }\r\n catch (exception) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return null;\r\n}\r\n/**\r\n * Gets the sessionStorage object if available\r\n * @return {Storage} - Returns the storage object if available else returns null\r\n */\r\nfunction _getSessionStorageObject() {\r\n if (utlCanUseSessionStorage()) {\r\n return _getVerifiedStorageObject(StorageType.SessionStorage);\r\n }\r\n return null;\r\n}\r\n/**\r\n * Disables the global SDK usage of local or session storage if available\r\n */\r\nexport function utlDisableStorage() {\r\n _canUseLocalStorage = false;\r\n _canUseSessionStorage = false;\r\n}\r\nexport function utlSetStoragePrefix(storagePrefix) {\r\n _storagePrefix = storagePrefix || \"\";\r\n}\r\n/**\r\n * Re-enables the global SDK usage of local or session storage if available\r\n */\r\nexport function utlEnableStorage() {\r\n _canUseLocalStorage = utlCanUseLocalStorage(true);\r\n _canUseSessionStorage = utlCanUseSessionStorage(true);\r\n}\r\n/**\r\n * Returns whether LocalStorage can be used, if the reset parameter is passed a true this will override\r\n * any previous disable calls.\r\n * @param reset - Should the usage be reset and determined only based on whether LocalStorage is available\r\n */\r\nexport function utlCanUseLocalStorage(reset) {\r\n if (reset || _canUseLocalStorage === undefined) {\r\n _canUseLocalStorage = !!_getVerifiedStorageObject(StorageType.LocalStorage);\r\n }\r\n return _canUseLocalStorage;\r\n}\r\nexport function utlGetLocalStorage(logger, name) {\r\n var storage = _getLocalStorageObject();\r\n if (storage !== null) {\r\n try {\r\n return storage.getItem(name);\r\n }\r\n catch (e) {\r\n _canUseLocalStorage = false;\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 1 /* _eInternalMessageId.BrowserCannotReadLocalStorage */, \"Browser failed read of local storage. \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return null;\r\n}\r\nexport function utlSetLocalStorage(logger, name, data) {\r\n var storage = _getLocalStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage.setItem(name, data);\r\n return true;\r\n }\r\n catch (e) {\r\n _canUseLocalStorage = false;\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 3 /* _eInternalMessageId.BrowserCannotWriteLocalStorage */, \"Browser failed write to local storage. \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return false;\r\n}\r\nexport function utlRemoveStorage(logger, name) {\r\n var storage = _getLocalStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage[_DYN_REMOVE_ITEM /* @min:%2eremoveItem */](name);\r\n return true;\r\n }\r\n catch (e) {\r\n _canUseLocalStorage = false;\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 5 /* _eInternalMessageId.BrowserFailedRemovalFromLocalStorage */, \"Browser failed removal of local storage item. \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return false;\r\n}\r\nexport function utlCanUseSessionStorage(reset) {\r\n if (reset || _canUseSessionStorage === undefined) {\r\n _canUseSessionStorage = !!_getVerifiedStorageObject(StorageType.SessionStorage);\r\n }\r\n return _canUseSessionStorage;\r\n}\r\nexport function utlGetSessionStorageKeys() {\r\n var keys = [];\r\n if (utlCanUseSessionStorage()) {\r\n objForEachKey(getGlobalInst(\"sessionStorage\"), function (key) {\r\n keys.push(key);\r\n });\r\n }\r\n return keys;\r\n}\r\nexport function utlGetSessionStorage(logger, name) {\r\n var storage = _getSessionStorageObject();\r\n if (storage !== null) {\r\n try {\r\n return storage.getItem(name);\r\n }\r\n catch (e) {\r\n _canUseSessionStorage = false;\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 2 /* _eInternalMessageId.BrowserCannotReadSessionStorage */, \"Browser failed read of session storage. \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return null;\r\n}\r\nexport function utlSetSessionStorage(logger, name, data) {\r\n var storage = _getSessionStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage.setItem(name, data);\r\n return true;\r\n }\r\n catch (e) {\r\n _canUseSessionStorage = false;\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 4 /* _eInternalMessageId.BrowserCannotWriteSessionStorage */, \"Browser failed write to session storage. \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return false;\r\n}\r\nexport function utlRemoveSessionStorage(logger, name) {\r\n var storage = _getSessionStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage[_DYN_REMOVE_ITEM /* @min:%2eremoveItem */](name);\r\n return true;\r\n }\r\n catch (e) {\r\n _canUseSessionStorage = false;\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 6 /* _eInternalMessageId.BrowserFailedRemovalFromSessionStorage */, \"Browser failed removal of session storage item. \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return false;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n// Licensed under the\r\nexport { Util, CorrelationIdHelper, DateTimeUtils, dateTimeUtilsNow, dateTimeUtilsDuration, UrlHelper, isInternalApplicationInsightsEndpoint, createDistributedTraceContextFromTrace } from \"./Util\";\r\nexport { ThrottleMgr } from \"./ThrottleMgr\";\r\nexport { parseConnectionString, ConnectionStringParser } from \"./ConnectionStringParser\";\r\nexport { RequestHeaders } from \"./RequestResponseHeaders\";\r\nexport { DisabledPropertyName, ProcessLegacy, SampleRate, HttpMethod, DEFAULT_BREEZE_ENDPOINT, DEFAULT_BREEZE_PATH, strNotSpecified } from \"./Constants\";\r\nexport { Envelope } from \"./Telemetry/Common/Envelope\";\r\nexport { Event } from \"./Telemetry/Event\";\r\nexport { Exception } from \"./Telemetry/Exception\";\r\nexport { Metric } from \"./Telemetry/Metric\";\r\nexport { PageView } from \"./Telemetry/PageView\";\r\nexport { RemoteDependencyData } from \"./Telemetry/RemoteDependencyData\";\r\nexport { Trace } from \"./Telemetry/Trace\";\r\nexport { PageViewPerformance } from \"./Telemetry/PageViewPerformance\";\r\nexport { Data } from \"./Telemetry/Common/Data\";\r\nexport { SeverityLevel } from \"./Interfaces/Contracts/SeverityLevel\";\r\nexport { ConfigurationManager } from \"./Interfaces/IConfig\";\r\nexport { ContextTagKeys } from \"./Interfaces/Contracts/ContextTagKeys\";\r\nexport { DataSanitizer, dataSanitizeKeyAndAddUniqueness, dataSanitizeKey, dataSanitizeString, dataSanitizeUrl, dataSanitizeMessage, dataSanitizeException, dataSanitizeProperties, dataSanitizeMeasurements, dataSanitizeId, dataSanitizeInput, dsPadNumber } from \"./Telemetry/Common/DataSanitizer\";\r\nexport { TelemetryItemCreator, createTelemetryItem } from \"./TelemetryItemCreator\";\r\nexport { CtxTagKeys, Extensions } from \"./Interfaces/PartAExtensions\";\r\nexport { DistributedTracingModes } from \"./Enums\";\r\nexport { stringToBoolOrDefault, msToTimeSpan, getExtensionByName, isCrossOriginError } from \"./HelperFuncs\";\r\nexport { isBeaconsSupported as isBeaconApiSupported, createTraceParent, parseTraceParent, isValidTraceId, isValidSpanId, isValidTraceParent, isSampledFlag, formatTraceParent, findW3cTraceParent } from \"@microsoft/applicationinsights-core-js\";\r\nexport { createDomEvent } from \"./DomHelperFuncs\";\r\nexport { utlDisableStorage, utlEnableStorage, utlCanUseLocalStorage, utlGetLocalStorage, utlSetLocalStorage, utlRemoveStorage, utlCanUseSessionStorage, utlGetSessionStorageKeys, utlGetSessionStorage, utlSetSessionStorage, utlRemoveSessionStorage, utlSetStoragePrefix } from \"./StorageHelperFuncs\";\r\nexport { urlParseUrl, urlGetAbsoluteUrl, urlGetPathName, urlGetCompleteUrl, urlParseHost, urlParseFullHost } from \"./UrlHelperFuncs\";\r\nexport var PropertiesPluginIdentifier = \"AppInsightsPropertiesPlugin\";\r\nexport var BreezeChannelIdentifier = \"AppInsightsChannelPlugin\";\r\nexport var AnalyticsPluginIdentifier = \"ApplicationInsightsAnalytics\";\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nvar _a;\r\nimport { _throwInternal, getJSON, hasJSON, isObject, objForEachKey, strTrim } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_LENGTH, _DYN_SANITIZE_EXCEPTION, _DYN_SANITIZE_KEY_AND_ADD2, _DYN_SANITIZE_MEASUREMENT3, _DYN_SANITIZE_PROPERTIES, _DYN_STRINGIFY, _DYN_SUBSTRING, _DYN_TO_STRING } from \"../../__DynamicConstants\";\r\nexport function dataSanitizeKeyAndAddUniqueness(logger, key, map) {\r\n var origLength = key[_DYN_LENGTH /* @min:%2elength */];\r\n var field = dataSanitizeKey(logger, key);\r\n // validation truncated the length. We need to add uniqueness\r\n if (field[_DYN_LENGTH /* @min:%2elength */] !== origLength) {\r\n var i = 0;\r\n var uniqueField = field;\r\n while (map[uniqueField] !== undefined) {\r\n i++;\r\n uniqueField = field[_DYN_SUBSTRING /* @min:%2esubstring */](0, 150 /* DataSanitizerValues.MAX_NAME_LENGTH */ - 3) + dsPadNumber(i);\r\n }\r\n field = uniqueField;\r\n }\r\n return field;\r\n}\r\nexport function dataSanitizeKey(logger, name) {\r\n var nameTrunc;\r\n if (name) {\r\n // Remove any leading or trailing whitespace\r\n name = strTrim(name[_DYN_TO_STRING /* @min:%2etoString */]());\r\n // truncate the string to 150 chars\r\n if (name[_DYN_LENGTH /* @min:%2elength */] > 150 /* DataSanitizerValues.MAX_NAME_LENGTH */) {\r\n nameTrunc = name[_DYN_SUBSTRING /* @min:%2esubstring */](0, 150 /* DataSanitizerValues.MAX_NAME_LENGTH */);\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 57 /* _eInternalMessageId.NameTooLong */, \"name is too long. It has been truncated to \" + 150 /* DataSanitizerValues.MAX_NAME_LENGTH */ + \" characters.\", { name: name }, true);\r\n }\r\n }\r\n return nameTrunc || name;\r\n}\r\nexport function dataSanitizeString(logger, value, maxLength) {\r\n if (maxLength === void 0) { maxLength = 1024 /* DataSanitizerValues.MAX_STRING_LENGTH */; }\r\n var valueTrunc;\r\n if (value) {\r\n maxLength = maxLength ? maxLength : 1024 /* DataSanitizerValues.MAX_STRING_LENGTH */; // in case default parameters dont work\r\n value = strTrim(value);\r\n if (value.toString()[_DYN_LENGTH /* @min:%2elength */] > maxLength) {\r\n valueTrunc = value[_DYN_TO_STRING /* @min:%2etoString */]()[_DYN_SUBSTRING /* @min:%2esubstring */](0, maxLength);\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 61 /* _eInternalMessageId.StringValueTooLong */, \"string value is too long. It has been truncated to \" + maxLength + \" characters.\", { value: value }, true);\r\n }\r\n }\r\n return valueTrunc || value;\r\n}\r\nexport function dataSanitizeUrl(logger, url) {\r\n return dataSanitizeInput(logger, url, 2048 /* DataSanitizerValues.MAX_URL_LENGTH */, 66 /* _eInternalMessageId.UrlTooLong */);\r\n}\r\nexport function dataSanitizeMessage(logger, message) {\r\n var messageTrunc;\r\n if (message) {\r\n if (message[_DYN_LENGTH /* @min:%2elength */] > 32768 /* DataSanitizerValues.MAX_MESSAGE_LENGTH */) {\r\n messageTrunc = message[_DYN_SUBSTRING /* @min:%2esubstring */](0, 32768 /* DataSanitizerValues.MAX_MESSAGE_LENGTH */);\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 56 /* _eInternalMessageId.MessageTruncated */, \"message is too long, it has been truncated to \" + 32768 /* DataSanitizerValues.MAX_MESSAGE_LENGTH */ + \" characters.\", { message: message }, true);\r\n }\r\n }\r\n return messageTrunc || message;\r\n}\r\nexport function dataSanitizeException(logger, exception) {\r\n var exceptionTrunc;\r\n if (exception) {\r\n // Make surte its a string\r\n var value = \"\" + exception;\r\n if (value[_DYN_LENGTH /* @min:%2elength */] > 32768 /* DataSanitizerValues.MAX_EXCEPTION_LENGTH */) {\r\n exceptionTrunc = value[_DYN_SUBSTRING /* @min:%2esubstring */](0, 32768 /* DataSanitizerValues.MAX_EXCEPTION_LENGTH */);\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 52 /* _eInternalMessageId.ExceptionTruncated */, \"exception is too long, it has been truncated to \" + 32768 /* DataSanitizerValues.MAX_EXCEPTION_LENGTH */ + \" characters.\", { exception: exception }, true);\r\n }\r\n }\r\n return exceptionTrunc || exception;\r\n}\r\nexport function dataSanitizeProperties(logger, properties) {\r\n if (properties) {\r\n var tempProps_1 = {};\r\n objForEachKey(properties, function (prop, value) {\r\n if (isObject(value) && hasJSON()) {\r\n // Stringify any part C properties\r\n try {\r\n value = getJSON()[_DYN_STRINGIFY /* @min:%2estringify */](value);\r\n }\r\n catch (e) {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 49 /* _eInternalMessageId.CannotSerializeObjectNonSerializable */, \"custom property is not valid\", { exception: e }, true);\r\n }\r\n }\r\n value = dataSanitizeString(logger, value, 8192 /* DataSanitizerValues.MAX_PROPERTY_LENGTH */);\r\n prop = dataSanitizeKeyAndAddUniqueness(logger, prop, tempProps_1);\r\n tempProps_1[prop] = value;\r\n });\r\n properties = tempProps_1;\r\n }\r\n return properties;\r\n}\r\nexport function dataSanitizeMeasurements(logger, measurements) {\r\n if (measurements) {\r\n var tempMeasurements_1 = {};\r\n objForEachKey(measurements, function (measure, value) {\r\n measure = dataSanitizeKeyAndAddUniqueness(logger, measure, tempMeasurements_1);\r\n tempMeasurements_1[measure] = value;\r\n });\r\n measurements = tempMeasurements_1;\r\n }\r\n return measurements;\r\n}\r\nexport function dataSanitizeId(logger, id) {\r\n return id ? dataSanitizeInput(logger, id, 128 /* DataSanitizerValues.MAX_ID_LENGTH */, 69 /* _eInternalMessageId.IdTooLong */)[_DYN_TO_STRING /* @min:%2etoString */]() : id;\r\n}\r\nexport function dataSanitizeInput(logger, input, maxLength, _msgId) {\r\n var inputTrunc;\r\n if (input) {\r\n input = strTrim(input);\r\n if (input[_DYN_LENGTH /* @min:%2elength */] > maxLength) {\r\n inputTrunc = input[_DYN_SUBSTRING /* @min:%2esubstring */](0, maxLength);\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, _msgId, \"input is too long, it has been truncated to \" + maxLength + \" characters.\", { data: input }, true);\r\n }\r\n }\r\n return inputTrunc || input;\r\n}\r\nexport function dsPadNumber(num) {\r\n var s = \"00\" + num;\r\n return s.substr(s[_DYN_LENGTH /* @min:%2elength */] - 3);\r\n}\r\n/**\r\n * Provides the DataSanitizer functions within the previous namespace.\r\n */\r\nexport var DataSanitizer = (_a = {\r\n MAX_NAME_LENGTH: 150 /* DataSanitizerValues.MAX_NAME_LENGTH */,\r\n MAX_ID_LENGTH: 128 /* DataSanitizerValues.MAX_ID_LENGTH */,\r\n MAX_PROPERTY_LENGTH: 8192 /* DataSanitizerValues.MAX_PROPERTY_LENGTH */,\r\n MAX_STRING_LENGTH: 1024 /* DataSanitizerValues.MAX_STRING_LENGTH */,\r\n MAX_URL_LENGTH: 2048 /* DataSanitizerValues.MAX_URL_LENGTH */,\r\n MAX_MESSAGE_LENGTH: 32768 /* DataSanitizerValues.MAX_MESSAGE_LENGTH */,\r\n MAX_EXCEPTION_LENGTH: 32768 /* DataSanitizerValues.MAX_EXCEPTION_LENGTH */\r\n },\r\n _a[_DYN_SANITIZE_KEY_AND_ADD2 /* @min:sanitizeKeyAndAddUniqueness */] = dataSanitizeKeyAndAddUniqueness,\r\n _a.sanitizeKey = dataSanitizeKey,\r\n _a.sanitizeString = dataSanitizeString,\r\n _a.sanitizeUrl = dataSanitizeUrl,\r\n _a.sanitizeMessage = dataSanitizeMessage,\r\n _a[_DYN_SANITIZE_EXCEPTION /* @min:sanitizeException */] = dataSanitizeException,\r\n _a[_DYN_SANITIZE_PROPERTIES /* @min:sanitizeProperties */] = dataSanitizeProperties,\r\n _a[_DYN_SANITIZE_MEASUREMENT3 /* @min:sanitizeMeasurements */] = dataSanitizeMeasurements,\r\n _a.sanitizeId = dataSanitizeId,\r\n _a.sanitizeInput = dataSanitizeInput,\r\n _a.padNumber = dsPadNumber,\r\n _a.trim = strTrim,\r\n _a);\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n/**\r\n * This is an internal property used to cause internal (reporting) requests to be ignored from reporting\r\n * additional telemetry, to handle polyfil implementations ALL urls used with a disabled request will\r\n * also be ignored for future requests even when this property is not provided.\r\n * Tagging as Ignore as this is an internal value and is not expected to be used outside of the SDK\r\n * @ignore\r\n */\r\nexport var DisabledPropertyName = \"Microsoft_ApplicationInsights_BypassAjaxInstrumentation\";\r\nexport var SampleRate = \"sampleRate\";\r\nexport var ProcessLegacy = \"ProcessLegacy\";\r\nexport var HttpMethod = \"http.method\";\r\nexport var DEFAULT_BREEZE_ENDPOINT = \"https://dc.services.visualstudio.com\";\r\nexport var DEFAULT_BREEZE_PATH = \"/v2/track\";\r\nexport var strNotSpecified = \"not_specified\";\r\nexport var strIkey = \"iKey\";\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { isNullOrUndefined, objForEachKey, throwError, toISOString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { strIkey, strNotSpecified } from \"./Constants\";\r\nimport { dataSanitizeString } from \"./Telemetry/Common/DataSanitizer\";\r\nimport { _DYN_NAME } from \"./__DynamicConstants\";\r\n/**\r\n * Create a telemetry item that the 1DS channel understands\r\n * @param item domain specific properties; part B\r\n * @param baseType telemetry item type. ie PageViewData\r\n * @param envelopeName name of the envelope. ie Microsoft.ApplicationInsights..PageView\r\n * @param customProperties user defined custom properties; part C\r\n * @param systemProperties system properties that are added to the context; part A\r\n * @returns ITelemetryItem that is sent to channel\r\n */\r\nexport function createTelemetryItem(item, baseType, envelopeName, logger, customProperties, systemProperties) {\r\n var _a;\r\n envelopeName = dataSanitizeString(logger, envelopeName) || strNotSpecified;\r\n if (isNullOrUndefined(item) ||\r\n isNullOrUndefined(baseType) ||\r\n isNullOrUndefined(envelopeName)) {\r\n throwError(\"Input doesn't contain all required fields\");\r\n }\r\n var iKey = \"\";\r\n if (item[strIkey]) {\r\n iKey = item[strIkey];\r\n delete item[strIkey];\r\n }\r\n var telemetryItem = (_a = {},\r\n _a[_DYN_NAME /* @min:name */] = envelopeName,\r\n _a.time = toISOString(new Date()),\r\n _a.iKey = iKey,\r\n _a.ext = systemProperties ? systemProperties : {},\r\n _a.tags = [],\r\n _a.data = {},\r\n _a.baseType = baseType,\r\n _a.baseData = item // Part B\r\n ,\r\n _a);\r\n // Part C\r\n if (!isNullOrUndefined(customProperties)) {\r\n objForEachKey(customProperties, function (prop, value) {\r\n telemetryItem.data[prop] = value;\r\n });\r\n }\r\n return telemetryItem;\r\n}\r\nvar TelemetryItemCreator = /** @class */ (function () {\r\n function TelemetryItemCreator() {\r\n }\r\n /**\r\n * Create a telemetry item that the 1DS channel understands\r\n * @param item domain specific properties; part B\r\n * @param baseType telemetry item type. ie PageViewData\r\n * @param envelopeName name of the envelope. ie Microsoft.ApplicationInsights..PageView\r\n * @param customProperties user defined custom properties; part C\r\n * @param systemProperties system properties that are added to the context; part A\r\n * @returns ITelemetryItem that is sent to channel\r\n */\r\n TelemetryItemCreator.create = createTelemetryItem;\r\n return TelemetryItemCreator;\r\n}());\r\nexport { TelemetryItemCreator };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { strNotSpecified } from \"../Constants\";\r\nimport { _DYN_MEASUREMENTS, _DYN_NAME, _DYN_PROPERTIES } from \"../__DynamicConstants\";\r\nimport { dataSanitizeMeasurements, dataSanitizeProperties, dataSanitizeString } from \"./Common/DataSanitizer\";\r\nvar Event = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the EventTelemetry object\r\n */\r\n function Event(logger, name, properties, measurements) {\r\n this.aiDataContract = {\r\n ver: 1 /* FieldType.Required */,\r\n name: 1 /* FieldType.Required */,\r\n properties: 0 /* FieldType.Default */,\r\n measurements: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self.ver = 2;\r\n _self[_DYN_NAME /* @min:%2ename */] = dataSanitizeString(logger, name) || strNotSpecified;\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = dataSanitizeProperties(logger, properties);\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = dataSanitizeMeasurements(logger, measurements);\r\n }\r\n Event.envelopeType = \"Microsoft.ApplicationInsights.{0}.Event\";\r\n Event.dataType = \"EventData\";\r\n return Event;\r\n}());\r\nexport { Event };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { strNotSpecified } from \"../Constants\";\r\nimport { _DYN_MEASUREMENTS, _DYN_MESSAGE, _DYN_PROPERTIES, _DYN_SEVERITY_LEVEL } from \"../__DynamicConstants\";\r\nimport { dataSanitizeMeasurements, dataSanitizeMessage, dataSanitizeProperties } from \"./Common/DataSanitizer\";\r\nvar Trace = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the TraceTelemetry object\r\n */\r\n function Trace(logger, message, severityLevel, properties, measurements) {\r\n this.aiDataContract = {\r\n ver: 1 /* FieldType.Required */,\r\n message: 1 /* FieldType.Required */,\r\n severityLevel: 0 /* FieldType.Default */,\r\n properties: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self.ver = 2;\r\n message = message || strNotSpecified;\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] = dataSanitizeMessage(logger, message);\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = dataSanitizeProperties(logger, properties);\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = dataSanitizeMeasurements(logger, measurements);\r\n if (severityLevel) {\r\n _self[_DYN_SEVERITY_LEVEL /* @min:%2eseverityLevel */] = severityLevel;\r\n }\r\n }\r\n Trace.envelopeType = \"Microsoft.ApplicationInsights.{0}.Message\";\r\n Trace.dataType = \"MessageData\";\r\n return Trace;\r\n}());\r\nexport { Trace };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nvar DataPoint = /** @class */ (function () {\r\n function DataPoint() {\r\n /**\r\n * The data contract for serializing this object.\r\n */\r\n this.aiDataContract = {\r\n name: 1 /* FieldType.Required */,\r\n kind: 0 /* FieldType.Default */,\r\n value: 1 /* FieldType.Required */,\r\n count: 0 /* FieldType.Default */,\r\n min: 0 /* FieldType.Default */,\r\n max: 0 /* FieldType.Default */,\r\n stdDev: 0 /* FieldType.Default */\r\n };\r\n /**\r\n * Metric type. Single measurement or the aggregated value.\r\n */\r\n this.kind = 0 /* DataPointType.Measurement */;\r\n }\r\n return DataPoint;\r\n}());\r\nexport { DataPoint };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { strNotSpecified } from \"../Constants\";\r\nimport { _DYN_COUNT, _DYN_MEASUREMENTS, _DYN_NAME, _DYN_PROPERTIES } from \"../__DynamicConstants\";\r\nimport { DataPoint } from \"./Common/DataPoint\";\r\nimport { dataSanitizeMeasurements, dataSanitizeProperties, dataSanitizeString } from \"./Common/DataSanitizer\";\r\nvar Metric = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the MetricTelemetry object\r\n */\r\n function Metric(logger, name, value, count, min, max, stdDev, properties, measurements) {\r\n this.aiDataContract = {\r\n ver: 1 /* FieldType.Required */,\r\n metrics: 1 /* FieldType.Required */,\r\n properties: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self.ver = 2;\r\n var dataPoint = new DataPoint();\r\n dataPoint[_DYN_COUNT /* @min:%2ecount */] = count > 0 ? count : undefined;\r\n dataPoint.max = isNaN(max) || max === null ? undefined : max;\r\n dataPoint.min = isNaN(min) || min === null ? undefined : min;\r\n dataPoint[_DYN_NAME /* @min:%2ename */] = dataSanitizeString(logger, name) || strNotSpecified;\r\n dataPoint.value = value;\r\n dataPoint.stdDev = isNaN(stdDev) || stdDev === null ? undefined : stdDev;\r\n _self.metrics = [dataPoint];\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = dataSanitizeProperties(logger, properties);\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = dataSanitizeMeasurements(logger, measurements);\r\n }\r\n Metric.envelopeType = \"Microsoft.ApplicationInsights.{0}.Metric\";\r\n Metric.dataType = \"MetricData\";\r\n return Metric;\r\n}());\r\nexport { Metric };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { strNotSpecified } from \"../Constants\";\r\nimport { msToTimeSpan } from \"../HelperFuncs\";\r\nimport { _DYN_DURATION, _DYN_MEASUREMENTS, _DYN_NAME, _DYN_PROPERTIES } from \"../__DynamicConstants\";\r\nimport { dataSanitizeId, dataSanitizeMeasurements, dataSanitizeProperties, dataSanitizeString, dataSanitizeUrl } from \"./Common/DataSanitizer\";\r\nvar PageView = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the PageEventTelemetry object\r\n */\r\n function PageView(logger, name, url, durationMs, properties, measurements, id) {\r\n this.aiDataContract = {\r\n ver: 1 /* FieldType.Required */,\r\n name: 0 /* FieldType.Default */,\r\n url: 0 /* FieldType.Default */,\r\n duration: 0 /* FieldType.Default */,\r\n properties: 0 /* FieldType.Default */,\r\n measurements: 0 /* FieldType.Default */,\r\n id: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self.ver = 2;\r\n _self.id = dataSanitizeId(logger, id);\r\n _self.url = dataSanitizeUrl(logger, url);\r\n _self[_DYN_NAME /* @min:%2ename */] = dataSanitizeString(logger, name) || strNotSpecified;\r\n if (!isNaN(durationMs)) {\r\n _self[_DYN_DURATION /* @min:%2eduration */] = msToTimeSpan(durationMs);\r\n }\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = dataSanitizeProperties(logger, properties);\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = dataSanitizeMeasurements(logger, measurements);\r\n }\r\n PageView.envelopeType = \"Microsoft.ApplicationInsights.{0}.Pageview\";\r\n PageView.dataType = \"PageviewData\";\r\n return PageView;\r\n}());\r\nexport { PageView };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { strNotSpecified } from \"../Constants\";\r\nimport { _DYN_DURATION, _DYN_MEASUREMENTS, _DYN_NAME, _DYN_PROPERTIES, _DYN_RECEIVED_RESPONSE } from \"../__DynamicConstants\";\r\nimport { dataSanitizeMeasurements, dataSanitizeProperties, dataSanitizeString, dataSanitizeUrl } from \"./Common/DataSanitizer\";\r\nvar PageViewPerformance = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the PageEventTelemetry object\r\n */\r\n function PageViewPerformance(logger, name, url, unused, properties, measurements, cs4BaseData) {\r\n this.aiDataContract = {\r\n ver: 1 /* FieldType.Required */,\r\n name: 0 /* FieldType.Default */,\r\n url: 0 /* FieldType.Default */,\r\n duration: 0 /* FieldType.Default */,\r\n perfTotal: 0 /* FieldType.Default */,\r\n networkConnect: 0 /* FieldType.Default */,\r\n sentRequest: 0 /* FieldType.Default */,\r\n receivedResponse: 0 /* FieldType.Default */,\r\n domProcessing: 0 /* FieldType.Default */,\r\n properties: 0 /* FieldType.Default */,\r\n measurements: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self.ver = 2;\r\n _self.url = dataSanitizeUrl(logger, url);\r\n _self[_DYN_NAME /* @min:%2ename */] = dataSanitizeString(logger, name) || strNotSpecified;\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = dataSanitizeProperties(logger, properties);\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = dataSanitizeMeasurements(logger, measurements);\r\n if (cs4BaseData) {\r\n _self.domProcessing = cs4BaseData.domProcessing;\r\n _self[_DYN_DURATION /* @min:%2eduration */] = cs4BaseData[_DYN_DURATION /* @min:%2eduration */];\r\n _self.networkConnect = cs4BaseData.networkConnect;\r\n _self.perfTotal = cs4BaseData.perfTotal;\r\n _self[_DYN_RECEIVED_RESPONSE /* @min:%2ereceivedResponse */] = cs4BaseData[_DYN_RECEIVED_RESPONSE /* @min:%2ereceivedResponse */];\r\n _self.sentRequest = cs4BaseData.sentRequest;\r\n }\r\n }\r\n PageViewPerformance.envelopeType = \"Microsoft.ApplicationInsights.{0}.PageviewPerformance\";\r\n PageViewPerformance.dataType = \"PageviewPerformanceData\";\r\n return PageViewPerformance;\r\n}());\r\nexport { PageViewPerformance };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { __assignFn as __assign } from \"@microsoft/applicationinsights-shims\";\r\nimport { arrForEach, arrMap, isArray, isError, isFunction, isNullOrUndefined, isObject, isString, strTrim } from \"@microsoft/applicationinsights-core-js\";\r\nimport { strNotSpecified } from \"../Constants\";\r\nimport { _DYN_ASSEMBLY, _DYN_EXCEPTIONS, _DYN_FILE_NAME, _DYN_HAS_FULL_STACK, _DYN_INDEX_OF, _DYN_IS_MANUAL, _DYN_LENGTH, _DYN_LEVEL, _DYN_LINE, _DYN_MEASUREMENTS, _DYN_MESSAGE, _DYN_METHOD, _DYN_NAME, _DYN_PARSED_STACK, _DYN_PROBLEM_GROUP, _DYN_PROPERTIES, _DYN_SEVERITY_LEVEL, _DYN_SIZE_IN_BYTES, _DYN_SPLIT, _DYN_STRINGIFY, _DYN_TO_STRING, _DYN_TYPE_NAME, _DYN__CREATE_FROM_INTERFA1 } from \"../__DynamicConstants\";\r\nimport { dataSanitizeException, dataSanitizeMeasurements, dataSanitizeMessage, dataSanitizeProperties, dataSanitizeString } from \"./Common/DataSanitizer\";\r\nvar NoMethod = \"\";\r\nvar strError = \"error\";\r\nvar strStack = \"stack\";\r\nvar strStackDetails = \"stackDetails\";\r\nvar strErrorSrc = \"errorSrc\";\r\nvar strMessage = \"message\";\r\nvar strDescription = \"description\";\r\nfunction _stringify(value, convertToString) {\r\n var result = value;\r\n if (result && !isString(result)) {\r\n if (JSON && JSON[_DYN_STRINGIFY /* @min:%2estringify */]) {\r\n result = JSON[_DYN_STRINGIFY /* @min:%2estringify */](value);\r\n if (convertToString && (!result || result === \"{}\")) {\r\n if (isFunction(value[_DYN_TO_STRING /* @min:%2etoString */])) {\r\n result = value[_DYN_TO_STRING /* @min:%2etoString */]();\r\n }\r\n else {\r\n result = \"\" + value;\r\n }\r\n }\r\n }\r\n else {\r\n result = \"\" + value + \" - (Missing JSON.stringify)\";\r\n }\r\n }\r\n return result || \"\";\r\n}\r\nfunction _formatMessage(theEvent, errorType) {\r\n var evtMessage = theEvent;\r\n if (theEvent) {\r\n if (evtMessage && !isString(evtMessage)) {\r\n evtMessage = theEvent[strMessage] || theEvent[strDescription] || evtMessage;\r\n }\r\n // Make sure the message is a string\r\n if (evtMessage && !isString(evtMessage)) {\r\n // tslint:disable-next-line: prefer-conditional-expression\r\n evtMessage = _stringify(evtMessage, true);\r\n }\r\n if (theEvent[\"filename\"]) {\r\n // Looks like an event object with filename\r\n evtMessage = evtMessage + \" @\" + (theEvent[\"filename\"] || \"\") + \":\" + (theEvent[\"lineno\"] || \"?\") + \":\" + (theEvent[\"colno\"] || \"?\");\r\n }\r\n }\r\n // Automatically add the error type to the message if it does already appear to be present\r\n if (errorType && errorType !== \"String\" && errorType !== \"Object\" && errorType !== \"Error\" && (evtMessage || \"\")[_DYN_INDEX_OF /* @min:%2eindexOf */](errorType) === -1) {\r\n evtMessage = errorType + \": \" + evtMessage;\r\n }\r\n return evtMessage || \"\";\r\n}\r\nfunction _isExceptionDetailsInternal(value) {\r\n try {\r\n if (isObject(value)) {\r\n return \"hasFullStack\" in value && \"typeName\" in value;\r\n }\r\n }\r\n catch (e) {\r\n // This can happen with some native browser objects, but should not happen for the type we are checking for\r\n }\r\n return false;\r\n}\r\nfunction _isExceptionInternal(value) {\r\n try {\r\n if (isObject(value)) {\r\n return (\"ver\" in value && \"exceptions\" in value && \"properties\" in value);\r\n }\r\n }\r\n catch (e) {\r\n // This can happen with some native browser objects, but should not happen for the type we are checking for\r\n }\r\n return false;\r\n}\r\nfunction _isStackDetails(details) {\r\n return details && details.src && isString(details.src) && details.obj && isArray(details.obj);\r\n}\r\nfunction _convertStackObj(errorStack) {\r\n var src = errorStack || \"\";\r\n if (!isString(src)) {\r\n if (isString(src[strStack])) {\r\n src = src[strStack];\r\n }\r\n else {\r\n src = \"\" + src;\r\n }\r\n }\r\n var items = src[_DYN_SPLIT /* @min:%2esplit */](\"\\n\");\r\n return {\r\n src: src,\r\n obj: items\r\n };\r\n}\r\nfunction _getOperaStack(errorMessage) {\r\n var stack = [];\r\n var lines = errorMessage[_DYN_SPLIT /* @min:%2esplit */](\"\\n\");\r\n for (var lp = 0; lp < lines[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n var entry = lines[lp];\r\n if (lines[lp + 1]) {\r\n entry += \"@\" + lines[lp + 1];\r\n lp++;\r\n }\r\n stack.push(entry);\r\n }\r\n return {\r\n src: errorMessage,\r\n obj: stack\r\n };\r\n}\r\nfunction _getStackFromErrorObj(errorObj) {\r\n var details = null;\r\n if (errorObj) {\r\n try {\r\n /* Using bracket notation is support older browsers (IE 7/8 -- dont remember the version) that throw when using dot\r\n notation for undefined objects and we don't want to loose the error from being reported */\r\n if (errorObj[strStack]) {\r\n // Chrome/Firefox\r\n details = _convertStackObj(errorObj[strStack]);\r\n }\r\n else if (errorObj[strError] && errorObj[strError][strStack]) {\r\n // Edge error event provides the stack and error object\r\n details = _convertStackObj(errorObj[strError][strStack]);\r\n }\r\n else if (errorObj[\"exception\"] && errorObj.exception[strStack]) {\r\n details = _convertStackObj(errorObj.exception[strStack]);\r\n }\r\n else if (_isStackDetails(errorObj)) {\r\n details = errorObj;\r\n }\r\n else if (_isStackDetails(errorObj[strStackDetails])) {\r\n details = errorObj[strStackDetails];\r\n }\r\n else if (window && window[\"opera\"] && errorObj[strMessage]) {\r\n // Opera\r\n details = _getOperaStack(errorObj[_DYN_MESSAGE /* @min:%2emessage */]);\r\n }\r\n else if (errorObj[\"reason\"] && errorObj.reason[strStack]) {\r\n // UnhandledPromiseRejection\r\n details = _convertStackObj(errorObj.reason[strStack]);\r\n }\r\n else if (isString(errorObj)) {\r\n details = _convertStackObj(errorObj);\r\n }\r\n else {\r\n var evtMessage = errorObj[strMessage] || errorObj[strDescription] || \"\";\r\n if (isString(errorObj[strErrorSrc])) {\r\n if (evtMessage) {\r\n evtMessage += \"\\n\";\r\n }\r\n evtMessage += \" from \" + errorObj[strErrorSrc];\r\n }\r\n if (evtMessage) {\r\n details = _convertStackObj(evtMessage);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // something unexpected happened so to avoid failing to report any error lets swallow the exception\r\n // and fallback to the callee/caller method\r\n details = _convertStackObj(e);\r\n }\r\n }\r\n return details || {\r\n src: \"\",\r\n obj: null\r\n };\r\n}\r\nfunction _formatStackTrace(stackDetails) {\r\n var stack = \"\";\r\n if (stackDetails) {\r\n if (stackDetails.obj) {\r\n arrForEach(stackDetails.obj, function (entry) {\r\n stack += entry + \"\\n\";\r\n });\r\n }\r\n else {\r\n stack = stackDetails.src || \"\";\r\n }\r\n }\r\n return stack;\r\n}\r\nfunction _parseStack(stack) {\r\n var parsedStack;\r\n var frames = stack.obj;\r\n if (frames && frames[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n parsedStack = [];\r\n var level_1 = 0;\r\n var totalSizeInBytes_1 = 0;\r\n arrForEach(frames, function (frame) {\r\n var theFrame = frame[_DYN_TO_STRING /* @min:%2etoString */]();\r\n if (_StackFrame.regex.test(theFrame)) {\r\n var parsedFrame = new _StackFrame(theFrame, level_1++);\r\n totalSizeInBytes_1 += parsedFrame[_DYN_SIZE_IN_BYTES /* @min:%2esizeInBytes */];\r\n parsedStack.push(parsedFrame);\r\n }\r\n });\r\n // DP Constraint - exception parsed stack must be < 32KB\r\n // remove frames from the middle to meet the threshold\r\n var exceptionParsedStackThreshold = 32 * 1024;\r\n if (totalSizeInBytes_1 > exceptionParsedStackThreshold) {\r\n var left = 0;\r\n var right = parsedStack[_DYN_LENGTH /* @min:%2elength */] - 1;\r\n var size = 0;\r\n var acceptedLeft = left;\r\n var acceptedRight = right;\r\n while (left < right) {\r\n // check size\r\n var lSize = parsedStack[left][_DYN_SIZE_IN_BYTES /* @min:%2esizeInBytes */];\r\n var rSize = parsedStack[right][_DYN_SIZE_IN_BYTES /* @min:%2esizeInBytes */];\r\n size += lSize + rSize;\r\n if (size > exceptionParsedStackThreshold) {\r\n // remove extra frames from the middle\r\n var howMany = acceptedRight - acceptedLeft + 1;\r\n parsedStack.splice(acceptedLeft, howMany);\r\n break;\r\n }\r\n // update pointers\r\n acceptedLeft = left;\r\n acceptedRight = right;\r\n left++;\r\n right--;\r\n }\r\n }\r\n }\r\n return parsedStack;\r\n}\r\nfunction _getErrorType(errorType) {\r\n // Gets the Error Type by passing the constructor (used to get the true type of native error object).\r\n var typeName = \"\";\r\n if (errorType) {\r\n typeName = errorType.typeName || errorType[_DYN_NAME /* @min:%2ename */] || \"\";\r\n if (!typeName) {\r\n try {\r\n var funcNameRegex = /function (.{1,200})\\(/;\r\n var results = (funcNameRegex).exec((errorType).constructor[_DYN_TO_STRING /* @min:%2etoString */]());\r\n typeName = (results && results[_DYN_LENGTH /* @min:%2elength */] > 1) ? results[1] : \"\";\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty -- Ignoring any failures as nothing we can do\r\n }\r\n }\r\n }\r\n return typeName;\r\n}\r\n/**\r\n * Formats the provided errorObj for display and reporting, it may be a String, Object, integer or undefined depending on the browser.\r\n * @param errorObj The supplied errorObj\r\n */\r\nexport function _formatErrorCode(errorObj) {\r\n if (errorObj) {\r\n try {\r\n if (!isString(errorObj)) {\r\n var errorType = _getErrorType(errorObj);\r\n var result = _stringify(errorObj, false);\r\n if (!result || result === \"{}\") {\r\n if (errorObj[strError]) {\r\n // Looks like an MS Error Event\r\n errorObj = errorObj[strError];\r\n errorType = _getErrorType(errorObj);\r\n }\r\n result = _stringify(errorObj, true);\r\n }\r\n if (result[_DYN_INDEX_OF /* @min:%2eindexOf */](errorType) !== 0 && errorType !== \"String\") {\r\n return errorType + \":\" + result;\r\n }\r\n return result;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty -- Ignoring any failures as nothing we can do\r\n }\r\n }\r\n // Fallback to just letting the object format itself into a string\r\n return \"\" + (errorObj || \"\");\r\n}\r\nvar Exception = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the ExceptionTelemetry object\r\n */\r\n function Exception(logger, exception, properties, measurements, severityLevel, id) {\r\n this.aiDataContract = {\r\n ver: 1 /* FieldType.Required */,\r\n exceptions: 1 /* FieldType.Required */,\r\n severityLevel: 0 /* FieldType.Default */,\r\n properties: 0 /* FieldType.Default */,\r\n measurements: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self.ver = 2; // TODO: handle the CS\"4.0\" ==> breeze 2 conversion in a better way\r\n if (!_isExceptionInternal(exception)) {\r\n if (!properties) {\r\n properties = {};\r\n }\r\n _self[_DYN_EXCEPTIONS /* @min:%2eexceptions */] = [new _ExceptionDetails(logger, exception, properties)];\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = dataSanitizeProperties(logger, properties);\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = dataSanitizeMeasurements(logger, measurements);\r\n if (severityLevel) {\r\n _self[_DYN_SEVERITY_LEVEL /* @min:%2eseverityLevel */] = severityLevel;\r\n }\r\n if (id) {\r\n _self.id = id;\r\n }\r\n }\r\n else {\r\n _self[_DYN_EXCEPTIONS /* @min:%2eexceptions */] = exception[_DYN_EXCEPTIONS /* @min:%2eexceptions */] || [];\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = exception[_DYN_PROPERTIES /* @min:%2eproperties */];\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = exception[_DYN_MEASUREMENTS /* @min:%2emeasurements */];\r\n if (exception[_DYN_SEVERITY_LEVEL /* @min:%2eseverityLevel */]) {\r\n _self[_DYN_SEVERITY_LEVEL /* @min:%2eseverityLevel */] = exception[_DYN_SEVERITY_LEVEL /* @min:%2eseverityLevel */];\r\n }\r\n if (exception.id) {\r\n _self.id = exception.id;\r\n }\r\n if (exception[_DYN_PROBLEM_GROUP /* @min:%2eproblemGroup */]) {\r\n _self[_DYN_PROBLEM_GROUP /* @min:%2eproblemGroup */] = exception[_DYN_PROBLEM_GROUP /* @min:%2eproblemGroup */];\r\n }\r\n // bool/int types, use isNullOrUndefined\r\n if (!isNullOrUndefined(exception[_DYN_IS_MANUAL /* @min:%2eisManual */])) {\r\n _self[_DYN_IS_MANUAL /* @min:%2eisManual */] = exception[_DYN_IS_MANUAL /* @min:%2eisManual */];\r\n }\r\n }\r\n }\r\n Exception.CreateAutoException = function (message, url, lineNumber, columnNumber, error, evt, stack, errorSrc) {\r\n var _a;\r\n var errorType = _getErrorType(error || evt || message);\r\n return _a = {},\r\n _a[_DYN_MESSAGE /* @min:message */] = _formatMessage(message, errorType),\r\n _a.url = url,\r\n _a.lineNumber = lineNumber,\r\n _a.columnNumber = columnNumber,\r\n _a.error = _formatErrorCode(error || evt || message),\r\n _a.evt = _formatErrorCode(evt || message),\r\n _a[_DYN_TYPE_NAME /* @min:typeName */] = errorType,\r\n _a.stackDetails = _getStackFromErrorObj(stack || error || evt),\r\n _a.errorSrc = errorSrc,\r\n _a;\r\n };\r\n Exception.CreateFromInterface = function (logger, exception, properties, measurements) {\r\n var exceptions = exception[_DYN_EXCEPTIONS /* @min:%2eexceptions */]\r\n && arrMap(exception[_DYN_EXCEPTIONS /* @min:%2eexceptions */], function (ex) { return _ExceptionDetails[_DYN__CREATE_FROM_INTERFA1 /* @min:%2eCreateFromInterface */](logger, ex); });\r\n var exceptionData = new Exception(logger, __assign(__assign({}, exception), { exceptions: exceptions }), properties, measurements);\r\n return exceptionData;\r\n };\r\n Exception.prototype.toInterface = function () {\r\n var _a;\r\n var _b = this, exceptions = _b.exceptions, properties = _b.properties, measurements = _b.measurements, severityLevel = _b.severityLevel, problemGroup = _b.problemGroup, id = _b.id, isManual = _b.isManual;\r\n var exceptionDetailsInterface = exceptions instanceof Array\r\n && arrMap(exceptions, function (exception) { return exception.toInterface(); })\r\n || undefined;\r\n return _a = {\r\n ver: \"4.0\"\r\n },\r\n _a[_DYN_EXCEPTIONS /* @min:exceptions */] = exceptionDetailsInterface,\r\n _a.severityLevel = severityLevel,\r\n _a.properties = properties,\r\n _a.measurements = measurements,\r\n _a.problemGroup = problemGroup,\r\n _a.id = id,\r\n _a.isManual = isManual,\r\n _a;\r\n };\r\n /**\r\n * Creates a simple exception with 1 stack frame. Useful for manual constracting of exception.\r\n */\r\n Exception.CreateSimpleException = function (message, typeName, assembly, fileName, details, line) {\r\n var _a;\r\n return {\r\n exceptions: [\r\n (_a = {},\r\n _a[_DYN_HAS_FULL_STACK /* @min:hasFullStack */] = true,\r\n _a.message = message,\r\n _a.stack = details,\r\n _a.typeName = typeName,\r\n _a)\r\n ]\r\n };\r\n };\r\n Exception.envelopeType = \"Microsoft.ApplicationInsights.{0}.Exception\";\r\n Exception.dataType = \"ExceptionData\";\r\n Exception.formatError = _formatErrorCode;\r\n return Exception;\r\n}());\r\nexport { Exception };\r\nvar _ExceptionDetails = /** @class */ (function () {\r\n function _ExceptionDetails(logger, exception, properties) {\r\n this.aiDataContract = {\r\n id: 0 /* FieldType.Default */,\r\n outerId: 0 /* FieldType.Default */,\r\n typeName: 1 /* FieldType.Required */,\r\n message: 1 /* FieldType.Required */,\r\n hasFullStack: 0 /* FieldType.Default */,\r\n stack: 0 /* FieldType.Default */,\r\n parsedStack: 2 /* FieldType.Array */\r\n };\r\n var _self = this;\r\n if (!_isExceptionDetailsInternal(exception)) {\r\n var error = exception;\r\n var evt = error && error.evt;\r\n if (!isError(error)) {\r\n error = error[strError] || evt || error;\r\n }\r\n _self[_DYN_TYPE_NAME /* @min:%2etypeName */] = dataSanitizeString(logger, _getErrorType(error)) || strNotSpecified;\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] = dataSanitizeMessage(logger, _formatMessage(exception || error, _self[_DYN_TYPE_NAME /* @min:%2etypeName */])) || strNotSpecified;\r\n var stack = exception[strStackDetails] || _getStackFromErrorObj(exception);\r\n _self[_DYN_PARSED_STACK /* @min:%2eparsedStack */] = _parseStack(stack);\r\n // after parsedStack is inited, iterate over each frame object, sanitize its assembly field\r\n if (isArray(_self[_DYN_PARSED_STACK /* @min:%2eparsedStack */])) {\r\n arrMap(_self[_DYN_PARSED_STACK /* @min:%2eparsedStack */], function (frame) {\r\n frame[_DYN_ASSEMBLY /* @min:%2eassembly */] = dataSanitizeString(logger, frame[_DYN_ASSEMBLY /* @min:%2eassembly */]);\r\n frame[_DYN_FILE_NAME /* @min:%2efileName */] = dataSanitizeString(logger, frame[_DYN_FILE_NAME /* @min:%2efileName */]);\r\n });\r\n }\r\n _self[strStack] = dataSanitizeException(logger, _formatStackTrace(stack));\r\n _self.hasFullStack = isArray(_self.parsedStack) && _self.parsedStack[_DYN_LENGTH /* @min:%2elength */] > 0;\r\n if (properties) {\r\n properties[_DYN_TYPE_NAME /* @min:%2etypeName */] = properties[_DYN_TYPE_NAME /* @min:%2etypeName */] || _self[_DYN_TYPE_NAME /* @min:%2etypeName */];\r\n }\r\n }\r\n else {\r\n _self[_DYN_TYPE_NAME /* @min:%2etypeName */] = exception[_DYN_TYPE_NAME /* @min:%2etypeName */];\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] = exception[_DYN_MESSAGE /* @min:%2emessage */];\r\n _self[strStack] = exception[strStack];\r\n _self[_DYN_PARSED_STACK /* @min:%2eparsedStack */] = exception[_DYN_PARSED_STACK /* @min:%2eparsedStack */] || [];\r\n _self[_DYN_HAS_FULL_STACK /* @min:%2ehasFullStack */] = exception[_DYN_HAS_FULL_STACK /* @min:%2ehasFullStack */];\r\n }\r\n }\r\n _ExceptionDetails.prototype.toInterface = function () {\r\n var _a;\r\n var _self = this;\r\n var parsedStack = _self[_DYN_PARSED_STACK /* @min:%2eparsedStack */] instanceof Array\r\n && arrMap(_self[_DYN_PARSED_STACK /* @min:%2eparsedStack */], function (frame) { return frame.toInterface(); });\r\n var exceptionDetailsInterface = (_a = {\r\n id: _self.id,\r\n outerId: _self.outerId,\r\n typeName: _self[_DYN_TYPE_NAME /* @min:%2etypeName */],\r\n message: _self[_DYN_MESSAGE /* @min:%2emessage */],\r\n hasFullStack: _self[_DYN_HAS_FULL_STACK /* @min:%2ehasFullStack */],\r\n stack: _self[strStack]\r\n },\r\n _a[_DYN_PARSED_STACK /* @min:parsedStack */] = parsedStack || undefined,\r\n _a);\r\n return exceptionDetailsInterface;\r\n };\r\n _ExceptionDetails.CreateFromInterface = function (logger, exception) {\r\n var parsedStack = (exception[_DYN_PARSED_STACK /* @min:%2eparsedStack */] instanceof Array\r\n && arrMap(exception[_DYN_PARSED_STACK /* @min:%2eparsedStack */], function (frame) { return _StackFrame[_DYN__CREATE_FROM_INTERFA1 /* @min:%2eCreateFromInterface */](frame); }))\r\n || exception[_DYN_PARSED_STACK /* @min:%2eparsedStack */];\r\n var exceptionDetails = new _ExceptionDetails(logger, __assign(__assign({}, exception), { parsedStack: parsedStack }));\r\n return exceptionDetails;\r\n };\r\n return _ExceptionDetails;\r\n}());\r\nexport { _ExceptionDetails };\r\nvar _StackFrame = /** @class */ (function () {\r\n function _StackFrame(sourceFrame, level) {\r\n this.aiDataContract = {\r\n level: 1 /* FieldType.Required */,\r\n method: 1 /* FieldType.Required */,\r\n assembly: 0 /* FieldType.Default */,\r\n fileName: 0 /* FieldType.Default */,\r\n line: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self[_DYN_SIZE_IN_BYTES /* @min:%2esizeInBytes */] = 0;\r\n // Not converting this to isString() as typescript uses this logic to \"understand\" the different\r\n // types for the 2 different code paths\r\n if (typeof sourceFrame === \"string\") {\r\n var frame = sourceFrame;\r\n _self[_DYN_LEVEL /* @min:%2elevel */] = level;\r\n _self[_DYN_METHOD /* @min:%2emethod */] = NoMethod;\r\n _self[_DYN_ASSEMBLY /* @min:%2eassembly */] = strTrim(frame);\r\n _self[_DYN_FILE_NAME /* @min:%2efileName */] = \"\";\r\n _self[_DYN_LINE /* @min:%2eline */] = 0;\r\n var matches = frame.match(_StackFrame.regex);\r\n if (matches && matches[_DYN_LENGTH /* @min:%2elength */] >= 5) {\r\n _self[_DYN_METHOD /* @min:%2emethod */] = strTrim(matches[2]) || _self[_DYN_METHOD /* @min:%2emethod */];\r\n _self[_DYN_FILE_NAME /* @min:%2efileName */] = strTrim(matches[4]);\r\n _self[_DYN_LINE /* @min:%2eline */] = parseInt(matches[5]) || 0;\r\n }\r\n }\r\n else {\r\n _self[_DYN_LEVEL /* @min:%2elevel */] = sourceFrame[_DYN_LEVEL /* @min:%2elevel */];\r\n _self[_DYN_METHOD /* @min:%2emethod */] = sourceFrame[_DYN_METHOD /* @min:%2emethod */];\r\n _self[_DYN_ASSEMBLY /* @min:%2eassembly */] = sourceFrame[_DYN_ASSEMBLY /* @min:%2eassembly */];\r\n _self[_DYN_FILE_NAME /* @min:%2efileName */] = sourceFrame[_DYN_FILE_NAME /* @min:%2efileName */];\r\n _self[_DYN_LINE /* @min:%2eline */] = sourceFrame[_DYN_LINE /* @min:%2eline */];\r\n _self[_DYN_SIZE_IN_BYTES /* @min:%2esizeInBytes */] = 0;\r\n }\r\n _self.sizeInBytes += _self.method[_DYN_LENGTH /* @min:%2elength */];\r\n _self.sizeInBytes += _self.fileName[_DYN_LENGTH /* @min:%2elength */];\r\n _self.sizeInBytes += _self.assembly[_DYN_LENGTH /* @min:%2elength */];\r\n // todo: these might need to be removed depending on how the back-end settles on their size calculation\r\n _self[_DYN_SIZE_IN_BYTES /* @min:%2esizeInBytes */] += _StackFrame.baseSize;\r\n _self.sizeInBytes += _self.level.toString()[_DYN_LENGTH /* @min:%2elength */];\r\n _self.sizeInBytes += _self.line.toString()[_DYN_LENGTH /* @min:%2elength */];\r\n }\r\n _StackFrame.CreateFromInterface = function (frame) {\r\n return new _StackFrame(frame, null /* level is available in frame interface */);\r\n };\r\n _StackFrame.prototype.toInterface = function () {\r\n var _self = this;\r\n return {\r\n level: _self[_DYN_LEVEL /* @min:%2elevel */],\r\n method: _self[_DYN_METHOD /* @min:%2emethod */],\r\n assembly: _self[_DYN_ASSEMBLY /* @min:%2eassembly */],\r\n fileName: _self[_DYN_FILE_NAME /* @min:%2efileName */],\r\n line: _self[_DYN_LINE /* @min:%2eline */]\r\n };\r\n };\r\n // regex to match stack frames from ie/chrome/ff\r\n // methodName=$2, fileName=$4, lineNo=$5, column=$6\r\n _StackFrame.regex = /^([\\s]+at)?[\\s]{0,50}([^\\@\\()]+?)[\\s]{0,50}(\\@|\\()([^\\(\\n]+):([0-9]+):([0-9]+)(\\)?)$/;\r\n _StackFrame.baseSize = 58; // '{\"method\":\"\",\"level\":,\"assembly\":\"\",\"fileName\":\"\",\"line\":}'.length\r\n return _StackFrame;\r\n}());\r\nexport { _StackFrame };\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport { _DYN_COOKIE_CFG, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_LOGGER, _DYN_SET_ENABLED, _DYN_SPLIT, _DYN_SUBSTRING, _DYN_USER_AGENT } from \"../__DynamicConstants\";\r\nimport { _throwInternal } from \"./DiagnosticLogger\";\r\nimport { dumpObj, getDocument, getLocation, getNavigator, isIE } from \"./EnvUtils\";\r\nimport { arrForEach, dateNow, getExceptionName, isArray, isFunction, isNotNullOrUndefined, isNullOrUndefined, isString, isTruthy, isUndefined, objForEachKey, setValue, strContains, strEndsWith, strTrim } from \"./HelperFuncs\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\nvar strToGMTString = \"toGMTString\";\r\nvar strToUTCString = \"toUTCString\";\r\nvar strCookie = \"cookie\";\r\nvar strExpires = \"expires\";\r\nvar strEnabled = \"enabled\";\r\nvar strIsCookieUseDisabled = \"isCookieUseDisabled\";\r\nvar strDisableCookiesUsage = \"disableCookiesUsage\";\r\nvar strConfigCookieMgr = \"_ckMgr\";\r\nvar _supportsCookies = null;\r\nvar _allowUaSameSite = null;\r\nvar _parsedCookieValue = null;\r\nvar _doc = getDocument();\r\nvar _cookieCache = {};\r\nvar _globalCookieConfig = {};\r\n/**\r\n * @ignore\r\n * DO NOT USE or export from the module, this is exposed as public to support backward compatibility of previous static utility methods only.\r\n * If you want to manager cookies either use the ICookieMgr available from the core instance via getCookieMgr() or create\r\n * your own instance of the CookieMgr and use that.\r\n * Using this directly for enabling / disabling cookie handling will not only affect your usage but EVERY user of cookies.\r\n * Example, if you are using a shared component that is also using Application Insights you will affect their cookie handling.\r\n * @param logger - The DiagnosticLogger to use for reporting errors.\r\n */\r\nexport function _gblCookieMgr(config, logger) {\r\n // Stash the global instance against the BaseCookieMgr class\r\n var inst = createCookieMgr[strConfigCookieMgr] || _globalCookieConfig[strConfigCookieMgr];\r\n if (!inst) {\r\n // Note: not using the getSetValue() helper as that would require always creating a temporary cookieMgr\r\n // that ultimately is never used\r\n inst = createCookieMgr[strConfigCookieMgr] = createCookieMgr(config, logger);\r\n _globalCookieConfig[strConfigCookieMgr] = inst;\r\n }\r\n return inst;\r\n}\r\nfunction _isMgrEnabled(cookieMgr) {\r\n if (cookieMgr) {\r\n return cookieMgr.isEnabled();\r\n }\r\n return true;\r\n}\r\nfunction _createCookieMgrConfig(rootConfig) {\r\n var cookieMgrCfg = rootConfig[_DYN_COOKIE_CFG /* @min:%2ecookieCfg */] = rootConfig[_DYN_COOKIE_CFG /* @min:%2ecookieCfg */] || {};\r\n // Sets the values from the root config if not already present on the cookieMgrCfg\r\n setValue(cookieMgrCfg, \"domain\", rootConfig.cookieDomain, isNotNullOrUndefined, isNullOrUndefined);\r\n setValue(cookieMgrCfg, \"path\", rootConfig.cookiePath || \"/\", null, isNullOrUndefined);\r\n if (isNullOrUndefined(cookieMgrCfg[strEnabled])) {\r\n // Set the enabled from the provided setting or the legacy root values\r\n var cookieEnabled = void 0;\r\n if (!isUndefined(rootConfig[strIsCookieUseDisabled])) {\r\n cookieEnabled = !rootConfig[strIsCookieUseDisabled];\r\n }\r\n if (!isUndefined(rootConfig[strDisableCookiesUsage])) {\r\n cookieEnabled = !rootConfig[strDisableCookiesUsage];\r\n }\r\n cookieMgrCfg[strEnabled] = cookieEnabled;\r\n }\r\n return cookieMgrCfg;\r\n}\r\nfunction _isIgnoredCookie(cookieMgrCfg, name) {\r\n if (name && cookieMgrCfg && isArray(cookieMgrCfg.ignoreCookies)) {\r\n return cookieMgrCfg.ignoreCookies[_DYN_INDEX_OF /* @min:%2eindexOf */](name) !== -1;\r\n }\r\n return false;\r\n}\r\nfunction _isBlockedCookie(cookieMgrCfg, name) {\r\n if (name && cookieMgrCfg && isArray(cookieMgrCfg.blockedCookies)) {\r\n if (cookieMgrCfg.blockedCookies[_DYN_INDEX_OF /* @min:%2eindexOf */](name) !== -1) {\r\n return true;\r\n }\r\n }\r\n return _isIgnoredCookie(cookieMgrCfg, name);\r\n}\r\n/**\r\n * Helper to return the ICookieMgr from the core (if not null/undefined) or a default implementation\r\n * associated with the configuration or a legacy default.\r\n * @param core\r\n * @param config\r\n * @returns\r\n */\r\nexport function safeGetCookieMgr(core, config) {\r\n var cookieMgr;\r\n if (core) {\r\n // Always returns an instance\r\n cookieMgr = core.getCookieMgr();\r\n }\r\n else if (config) {\r\n var cookieCfg = config[_DYN_COOKIE_CFG /* @min:%2ecookieCfg */];\r\n if (cookieCfg[strConfigCookieMgr]) {\r\n cookieMgr = cookieCfg[strConfigCookieMgr];\r\n }\r\n else {\r\n cookieMgr = createCookieMgr(config);\r\n }\r\n }\r\n if (!cookieMgr) {\r\n // Get or initialize the default global (legacy) cookie manager if we couldn't find one\r\n cookieMgr = _gblCookieMgr(config, (core || {})[_DYN_LOGGER /* @min:%2elogger */]);\r\n }\r\n return cookieMgr;\r\n}\r\nexport function createCookieMgr(rootConfig, logger) {\r\n var _a;\r\n var cookieMgrConfig = _createCookieMgrConfig(rootConfig || _globalCookieConfig);\r\n var _path = cookieMgrConfig.path || \"/\";\r\n var _domain = cookieMgrConfig.domain;\r\n // Explicitly checking against false, so that setting to undefined will === true\r\n var _enabled = cookieMgrConfig[strEnabled] !== false;\r\n var cookieMgr = (_a = {\r\n isEnabled: function () {\r\n var enabled = _enabled && areCookiesSupported(logger);\r\n // Using an indirect lookup for any global cookie manager to support tree shaking for SDK's\r\n // that don't use the \"applicationinsights-core\" version of the default cookie function\r\n var gblManager = _globalCookieConfig[strConfigCookieMgr];\r\n if (enabled && gblManager && cookieMgr !== gblManager) {\r\n // Make sure the GlobalCookie Manager instance (if not this instance) is also enabled.\r\n // As the global (deprecated) functions may have been called (for backward compatibility)\r\n enabled = _isMgrEnabled(gblManager);\r\n }\r\n return enabled;\r\n }\r\n },\r\n _a[_DYN_SET_ENABLED /* @min:setEnabled */] = function (value) {\r\n // Explicitly checking against false, so that setting to undefined will === true\r\n _enabled = value !== false;\r\n },\r\n _a.set = function (name, value, maxAgeSec, domain, path) {\r\n var result = false;\r\n if (_isMgrEnabled(cookieMgr) && !_isBlockedCookie(cookieMgrConfig, name)) {\r\n var values = {};\r\n var theValue = strTrim(value || STR_EMPTY);\r\n var idx = theValue[_DYN_INDEX_OF /* @min:%2eindexOf */](\";\");\r\n if (idx !== -1) {\r\n theValue = strTrim(value[_DYN_SUBSTRING /* @min:%2esubstring */](0, idx));\r\n values = _extractParts(value[_DYN_SUBSTRING /* @min:%2esubstring */](idx + 1));\r\n }\r\n // Only update domain if not already present (isUndefined) and the value is truthy (not null, undefined or empty string)\r\n setValue(values, \"domain\", domain || _domain, isTruthy, isUndefined);\r\n if (!isNullOrUndefined(maxAgeSec)) {\r\n var _isIE = isIE();\r\n if (isUndefined(values[strExpires])) {\r\n var nowMs = dateNow();\r\n // Only add expires if not already present\r\n var expireMs = nowMs + (maxAgeSec * 1000);\r\n // Sanity check, if zero or -ve then ignore\r\n if (expireMs > 0) {\r\n var expiry = new Date();\r\n expiry.setTime(expireMs);\r\n setValue(values, strExpires, _formatDate(expiry, !_isIE ? strToUTCString : strToGMTString) || _formatDate(expiry, _isIE ? strToGMTString : strToUTCString) || STR_EMPTY, isTruthy);\r\n }\r\n }\r\n if (!_isIE) {\r\n // Only replace if not already present\r\n setValue(values, \"max-age\", STR_EMPTY + maxAgeSec, null, isUndefined);\r\n }\r\n }\r\n var location_1 = getLocation();\r\n if (location_1 && location_1.protocol === \"https:\") {\r\n setValue(values, \"secure\", null, null, isUndefined);\r\n // Only set same site if not also secure\r\n if (_allowUaSameSite === null) {\r\n _allowUaSameSite = !uaDisallowsSameSiteNone((getNavigator() || {})[_DYN_USER_AGENT /* @min:%2euserAgent */]);\r\n }\r\n if (_allowUaSameSite) {\r\n setValue(values, \"SameSite\", \"None\", null, isUndefined);\r\n }\r\n }\r\n setValue(values, \"path\", path || _path, null, isUndefined);\r\n var setCookieFn = cookieMgrConfig.setCookie || _setCookieValue;\r\n setCookieFn(name, _formatCookieValue(theValue, values));\r\n result = true;\r\n }\r\n return result;\r\n },\r\n _a.get = function (name) {\r\n var value = STR_EMPTY;\r\n if (_isMgrEnabled(cookieMgr) && !_isIgnoredCookie(cookieMgrConfig, name)) {\r\n value = (cookieMgrConfig.getCookie || _getCookieValue)(name);\r\n }\r\n return value;\r\n },\r\n _a.del = function (name, path) {\r\n var result = false;\r\n if (_isMgrEnabled(cookieMgr)) {\r\n // Only remove the cookie if the manager and cookie support has not been disabled\r\n result = cookieMgr.purge(name, path);\r\n }\r\n return result;\r\n },\r\n _a.purge = function (name, path) {\r\n var _a;\r\n var result = false;\r\n if (areCookiesSupported(logger)) {\r\n // Setting the expiration date in the past immediately removes the cookie\r\n var values = (_a = {},\r\n _a[\"path\"] = path ? path : \"/\",\r\n _a[strExpires] = \"Thu, 01 Jan 1970 00:00:01 GMT\",\r\n _a);\r\n if (!isIE()) {\r\n // Set max age to expire now\r\n values[\"max-age\"] = \"0\";\r\n }\r\n var delCookie = cookieMgrConfig.delCookie || _setCookieValue;\r\n delCookie(name, _formatCookieValue(STR_EMPTY, values));\r\n result = true;\r\n }\r\n return result;\r\n },\r\n _a);\r\n // Associated this cookie manager with the config\r\n cookieMgr[strConfigCookieMgr] = cookieMgr;\r\n return cookieMgr;\r\n}\r\n/*\r\n* Helper method to tell if document.cookie object is supported by the runtime\r\n*/\r\nexport function areCookiesSupported(logger) {\r\n if (_supportsCookies === null) {\r\n _supportsCookies = false;\r\n try {\r\n var doc = _doc || {};\r\n _supportsCookies = doc[strCookie] !== undefined;\r\n }\r\n catch (e) {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 68 /* _eInternalMessageId.CannotAccessCookie */, \"Cannot access document.cookie - \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return _supportsCookies;\r\n}\r\nfunction _extractParts(theValue) {\r\n var values = {};\r\n if (theValue && theValue[_DYN_LENGTH /* @min:%2elength */]) {\r\n var parts = strTrim(theValue)[_DYN_SPLIT /* @min:%2esplit */](\";\");\r\n arrForEach(parts, function (thePart) {\r\n thePart = strTrim(thePart || STR_EMPTY);\r\n if (thePart) {\r\n var idx = thePart[_DYN_INDEX_OF /* @min:%2eindexOf */](\"=\");\r\n if (idx === -1) {\r\n values[thePart] = null;\r\n }\r\n else {\r\n values[strTrim(thePart[_DYN_SUBSTRING /* @min:%2esubstring */](0, idx))] = strTrim(thePart[_DYN_SUBSTRING /* @min:%2esubstring */](idx + 1));\r\n }\r\n }\r\n });\r\n }\r\n return values;\r\n}\r\nfunction _formatDate(theDate, func) {\r\n if (isFunction(theDate[func])) {\r\n return theDate[func]();\r\n }\r\n return null;\r\n}\r\nfunction _formatCookieValue(value, values) {\r\n var cookieValue = value || STR_EMPTY;\r\n objForEachKey(values, function (name, theValue) {\r\n cookieValue += \"; \" + name + (!isNullOrUndefined(theValue) ? \"=\" + theValue : STR_EMPTY);\r\n });\r\n return cookieValue;\r\n}\r\nfunction _getCookieValue(name) {\r\n var cookieValue = STR_EMPTY;\r\n if (_doc) {\r\n var theCookie = _doc[strCookie] || STR_EMPTY;\r\n if (_parsedCookieValue !== theCookie) {\r\n _cookieCache = _extractParts(theCookie);\r\n _parsedCookieValue = theCookie;\r\n }\r\n cookieValue = strTrim(_cookieCache[name] || STR_EMPTY);\r\n }\r\n return cookieValue;\r\n}\r\nfunction _setCookieValue(name, cookieValue) {\r\n if (_doc) {\r\n _doc[strCookie] = name + \"=\" + cookieValue;\r\n }\r\n}\r\nexport function uaDisallowsSameSiteNone(userAgent) {\r\n if (!isString(userAgent)) {\r\n return false;\r\n }\r\n // Cover all iOS based browsers here. This includes:\r\n // - Safari on iOS 12 for iPhone, iPod Touch, iPad\r\n // - WkWebview on iOS 12 for iPhone, iPod Touch, iPad\r\n // - Chrome on iOS 12 for iPhone, iPod Touch, iPad\r\n // All of which are broken by SameSite=None, because they use the iOS networking stack\r\n if (strContains(userAgent, \"CPU iPhone OS 12\") || strContains(userAgent, \"iPad; CPU OS 12\")) {\r\n return true;\r\n }\r\n // Cover Mac OS X based browsers that use the Mac OS networking stack. This includes:\r\n // - Safari on Mac OS X\r\n // This does not include:\r\n // - Internal browser on Mac OS X\r\n // - Chrome on Mac OS X\r\n // - Chromium on Mac OS X\r\n // Because they do not use the Mac OS networking stack.\r\n if (strContains(userAgent, \"Macintosh; Intel Mac OS X 10_14\") && strContains(userAgent, \"Version/\") && strContains(userAgent, \"Safari\")) {\r\n return true;\r\n }\r\n // Cover Mac OS X internal browsers that use the Mac OS networking stack. This includes:\r\n // - Internal browser on Mac OS X\r\n // This does not include:\r\n // - Safari on Mac OS X\r\n // - Chrome on Mac OS X\r\n // - Chromium on Mac OS X\r\n // Because they do not use the Mac OS networking stack.\r\n if (strContains(userAgent, \"Macintosh; Intel Mac OS X 10_14\") && strEndsWith(userAgent, \"AppleWebKit/605.1.15 (KHTML, like Gecko)\")) {\r\n return true;\r\n }\r\n // Cover Chrome 50-69, because some versions are broken by SameSite=None, and none in this range require it.\r\n // Note: this covers some pre-Chromium Edge versions, but pre-Chromim Edge does not require SameSite=None, so this is fine.\r\n // Note: this regex applies to Windows, Mac OS X, and Linux, deliberately.\r\n if (strContains(userAgent, \"Chrome/5\") || strContains(userAgent, \"Chrome/6\")) {\r\n return true;\r\n }\r\n // Unreal Engine runs Chromium 59, but does not advertise as Chrome until 4.23. Treat versions of Unreal\r\n // that don't specify their Chrome version as lacking support for SameSite=None.\r\n if (strContains(userAgent, \"UnrealEngine\") && !strContains(userAgent, \"Chrome\")) {\r\n return true;\r\n }\r\n // UCBrowser < 12.13.2 ignores Set-Cookie headers with SameSite=None\r\n // NB: this rule isn't complete - you need regex to make a complete rule.\r\n // See: https://www.chromium.org/updates/same-site/incompatible-clients\r\n if (strContains(userAgent, \"UCBrowser/12\") || strContains(userAgent, \"UCBrowser/11\")) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { _DYN_LENGTH } from \"../__DynamicConstants\";\r\nimport { getCrypto, getMsCrypto, isIE } from \"./EnvUtils\";\r\nimport { dateNow } from \"./HelperFuncs\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\nvar UInt32Mask = 0x100000000;\r\nvar MaxUInt32 = 0xffffffff;\r\n// MWC based Random generator (for IE)\r\nvar _mwcSeeded = false;\r\nvar _mwcW = 123456789;\r\nvar _mwcZ = 987654321;\r\n// Takes any integer\r\nfunction _mwcSeed(seedValue) {\r\n if (seedValue < 0) {\r\n // Make sure we end up with a positive number and not -ve one.\r\n seedValue >>>= 0;\r\n }\r\n _mwcW = (123456789 + seedValue) & MaxUInt32;\r\n _mwcZ = (987654321 - seedValue) & MaxUInt32;\r\n _mwcSeeded = true;\r\n}\r\nfunction _autoSeedMwc() {\r\n // Simple initialization using default Math.random() - So we inherit any entropy from the browser\r\n // and bitwise XOR with the current milliseconds\r\n try {\r\n var now = dateNow() & 0x7fffffff;\r\n _mwcSeed(((Math.random() * UInt32Mask) ^ now) + now);\r\n }\r\n catch (e) {\r\n // Don't crash if something goes wrong\r\n }\r\n}\r\n/**\r\n * Generate a random value between 0 and maxValue, max value should be limited to a 32-bit maximum.\r\n * So maxValue(16) will produce a number from 0..16 (range of 17)\r\n * @param maxValue\r\n */\r\nexport function randomValue(maxValue) {\r\n if (maxValue > 0) {\r\n return Math.floor((random32() / MaxUInt32) * (maxValue + 1)) >>> 0;\r\n }\r\n return 0;\r\n}\r\n/**\r\n * generate a random 32-bit number (0x000000..0xFFFFFFFF) or (-0x80000000..0x7FFFFFFF), defaults un-unsigned.\r\n * @param signed - True to return a signed 32-bit number (-0x80000000..0x7FFFFFFF) otherwise an unsigned one (0x000000..0xFFFFFFFF)\r\n */\r\nexport function random32(signed) {\r\n var value = 0;\r\n var c = getCrypto() || getMsCrypto();\r\n if (c && c.getRandomValues) {\r\n // Make sure the number is converted into the specified range (-0x80000000..0x7FFFFFFF)\r\n value = c.getRandomValues(new Uint32Array(1))[0] & MaxUInt32;\r\n }\r\n if (value === 0 && isIE()) {\r\n // For IE 6, 7, 8 (especially on XP) Math.random is not very random\r\n if (!_mwcSeeded) {\r\n // Set the seed for the Mwc algorithm\r\n _autoSeedMwc();\r\n }\r\n // Don't use Math.random for IE\r\n // Make sure the number is converted into the specified range (-0x80000000..0x7FFFFFFF)\r\n value = mwcRandom32() & MaxUInt32;\r\n }\r\n if (value === 0) {\r\n // Make sure the number is converted into the specified range (-0x80000000..0x7FFFFFFF)\r\n value = Math.floor((UInt32Mask * Math.random()) | 0);\r\n }\r\n if (!signed) {\r\n // Make sure we end up with a positive number and not -ve one.\r\n value >>>= 0;\r\n }\r\n return value;\r\n}\r\n/**\r\n * Seed the MWC random number generator with the specified seed or a random value\r\n * @param value - optional the number to used as the seed, if undefined, null or zero a random value will be chosen\r\n */\r\nexport function mwcRandomSeed(value) {\r\n if (!value) {\r\n _autoSeedMwc();\r\n }\r\n else {\r\n _mwcSeed(value);\r\n }\r\n}\r\n/**\r\n * Generate a random 32-bit number between (0x000000..0xFFFFFFFF) or (-0x80000000..0x7FFFFFFF), using MWC (Multiply with carry)\r\n * instead of Math.random() defaults to un-signed.\r\n * Used as a replacement random generator for IE to avoid issues with older IE instances.\r\n * @param signed - True to return a signed 32-bit number (-0x80000000..0x7FFFFFFF) otherwise an unsigned one (0x000000..0xFFFFFFFF)\r\n */\r\nexport function mwcRandom32(signed) {\r\n _mwcZ = (36969 * (_mwcZ & 0xFFFF) + (_mwcZ >> 16)) & MaxUInt32;\r\n _mwcW = (18000 * (_mwcW & 0xFFFF) + (_mwcW >> 16)) & MaxUInt32;\r\n var value = (((_mwcZ << 16) + (_mwcW & 0xFFFF)) >>> 0) & MaxUInt32 | 0;\r\n if (!signed) {\r\n // Make sure we end up with a positive number and not -ve one.\r\n value >>>= 0;\r\n }\r\n return value;\r\n}\r\n/**\r\n * Generate random base64 id string.\r\n * The default length is 22 which is 132-bits so almost the same as a GUID but as base64 (the previous default was 5)\r\n * @param maxLength - Optional value to specify the length of the id to be generated, defaults to 22\r\n */\r\nexport function newId(maxLength) {\r\n if (maxLength === void 0) { maxLength = 22; }\r\n var base64chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n // Start with an initial random number, consuming the value in reverse byte order\r\n var number = random32() >>> 0; // Make sure it's a +ve number\r\n var chars = 0;\r\n var result = STR_EMPTY;\r\n while (result[_DYN_LENGTH /* @min:%2elength */] < maxLength) {\r\n chars++;\r\n result += base64chars.charAt(number & 0x3F);\r\n number >>>= 6; // Zero fill with right shift\r\n if (chars === 5) {\r\n // 5 base64 characters === 30 bits so we don't have enough bits for another base64 char\r\n // So add on another 30 bits and make sure it's +ve\r\n number = (((random32() << 2) & 0xFFFFFFFF) | (number & 0x03)) >>> 0;\r\n chars = 0; // We need to reset the number every 5 chars (30 bits)\r\n }\r\n }\r\n return result;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { ObjDefineProperty } from \"@microsoft/applicationinsights-shims\";\r\nimport { _DYN_NODE_TYPE } from \"../__DynamicConstants\";\r\nimport { normalizeJsName } from \"./HelperFuncs\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\nimport { newId } from \"./RandomHelper\";\r\nvar _objDefineProperty = ObjDefineProperty;\r\nvar version = '2.8.16';\r\nvar instanceName = \".\" + newId(6);\r\nvar _dataUid = 0;\r\nfunction _createAccessor(target, prop, value) {\r\n if (_objDefineProperty) {\r\n try {\r\n _objDefineProperty(target, prop, {\r\n value: value,\r\n enumerable: false,\r\n configurable: true\r\n });\r\n return true;\r\n }\r\n catch (e) {\r\n // IE8 Defines a defineProperty on Object but it's only supported for DOM elements so it will throw\r\n // We will just ignore this here.\r\n }\r\n }\r\n return false;\r\n}\r\n// Accepts only:\r\n// - Node\r\n// - Node.ELEMENT_NODE\r\n// - Node.DOCUMENT_NODE\r\n// - Object\r\n// - Any\r\nfunction _canAcceptData(target) {\r\n return target[_DYN_NODE_TYPE /* @min:%2enodeType */] === 1 || target[_DYN_NODE_TYPE /* @min:%2enodeType */] === 9 || !(+target[_DYN_NODE_TYPE /* @min:%2enodeType */]);\r\n}\r\nfunction _getCache(data, target) {\r\n var theCache = target[data.id];\r\n if (!theCache) {\r\n theCache = {};\r\n try {\r\n if (_canAcceptData(target)) {\r\n if (!_createAccessor(target, data.id, theCache)) {\r\n // Environment doesn't support accessor, so just use direct assignment\r\n target[data.id] = theCache;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Not all environments allow extending all objects, so just ignore the cache in those cases\r\n }\r\n }\r\n return theCache;\r\n}\r\nexport function createUniqueNamespace(name, includeVersion) {\r\n if (includeVersion === void 0) { includeVersion = false; }\r\n return normalizeJsName(name + (_dataUid++) + (includeVersion ? \".\" + version : STR_EMPTY) + instanceName);\r\n}\r\nexport function createElmNodeData(name) {\r\n var data = {\r\n id: createUniqueNamespace(\"_aiData-\" + (name || STR_EMPTY) + \".\" + version),\r\n accept: function (target) {\r\n return _canAcceptData(target);\r\n },\r\n get: function (target, name, defValue, addDefault) {\r\n var theCache = target[data.id];\r\n if (!theCache) {\r\n if (addDefault) {\r\n // Side effect is adds the cache\r\n theCache = _getCache(data, target);\r\n theCache[normalizeJsName(name)] = defValue;\r\n }\r\n return defValue;\r\n }\r\n return theCache[normalizeJsName(name)];\r\n },\r\n kill: function (target, name) {\r\n if (target && target[name]) {\r\n try {\r\n delete target[name];\r\n }\r\n catch (e) {\r\n // Just cleaning up, so if this fails -- ignore\r\n }\r\n }\r\n }\r\n };\r\n return data;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { _DYN_HANDLER, _DYN_LENGTH, _DYN_NAME, _DYN_PUSH, _DYN_REPLACE, _DYN_SPLICE, _DYN_SPLIT, _DYN_TYPE } from \"../__DynamicConstants\";\r\nimport { createElmNodeData, createUniqueNamespace } from \"./DataCacheHelper\";\r\nimport { getDocument, getWindow } from \"./EnvUtils\";\r\nimport { arrForEach, arrIndexOf, isArray, objForEachKey, objKeys } from \"./HelperFuncs\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\n// Added to help with minfication\r\nvar strOnPrefix = \"on\";\r\nvar strAttachEvent = \"attachEvent\";\r\nvar strAddEventHelper = \"addEventListener\";\r\nvar strDetachEvent = \"detachEvent\";\r\nvar strRemoveEventListener = \"removeEventListener\";\r\nvar strEvents = \"events\";\r\nvar strVisibilityChangeEvt = \"visibilitychange\";\r\nvar strPageHide = \"pagehide\";\r\nvar strPageShow = \"pageshow\";\r\nvar strUnload = \"unload\";\r\nvar strBeforeUnload = \"beforeunload\";\r\nvar strPageHideNamespace = createUniqueNamespace(\"aiEvtPageHide\");\r\nvar strPageShowNamespace = createUniqueNamespace(\"aiEvtPageShow\");\r\nvar rRemoveEmptyNs = /\\.[\\.]+/g;\r\nvar rRemoveTrailingEmptyNs = /[\\.]+$/;\r\nvar _guid = 1;\r\nvar elmNodeData = createElmNodeData(\"events\");\r\nvar eventNamespace = /^([^.]*)(?:\\.(.+)|)/;\r\nfunction _normalizeNamespace(name) {\r\n if (name && name[_DYN_REPLACE /* @min:%2ereplace */]) {\r\n return name[_DYN_REPLACE /* @min:%2ereplace */](/^[\\s\\.]+|(?=[\\s\\.])[\\.\\s]+$/g, STR_EMPTY);\r\n }\r\n return name;\r\n}\r\nfunction _getEvtNamespace(eventName, evtNamespace) {\r\n var _a;\r\n if (evtNamespace) {\r\n var theNamespace_1 = STR_EMPTY;\r\n if (isArray(evtNamespace)) {\r\n theNamespace_1 = STR_EMPTY;\r\n arrForEach(evtNamespace, function (name) {\r\n name = _normalizeNamespace(name);\r\n if (name) {\r\n if (name[0] !== \".\") {\r\n name = \".\" + name;\r\n }\r\n theNamespace_1 += name;\r\n }\r\n });\r\n }\r\n else {\r\n theNamespace_1 = _normalizeNamespace(evtNamespace);\r\n }\r\n if (theNamespace_1) {\r\n if (theNamespace_1[0] !== \".\") {\r\n theNamespace_1 = \".\" + theNamespace_1;\r\n }\r\n // We may only have the namespace and not an eventName\r\n eventName = (eventName || STR_EMPTY) + theNamespace_1;\r\n }\r\n }\r\n var parsedEvent = (eventNamespace.exec(eventName || STR_EMPTY) || []);\r\n return _a = {},\r\n _a[_DYN_TYPE /* @min:type */] = parsedEvent[1],\r\n _a.ns = ((parsedEvent[2] || STR_EMPTY).replace(rRemoveEmptyNs, \".\").replace(rRemoveTrailingEmptyNs, STR_EMPTY)[_DYN_SPLIT /* @min:%2esplit */](\".\").sort()).join(\".\"),\r\n _a;\r\n}\r\n/**\r\n * Get all of the registered events on the target object, this is primarily used for testing cleanup but may also be used by\r\n * applications to remove their own events\r\n * @param target - The EventTarget that has registered events\r\n * @param eventName - [Optional] The name of the event to return the registered handlers and full name (with namespaces)\r\n * @param evtNamespace - [Optional] Additional namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace,\r\n * if the eventName also includes a namespace the namespace(s) are merged into a single namespace\r\n */\r\nexport function __getRegisteredEvents(target, eventName, evtNamespace) {\r\n var theEvents = [];\r\n var eventCache = elmNodeData.get(target, strEvents, {}, false);\r\n var evtName = _getEvtNamespace(eventName, evtNamespace);\r\n objForEachKey(eventCache, function (evtType, registeredEvents) {\r\n arrForEach(registeredEvents, function (value) {\r\n var _a;\r\n if (!evtName[_DYN_TYPE /* @min:%2etype */] || evtName[_DYN_TYPE /* @min:%2etype */] === value.evtName[_DYN_TYPE /* @min:%2etype */]) {\r\n if (!evtName.ns || evtName.ns === evtName.ns) {\r\n theEvents[_DYN_PUSH /* @min:%2epush */]((_a = {},\r\n _a[_DYN_NAME /* @min:name */] = value.evtName[_DYN_TYPE /* @min:%2etype */] + (value.evtName.ns ? \".\" + value.evtName.ns : STR_EMPTY),\r\n _a.handler = value[_DYN_HANDLER /* @min:%2ehandler */],\r\n _a));\r\n }\r\n }\r\n });\r\n });\r\n return theEvents;\r\n}\r\n// Exported for internal unit testing only\r\nfunction _getRegisteredEvents(target, evtName, addDefault) {\r\n if (addDefault === void 0) { addDefault = true; }\r\n var aiEvts = elmNodeData.get(target, strEvents, {}, addDefault);\r\n var registeredEvents = aiEvts[evtName];\r\n if (!registeredEvents) {\r\n registeredEvents = aiEvts[evtName] = [];\r\n }\r\n return registeredEvents;\r\n}\r\nfunction _doDetach(obj, evtName, handlerRef, useCapture) {\r\n if (obj && evtName && evtName[_DYN_TYPE /* @min:%2etype */]) {\r\n if (obj[strRemoveEventListener]) {\r\n obj[strRemoveEventListener](evtName[_DYN_TYPE /* @min:%2etype */], handlerRef, useCapture);\r\n }\r\n else if (obj[strDetachEvent]) {\r\n obj[strDetachEvent](strOnPrefix + evtName[_DYN_TYPE /* @min:%2etype */], handlerRef);\r\n }\r\n }\r\n}\r\nfunction _doAttach(obj, evtName, handlerRef, useCapture) {\r\n var result = false;\r\n if (obj && evtName && evtName[_DYN_TYPE /* @min:%2etype */] && handlerRef) {\r\n if (obj[strAddEventHelper]) {\r\n // all browsers except IE before version 9\r\n obj[strAddEventHelper](evtName[_DYN_TYPE /* @min:%2etype */], handlerRef, useCapture);\r\n result = true;\r\n }\r\n else if (obj[strAttachEvent]) {\r\n // IE before version 9\r\n obj[strAttachEvent](strOnPrefix + evtName[_DYN_TYPE /* @min:%2etype */], handlerRef);\r\n result = true;\r\n }\r\n }\r\n return result;\r\n}\r\nfunction _doUnregister(target, events, evtName, unRegFn) {\r\n var idx = events[_DYN_LENGTH /* @min:%2elength */];\r\n while (idx--) {\r\n var theEvent = events[idx];\r\n if (theEvent) {\r\n if (!evtName.ns || evtName.ns === theEvent.evtName.ns) {\r\n if (!unRegFn || unRegFn(theEvent)) {\r\n _doDetach(target, theEvent.evtName, theEvent[_DYN_HANDLER /* @min:%2ehandler */], theEvent.capture);\r\n // Remove the registered event\r\n events[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction _unregisterEvents(target, evtName, unRegFn) {\r\n if (evtName[_DYN_TYPE /* @min:%2etype */]) {\r\n _doUnregister(target, _getRegisteredEvents(target, evtName[_DYN_TYPE /* @min:%2etype */]), evtName, unRegFn);\r\n }\r\n else {\r\n var eventCache = elmNodeData.get(target, strEvents, {});\r\n objForEachKey(eventCache, function (evtType, events) {\r\n _doUnregister(target, events, evtName, unRegFn);\r\n });\r\n // Cleanup\r\n if (objKeys(eventCache)[_DYN_LENGTH /* @min:%2elength */] === 0) {\r\n elmNodeData.kill(target, strEvents);\r\n }\r\n }\r\n}\r\nexport function mergeEvtNamespace(theNamespace, namespaces) {\r\n var newNamespaces;\r\n if (namespaces) {\r\n if (isArray(namespaces)) {\r\n newNamespaces = [theNamespace].concat(namespaces);\r\n }\r\n else {\r\n newNamespaces = [theNamespace, namespaces];\r\n }\r\n // resort the namespaces so they are always in order\r\n newNamespaces = (_getEvtNamespace(\"xx\", newNamespaces).ns)[_DYN_SPLIT /* @min:%2esplit */](\".\");\r\n }\r\n else {\r\n newNamespaces = theNamespace;\r\n }\r\n return newNamespaces;\r\n}\r\n/**\r\n * Binds the specified function to an event, so that the function gets called whenever the event fires on the object\r\n * @param obj Object to add the event too.\r\n * @param eventName String that specifies any of the standard DHTML Events without \"on\" prefix, if may also include an optional (dot \".\" prefixed)\r\n * namespaces \"click\" \"click.mynamespace\" in addition to specific namespaces.\r\n * @param handlerRef Pointer that specifies the function to call when event fires\r\n * @param evtNamespace - [Optional] Additional namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace,\r\n * if the eventName also includes a namespace the namespace(s) are merged into a single namespace\r\n * @param useCapture [Optional] Defaults to false\r\n * @returns True if the function was bound successfully to the event, otherwise false\r\n */\r\nexport function eventOn(target, eventName, handlerRef, evtNamespace, useCapture) {\r\n var _a;\r\n if (useCapture === void 0) { useCapture = false; }\r\n var result = false;\r\n if (target) {\r\n try {\r\n var evtName = _getEvtNamespace(eventName, evtNamespace);\r\n result = _doAttach(target, evtName, handlerRef, useCapture);\r\n if (result && elmNodeData.accept(target)) {\r\n var registeredEvent = (_a = {\r\n guid: _guid++,\r\n evtName: evtName\r\n },\r\n _a[_DYN_HANDLER /* @min:handler */] = handlerRef,\r\n _a.capture = useCapture,\r\n _a);\r\n _getRegisteredEvents(target, evtName.type)[_DYN_PUSH /* @min:%2epush */](registeredEvent);\r\n }\r\n }\r\n catch (e) {\r\n // Just Ignore any error so that we don't break any execution path\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Removes an event handler for the specified event\r\n * @param Object to remove the event from\r\n * @param eventName {string} - The name of the event, with optional namespaces or just the namespaces,\r\n * such as \"click\", \"click.mynamespace\" or \".mynamespace\"\r\n * @param handlerRef {any} - The callback function that needs to be removed from the given event, when using a\r\n * namespace (with or without a qualifying event) this may be null to remove all previously attached event handlers\r\n * otherwise this will only remove events with this specific handler.\r\n * @param evtNamespace - [Optional] Additional namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace,\r\n * if the eventName also includes a namespace the namespace(s) are merged into a single namespace\r\n * @param useCapture [Optional] Defaults to false\r\n */\r\nexport function eventOff(target, eventName, handlerRef, evtNamespace, useCapture) {\r\n if (useCapture === void 0) { useCapture = false; }\r\n if (target) {\r\n try {\r\n var evtName_1 = _getEvtNamespace(eventName, evtNamespace);\r\n var found_1 = false;\r\n _unregisterEvents(target, evtName_1, function (regEvent) {\r\n if ((evtName_1.ns && !handlerRef) || regEvent[_DYN_HANDLER /* @min:%2ehandler */] === handlerRef) {\r\n found_1 = true;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!found_1) {\r\n // fallback to try and remove as requested\r\n _doDetach(target, evtName_1, handlerRef, useCapture);\r\n }\r\n }\r\n catch (e) {\r\n // Just Ignore any error so that we don't break any execution path\r\n }\r\n }\r\n}\r\n/**\r\n * Binds the specified function to an event, so that the function gets called whenever the event fires on the object\r\n * @param obj Object to add the event too.\r\n * @param eventNameWithoutOn String that specifies any of the standard DHTML Events without \"on\" prefix and optional (dot \".\" prefixed) namespaces \"click\" \"click.mynamespace\".\r\n * @param handlerRef Pointer that specifies the function to call when event fires\r\n * @param useCapture [Optional] Defaults to false\r\n * @returns True if the function was bound successfully to the event, otherwise false\r\n */\r\nexport function attachEvent(obj, eventNameWithoutOn, handlerRef, useCapture) {\r\n if (useCapture === void 0) { useCapture = false; }\r\n return eventOn(obj, eventNameWithoutOn, handlerRef, null, useCapture);\r\n}\r\n/**\r\n * Removes an event handler for the specified event\r\n * @param Object to remove the event from\r\n * @param eventNameWithoutOn {string} - The name of the event, with optional namespaces or just the namespaces,\r\n * such as \"click\", \"click.mynamespace\" or \".mynamespace\"\r\n * @param handlerRef {any} - The callback function that needs to be removed from the given event, when using a\r\n * namespace (with or without a qualifying event) this may be null to remove all previously attached event handlers\r\n * otherwise this will only remove events with this specific handler.\r\n * @param useCapture [Optional] Defaults to false\r\n */\r\nexport function detachEvent(obj, eventNameWithoutOn, handlerRef, useCapture) {\r\n if (useCapture === void 0) { useCapture = false; }\r\n eventOff(obj, eventNameWithoutOn, handlerRef, null, useCapture);\r\n}\r\n/**\r\n * Trys to add an event handler for the specified event to the window, body and document\r\n * @param eventName {string} - The name of the event\r\n * @param callback {any} - The callback function that needs to be executed for the given event\r\n * @param evtNamespace - [Optional] Namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace.\r\n * @return {boolean} - true if the handler was successfully added\r\n */\r\nexport function addEventHandler(eventName, callback, evtNamespace) {\r\n var result = false;\r\n var w = getWindow();\r\n if (w) {\r\n result = eventOn(w, eventName, callback, evtNamespace);\r\n result = eventOn(w[\"body\"], eventName, callback, evtNamespace) || result;\r\n }\r\n var doc = getDocument();\r\n if (doc) {\r\n result = eventOn(doc, eventName, callback, evtNamespace) || result;\r\n }\r\n return result;\r\n}\r\n/**\r\n * Trys to remove event handler(s) for the specified event/namespace to the window, body and document\r\n * @param eventName {string} - The name of the event, with optional namespaces or just the namespaces,\r\n * such as \"click\", \"click.mynamespace\" or \".mynamespace\"\r\n * @param callback {any} - - The callback function that needs to be removed from the given event, when using a\r\n * namespace (with or without a qualifying event) this may be null to remove all previously attached event handlers\r\n * otherwise this will only remove events with this specific handler.\r\n * @param evtNamespace - [Optional] Namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace.\r\n */\r\nexport function removeEventHandler(eventName, callback, evtNamespace) {\r\n var w = getWindow();\r\n if (w) {\r\n eventOff(w, eventName, callback, evtNamespace);\r\n eventOff(w[\"body\"], eventName, callback, evtNamespace);\r\n }\r\n var doc = getDocument();\r\n if (doc) {\r\n eventOff(doc, eventName, callback, evtNamespace);\r\n }\r\n}\r\n/**\r\n * Bind the listener to the array of events\r\n * @param events An string array of event names to bind the listener to\r\n * @param listener The event callback to call when the event is triggered\r\n * @param excludeEvents - [Optional] An array of events that should not be hooked (if possible), unless no other events can be.\r\n * @param evtNamespace - [Optional] Namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace.\r\n * @returns true - when at least one of the events was registered otherwise false\r\n */\r\nfunction _addEventListeners(events, listener, excludeEvents, evtNamespace) {\r\n var added = false;\r\n if (listener && events && events[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n arrForEach(events, function (name) {\r\n if (name) {\r\n if (!excludeEvents || arrIndexOf(excludeEvents, name) === -1) {\r\n added = addEventHandler(name, listener, evtNamespace) || added;\r\n }\r\n }\r\n });\r\n }\r\n return added;\r\n}\r\n/**\r\n * Bind the listener to the array of events\r\n * @param events An string array of event names to bind the listener to\r\n * @param listener The event callback to call when the event is triggered\r\n * @param excludeEvents - [Optional] An array of events that should not be hooked (if possible), unless no other events can be.\r\n * @param evtNamespace - [Optional] Namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace.\r\n * @returns true - when at least one of the events was registered otherwise false\r\n */\r\nexport function addEventListeners(events, listener, excludeEvents, evtNamespace) {\r\n var added = false;\r\n if (listener && events && isArray(events)) {\r\n added = _addEventListeners(events, listener, excludeEvents, evtNamespace);\r\n if (!added && excludeEvents && excludeEvents[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n // Failed to add any listeners and we excluded some, so just attempt to add the excluded events\r\n added = _addEventListeners(events, listener, null, evtNamespace);\r\n }\r\n }\r\n return added;\r\n}\r\n/**\r\n * Remove the listener from the array of events\r\n * @param events An string array of event names to bind the listener to\r\n * @param listener The event callback to call when the event is triggered\r\n * @param evtNamespace - [Optional] Namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace.\r\n */\r\nexport function removeEventListeners(events, listener, evtNamespace) {\r\n if (events && isArray(events)) {\r\n arrForEach(events, function (name) {\r\n if (name) {\r\n removeEventHandler(name, listener, evtNamespace);\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Listen to the 'beforeunload', 'unload' and 'pagehide' events which indicates a page unload is occurring,\r\n * this does NOT listen to the 'visibilitychange' event as while it does indicate that the page is being hidden\r\n * it does not *necessarily* mean that the page is being completely unloaded, it can mean that the user is\r\n * just navigating to a different Tab and may come back (without unloading the page). As such you may also\r\n * need to listen to the 'addPageHideEventListener' and 'addPageShowEventListener' events.\r\n * @param listener - The event callback to call when a page unload event is triggered\r\n * @param excludeEvents - [Optional] An array of events that should not be hooked, unless no other events can be.\r\n * @param evtNamespace - [Optional] Namespace(s) to append to the event listeners so they can be uniquely identified and removed based on this namespace.\r\n * @returns true - when at least one of the events was registered otherwise false\r\n */\r\nexport function addPageUnloadEventListener(listener, excludeEvents, evtNamespace) {\r\n // Hook the unload event for the document, window and body to ensure that the client events are flushed to the server\r\n // As just hooking the window does not always fire (on chrome) for page navigation's.\r\n return addEventListeners([strBeforeUnload, strUnload, strPageHide], listener, excludeEvents, evtNamespace);\r\n}\r\n/**\r\n * Remove any matching 'beforeunload', 'unload' and 'pagehide' events that may have been added via addEventListener,\r\n * addEventListeners, addPageUnloadEventListener or addPageHideEventListener.\r\n * @param listener - The specific event callback to to be removed\r\n * @param evtNamespace - [Optional] Namespace(s) uniquely identified and removed based on this namespace.\r\n * @returns true - when at least one of the events was registered otherwise false\r\n */\r\nexport function removePageUnloadEventListener(listener, evtNamespace) {\r\n removeEventListeners([strBeforeUnload, strUnload, strPageHide], listener, evtNamespace);\r\n}\r\n/**\r\n * Listen to the pagehide and visibility changing to 'hidden' events, because the 'visibilitychange' uses\r\n * an internal proxy to detect the visibility state you SHOULD use a unique namespace when if you plan to call\r\n * removePageShowEventListener as the remove ignores the listener argument for the 'visibilitychange' event.\r\n * @param listener - The event callback to call when a page hide event is triggered\r\n * @param excludeEvents - [Optional] An array of events that should not be hooked (if possible), unless no other events can be.\r\n * @param evtNamespace - [Optional] A Namespace to append to the event listeners so they can be uniquely identified and removed\r\n * based on this namespace. This call also adds an additional unique \"pageshow\" namespace to the events\r\n * so that only the matching \"removePageHideEventListener\" can remove these events.\r\n * Suggestion: pass as true if you are also calling addPageUnloadEventListener as that also hooks pagehide\r\n * @returns true - when at least one of the events was registered otherwise false\r\n */\r\nexport function addPageHideEventListener(listener, excludeEvents, evtNamespace) {\r\n function _handlePageVisibility(evt) {\r\n var doc = getDocument();\r\n if (listener && doc && doc.visibilityState === \"hidden\") {\r\n listener(evt);\r\n }\r\n }\r\n // add the unique page show namespace to any provided namespace so we can only remove the ones added by \"pagehide\"\r\n var newNamespaces = mergeEvtNamespace(strPageHideNamespace, evtNamespace);\r\n var pageUnloadAdded = _addEventListeners([strPageHide], listener, excludeEvents, newNamespaces);\r\n if (!excludeEvents || arrIndexOf(excludeEvents, strVisibilityChangeEvt) === -1) {\r\n pageUnloadAdded = _addEventListeners([strVisibilityChangeEvt], _handlePageVisibility, excludeEvents, newNamespaces) || pageUnloadAdded;\r\n }\r\n if (!pageUnloadAdded && excludeEvents) {\r\n // Failed to add any listeners and we where requested to exclude some, so just call again without excluding anything\r\n pageUnloadAdded = addPageHideEventListener(listener, null, evtNamespace);\r\n }\r\n return pageUnloadAdded;\r\n}\r\n/**\r\n * Removes the pageHide event listeners added by addPageHideEventListener, because the 'visibilitychange' uses\r\n * an internal proxy to detect the visibility state you SHOULD use a unique namespace when calling addPageHideEventListener\r\n * as the remove ignores the listener argument for the 'visibilitychange' event.\r\n * @param listener - The specific listener to remove for the 'pageshow' event only (ignored for 'visibilitychange')\r\n * @param evtNamespace - The unique namespace used when calling addPageShowEventListener\r\n */\r\nexport function removePageHideEventListener(listener, evtNamespace) {\r\n // add the unique page show namespace to any provided namespace so we only remove the ones added by \"pagehide\"\r\n var newNamespaces = mergeEvtNamespace(strPageHideNamespace, evtNamespace);\r\n removeEventListeners([strPageHide], listener, newNamespaces);\r\n removeEventListeners([strVisibilityChangeEvt], null, newNamespaces);\r\n}\r\n/**\r\n * Listen to the pageshow and visibility changing to 'visible' events, because the 'visibilitychange' uses\r\n * an internal proxy to detect the visibility state you SHOULD use a unique namespace when if you plan to call\r\n * removePageShowEventListener as the remove ignores the listener argument for the 'visibilitychange' event.\r\n * @param listener - The event callback to call when a page is show event is triggered\r\n * @param excludeEvents - [Optional] An array of events that should not be hooked (if possible), unless no other events can be.\r\n * @param evtNamespace - [Optional/Recommended] A Namespace to append to the event listeners so they can be uniquely\r\n * identified and removed based on this namespace. This call also adds an additional unique \"pageshow\" namespace to the events\r\n * so that only the matching \"removePageShowEventListener\" can remove these events.\r\n * @returns true - when at least one of the events was registered otherwise false\r\n */\r\nexport function addPageShowEventListener(listener, excludeEvents, evtNamespace) {\r\n function _handlePageVisibility(evt) {\r\n var doc = getDocument();\r\n if (listener && doc && doc.visibilityState === \"visible\") {\r\n listener(evt);\r\n }\r\n }\r\n // add the unique page show namespace to any provided namespace so we can only remove the ones added by \"pageshow\"\r\n var newNamespaces = mergeEvtNamespace(strPageShowNamespace, evtNamespace);\r\n var pageShowAdded = _addEventListeners([strPageShow], listener, excludeEvents, newNamespaces);\r\n pageShowAdded = _addEventListeners([strVisibilityChangeEvt], _handlePageVisibility, excludeEvents, newNamespaces) || pageShowAdded;\r\n if (!pageShowAdded && excludeEvents) {\r\n // Failed to add any listeners and we where requested to exclude some, so just call again without excluding anything\r\n pageShowAdded = addPageShowEventListener(listener, null, evtNamespace);\r\n }\r\n return pageShowAdded;\r\n}\r\n/**\r\n * Removes the pageShow event listeners added by addPageShowEventListener, because the 'visibilitychange' uses\r\n * an internal proxy to detect the visibility state you SHOULD use a unique namespace when calling addPageShowEventListener\r\n * as the remove ignores the listener argument for the 'visibilitychange' event.\r\n * @param listener - The specific listener to remove for the 'pageshow' event only (ignored for 'visibilitychange')\r\n * @param evtNamespace - The unique namespace used when calling addPageShowEventListener\r\n */\r\nexport function removePageShowEventListener(listener, evtNamespace) {\r\n // add the unique page show namespace to any provided namespace so we only remove the ones added by \"pageshow\"\r\n var newNamespaces = mergeEvtNamespace(strPageShowNamespace, evtNamespace);\r\n removeEventListeners([strPageShow], listener, newNamespaces);\r\n removeEventListeners([strVisibilityChangeEvt], null, newNamespaces);\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport { objCreateFn, strShimUndefined } from \"@microsoft/applicationinsights-shims\";\r\nimport { _DYN_LENGTH, _DYN_PUSH, _DYN_SET_ENABLED, _DYN_SUBSTR, _DYN_SUBSTRING } from \"../__DynamicConstants\";\r\nimport { _gblCookieMgr } from \"./CookieMgr\";\r\nimport { getPerformance, isIE } from \"./EnvUtils\";\r\nimport { addEventHandler, attachEvent, detachEvent } from \"./EventHelpers\";\r\nimport { arrForEach, arrIndexOf, arrMap, arrReduce, dateNow, hasOwnProperty, isArray, isBoolean, isDate, isError, isFunction, isNullOrUndefined, isNumber, isObject, isString, isTypeof, isUndefined, objDefineAccessors, objKeys, strTrim, toISOString } from \"./HelperFuncs\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\nimport { mwcRandom32, mwcRandomSeed, newId, random32, randomValue } from \"./RandomHelper\";\r\nvar _cookieMgrs = null;\r\nvar _canUseCookies; // legacy supported config\r\n// Added to help with minfication\r\nexport var Undefined = strShimUndefined;\r\nexport function newGuid() {\r\n var uuid = generateW3CId();\r\n return uuid[_DYN_SUBSTRING /* @min:%2esubstring */](0, 8) + \"-\" + uuid[_DYN_SUBSTRING /* @min:%2esubstring */](8, 12) + \"-\" + uuid[_DYN_SUBSTRING /* @min:%2esubstring */](12, 16) + \"-\" + uuid[_DYN_SUBSTRING /* @min:%2esubstring */](16, 20) + \"-\" + uuid[_DYN_SUBSTRING /* @min:%2esubstring */](20);\r\n}\r\n/**\r\n * Return the current value of the Performance Api now() function (if available) and fallback to dateNow() if it is unavailable (IE9 or less)\r\n * https://caniuse.com/#search=performance.now\r\n */\r\nexport function perfNow() {\r\n var perf = getPerformance();\r\n if (perf && perf.now) {\r\n return perf.now();\r\n }\r\n return dateNow();\r\n}\r\n/**\r\n * The strEndsWith() method determines whether a string ends with the characters of a specified string, returning true or false as appropriate.\r\n * @param value - The value to check whether it ends with the search value.\r\n * @param search - The characters to be searched for at the end of the value.\r\n * @returns true if the given search value is found at the end of the string, otherwise false.\r\n */\r\nexport function strEndsWith(value, search) {\r\n if (value && search) {\r\n var len = value[_DYN_LENGTH /* @min:%2elength */];\r\n var start = len - search[_DYN_LENGTH /* @min:%2elength */];\r\n return value[_DYN_SUBSTRING /* @min:%2esubstring */](start >= 0 ? start : 0, len) === search;\r\n }\r\n return false;\r\n}\r\n/**\r\n * generate W3C trace id\r\n */\r\nexport function generateW3CId() {\r\n var hexValues = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n // rfc4122 version 4 UUID without dashes and with lowercase letters\r\n var oct = STR_EMPTY, tmp;\r\n for (var a = 0; a < 4; a++) {\r\n tmp = random32();\r\n oct +=\r\n hexValues[tmp & 0xF] +\r\n hexValues[tmp >> 4 & 0xF] +\r\n hexValues[tmp >> 8 & 0xF] +\r\n hexValues[tmp >> 12 & 0xF] +\r\n hexValues[tmp >> 16 & 0xF] +\r\n hexValues[tmp >> 20 & 0xF] +\r\n hexValues[tmp >> 24 & 0xF] +\r\n hexValues[tmp >> 28 & 0xF];\r\n }\r\n // \"Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively\"\r\n var clockSequenceHi = hexValues[8 + (random32() & 0x03) | 0];\r\n return oct[_DYN_SUBSTR /* @min:%2esubstr */](0, 8) + oct[_DYN_SUBSTR /* @min:%2esubstr */](9, 4) + \"4\" + oct[_DYN_SUBSTR /* @min:%2esubstr */](13, 3) + clockSequenceHi + oct[_DYN_SUBSTR /* @min:%2esubstr */](16, 3) + oct[_DYN_SUBSTR /* @min:%2esubstr */](19, 12);\r\n}\r\n/**\r\n * Provides a collection of utility functions, included for backward compatibility with previous releases.\r\n * @deprecated Marking this instance as deprecated in favor of direct usage of the helper functions\r\n * as direct usage provides better tree-shaking and minification by avoiding the inclusion of the unused items\r\n * in your resulting code.\r\n */\r\nexport var CoreUtils = {\r\n _canUseCookies: undefined,\r\n isTypeof: isTypeof,\r\n isUndefined: isUndefined,\r\n isNullOrUndefined: isNullOrUndefined,\r\n hasOwnProperty: hasOwnProperty,\r\n isFunction: isFunction,\r\n isObject: isObject,\r\n isDate: isDate,\r\n isArray: isArray,\r\n isError: isError,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isBoolean: isBoolean,\r\n toISOString: toISOString,\r\n arrForEach: arrForEach,\r\n arrIndexOf: arrIndexOf,\r\n arrMap: arrMap,\r\n arrReduce: arrReduce,\r\n strTrim: strTrim,\r\n objCreate: objCreateFn,\r\n objKeys: objKeys,\r\n objDefineAccessors: objDefineAccessors,\r\n addEventHandler: addEventHandler,\r\n dateNow: dateNow,\r\n isIE: isIE,\r\n disableCookies: disableCookies,\r\n newGuid: newGuid,\r\n perfNow: perfNow,\r\n newId: newId,\r\n randomValue: randomValue,\r\n random32: random32,\r\n mwcRandomSeed: mwcRandomSeed,\r\n mwcRandom32: mwcRandom32,\r\n generateW3CId: generateW3CId\r\n};\r\nvar GuidRegex = /[xy]/g;\r\nexport var EventHelper = {\r\n Attach: attachEvent,\r\n AttachEvent: attachEvent,\r\n Detach: detachEvent,\r\n DetachEvent: detachEvent\r\n};\r\n/**\r\n * Helper to support backward compatibility for users that use the legacy cookie handling functions and the use the internal\r\n * CoreUtils._canUseCookies global flag to enable/disable cookies usage.\r\n * Note: This has the following deliberate side-effects\r\n * - Creates the global (legacy) cookie manager if it does not already exist\r\n * - Attempts to add \"listeners\" to the CoreUtils._canUseCookies property to support the legacy usage\r\n * @param config\r\n * @param logger\r\n * @returns\r\n */\r\nexport function _legacyCookieMgr(config, logger) {\r\n var cookieMgr = _gblCookieMgr(config, logger);\r\n var legacyCanUseCookies = CoreUtils._canUseCookies;\r\n if (_cookieMgrs === null) {\r\n _cookieMgrs = [];\r\n _canUseCookies = legacyCanUseCookies;\r\n // Dynamically create get/set property accessors for backward compatibility for enabling / disabling cookies\r\n // this WILL NOT work for ES3 browsers (< IE8)\r\n objDefineAccessors(CoreUtils, \"_canUseCookies\", function () {\r\n return _canUseCookies;\r\n }, function (value) {\r\n _canUseCookies = value;\r\n arrForEach(_cookieMgrs, function (mgr) {\r\n mgr[_DYN_SET_ENABLED /* @min:%2esetEnabled */](value);\r\n });\r\n });\r\n }\r\n if (arrIndexOf(_cookieMgrs, cookieMgr) === -1) {\r\n _cookieMgrs[_DYN_PUSH /* @min:%2epush */](cookieMgr);\r\n }\r\n if (isBoolean(legacyCanUseCookies)) {\r\n cookieMgr[_DYN_SET_ENABLED /* @min:%2esetEnabled */](legacyCanUseCookies);\r\n }\r\n if (isBoolean(_canUseCookies)) {\r\n cookieMgr[_DYN_SET_ENABLED /* @min:%2esetEnabled */](_canUseCookies);\r\n }\r\n return cookieMgr;\r\n}\r\n/**\r\n * @deprecated - Use the core.getCookieMgr().disable()\r\n * Force the SDK not to store and read any data from cookies.\r\n */\r\nexport function disableCookies() {\r\n _legacyCookieMgr()[_DYN_SET_ENABLED /* @min:%2esetEnabled */](false);\r\n}\r\n/**\r\n * @deprecated - Use the core.getCookieMgr().isEnabled()\r\n * Helper method to tell if document.cookie object is available and whether it can be used.\r\n */\r\nexport function canUseCookies(logger) {\r\n return _legacyCookieMgr(null, logger).isEnabled();\r\n}\r\n/**\r\n * @deprecated - Use the core.getCookieMgr().get()\r\n * helper method to access userId and sessionId cookie\r\n */\r\nexport function getCookie(logger, name) {\r\n return _legacyCookieMgr(null, logger).get(name);\r\n}\r\n/**\r\n * @deprecated - Use the core.getCookieMgr().set()\r\n * helper method to set userId and sessionId cookie\r\n */\r\nexport function setCookie(logger, name, value, domain) {\r\n _legacyCookieMgr(null, logger).set(name, value, null, domain);\r\n}\r\n/**\r\n * @deprecated - Use the core.getCookieMgr().del()\r\n * Deletes a cookie by setting it's expiration time in the past.\r\n * @param name - The name of the cookie to delete.\r\n */\r\nexport function deleteCookie(logger, name) {\r\n return _legacyCookieMgr(null, logger).del(name);\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport { _DYN_INDEX_OF, _DYN_LENGTH, _DYN_SPAN_ID, _DYN_SPLIT, _DYN_SUBSTR, _DYN_TO_LOWER_CASE, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_VERSION } from \"../__DynamicConstants\";\r\nimport { generateW3CId } from \"./CoreUtils\";\r\nimport { findMetaTag, findNamedServerTiming } from \"./EnvUtils\";\r\nimport { isArray, isString, strTrim } from \"./HelperFuncs\";\r\nimport { STR_EMPTY } from \"./InternalConstants\";\r\n// using {0,16} for leading and trailing whitespace just to constrain the possible runtime of a random string\r\nvar TRACE_PARENT_REGEX = /^([\\da-f]{2})-([\\da-f]{32})-([\\da-f]{16})-([\\da-f]{2})(-[^\\s]{1,64})?$/i;\r\nvar DEFAULT_VERSION = \"00\";\r\nvar INVALID_VERSION = \"ff\";\r\nvar INVALID_TRACE_ID = \"00000000000000000000000000000000\";\r\nvar INVALID_SPAN_ID = \"0000000000000000\";\r\nvar SAMPLED_FLAG = 0x01;\r\nfunction _isValid(value, len, invalidValue) {\r\n if (value && value[_DYN_LENGTH /* @min:%2elength */] === len && value !== invalidValue) {\r\n return !!value.match(/^[\\da-f]*$/i);\r\n }\r\n return false;\r\n}\r\nfunction _formatValue(value, len, defValue) {\r\n if (_isValid(value, len)) {\r\n return value;\r\n }\r\n return defValue;\r\n}\r\nfunction _formatFlags(value) {\r\n if (isNaN(value) || value < 0 || value > 255) {\r\n value = 0x01;\r\n }\r\n var result = value.toString(16);\r\n while (result[_DYN_LENGTH /* @min:%2elength */] < 2) {\r\n result = \"0\" + result;\r\n }\r\n return result;\r\n}\r\n/**\r\n * Create a new ITraceParent instance using the provided values.\r\n * @param traceId - The traceId to use, when invalid a new random W3C id will be generated.\r\n * @param spanId - The parent/span id to use, a new random value will be generated if it is invalid.\r\n * @param flags - The traceFlags to use, defaults to zero (0) if not supplied or invalid\r\n * @param version - The version to used, defaults to version \"01\" if not supplied or invalid.\r\n * @returns\r\n */\r\nexport function createTraceParent(traceId, spanId, flags, version) {\r\n var _a;\r\n return _a = {},\r\n _a[_DYN_VERSION /* @min:version */] = _isValid(version, 2, INVALID_VERSION) ? version : DEFAULT_VERSION,\r\n _a[_DYN_TRACE_ID /* @min:traceId */] = isValidTraceId(traceId) ? traceId : generateW3CId(),\r\n _a.spanId = isValidSpanId(spanId) ? spanId : generateW3CId()[_DYN_SUBSTR /* @min:%2esubstr */](0, 16),\r\n _a.traceFlags = flags >= 0 && flags <= 0xFF ? flags : 1,\r\n _a;\r\n}\r\n/**\r\n * Attempt to parse the provided string as a W3C TraceParent header value (https://www.w3.org/TR/trace-context/#traceparent-header)\r\n *\r\n * @param value - The value to be parsed\r\n * @param selectIdx - If the found value is comma separated which is the preferred entry to select, defaults to the first\r\n * @returns\r\n */\r\nexport function parseTraceParent(value, selectIdx) {\r\n var _a;\r\n if (!value) {\r\n // Don't pass a null/undefined or empty string\r\n return null;\r\n }\r\n if (isArray(value)) {\r\n // The value may have been encoded on the page into an array so handle this automatically\r\n value = value[0] || \"\";\r\n }\r\n if (!value || !isString(value) || value[_DYN_LENGTH /* @min:%2elength */] > 8192) {\r\n // limit potential processing based on total length\r\n return null;\r\n }\r\n if (value[_DYN_INDEX_OF /* @min:%2eindexOf */](\",\") !== -1) {\r\n var values = value[_DYN_SPLIT /* @min:%2esplit */](\",\");\r\n value = values[selectIdx > 0 && values[_DYN_LENGTH /* @min:%2elength */] > selectIdx ? selectIdx : 0];\r\n }\r\n // See https://www.w3.org/TR/trace-context/#versioning-of-traceparent\r\n var match = TRACE_PARENT_REGEX.exec(strTrim(value));\r\n if (!match || // No match\r\n match[1] === INVALID_VERSION || // version ff is forbidden\r\n match[2] === INVALID_TRACE_ID || // All zeros is considered to be invalid\r\n match[3] === INVALID_SPAN_ID) { // All zeros is considered to be invalid\r\n return null;\r\n }\r\n return _a = {\r\n version: (match[1] || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */](),\r\n traceId: (match[2] || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */](),\r\n spanId: (match[3] || STR_EMPTY)[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]()\r\n },\r\n _a[_DYN_TRACE_FLAGS /* @min:traceFlags */] = parseInt(match[4], 16),\r\n _a;\r\n}\r\n/**\r\n * Is the provided W3c Trace Id a valid string representation, it must be a 32-character string\r\n * of lowercase hexadecimal characters for example, 4bf92f3577b34da6a3ce929d0e0e4736.\r\n * If all characters as zero (00000000000000000000000000000000) it will be considered an invalid value.\r\n * @param value - The W3c trace Id to be validated\r\n * @returns true if valid otherwise false\r\n */\r\nexport function isValidTraceId(value) {\r\n return _isValid(value, 32, INVALID_TRACE_ID);\r\n}\r\n/**\r\n * Is the provided W3c span id (aka. parent id) a valid string representation, it must be a 16-character\r\n * string of lowercase hexadecimal characters, for example, 00f067aa0ba902b7.\r\n * If all characters are zero (0000000000000000) this is considered an invalid value.\r\n * @param value - The W3c span id to be validated\r\n * @returns true if valid otherwise false\r\n */\r\nexport function isValidSpanId(value) {\r\n return _isValid(value, 16, INVALID_SPAN_ID);\r\n}\r\n/**\r\n * Validates that the provided ITraceParent instance conforms to the currently supported specifications\r\n * @param value\r\n * @returns\r\n */\r\nexport function isValidTraceParent(value) {\r\n if (!value ||\r\n !_isValid(value[_DYN_VERSION /* @min:%2eversion */], 2, INVALID_VERSION) ||\r\n !_isValid(value[_DYN_TRACE_ID /* @min:%2etraceId */], 32, INVALID_TRACE_ID) ||\r\n !_isValid(value[_DYN_SPAN_ID /* @min:%2espanId */], 16, INVALID_SPAN_ID) ||\r\n !_isValid(_formatFlags(value[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */]), 2)) {\r\n // Each known field must contain a valid value\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Is the parsed traceParent indicating that the trace is currently sampled.\r\n * @param value - The parsed traceParent value\r\n * @returns\r\n */\r\nexport function isSampledFlag(value) {\r\n if (isValidTraceParent(value)) {\r\n return (value[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] & SAMPLED_FLAG) === SAMPLED_FLAG;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Format the ITraceParent value as a string using the supported and know version formats.\r\n * So even if the passed traceParent is a later version the string value returned from this\r\n * function will convert it to only the known version formats.\r\n * This currently only supports version \"00\" and invalid \"ff\"\r\n * @param value - The parsed traceParent value\r\n * @returns\r\n */\r\nexport function formatTraceParent(value) {\r\n if (value) {\r\n // Special Note: This only supports formatting as version 00, future versions should encode any known supported version\r\n // So parsing a future version will populate the correct version value but reformatting will reduce it to version 00.\r\n var flags = _formatFlags(value[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */]);\r\n if (!_isValid(flags, 2)) {\r\n flags = \"01\";\r\n }\r\n var version = value[_DYN_VERSION /* @min:%2eversion */] || DEFAULT_VERSION;\r\n if (version !== \"00\" && version !== \"ff\") {\r\n // Reduce version to \"00\"\r\n version = DEFAULT_VERSION;\r\n }\r\n // Format as version 00\r\n return \"\".concat(version.toLowerCase(), \"-\").concat(_formatValue(value.traceId, 32, INVALID_TRACE_ID).toLowerCase(), \"-\").concat(_formatValue(value.spanId, 16, INVALID_SPAN_ID).toLowerCase(), \"-\").concat(flags.toLowerCase());\r\n }\r\n return \"\";\r\n}\r\n/**\r\n * Helper function to fetch the passed traceparent from the page, looking for it as a meta-tag or a Server-Timing header.\r\n * @param selectIdx - If the found value is comma separated which is the preferred entry to select, defaults to the first\r\n * @returns\r\n */\r\nexport function findW3cTraceParent(selectIdx) {\r\n var name = \"traceparent\";\r\n var traceParent = parseTraceParent(findMetaTag(name), selectIdx);\r\n if (!traceParent) {\r\n traceParent = parseTraceParent(findNamedServerTiming(name), selectIdx);\r\n }\r\n return traceParent;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { getDocument, isFunction } from \"@microsoft/applicationinsights-core-js\";\r\nexport function createDomEvent(eventName) {\r\n var event = null;\r\n if (isFunction(Event)) { // Use Event constructor when available\r\n event = new Event(eventName);\r\n }\r\n else { // Event has no constructor in IE\r\n var doc = getDocument();\r\n if (doc && doc.createEvent) {\r\n event = doc.createEvent(\"Event\");\r\n event.initEvent(eventName, true, true);\r\n }\r\n }\r\n return event;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { createValueMap } from \"@microsoft/applicationinsights-core-js\";\r\nexport var RequestHeaders = createValueMap({\r\n requestContextHeader: [0 /* eRequestHeaders.requestContextHeader */, \"Request-Context\"],\r\n requestContextTargetKey: [1 /* eRequestHeaders.requestContextTargetKey */, \"appId\"],\r\n requestContextAppIdFormat: [2 /* eRequestHeaders.requestContextAppIdFormat */, \"appId=cid-v1:\"],\r\n requestIdHeader: [3 /* eRequestHeaders.requestIdHeader */, \"Request-Id\"],\r\n traceParentHeader: [4 /* eRequestHeaders.traceParentHeader */, \"traceparent\"],\r\n traceStateHeader: [5 /* eRequestHeaders.traceStateHeader */, \"tracestate\"],\r\n sdkContextHeader: [6 /* eRequestHeaders.sdkContextHeader */, \"Sdk-Context\"],\r\n sdkContextHeaderAppIdRequest: [7 /* eRequestHeaders.sdkContextHeaderAppIdRequest */, \"appId\"],\r\n requestContextHeaderLowerCase: [8 /* eRequestHeaders.requestContextHeaderLowerCase */, \"request-context\"]\r\n});\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { getDocument, isString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_LENGTH, _DYN_PATHNAME, _DYN_TO_LOWER_CASE } from \"./__DynamicConstants\";\r\nvar _document = getDocument() || {};\r\nvar _htmlAnchorIdx = 0;\r\n// Use an array of temporary values as it's possible for multiple calls to parseUrl() will be called with different URLs\r\n// Using a cache size of 5 for now as it current depth usage is at least 2, so adding a minor buffer to handle future updates\r\nvar _htmlAnchorElement = [null, null, null, null, null];\r\nexport function urlParseUrl(url) {\r\n var anchorIdx = _htmlAnchorIdx;\r\n var anchorCache = _htmlAnchorElement;\r\n var tempAnchor = anchorCache[anchorIdx];\r\n if (!_document.createElement) {\r\n // Always create the temp instance if createElement is not available\r\n tempAnchor = { host: urlParseHost(url, true) };\r\n }\r\n else if (!anchorCache[anchorIdx]) {\r\n // Create and cache the unattached anchor instance\r\n tempAnchor = anchorCache[anchorIdx] = _document.createElement(\"a\");\r\n }\r\n tempAnchor.href = url;\r\n // Move the cache index forward\r\n anchorIdx++;\r\n if (anchorIdx >= anchorCache[_DYN_LENGTH /* @min:%2elength */]) {\r\n anchorIdx = 0;\r\n }\r\n _htmlAnchorIdx = anchorIdx;\r\n return tempAnchor;\r\n}\r\nexport function urlGetAbsoluteUrl(url) {\r\n var result;\r\n var a = urlParseUrl(url);\r\n if (a) {\r\n result = a.href;\r\n }\r\n return result;\r\n}\r\nexport function urlGetPathName(url) {\r\n var result;\r\n var a = urlParseUrl(url);\r\n if (a) {\r\n result = a[_DYN_PATHNAME /* @min:%2epathname */];\r\n }\r\n return result;\r\n}\r\nexport function urlGetCompleteUrl(method, absoluteUrl) {\r\n if (method) {\r\n return method.toUpperCase() + \" \" + absoluteUrl;\r\n }\r\n return absoluteUrl;\r\n}\r\n// Fallback method to grab host from url if document.createElement method is not available\r\nexport function urlParseHost(url, inclPort) {\r\n var fullHost = urlParseFullHost(url, inclPort) || \"\";\r\n if (fullHost) {\r\n var match = fullHost.match(/(www\\d{0,5}\\.)?([^\\/:]{1,256})(:\\d{1,20})?/i);\r\n if (match != null && match[_DYN_LENGTH /* @min:%2elength */] > 3 && isString(match[2]) && match[2][_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n return match[2] + (match[3] || \"\");\r\n }\r\n }\r\n return fullHost;\r\n}\r\nexport function urlParseFullHost(url, inclPort) {\r\n var result = null;\r\n if (url) {\r\n var match = url.match(/(\\w{1,150}):\\/\\/([^\\/:]{1,256})(:\\d{1,20})?/i);\r\n if (match != null && match[_DYN_LENGTH /* @min:%2elength */] > 2 && isString(match[2]) && match[2][_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n result = match[2] || \"\";\r\n if (inclPort && match[_DYN_LENGTH /* @min:%2elength */] > 2) {\r\n var protocol = (match[1] || \"\")[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n var port = match[3] || \"\";\r\n // IE includes the standard port so pass it off if it's the same as the protocol\r\n if (protocol === \"http\" && port === \":80\") {\r\n port = \"\";\r\n }\r\n else if (protocol === \"https\" && port === \":443\") {\r\n port = \"\";\r\n }\r\n result += port;\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { arrForEach, arrIndexOf, attachEvent, canUseCookies as coreCanUseCookies, dateNow, deleteCookie as coreDeleteCookie, disableCookies as coreDisableCookies, dumpObj, generateW3CId, getCookie as coreGetCookie, getExceptionName as coreGetExceptionName, getIEVersion, getPerformance, isArray, isBeaconsSupported, isDate, isError, isNullOrUndefined, isValidSpanId, isValidTraceId, newId, random32, setCookie as coreSetCookie, strTrim, toISOString, uaDisallowsSameSiteNone } from \"@microsoft/applicationinsights-core-js\";\r\nimport { DEFAULT_BREEZE_ENDPOINT, DEFAULT_BREEZE_PATH, strNotSpecified } from \"./Constants\";\r\nimport { createDomEvent } from \"./DomHelperFuncs\";\r\nimport { getExtensionByName, isCrossOriginError, msToTimeSpan, stringToBoolOrDefault } from \"./HelperFuncs\";\r\nimport { RequestHeaders } from \"./RequestResponseHeaders\";\r\nimport { utlCanUseLocalStorage, utlCanUseSessionStorage, utlDisableStorage, utlGetLocalStorage, utlGetSessionStorage, utlGetSessionStorageKeys, utlRemoveSessionStorage, utlRemoveStorage, utlSetLocalStorage, utlSetSessionStorage } from \"./StorageHelperFuncs\";\r\nimport { dataSanitizeString } from \"./Telemetry/Common/DataSanitizer\";\r\nimport { urlGetAbsoluteUrl, urlGetCompleteUrl, urlGetPathName, urlParseFullHost, urlParseHost, urlParseUrl } from \"./UrlHelperFuncs\";\r\nimport { _DYN_CORRELATION_HEADER_E0, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_NAME, _DYN_PATHNAME, _DYN_SPLIT, _DYN_TO_LOWER_CASE } from \"./__DynamicConstants\";\r\n// listing only non-geo specific locations\r\nvar _internalEndpoints = [\r\n DEFAULT_BREEZE_ENDPOINT + DEFAULT_BREEZE_PATH,\r\n \"https://breeze.aimon.applicationinsights.io\" + DEFAULT_BREEZE_PATH,\r\n \"https://dc-int.services.visualstudio.com\" + DEFAULT_BREEZE_PATH\r\n];\r\nexport function isInternalApplicationInsightsEndpoint(endpointUrl) {\r\n return arrIndexOf(_internalEndpoints, endpointUrl[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]()) !== -1;\r\n}\r\nexport var Util = {\r\n NotSpecified: strNotSpecified,\r\n createDomEvent: createDomEvent,\r\n disableStorage: utlDisableStorage,\r\n isInternalApplicationInsightsEndpoint: isInternalApplicationInsightsEndpoint,\r\n canUseLocalStorage: utlCanUseLocalStorage,\r\n getStorage: utlGetLocalStorage,\r\n setStorage: utlSetLocalStorage,\r\n removeStorage: utlRemoveStorage,\r\n canUseSessionStorage: utlCanUseSessionStorage,\r\n getSessionStorageKeys: utlGetSessionStorageKeys,\r\n getSessionStorage: utlGetSessionStorage,\r\n setSessionStorage: utlSetSessionStorage,\r\n removeSessionStorage: utlRemoveSessionStorage,\r\n disableCookies: coreDisableCookies,\r\n canUseCookies: coreCanUseCookies,\r\n disallowsSameSiteNone: uaDisallowsSameSiteNone,\r\n setCookie: coreSetCookie,\r\n stringToBoolOrDefault: stringToBoolOrDefault,\r\n getCookie: coreGetCookie,\r\n deleteCookie: coreDeleteCookie,\r\n trim: strTrim,\r\n newId: newId,\r\n random32: function () {\r\n return random32(true);\r\n },\r\n generateW3CId: generateW3CId,\r\n isArray: isArray,\r\n isError: isError,\r\n isDate: isDate,\r\n toISOStringForIE8: toISOString,\r\n getIEVersion: getIEVersion,\r\n msToTimeSpan: msToTimeSpan,\r\n isCrossOriginError: isCrossOriginError,\r\n dump: dumpObj,\r\n getExceptionName: coreGetExceptionName,\r\n addEventHandler: attachEvent,\r\n IsBeaconApiSupported: isBeaconsSupported,\r\n getExtension: getExtensionByName\r\n};\r\nexport var UrlHelper = {\r\n parseUrl: urlParseUrl,\r\n getAbsoluteUrl: urlGetAbsoluteUrl,\r\n getPathName: urlGetPathName,\r\n getCompleteUrl: urlGetCompleteUrl,\r\n parseHost: urlParseHost,\r\n parseFullHost: urlParseFullHost\r\n};\r\nexport var CorrelationIdHelper = {\r\n correlationIdPrefix: \"cid-v1:\",\r\n /**\r\n * Checks if a request url is not on a excluded domain list and if it is safe to add correlation headers.\r\n * Headers are always included if the current domain matches the request domain. If they do not match (CORS),\r\n * they are regex-ed across correlationHeaderDomains and correlationHeaderExcludedDomains to determine if headers are included.\r\n * Some environments don't give information on currentHost via window.location.host (e.g. Cordova). In these cases, the user must\r\n * manually supply domains to include correlation headers on. Else, no headers will be included at all.\r\n */\r\n canIncludeCorrelationHeader: function (config, requestUrl, currentHost) {\r\n if (!requestUrl || (config && config.disableCorrelationHeaders)) {\r\n return false;\r\n }\r\n if (config && config[_DYN_CORRELATION_HEADER_E0 /* @min:%2ecorrelationHeaderExcludePatterns */]) {\r\n for (var i = 0; i < config.correlationHeaderExcludePatterns[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n if (config[_DYN_CORRELATION_HEADER_E0 /* @min:%2ecorrelationHeaderExcludePatterns */][i].test(requestUrl)) {\r\n return false;\r\n }\r\n }\r\n }\r\n var requestHost = urlParseUrl(requestUrl).host[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n if (requestHost && (requestHost[_DYN_INDEX_OF /* @min:%2eindexOf */](\":443\") !== -1 || requestHost[_DYN_INDEX_OF /* @min:%2eindexOf */](\":80\") !== -1)) {\r\n // [Bug #1260] IE can include the port even for http and https URLs so if present\r\n // try and parse it to remove if it matches the default protocol port\r\n requestHost = (urlParseFullHost(requestUrl, true) || \"\")[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n }\r\n if ((!config || !config.enableCorsCorrelation) && (requestHost && requestHost !== currentHost)) {\r\n return false;\r\n }\r\n var includedDomains = config && config.correlationHeaderDomains;\r\n if (includedDomains) {\r\n var matchExists_1;\r\n arrForEach(includedDomains, function (domain) {\r\n var regex = new RegExp(domain.toLowerCase().replace(/\\\\/g, \"\\\\\\\\\").replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\"));\r\n matchExists_1 = matchExists_1 || regex.test(requestHost);\r\n });\r\n if (!matchExists_1) {\r\n return false;\r\n }\r\n }\r\n var excludedDomains = config && config.correlationHeaderExcludedDomains;\r\n if (!excludedDomains || excludedDomains[_DYN_LENGTH /* @min:%2elength */] === 0) {\r\n return true;\r\n }\r\n for (var i = 0; i < excludedDomains[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n var regex = new RegExp(excludedDomains[i].toLowerCase().replace(/\\\\/g, \"\\\\\\\\\").replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\"));\r\n if (regex.test(requestHost)) {\r\n return false;\r\n }\r\n }\r\n // if we don't know anything about the requestHost, require the user to use included/excludedDomains.\r\n // Previously we always returned false for a falsy requestHost\r\n return requestHost && requestHost[_DYN_LENGTH /* @min:%2elength */] > 0;\r\n },\r\n /**\r\n * Combines target appId and target role name from response header.\r\n */\r\n getCorrelationContext: function (responseHeader) {\r\n if (responseHeader) {\r\n var correlationId = CorrelationIdHelper.getCorrelationContextValue(responseHeader, RequestHeaders[1 /* eRequestHeaders.requestContextTargetKey */]);\r\n if (correlationId && correlationId !== CorrelationIdHelper.correlationIdPrefix) {\r\n return correlationId;\r\n }\r\n }\r\n },\r\n /**\r\n * Gets key from correlation response header\r\n */\r\n getCorrelationContextValue: function (responseHeader, key) {\r\n if (responseHeader) {\r\n var keyValues = responseHeader[_DYN_SPLIT /* @min:%2esplit */](\",\");\r\n for (var i = 0; i < keyValues[_DYN_LENGTH /* @min:%2elength */]; ++i) {\r\n var keyValue = keyValues[i][_DYN_SPLIT /* @min:%2esplit */](\"=\");\r\n if (keyValue[_DYN_LENGTH /* @min:%2elength */] === 2 && keyValue[0] === key) {\r\n return keyValue[1];\r\n }\r\n }\r\n }\r\n }\r\n};\r\nexport function AjaxHelperParseDependencyPath(logger, absoluteUrl, method, commandName) {\r\n var target, name = commandName, data = commandName;\r\n if (absoluteUrl && absoluteUrl[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n var parsedUrl = urlParseUrl(absoluteUrl);\r\n target = parsedUrl.host;\r\n if (!name) {\r\n if (parsedUrl[_DYN_PATHNAME /* @min:%2epathname */] != null) {\r\n var pathName = (parsedUrl.pathname[_DYN_LENGTH /* @min:%2elength */] === 0) ? \"/\" : parsedUrl[_DYN_PATHNAME /* @min:%2epathname */];\r\n if (pathName.charAt(0) !== \"/\") {\r\n pathName = \"/\" + pathName;\r\n }\r\n data = parsedUrl[_DYN_PATHNAME /* @min:%2epathname */];\r\n name = dataSanitizeString(logger, method ? method + \" \" + pathName : pathName);\r\n }\r\n else {\r\n name = dataSanitizeString(logger, absoluteUrl);\r\n }\r\n }\r\n }\r\n else {\r\n target = commandName;\r\n name = commandName;\r\n }\r\n return {\r\n target: target,\r\n name: name,\r\n data: data\r\n };\r\n}\r\nexport function dateTimeUtilsNow() {\r\n // returns the window or webworker performance object\r\n var perf = getPerformance();\r\n if (perf && perf.now && perf.timing) {\r\n var now = perf.now() + perf.timing.navigationStart;\r\n // Known issue with IE where this calculation can be negative, so if it is then ignore and fallback\r\n if (now > 0) {\r\n return now;\r\n }\r\n }\r\n return dateNow();\r\n}\r\nexport function dateTimeUtilsDuration(start, end) {\r\n var result = null;\r\n if (start !== 0 && end !== 0 && !isNullOrUndefined(start) && !isNullOrUndefined(end)) {\r\n result = end - start;\r\n }\r\n return result;\r\n}\r\n/**\r\n * A utility class that helps getting time related parameters\r\n */\r\nexport var DateTimeUtils = {\r\n Now: dateTimeUtilsNow,\r\n GetDuration: dateTimeUtilsDuration\r\n};\r\n/**\r\n * Creates a IDistributedTraceContext from an optional telemetryTrace\r\n * @param telemetryTrace - The telemetryTrace instance that is being wrapped\r\n * @param parentCtx - An optional parent distributed trace instance, almost always undefined as this scenario is only used in the case of multiple property handlers.\r\n * @returns A new IDistributedTraceContext instance that is backed by the telemetryTrace or temporary object\r\n */\r\nexport function createDistributedTraceContextFromTrace(telemetryTrace, parentCtx) {\r\n var trace = telemetryTrace || {};\r\n return {\r\n getName: function () {\r\n return trace[_DYN_NAME /* @min:%2ename */];\r\n },\r\n setName: function (newValue) {\r\n parentCtx && parentCtx.setName(newValue);\r\n trace[_DYN_NAME /* @min:%2ename */] = newValue;\r\n },\r\n getTraceId: function () {\r\n return trace.traceID;\r\n },\r\n setTraceId: function (newValue) {\r\n parentCtx && parentCtx.setTraceId(newValue);\r\n if (isValidTraceId(newValue)) {\r\n trace.traceID = newValue;\r\n }\r\n },\r\n getSpanId: function () {\r\n return trace.parentID;\r\n },\r\n setSpanId: function (newValue) {\r\n parentCtx && parentCtx.setSpanId(newValue);\r\n if (isValidSpanId(newValue)) {\r\n trace.parentID = newValue;\r\n }\r\n },\r\n getTraceFlags: function () {\r\n return trace.traceFlags;\r\n },\r\n setTraceFlags: function (newTraceFlags) {\r\n parentCtx && parentCtx.setTraceFlags(newTraceFlags);\r\n trace.traceFlags = newTraceFlags;\r\n }\r\n };\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { msToTimeSpan } from \"../HelperFuncs\";\r\nimport { AjaxHelperParseDependencyPath } from \"../Util\";\r\nimport { _DYN_DURATION, _DYN_MEASUREMENTS, _DYN_NAME, _DYN_PROPERTIES } from \"../__DynamicConstants\";\r\nimport { dataSanitizeMeasurements, dataSanitizeProperties, dataSanitizeString, dataSanitizeUrl } from \"./Common/DataSanitizer\";\r\nvar RemoteDependencyData = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the RemoteDependencyData object\r\n */\r\n function RemoteDependencyData(logger, id, absoluteUrl, commandName, value, success, resultCode, method, requestAPI, correlationContext, properties, measurements) {\r\n if (requestAPI === void 0) { requestAPI = \"Ajax\"; }\r\n this.aiDataContract = {\r\n id: 1 /* FieldType.Required */,\r\n ver: 1 /* FieldType.Required */,\r\n name: 0 /* FieldType.Default */,\r\n resultCode: 0 /* FieldType.Default */,\r\n duration: 0 /* FieldType.Default */,\r\n success: 0 /* FieldType.Default */,\r\n data: 0 /* FieldType.Default */,\r\n target: 0 /* FieldType.Default */,\r\n type: 0 /* FieldType.Default */,\r\n properties: 0 /* FieldType.Default */,\r\n measurements: 0 /* FieldType.Default */,\r\n kind: 0 /* FieldType.Default */,\r\n value: 0 /* FieldType.Default */,\r\n count: 0 /* FieldType.Default */,\r\n min: 0 /* FieldType.Default */,\r\n max: 0 /* FieldType.Default */,\r\n stdDev: 0 /* FieldType.Default */,\r\n dependencyKind: 0 /* FieldType.Default */,\r\n dependencySource: 0 /* FieldType.Default */,\r\n commandName: 0 /* FieldType.Default */,\r\n dependencyTypeName: 0 /* FieldType.Default */\r\n };\r\n var _self = this;\r\n _self.ver = 2;\r\n _self.id = id;\r\n _self[_DYN_DURATION /* @min:%2eduration */] = msToTimeSpan(value);\r\n _self.success = success;\r\n _self.resultCode = resultCode + \"\";\r\n _self.type = dataSanitizeString(logger, requestAPI);\r\n var dependencyFields = AjaxHelperParseDependencyPath(logger, absoluteUrl, method, commandName);\r\n _self.data = dataSanitizeUrl(logger, commandName) || dependencyFields.data; // get a value from hosturl if commandName not available\r\n _self.target = dataSanitizeString(logger, dependencyFields.target);\r\n if (correlationContext) {\r\n _self.target = \"\".concat(_self.target, \" | \").concat(correlationContext);\r\n }\r\n _self[_DYN_NAME /* @min:%2ename */] = dataSanitizeString(logger, dependencyFields[_DYN_NAME /* @min:%2ename */]);\r\n _self[_DYN_PROPERTIES /* @min:%2eproperties */] = dataSanitizeProperties(logger, properties);\r\n _self[_DYN_MEASUREMENTS /* @min:%2emeasurements */] = dataSanitizeMeasurements(logger, measurements);\r\n }\r\n RemoteDependencyData.envelopeType = \"Microsoft.ApplicationInsights.{0}.RemoteDependency\";\r\n RemoteDependencyData.dataType = \"RemoteDependencyData\";\r\n return RemoteDependencyData;\r\n}());\r\nexport { RemoteDependencyData };\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _DYN_COMPLETE, _DYN_GET_CTX, _DYN_IS_ASYNC, _DYN_IS_CHILD_EVT, _DYN_LENGTH, _DYN_NAME, _DYN_PUSH, _DYN_SET_CTX, _DYN_TIME } from \"../__DynamicConstants\";\r\nimport { dateNow, isArray, isFunction, objDefineAccessors } from \"./HelperFuncs\";\r\nimport { STR_GET_PERF_MGR, STR_PERF_EVENT } from \"./InternalConstants\";\r\nvar strExecutionContextKey = \"ctx\";\r\nvar strParentContextKey = \"ParentContextKey\";\r\nvar strChildrenContextKey = \"ChildrenContextKey\";\r\nvar _defaultPerfManager = null;\r\nvar PerfEvent = /** @class */ (function () {\r\n function PerfEvent(name, payloadDetails, isAsync) {\r\n var _self = this;\r\n var accessorDefined = false;\r\n _self.start = dateNow();\r\n _self[_DYN_NAME /* @min:%2ename */] = name;\r\n _self[_DYN_IS_ASYNC /* @min:%2eisAsync */] = isAsync;\r\n _self[_DYN_IS_CHILD_EVT /* @min:%2eisChildEvt */] = function () { return false; };\r\n if (isFunction(payloadDetails)) {\r\n // Create an accessor to minimize the potential performance impact of executing the payloadDetails callback\r\n var theDetails_1;\r\n accessorDefined = objDefineAccessors(_self, \"payload\", function () {\r\n // Delay the execution of the payloadDetails until needed\r\n if (!theDetails_1 && isFunction(payloadDetails)) {\r\n theDetails_1 = payloadDetails();\r\n // clear it out now so the referenced objects can be garbage collected\r\n payloadDetails = null;\r\n }\r\n return theDetails_1;\r\n });\r\n }\r\n _self[_DYN_GET_CTX /* @min:%2egetCtx */] = function (key) {\r\n if (key) {\r\n // The parent and child links are located directly on the object (for better viewing in the DebugPlugin)\r\n if (key === PerfEvent[strParentContextKey] || key === PerfEvent[strChildrenContextKey]) {\r\n return _self[key];\r\n }\r\n return (_self[strExecutionContextKey] || {})[key];\r\n }\r\n return null;\r\n };\r\n _self[_DYN_SET_CTX /* @min:%2esetCtx */] = function (key, value) {\r\n if (key) {\r\n // Put the parent and child links directly on the object (for better viewing in the DebugPlugin)\r\n if (key === PerfEvent[strParentContextKey]) {\r\n // Simple assumption, if we are setting a parent then we must be a child\r\n if (!_self[key]) {\r\n _self[_DYN_IS_CHILD_EVT /* @min:%2eisChildEvt */] = function () { return true; };\r\n }\r\n _self[key] = value;\r\n }\r\n else if (key === PerfEvent[strChildrenContextKey]) {\r\n _self[key] = value;\r\n }\r\n else {\r\n var ctx = _self[strExecutionContextKey] = _self[strExecutionContextKey] || {};\r\n ctx[key] = value;\r\n }\r\n }\r\n };\r\n _self[_DYN_COMPLETE /* @min:%2ecomplete */] = function () {\r\n var childTime = 0;\r\n var childEvts = _self[_DYN_GET_CTX /* @min:%2egetCtx */](PerfEvent[strChildrenContextKey]);\r\n if (isArray(childEvts)) {\r\n for (var lp = 0; lp < childEvts[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n var childEvt = childEvts[lp];\r\n if (childEvt) {\r\n childTime += childEvt[_DYN_TIME /* @min:%2etime */];\r\n }\r\n }\r\n }\r\n _self[_DYN_TIME /* @min:%2etime */] = dateNow() - _self.start;\r\n _self.exTime = _self[_DYN_TIME /* @min:%2etime */] - childTime;\r\n _self[_DYN_COMPLETE /* @min:%2ecomplete */] = function () { };\r\n if (!accessorDefined && isFunction(payloadDetails)) {\r\n // If we couldn't define the property set during complete -- to minimize the perf impact until after the time\r\n _self.payload = payloadDetails();\r\n }\r\n };\r\n }\r\n PerfEvent.ParentContextKey = \"parent\";\r\n PerfEvent.ChildrenContextKey = \"childEvts\";\r\n return PerfEvent;\r\n}());\r\nexport { PerfEvent };\r\nvar PerfManager = /** @class */ (function () {\r\n function PerfManager(manager) {\r\n /**\r\n * General bucket used for execution context set and retrieved via setCtx() and getCtx.\r\n * Defined as private so it can be visualized via the DebugPlugin\r\n */\r\n this.ctx = {};\r\n dynamicProto(PerfManager, this, function (_self) {\r\n _self.create = function (src, payloadDetails, isAsync) {\r\n // TODO (@MSNev): at some point we will want to add additional configuration to \"select\" which events to instrument\r\n // for now this is just a simple do everything.\r\n return new PerfEvent(src, payloadDetails, isAsync);\r\n };\r\n _self.fire = function (perfEvent) {\r\n if (perfEvent) {\r\n perfEvent[_DYN_COMPLETE /* @min:%2ecomplete */]();\r\n if (manager && isFunction(manager[STR_PERF_EVENT /* @min:%2eperfEvent */])) {\r\n manager[STR_PERF_EVENT /* @min:%2eperfEvent */](perfEvent);\r\n }\r\n }\r\n };\r\n _self[_DYN_SET_CTX /* @min:%2esetCtx */] = function (key, value) {\r\n if (key) {\r\n var ctx = _self[strExecutionContextKey] = _self[strExecutionContextKey] || {};\r\n ctx[key] = value;\r\n }\r\n };\r\n _self[_DYN_GET_CTX /* @min:%2egetCtx */] = function (key) {\r\n return (_self[strExecutionContextKey] || {})[key];\r\n };\r\n });\r\n }\r\n// Removed Stub for PerfManager.prototype.create.\r\n// Removed Stub for PerfManager.prototype.fire.\r\n// Removed Stub for PerfManager.prototype.setCtx.\r\n// Removed Stub for PerfManager.prototype.getCtx.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n PerfManager.__ieDyn=1;\n\n return PerfManager;\r\n}());\r\nexport { PerfManager };\r\nvar doPerfActiveKey = \"CoreUtils.doPerf\";\r\n/**\r\n * Helper function to wrap a function with a perf event\r\n * @param mgrSource - The Performance Manager or a Performance provider source (may be null)\r\n * @param getSource - The callback to create the source name for the event (if perf monitoring is enabled)\r\n * @param func - The function to call and measure\r\n * @param details - A function to return the payload details\r\n * @param isAsync - Is the event / function being call asynchronously or synchronously\r\n */\r\nexport function doPerf(mgrSource, getSource, func, details, isAsync) {\r\n if (mgrSource) {\r\n var perfMgr = mgrSource;\r\n if (perfMgr[STR_GET_PERF_MGR]) {\r\n // Looks like a perf manager provider object\r\n perfMgr = perfMgr[STR_GET_PERF_MGR]();\r\n }\r\n if (perfMgr) {\r\n var perfEvt = void 0;\r\n var currentActive = perfMgr[_DYN_GET_CTX /* @min:%2egetCtx */](doPerfActiveKey);\r\n try {\r\n perfEvt = perfMgr.create(getSource(), details, isAsync);\r\n if (perfEvt) {\r\n if (currentActive && perfEvt[_DYN_SET_CTX /* @min:%2esetCtx */]) {\r\n perfEvt[_DYN_SET_CTX /* @min:%2esetCtx */](PerfEvent[strParentContextKey], currentActive);\r\n if (currentActive[_DYN_GET_CTX /* @min:%2egetCtx */] && currentActive[_DYN_SET_CTX /* @min:%2esetCtx */]) {\r\n var children = currentActive[_DYN_GET_CTX /* @min:%2egetCtx */](PerfEvent[strChildrenContextKey]);\r\n if (!children) {\r\n children = [];\r\n currentActive[_DYN_SET_CTX /* @min:%2esetCtx */](PerfEvent[strChildrenContextKey], children);\r\n }\r\n children[_DYN_PUSH /* @min:%2epush */](perfEvt);\r\n }\r\n }\r\n // Set this event as the active event now\r\n perfMgr[_DYN_SET_CTX /* @min:%2esetCtx */](doPerfActiveKey, perfEvt);\r\n return func(perfEvt);\r\n }\r\n }\r\n catch (ex) {\r\n if (perfEvt && perfEvt[_DYN_SET_CTX /* @min:%2esetCtx */]) {\r\n perfEvt[_DYN_SET_CTX /* @min:%2esetCtx */](\"exception\", ex);\r\n }\r\n }\r\n finally {\r\n // fire the perf event\r\n if (perfEvt) {\r\n perfMgr.fire(perfEvt);\r\n }\r\n // Reset the active event to the previous value\r\n perfMgr[_DYN_SET_CTX /* @min:%2esetCtx */](doPerfActiveKey, currentActive);\r\n }\r\n }\r\n }\r\n return func();\r\n}\r\n/**\r\n * Set the global performance manager to use when there is no core instance or it has not been initialized yet.\r\n * @param perfManager - The IPerfManager instance to use when no performance manager is supplied.\r\n */\r\nexport function setGblPerfMgr(perfManager) {\r\n _defaultPerfManager = perfManager;\r\n}\r\n/**\r\n * Get the current global performance manager that will be used with no performance manager is supplied.\r\n * @returns - The current default manager\r\n */\r\nexport function getGblPerfMgr() {\r\n return _defaultPerfManager;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport { _DYN_CALL, _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_INITIALIZE, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_NAME, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_SPAN_ID, _DYN_TEARDOWN, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN__DO_TEARDOWN } from \"../__DynamicConstants\";\r\nimport { createElmNodeData } from \"./DataCacheHelper\";\r\nimport { arrForEach, isFunction } from \"./HelperFuncs\";\r\nimport { STR_CORE, STR_PRIORITY, STR_PROCESS_TELEMETRY } from \"./InternalConstants\";\r\nimport { isValidSpanId, isValidTraceId } from \"./W3cTraceParent\";\r\nvar pluginStateData = createElmNodeData(\"plugin\");\r\nexport function _getPluginState(plugin) {\r\n return pluginStateData.get(plugin, \"state\", {}, true);\r\n}\r\n/**\r\n * Initialize the queue of plugins\r\n * @param plugins - The array of plugins to initialize and setting of the next plugin\r\n * @param config The current config for the instance\r\n * @param core THe current core instance\r\n * @param extensions The extensions\r\n */\r\nexport function initializePlugins(processContext, extensions) {\r\n // Set the next plugin and identified the uninitialized plugins\r\n var initPlugins = [];\r\n var lastPlugin = null;\r\n var proxy = processContext[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n var pluginState;\r\n while (proxy) {\r\n var thePlugin = proxy[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]();\r\n if (thePlugin) {\r\n if (lastPlugin &&\r\n isFunction(lastPlugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */]) &&\r\n isFunction(thePlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */])) {\r\n // Set this plugin as the next for the previous one\r\n lastPlugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */](thePlugin);\r\n }\r\n var isInitialized = false;\r\n if (isFunction(thePlugin[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */])) {\r\n isInitialized = thePlugin[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]();\r\n }\r\n else {\r\n pluginState = _getPluginState(thePlugin);\r\n isInitialized = pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */];\r\n }\r\n if (!isInitialized) {\r\n initPlugins[_DYN_PUSH /* @min:%2epush */](thePlugin);\r\n }\r\n lastPlugin = thePlugin;\r\n proxy = proxy[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n }\r\n }\r\n // Now initialize the plugins\r\n arrForEach(initPlugins, function (thePlugin) {\r\n var core = processContext[STR_CORE]();\r\n thePlugin[_DYN_INITIALIZE /* @min:%2einitialize */](processContext.getCfg(), core, extensions, processContext[_DYN_GET_NEXT /* @min:%2egetNext */]());\r\n pluginState = _getPluginState(thePlugin);\r\n // Only add the core to the state if the plugin didn't set it (doesn't extent from BaseTelemetryPlugin)\r\n if (!thePlugin[STR_CORE] && !pluginState[STR_CORE]) {\r\n pluginState[STR_CORE] = core;\r\n }\r\n pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = true;\r\n delete pluginState[_DYN_TEARDOWN /* @min:%2eteardown */];\r\n });\r\n}\r\nexport function sortPlugins(plugins) {\r\n // Sort by priority\r\n return plugins.sort(function (extA, extB) {\r\n var result = 0;\r\n if (extB) {\r\n var bHasProcess = isFunction(extB[STR_PROCESS_TELEMETRY]);\r\n if (isFunction(extA[STR_PROCESS_TELEMETRY])) {\r\n result = bHasProcess ? extA[STR_PRIORITY] - extB[STR_PRIORITY] : 1;\r\n }\r\n else if (bHasProcess) {\r\n result = -1;\r\n }\r\n }\r\n else {\r\n result = extA ? 1 : -1;\r\n }\r\n return result;\r\n });\r\n // sort complete\r\n}\r\n/**\r\n * Teardown / Unload helper to perform teardown/unloading operations for the provided components synchronously or asynchronously, this will call any\r\n * _doTeardown() or _doUnload() functions on the provided components to allow them to finish removal.\r\n * @param components - The components you want to unload\r\n * @param unloadCtx - This is the context that should be used during unloading.\r\n * @param unloadState - The details / state of the unload process, it holds details like whether it should be unloaded synchronously or asynchronously and the reason for the unload.\r\n * @param asyncCallback - An optional callback that the plugin must call if it returns true to inform the caller that it has completed any async unload/teardown operations.\r\n * @returns boolean - true if the plugin has or will call asyncCallback, this allows the plugin to perform any asynchronous operations.\r\n */\r\nexport function unloadComponents(components, unloadCtx, unloadState, asyncCallback) {\r\n var idx = 0;\r\n function _doUnload() {\r\n while (idx < components[_DYN_LENGTH /* @min:%2elength */]) {\r\n var component = components[idx++];\r\n if (component) {\r\n var func = component._doUnload || component[_DYN__DO_TEARDOWN /* @min:%2e_doTeardown */];\r\n if (isFunction(func)) {\r\n if (func[_DYN_CALL /* @min:%2ecall */](component, unloadCtx, unloadState, _doUnload) === true) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return _doUnload();\r\n}\r\n/**\r\n * Creates a IDistributedTraceContext which optionally also \"sets\" the value on a parent\r\n * @param parentCtx - An optional parent distributed trace instance\r\n * @returns A new IDistributedTraceContext instance that uses an internal temporary object\r\n */\r\nexport function createDistributedTraceContext(parentCtx) {\r\n var trace = {};\r\n return {\r\n getName: function () {\r\n return trace[_DYN_NAME /* @min:%2ename */];\r\n },\r\n setName: function (newValue) {\r\n parentCtx && parentCtx.setName(newValue);\r\n trace[_DYN_NAME /* @min:%2ename */] = newValue;\r\n },\r\n getTraceId: function () {\r\n return trace[_DYN_TRACE_ID /* @min:%2etraceId */];\r\n },\r\n setTraceId: function (newValue) {\r\n parentCtx && parentCtx.setTraceId(newValue);\r\n if (isValidTraceId(newValue)) {\r\n trace[_DYN_TRACE_ID /* @min:%2etraceId */] = newValue;\r\n }\r\n },\r\n getSpanId: function () {\r\n return trace[_DYN_SPAN_ID /* @min:%2espanId */];\r\n },\r\n setSpanId: function (newValue) {\r\n parentCtx && parentCtx.setSpanId(newValue);\r\n if (isValidSpanId(newValue)) {\r\n trace[_DYN_SPAN_ID /* @min:%2espanId */] = newValue;\r\n }\r\n },\r\n getTraceFlags: function () {\r\n return trace[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */];\r\n },\r\n setTraceFlags: function (newTraceFlags) {\r\n parentCtx && parentCtx.setTraceFlags(newTraceFlags);\r\n trace[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] = newTraceFlags;\r\n }\r\n };\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport { _DYN_CALL, _DYN_CONFIG, _DYN_CREATE_NEW, _DYN_DIAG_LOG, _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_IDENTIFIER, _DYN_IS_ASYNC, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_LOGGER, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_TEARDOWN, _DYN_UPDATE } from \"../__DynamicConstants\";\r\nimport { _throwInternal, safeGetLogger } from \"./DiagnosticLogger\";\r\nimport { dumpObj } from \"./EnvUtils\";\r\nimport { arrForEach, isArray, isFunction, isNullOrUndefined, isObject, isUndefined, objExtend, objForEachKey, objFreeze, objKeys, proxyFunctions } from \"./HelperFuncs\";\r\nimport { STR_CORE, STR_DISABLED, STR_EMPTY, STR_EXTENSION_CONFIG, STR_PRIORITY, STR_PROCESS_TELEMETRY } from \"./InternalConstants\";\r\nimport { doPerf } from \"./PerfManager\";\r\nimport { _getPluginState } from \"./TelemetryHelpers\";\r\nvar strTelemetryPluginChain = \"TelemetryPluginChain\";\r\nvar strHasRunFlags = \"_hasRun\";\r\nvar strGetTelCtx = \"_getTelCtx\";\r\nvar _chainId = 0;\r\nfunction _getNextProxyStart(proxy, core, startAt) {\r\n while (proxy) {\r\n if (proxy[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]() === startAt) {\r\n return proxy;\r\n }\r\n proxy = proxy[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n }\r\n // This wasn't found in the existing chain so create an isolated one with just this plugin\r\n return createTelemetryProxyChain([startAt], core[_DYN_CONFIG /* @min:%2econfig */] || {}, core);\r\n}\r\n/**\r\n * @ignore\r\n * @param telemetryChain\r\n * @param config\r\n * @param core\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n * @returns\r\n */\r\nfunction _createInternalContext(telemetryChain, config, core, startAt) {\r\n // We have a special case where we want to start execution from this specific plugin\r\n // or we simply reuse the existing telemetry plugin chain (normal execution case)\r\n var _nextProxy = null; // By Default set as no next plugin\r\n var _onComplete = [];\r\n if (startAt !== null) {\r\n // There is no next element (null) vs not defined (undefined) so use the full chain\r\n _nextProxy = startAt ? _getNextProxyStart(telemetryChain, core, startAt) : telemetryChain;\r\n }\r\n var context = {\r\n _next: _moveNext,\r\n ctx: {\r\n core: function () {\r\n return core;\r\n },\r\n diagLog: function () {\r\n return safeGetLogger(core, config);\r\n },\r\n getCfg: function () {\r\n return config;\r\n },\r\n getExtCfg: _getExtCfg,\r\n getConfig: _getConfig,\r\n hasNext: function () {\r\n return !!_nextProxy;\r\n },\r\n getNext: function () {\r\n return _nextProxy;\r\n },\r\n setNext: function (nextPlugin) {\r\n _nextProxy = nextPlugin;\r\n },\r\n iterate: _iterateChain,\r\n onComplete: _addOnComplete\r\n }\r\n };\r\n function _addOnComplete(onComplete, that) {\r\n var args = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n args[_i - 2] = arguments[_i];\r\n }\r\n if (onComplete) {\r\n _onComplete[_DYN_PUSH /* @min:%2epush */]({\r\n func: onComplete,\r\n self: !isUndefined(that) ? that : context.ctx,\r\n args: args\r\n });\r\n }\r\n }\r\n function _moveNext() {\r\n var nextProxy = _nextProxy;\r\n // Automatically move to the next plugin\r\n _nextProxy = nextProxy ? nextProxy[_DYN_GET_NEXT /* @min:%2egetNext */]() : null;\r\n if (!nextProxy) {\r\n var onComplete = _onComplete;\r\n if (onComplete && onComplete[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n arrForEach(onComplete, function (completeDetails) {\r\n try {\r\n completeDetails.func[_DYN_CALL /* @min:%2ecall */](completeDetails.self, completeDetails.args);\r\n }\r\n catch (e) {\r\n _throwInternal(core[_DYN_LOGGER /* @min:%2elogger */], 2 /* eLoggingSeverity.WARNING */, 73 /* _eInternalMessageId.PluginException */, \"Unexpected Exception during onComplete - \" + dumpObj(e));\r\n }\r\n });\r\n _onComplete = [];\r\n }\r\n }\r\n return nextProxy;\r\n }\r\n function _getExtCfg(identifier, defaultValue, mergeDefault) {\r\n if (defaultValue === void 0) { defaultValue = {}; }\r\n if (mergeDefault === void 0) { mergeDefault = 0 /* GetExtCfgMergeType.None */; }\r\n var theConfig;\r\n if (config) {\r\n var extConfig = config[STR_EXTENSION_CONFIG /* @min:%2eextensionConfig */];\r\n if (extConfig && identifier) {\r\n theConfig = extConfig[identifier];\r\n }\r\n }\r\n if (!theConfig) {\r\n // Just use the defaults\r\n theConfig = defaultValue;\r\n }\r\n else if (isObject(defaultValue)) {\r\n if (mergeDefault !== 0 /* GetExtCfgMergeType.None */) {\r\n // Merge the defaults and configured values\r\n var newConfig_1 = objExtend(true, defaultValue, theConfig);\r\n if (config && mergeDefault === 2 /* GetExtCfgMergeType.MergeDefaultFromRootOrDefault */) {\r\n // Enumerate over the defaultValues and if not already populated attempt to\r\n // find a value from the root config\r\n objForEachKey(defaultValue, function (field) {\r\n // for each unspecified field, set the default value\r\n if (isNullOrUndefined(newConfig_1[field])) {\r\n var cfgValue = config[field];\r\n if (!isNullOrUndefined(cfgValue)) {\r\n newConfig_1[field] = cfgValue;\r\n }\r\n }\r\n });\r\n }\r\n theConfig = newConfig_1;\r\n }\r\n }\r\n return theConfig;\r\n }\r\n function _getConfig(identifier, field, defaultValue) {\r\n if (defaultValue === void 0) { defaultValue = false; }\r\n var theValue;\r\n var extConfig = _getExtCfg(identifier, null);\r\n if (extConfig && !isNullOrUndefined(extConfig[field])) {\r\n theValue = extConfig[field];\r\n }\r\n else if (config && !isNullOrUndefined(config[field])) {\r\n theValue = config[field];\r\n }\r\n return !isNullOrUndefined(theValue) ? theValue : defaultValue;\r\n }\r\n function _iterateChain(cb) {\r\n // Keep processing until we reach the end of the chain\r\n var nextPlugin;\r\n while (!!(nextPlugin = context._next())) {\r\n var plugin = nextPlugin[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]();\r\n if (plugin) {\r\n // callback with the current on\r\n cb(plugin);\r\n }\r\n }\r\n }\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryContext(telemetryChain, config, core, startAt) {\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(env) {\r\n var nextPlugin = internalContext._next();\r\n // Run the next plugin which will call \"processNext()\"\r\n nextPlugin && nextPlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */](env, context);\r\n return !nextPlugin;\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config, core, startAt);\r\n }\r\n return createProcessTelemetryContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), config, core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain for handling the unloading of the chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryUnloadContext(telemetryChain, core, startAt) {\r\n var config = core[_DYN_CONFIG /* @min:%2econfig */] || {};\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(unloadState) {\r\n var nextPlugin = internalContext._next();\r\n nextPlugin && nextPlugin.unload(context, unloadState);\r\n return !nextPlugin;\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config, core, startAt);\r\n }\r\n return createProcessTelemetryUnloadContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain for updating the configuration\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryUpdateContext(telemetryChain, core, startAt) {\r\n var config = core[_DYN_CONFIG /* @min:%2econfig */] || {};\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(updateState) {\r\n return context.iterate(function (plugin) {\r\n if (isFunction(plugin[_DYN_UPDATE /* @min:%2eupdate */])) {\r\n plugin[_DYN_UPDATE /* @min:%2eupdate */](context, updateState);\r\n }\r\n });\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config, core, startAt);\r\n }\r\n return createProcessTelemetryUpdateContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates an execution chain from the array of plugins\r\n * @param plugins - The array of plugins that will be executed in this order\r\n * @param defItemCtx - The default execution context to use when no telemetry context is passed to processTelemetry(), this\r\n * should be for legacy plugins only. Currently, only used for passing the current core instance and to provide better error\r\n * reporting (hasRun) when errors occur.\r\n */\r\nexport function createTelemetryProxyChain(plugins, config, core, startAt) {\r\n var firstProxy = null;\r\n var add = startAt ? false : true;\r\n if (isArray(plugins) && plugins[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n // Create the proxies and wire up the next plugin chain\r\n var lastProxy_1 = null;\r\n arrForEach(plugins, function (thePlugin) {\r\n if (!add && startAt === thePlugin) {\r\n add = true;\r\n }\r\n if (add && thePlugin && isFunction(thePlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */])) {\r\n // Only add plugins that are processors\r\n var newProxy = createTelemetryPluginProxy(thePlugin, config, core);\r\n if (!firstProxy) {\r\n firstProxy = newProxy;\r\n }\r\n if (lastProxy_1) {\r\n // Set this new proxy as the next for the previous one\r\n lastProxy_1._setNext(newProxy);\r\n }\r\n lastProxy_1 = newProxy;\r\n }\r\n });\r\n }\r\n if (startAt && !firstProxy) {\r\n // Special case where the \"startAt\" was not in the original list of plugins\r\n return createTelemetryProxyChain([startAt], config, core);\r\n }\r\n return firstProxy;\r\n}\r\n/**\r\n * Create the processing telemetry proxy instance, the proxy is used to abstract the current plugin to allow monitoring and\r\n * execution plugins while passing around the dynamic execution state (IProcessTelemetryContext), the proxy instance no longer\r\n * contains any execution state and can be reused between requests (this was not the case for 2.7.2 and earlier with the\r\n * TelemetryPluginChain class).\r\n * @param plugin - The plugin instance to proxy\r\n * @param config - The default execution context to use when no telemetry context is passed to processTelemetry(), this\r\n * should be for legacy plugins only. Currently, only used for passing the current core instance and to provide better error\r\n * reporting (hasRun) when errors occur.\r\n * @returns\r\n */\r\nexport function createTelemetryPluginProxy(plugin, config, core) {\r\n var nextProxy = null;\r\n var hasProcessTelemetry = isFunction(plugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */]);\r\n var hasSetNext = isFunction(plugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */]);\r\n var chainId;\r\n if (plugin) {\r\n chainId = plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */] + \"-\" + plugin[STR_PRIORITY /* @min:%2epriority */] + \"-\" + _chainId++;\r\n }\r\n else {\r\n chainId = \"Unknown-0-\" + _chainId++;\r\n }\r\n var proxyChain = {\r\n getPlugin: function () {\r\n return plugin;\r\n },\r\n getNext: function () {\r\n return nextProxy;\r\n },\r\n processTelemetry: _processTelemetry,\r\n unload: _unloadPlugin,\r\n update: _updatePlugin,\r\n _id: chainId,\r\n _setNext: function (nextPlugin) {\r\n nextProxy = nextPlugin;\r\n }\r\n };\r\n function _getTelCtx() {\r\n var itemCtx;\r\n // Looks like a plugin didn't pass the (optional) context, so create a new one\r\n if (plugin && isFunction(plugin[strGetTelCtx])) {\r\n // This plugin extends from the BaseTelemetryPlugin so lets use it\r\n itemCtx = plugin[strGetTelCtx]();\r\n }\r\n if (!itemCtx) {\r\n // Create a temporary one\r\n itemCtx = createProcessTelemetryContext(proxyChain, config, core);\r\n }\r\n return itemCtx;\r\n }\r\n function _processChain(itemCtx, processPluginFn, name, details, isAsync) {\r\n var hasRun = false;\r\n var identifier = plugin ? plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */] : strTelemetryPluginChain;\r\n var hasRunContext = itemCtx[strHasRunFlags];\r\n if (!hasRunContext) {\r\n // Assign and populate\r\n hasRunContext = itemCtx[strHasRunFlags] = {};\r\n }\r\n // Ensure that we keep the context in sync\r\n itemCtx.setNext(nextProxy);\r\n if (plugin) {\r\n doPerf(itemCtx[STR_CORE /* @min:%2ecore */](), function () { return identifier + \":\" + name; }, function () {\r\n // Mark this component as having run\r\n hasRunContext[chainId] = true;\r\n try {\r\n // Set a flag on the next plugin so we know if it was attempted to be executed\r\n var nextId = nextProxy ? nextProxy._id : STR_EMPTY;\r\n if (nextId) {\r\n hasRunContext[nextId] = false;\r\n }\r\n hasRun = processPluginFn(itemCtx);\r\n }\r\n catch (error) {\r\n var hasNextRun = nextProxy ? hasRunContext[nextProxy._id] : true;\r\n if (hasNextRun) {\r\n // The next plugin after us has already run so set this one as complete\r\n hasRun = true;\r\n }\r\n if (!nextProxy || !hasNextRun) {\r\n // Either we have no next plugin or the current one did not attempt to call the next plugin\r\n // Which means the current one is the root of the failure so log/report this failure\r\n _throwInternal(itemCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 73 /* _eInternalMessageId.PluginException */, \"Plugin [\" + identifier + \"] failed during \" + name + \" - \" + dumpObj(error) + \", run flags: \" + dumpObj(hasRunContext));\r\n }\r\n }\r\n }, details, isAsync);\r\n }\r\n return hasRun;\r\n }\r\n function _processTelemetry(env, itemCtx) {\r\n itemCtx = itemCtx || _getTelCtx();\r\n function _callProcessTelemetry(itemCtx) {\r\n if (!plugin || !hasProcessTelemetry) {\r\n return false;\r\n }\r\n var pluginState = _getPluginState(plugin);\r\n if (pluginState[_DYN_TEARDOWN /* @min:%2eteardown */] || pluginState[STR_DISABLED]) {\r\n return false;\r\n }\r\n // Ensure that we keep the context in sync (for processNext()), just in case a plugin\r\n // doesn't calls processTelemetry() instead of itemContext.processNext() or some\r\n // other form of error occurred\r\n if (hasSetNext) {\r\n // Backward compatibility setting the next plugin on the instance\r\n plugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */](nextProxy);\r\n }\r\n plugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */](env, itemCtx);\r\n // Process Telemetry is expected to call itemCtx.processNext() or nextPlugin.processTelemetry()\r\n return true;\r\n }\r\n if (!_processChain(itemCtx, _callProcessTelemetry, \"processTelemetry\", function () { return ({ item: env }); }, !(env.sync))) {\r\n // The underlying plugin is either not defined, not enabled or does not have a processTelemetry implementation\r\n // so we still want the next plugin to be executed.\r\n itemCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](env);\r\n }\r\n }\r\n function _unloadPlugin(unloadCtx, unloadState) {\r\n function _callTeardown() {\r\n // Setting default of hasRun as false so the proxyProcessFn() is called as teardown() doesn't have to exist or call unloadNext().\r\n var hasRun = false;\r\n if (plugin) {\r\n var pluginState = _getPluginState(plugin);\r\n var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE /* @min:%2ecore */];\r\n // Only teardown the plugin if it was initialized by the current core (i.e. It's not a shared plugin)\r\n if (plugin && (!pluginCore || pluginCore === unloadCtx.core()) && !pluginState[_DYN_TEARDOWN /* @min:%2eteardown */]) {\r\n // Handle plugins that don't extend from the BaseTelemetryPlugin\r\n pluginState[STR_CORE /* @min:%2ecore */] = null;\r\n pluginState[_DYN_TEARDOWN /* @min:%2eteardown */] = true;\r\n pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = false;\r\n if (plugin[_DYN_TEARDOWN /* @min:%2eteardown */] && plugin[_DYN_TEARDOWN /* @min:%2eteardown */](unloadCtx, unloadState) === true) {\r\n // plugin told us that it was going to (or has) call unloadCtx.processNext()\r\n hasRun = true;\r\n }\r\n }\r\n }\r\n return hasRun;\r\n }\r\n if (!_processChain(unloadCtx, _callTeardown, \"unload\", function () { }, unloadState[_DYN_IS_ASYNC /* @min:%2eisAsync */])) {\r\n // Only called if we hasRun was not true\r\n unloadCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](unloadState);\r\n }\r\n }\r\n function _updatePlugin(updateCtx, updateState) {\r\n function _callUpdate() {\r\n // Setting default of hasRun as false so the proxyProcessFn() is called as teardown() doesn't have to exist or call unloadNext().\r\n var hasRun = false;\r\n if (plugin) {\r\n var pluginState = _getPluginState(plugin);\r\n var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE /* @min:%2ecore */];\r\n // Only update the plugin if it was initialized by the current core (i.e. It's not a shared plugin)\r\n if (plugin && (!pluginCore || pluginCore === updateCtx.core()) && !pluginState[_DYN_TEARDOWN /* @min:%2eteardown */]) {\r\n if (plugin[_DYN_UPDATE /* @min:%2eupdate */] && plugin[_DYN_UPDATE /* @min:%2eupdate */](updateCtx, updateState) === true) {\r\n // plugin told us that it was going to (or has) call unloadCtx.processNext()\r\n hasRun = true;\r\n }\r\n }\r\n }\r\n return hasRun;\r\n }\r\n if (!_processChain(updateCtx, _callUpdate, \"update\", function () { }, false)) {\r\n // Only called if we hasRun was not true\r\n updateCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](updateState);\r\n }\r\n }\r\n return objFreeze(proxyChain);\r\n}\r\n/**\r\n * This class will be removed!\r\n * @deprecated use createProcessTelemetryContext() instead\r\n */\r\nvar ProcessTelemetryContext = /** @class */ (function () {\r\n /**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n */\r\n function ProcessTelemetryContext(pluginChain, config, core, startAt) {\r\n var _self = this;\r\n var context = createProcessTelemetryContext(pluginChain, config, core, startAt);\r\n // Proxy all functions of the context to this object\r\n proxyFunctions(_self, context, objKeys(context));\r\n }\r\n return ProcessTelemetryContext;\r\n}());\r\nexport { ProcessTelemetryContext };\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { strShimFunction, strShimPrototype } from \"@microsoft/applicationinsights-shims\";\r\nimport { _DYN_APPLY, _DYN_LENGTH, _DYN_NAME, _DYN_PUSH, _DYN_SPLICE } from \"../__DynamicConstants\";\r\nimport { getGlobalInst } from \"./EnvUtils\";\r\nimport { _getObjProto, hasOwnProperty } from \"./HelperFuncs\";\r\nvar aiInstrumentHooks = \"_aiHooks\";\r\nvar cbNames = [\r\n \"req\", \"rsp\", \"hkErr\", \"fnErr\"\r\n];\r\n/** @ignore */\r\nfunction _arrLoop(arr, fn) {\r\n if (arr) {\r\n for (var lp = 0; lp < arr[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n if (fn(arr[lp], lp)) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/** @ignore */\r\nfunction _doCallbacks(hooks, callDetails, cbArgs, hookCtx, type) {\r\n if (type >= 0 /* CallbackType.Request */ && type <= 2 /* CallbackType.HookError */) {\r\n _arrLoop(hooks, function (hook, idx) {\r\n var cbks = hook.cbks;\r\n var cb = cbks[cbNames[type]];\r\n if (cb) {\r\n // Set the specific hook context implementation using a lazy creation pattern\r\n callDetails.ctx = function () {\r\n var ctx = hookCtx[idx] = (hookCtx[idx] || {});\r\n return ctx;\r\n };\r\n try {\r\n cb[_DYN_APPLY /* @min:%2eapply */](callDetails.inst, cbArgs);\r\n }\r\n catch (err) {\r\n var orgEx = callDetails.err;\r\n try {\r\n // Report Hook error via the callback\r\n var hookErrorCb = cbks[cbNames[2 /* CallbackType.HookError */]];\r\n if (hookErrorCb) {\r\n callDetails.err = err;\r\n hookErrorCb[_DYN_APPLY /* @min:%2eapply */](callDetails.inst, cbArgs);\r\n }\r\n }\r\n catch (e) {\r\n // Not much we can do here -- swallowing the exception to avoid crashing the hosting app\r\n }\r\n finally {\r\n // restore the original exception (if any)\r\n callDetails.err = orgEx;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n/** @ignore */\r\nfunction _createFunctionHook(aiHook) {\r\n // Define a temporary method that queues-up a the real method call\r\n return function () {\r\n var _a;\r\n var funcThis = this;\r\n // Capture the original arguments passed to the method\r\n var orgArgs = arguments;\r\n var hooks = aiHook.h;\r\n var funcArgs = (_a = {},\r\n _a[_DYN_NAME /* @min:name */] = aiHook.n,\r\n _a.inst = funcThis,\r\n _a.ctx = null,\r\n _a.set = _replaceArg,\r\n _a);\r\n var hookCtx = [];\r\n var cbArgs = _createArgs([funcArgs], orgArgs);\r\n funcArgs.evt = getGlobalInst(\"event\");\r\n function _createArgs(target, theArgs) {\r\n _arrLoop(theArgs, function (arg) {\r\n target[_DYN_PUSH /* @min:%2epush */](arg);\r\n });\r\n return target;\r\n }\r\n function _replaceArg(idx, value) {\r\n orgArgs = _createArgs([], orgArgs);\r\n orgArgs[idx] = value;\r\n cbArgs = _createArgs([funcArgs], orgArgs);\r\n }\r\n // Call the pre-request hooks\r\n _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, 0 /* CallbackType.Request */);\r\n // Call the original function was called\r\n var theFunc = aiHook.f;\r\n if (theFunc) {\r\n try {\r\n funcArgs.rslt = theFunc[_DYN_APPLY /* @min:%2eapply */](funcThis, orgArgs);\r\n }\r\n catch (err) {\r\n // Report the request callback\r\n funcArgs.err = err;\r\n _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, 3 /* CallbackType.FunctionError */);\r\n // rethrow the original exception so anyone listening for it can catch the exception\r\n throw err;\r\n }\r\n }\r\n // Call the post-request hooks\r\n _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, 1 /* CallbackType.Response */);\r\n return funcArgs.rslt;\r\n };\r\n}\r\n/** @ignore */\r\nfunction _getOwner(target, name, checkPrototype, checkParentProto) {\r\n var owner = null;\r\n if (target) {\r\n if (hasOwnProperty(target, name)) {\r\n owner = target;\r\n }\r\n else if (checkPrototype) {\r\n owner = _getOwner(_getObjProto(target), name, checkParentProto, false);\r\n }\r\n }\r\n return owner;\r\n}\r\n/**\r\n * Intercept the named prototype functions for the target class / object\r\n * @param target - The target object\r\n * @param funcName - The function name\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n */\r\nexport function InstrumentProto(target, funcName, callbacks) {\r\n if (target) {\r\n return InstrumentFunc(target[strShimPrototype], funcName, callbacks, false);\r\n }\r\n return null;\r\n}\r\n/**\r\n * Intercept the named prototype functions for the target class / object\r\n * @param target - The target object\r\n * @param funcNames - The function names to intercept and call\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n */\r\nexport function InstrumentProtos(target, funcNames, callbacks) {\r\n if (target) {\r\n return InstrumentFuncs(target[strShimPrototype], funcNames, callbacks, false);\r\n }\r\n return null;\r\n}\r\nfunction _createInstrumentHook(owner, funcName, fn, callbacks) {\r\n var aiHook = fn && fn[aiInstrumentHooks];\r\n if (!aiHook) {\r\n // Only hook the function once\r\n aiHook = {\r\n i: 0,\r\n n: funcName,\r\n f: fn,\r\n h: []\r\n };\r\n // Override (hook) the original function\r\n var newFunc = _createFunctionHook(aiHook);\r\n newFunc[aiInstrumentHooks] = aiHook; // Tag and store the function hooks\r\n owner[funcName] = newFunc;\r\n }\r\n var theHook = {\r\n // tslint:disable:object-literal-shorthand\r\n id: aiHook.i,\r\n cbks: callbacks,\r\n rm: function () {\r\n // DO NOT Use () => { shorthand for the function as the this gets replaced\r\n // with the outer this and not the this for theHook instance.\r\n var id = this.id;\r\n _arrLoop(aiHook.h, function (hook, idx) {\r\n if (hook.id === id) {\r\n aiHook.h[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n return 1;\r\n }\r\n });\r\n }\r\n // tslint:enable:object-literal-shorthand\r\n };\r\n aiHook.i++;\r\n aiHook.h[_DYN_PUSH /* @min:%2epush */](theHook);\r\n return theHook;\r\n}\r\n/**\r\n * Intercept the named prototype functions for the target class / object\r\n * @param target - The target object\r\n * @param funcName - The function name\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n * @param checkPrototype - If the function doesn't exist on the target should it attempt to hook the prototype function\r\n * @param checkParentProto - If the function doesn't exist on the target or it's prototype should it attempt to hook the parent's prototype\r\n */\r\nexport function InstrumentFunc(target, funcName, callbacks, checkPrototype, checkParentProto) {\r\n if (checkPrototype === void 0) { checkPrototype = true; }\r\n if (target && funcName && callbacks) {\r\n var owner = _getOwner(target, funcName, checkPrototype, checkParentProto);\r\n if (owner) {\r\n var fn = owner[funcName];\r\n if (typeof fn === strShimFunction) {\r\n return _createInstrumentHook(owner, funcName, fn, callbacks);\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Intercept the named functions for the target class / object\r\n * @param target - The target object\r\n * @param funcNames - The function names to intercept and call\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n * @param checkPrototype - If the function doesn't exist on the target should it attempt to hook the prototype function\r\n * @param checkParentProto - If the function doesn't exist on the target or it's prototype should it attempt to hook the parent's prototype\r\n */\r\nexport function InstrumentFuncs(target, funcNames, callbacks, checkPrototype, checkParentProto) {\r\n if (checkPrototype === void 0) { checkPrototype = true; }\r\n var hooks = null;\r\n _arrLoop(funcNames, function (funcName) {\r\n var hook = InstrumentFunc(target, funcName, callbacks, checkPrototype, checkParentProto);\r\n if (hook) {\r\n if (!hooks) {\r\n hooks = [];\r\n }\r\n hooks[_DYN_PUSH /* @min:%2epush */](hook);\r\n }\r\n });\r\n return hooks;\r\n}\r\n/**\r\n * Add an instrumentation hook to the provided named \"event\" for the target class / object, this doesn't check whether the\r\n * named \"event\" is in fact a function and just assigns the instrumentation hook to the target[evtName]\r\n * @param target - The target object\r\n * @param evtName - The name of the event\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n * @param checkPrototype - If the function doesn't exist on the target should it attempt to hook the prototype function\r\n * @param checkParentProto - If the function doesn't exist on the target or it's prototype should it attempt to hook the parent's prototype\r\n */\r\nexport function InstrumentEvent(target, evtName, callbacks, checkPrototype, checkParentProto) {\r\n if (target && evtName && callbacks) {\r\n var owner = _getOwner(target, evtName, checkPrototype, checkParentProto) || target;\r\n if (owner) {\r\n return _createInstrumentHook(owner, evtName, owner[evtName], callbacks);\r\n }\r\n }\r\n return null;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { _DYN_DIAG_LOG, _DYN_PUSH } from \"../__DynamicConstants\";\r\nimport { _throwInternal } from \"./DiagnosticLogger\";\r\nimport { dumpObj } from \"./EnvUtils\";\r\nimport { arrForEach } from \"./HelperFuncs\";\r\nexport function createUnloadHandlerContainer() {\r\n var handlers = [];\r\n function _addHandler(handler) {\r\n if (handler) {\r\n handlers[_DYN_PUSH /* @min:%2epush */](handler);\r\n }\r\n }\r\n function _runHandlers(unloadCtx, unloadState) {\r\n arrForEach(handlers, function (handler) {\r\n try {\r\n handler(unloadCtx, unloadState);\r\n }\r\n catch (e) {\r\n _throwInternal(unloadCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 73 /* _eInternalMessageId.PluginException */, \"Unexpected error calling unload handler - \" + dumpObj(e));\r\n }\r\n });\r\n handlers = [];\r\n }\r\n return {\r\n add: _addHandler,\r\n run: _runHandlers\r\n };\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _DYN_CREATE_NEW, _DYN_DIAG_LOG, _DYN_GET_NEXT, _DYN_GET_PROCESS_TEL_CONT0, _DYN_INITIALIZE, _DYN_IS_ASYNC, _DYN_IS_INITIALIZED, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_TEARDOWN, _DYN_UPDATE, _DYN__DO_TEARDOWN } from \"../__DynamicConstants\";\r\nimport { arrForEach, isArray, isFunction, isNullOrUndefined, proxyFunctionAs, setValue } from \"./HelperFuncs\";\r\nimport { STR_CORE, STR_EXTENSION_CONFIG, STR_PROCESS_TELEMETRY } from \"./InternalConstants\";\r\nimport { createProcessTelemetryContext, createProcessTelemetryUnloadContext, createProcessTelemetryUpdateContext } from \"./ProcessTelemetryContext\";\r\nimport { createUnloadHandlerContainer } from \"./UnloadHandlerContainer\";\r\nvar strGetPlugin = \"getPlugin\";\r\n/**\r\n * BaseTelemetryPlugin provides a basic implementation of the ITelemetryPlugin interface so that plugins\r\n * can avoid implementation the same set of boiler plate code as well as provide a base\r\n * implementation so that new default implementations can be added without breaking all plugins.\r\n */\r\nvar BaseTelemetryPlugin = /** @class */ (function () {\r\n function BaseTelemetryPlugin() {\r\n var _self = this; // Setting _self here as it's used outside of the dynamicProto as well\r\n // NOTE!: DON'T set default values here, instead set them in the _initDefaults() function as it is also called during teardown()\r\n var _isinitialized;\r\n var _rootCtx; // Used as the root context, holding the current config and initialized core\r\n var _nextPlugin; // Used for backward compatibility where plugins don't call the main pipeline\r\n var _unloadHandlerContainer;\r\n var _hooks;\r\n _initDefaults();\r\n dynamicProto(BaseTelemetryPlugin, _self, function (_self) {\r\n _self[_DYN_INITIALIZE /* @min:%2einitialize */] = function (config, core, extensions, pluginChain) {\r\n _setDefaults(config, core, pluginChain);\r\n _isinitialized = true;\r\n };\r\n _self[_DYN_TEARDOWN /* @min:%2eteardown */] = function (unloadCtx, unloadState) {\r\n var _a;\r\n // If this plugin has already been torn down (not operational) or is not initialized (core is not set)\r\n // or the core being used for unload was not the same core used for initialization.\r\n var core = _self[STR_CORE /* @min:%2ecore */];\r\n if (!core || (unloadCtx && core !== unloadCtx[STR_CORE /* @min:%2ecore */]())) {\r\n // Do Nothing as either the plugin is not initialized or was not initialized by the current core\r\n return;\r\n }\r\n var result;\r\n var unloadDone = false;\r\n var theUnloadCtx = unloadCtx || createProcessTelemetryUnloadContext(null, core, _nextPlugin && _nextPlugin[strGetPlugin] ? _nextPlugin[strGetPlugin]() : _nextPlugin);\r\n var theUnloadState = unloadState || (_a = {\r\n reason: 0 /* TelemetryUnloadReason.ManualTeardown */\r\n },\r\n _a[_DYN_IS_ASYNC /* @min:isAsync */] = false,\r\n _a);\r\n function _unloadCallback() {\r\n if (!unloadDone) {\r\n unloadDone = true;\r\n _unloadHandlerContainer.run(theUnloadCtx, unloadState);\r\n var oldHooks = _hooks;\r\n _hooks = [];\r\n // Remove all instrumentation hooks\r\n arrForEach(oldHooks, function (fn) {\r\n fn.rm();\r\n });\r\n if (result === true) {\r\n theUnloadCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](theUnloadState);\r\n }\r\n _initDefaults();\r\n }\r\n }\r\n if (!_self[_DYN__DO_TEARDOWN /* @min:%2e_doTeardown */] || _self[_DYN__DO_TEARDOWN /* @min:%2e_doTeardown */](theUnloadCtx, theUnloadState, _unloadCallback) !== true) {\r\n _unloadCallback();\r\n }\r\n else {\r\n // Tell the caller that we will be calling processNext()\r\n result = true;\r\n }\r\n return result;\r\n };\r\n _self[_DYN_UPDATE /* @min:%2eupdate */] = function (updateCtx, updateState) {\r\n // If this plugin has already been torn down (not operational) or is not initialized (core is not set)\r\n // or the core being used for unload was not the same core used for initialization.\r\n var core = _self[STR_CORE /* @min:%2ecore */];\r\n if (!core || (updateCtx && core !== updateCtx[STR_CORE /* @min:%2ecore */]())) {\r\n // Do Nothing\r\n return;\r\n }\r\n var result;\r\n var updateDone = false;\r\n var theUpdateCtx = updateCtx || createProcessTelemetryUpdateContext(null, core, _nextPlugin && _nextPlugin[strGetPlugin] ? _nextPlugin[strGetPlugin]() : _nextPlugin);\r\n var theUpdateState = updateState || {\r\n reason: 0 /* TelemetryUpdateReason.Unknown */\r\n };\r\n function _updateCallback() {\r\n if (!updateDone) {\r\n updateDone = true;\r\n _setDefaults(theUpdateCtx.getCfg(), theUpdateCtx.core(), theUpdateCtx[_DYN_GET_NEXT /* @min:%2egetNext */]());\r\n }\r\n }\r\n if (!_self._doUpdate || _self._doUpdate(theUpdateCtx, theUpdateState, _updateCallback) !== true) {\r\n _updateCallback();\r\n }\r\n else {\r\n result = true;\r\n }\r\n return result;\r\n };\r\n _self._addHook = function (hooks) {\r\n if (hooks) {\r\n if (isArray(hooks)) {\r\n _hooks = _hooks.concat(hooks);\r\n }\r\n else {\r\n _hooks[_DYN_PUSH /* @min:%2epush */](hooks);\r\n }\r\n }\r\n };\r\n proxyFunctionAs(_self, \"_addUnloadCb\", function () { return _unloadHandlerContainer; }, \"add\");\r\n });\r\n // These are added after the dynamicProto so that are not moved to the prototype\r\n _self[_DYN_DIAG_LOG /* @min:%2ediagLog */] = function (itemCtx) {\r\n return _getTelCtx(itemCtx)[_DYN_DIAG_LOG /* @min:%2ediagLog */]();\r\n };\r\n _self[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = function () {\r\n return _isinitialized;\r\n };\r\n _self.setInitialized = function (isInitialized) {\r\n _isinitialized = isInitialized;\r\n };\r\n // _self.getNextPlugin = () => DO NOT IMPLEMENT\r\n // Sub-classes of this base class *should* not be relying on this value and instead\r\n // should use processNext() function. If you require access to the plugin use the\r\n // IProcessTelemetryContext.getNext().getPlugin() while in the pipeline, Note getNext() may return null.\r\n _self[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */] = function (next) {\r\n _nextPlugin = next;\r\n };\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = function (env, itemCtx) {\r\n if (itemCtx) {\r\n // Normal core execution sequence\r\n itemCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](env);\r\n }\r\n else if (_nextPlugin && isFunction(_nextPlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */])) {\r\n // Looks like backward compatibility or out of band processing. And as it looks\r\n // like a ITelemetryPlugin or ITelemetryPluginChain, just call processTelemetry\r\n _nextPlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */](env, null);\r\n }\r\n };\r\n _self._getTelCtx = _getTelCtx;\r\n function _getTelCtx(currentCtx) {\r\n if (currentCtx === void 0) { currentCtx = null; }\r\n var itemCtx = currentCtx;\r\n if (!itemCtx) {\r\n var rootCtx = _rootCtx || createProcessTelemetryContext(null, {}, _self[STR_CORE /* @min:%2ecore */]);\r\n // tslint:disable-next-line: prefer-conditional-expression\r\n if (_nextPlugin && _nextPlugin[strGetPlugin]) {\r\n // Looks like a chain object\r\n itemCtx = rootCtx[_DYN_CREATE_NEW /* @min:%2ecreateNew */](null, _nextPlugin[strGetPlugin]);\r\n }\r\n else {\r\n itemCtx = rootCtx[_DYN_CREATE_NEW /* @min:%2ecreateNew */](null, _nextPlugin);\r\n }\r\n }\r\n return itemCtx;\r\n }\r\n function _setDefaults(config, core, pluginChain) {\r\n if (config) {\r\n // Make sure the extensionConfig exists\r\n setValue(config, STR_EXTENSION_CONFIG, [], null, isNullOrUndefined);\r\n }\r\n if (!pluginChain && core) {\r\n // Get the first plugin from the core\r\n pluginChain = core[_DYN_GET_PROCESS_TEL_CONT0 /* @min:%2egetProcessTelContext */]()[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n }\r\n var nextPlugin = _nextPlugin;\r\n if (_nextPlugin && _nextPlugin[strGetPlugin]) {\r\n // If it looks like a proxy/chain then get the plugin\r\n nextPlugin = _nextPlugin[strGetPlugin]();\r\n }\r\n // Support legacy plugins where core was defined as a property\r\n _self[STR_CORE /* @min:%2ecore */] = core;\r\n _rootCtx = createProcessTelemetryContext(pluginChain, config, core, nextPlugin);\r\n }\r\n function _initDefaults() {\r\n _isinitialized = false;\r\n _self[STR_CORE /* @min:%2ecore */] = null;\r\n _rootCtx = null;\r\n _nextPlugin = null;\r\n _hooks = [];\r\n _unloadHandlerContainer = createUnloadHandlerContainer();\r\n }\r\n }\r\n// Removed Stub for BaseTelemetryPlugin.prototype.initialize.\r\n// Removed Stub for BaseTelemetryPlugin.prototype.teardown.\r\n// Removed Stub for BaseTelemetryPlugin.prototype.update.\r\n// Removed Stub for BaseTelemetryPlugin.prototype._addUnloadCb.\r\n// Removed Stub for BaseTelemetryPlugin.prototype._addHook.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n BaseTelemetryPlugin.__ieDyn=1;\n\n return BaseTelemetryPlugin;\r\n}());\r\nexport { BaseTelemetryPlugin };\r\n","/*\n * Application Insights JavaScript SDK - Web Analytics, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// @skip-file-minify\r\n// ##############################################################\r\n// AUTO GENERATED FILE: This file is Auto Generated during build.\r\n// ##############################################################\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\nexport var _DYN_TO_STRING = \"toString\"; // Count: 4\r\nexport var _DYN_DISABLE_EXCEPTION_TR0 = \"disableExceptionTracking\"; // Count: 3\r\nexport var _DYN_AUTO_TRACK_PAGE_VISI1 = \"autoTrackPageVisitTime\"; // Count: 4\r\nexport var _DYN_OVERRIDE_PAGE_VIEW_D2 = \"overridePageViewDuration\"; // Count: 3\r\nexport var _DYN_ENABLE_UNHANDLED_PRO3 = \"enableUnhandledPromiseRejectionTracking\"; // Count: 3\r\nexport var _DYN_SAMPLING_PERCENTAGE = \"samplingPercentage\"; // Count: 4\r\nexport var _DYN_IS_STORAGE_USE_DISAB4 = \"isStorageUseDisabled\"; // Count: 4\r\nexport var _DYN_IS_BROWSER_LINK_TRAC5 = \"isBrowserLinkTrackingEnabled\"; // Count: 4\r\nexport var _DYN_ENABLE_AUTO_ROUTE_TR6 = \"enableAutoRouteTracking\"; // Count: 3\r\nexport var _DYN_NAME_PREFIX = \"namePrefix\"; // Count: 3\r\nexport var _DYN_DISABLE_FLUSH_ON_BEF7 = \"disableFlushOnBeforeUnload\"; // Count: 3\r\nexport var _DYN_DISABLE_FLUSH_ON_UNL8 = \"disableFlushOnUnload\"; // Count: 2\r\nexport var _DYN_CORE = \"core\"; // Count: 7\r\nexport var _DYN_DATA_TYPE = \"dataType\"; // Count: 8\r\nexport var _DYN_ENVELOPE_TYPE = \"envelopeType\"; // Count: 7\r\nexport var _DYN_DIAG_LOG = \"diagLog\"; // Count: 13\r\nexport var _DYN_TRACK = \"track\"; // Count: 7\r\nexport var _DYN_TRACK_PAGE_VIEW = \"trackPageView\"; // Count: 4\r\nexport var _DYN_TRACK_PREVIOUS_PAGE_9 = \"trackPreviousPageVisit\"; // Count: 3\r\nexport var _DYN_SEND_PAGE_VIEW_INTER10 = \"sendPageViewInternal\"; // Count: 7\r\nexport var _DYN_SEND_PAGE_VIEW_PERFO11 = \"sendPageViewPerformanceInternal\"; // Count: 3\r\nexport var _DYN_POPULATE_PAGE_VIEW_P12 = \"populatePageViewPerformanceEvent\"; // Count: 3\r\nexport var _DYN_HREF = \"href\"; // Count: 6\r\nexport var _DYN_SEND_EXCEPTION_INTER13 = \"sendExceptionInternal\"; // Count: 2\r\nexport var _DYN_EXCEPTION = \"exception\"; // Count: 3\r\nexport var _DYN_ERROR = \"error\"; // Count: 5\r\nexport var _DYN__ONERROR = \"_onerror\"; // Count: 3\r\nexport var _DYN_ERROR_SRC = \"errorSrc\"; // Count: 3\r\nexport var _DYN_LINE_NUMBER = \"lineNumber\"; // Count: 5\r\nexport var _DYN_COLUMN_NUMBER = \"columnNumber\"; // Count: 5\r\nexport var _DYN_MESSAGE = \"message\"; // Count: 4\r\nexport var _DYN__CREATE_AUTO_EXCEPTI14 = \"CreateAutoException\"; // Count: 3\r\nexport var _DYN_ADD_TELEMETRY_INITIA15 = \"addTelemetryInitializer\"; // Count: 4\r\nexport var _DYN_DURATION = \"duration\"; // Count: 10\r\nexport var _DYN_LENGTH = \"length\"; // Count: 5\r\nexport var _DYN_IS_PERFORMANCE_TIMIN16 = \"isPerformanceTimingSupported\"; // Count: 2\r\nexport var _DYN_GET_PERFORMANCE_TIMI17 = \"getPerformanceTiming\"; // Count: 2\r\nexport var _DYN_NAVIGATION_START = \"navigationStart\"; // Count: 4\r\nexport var _DYN_SHOULD_COLLECT_DURAT18 = \"shouldCollectDuration\"; // Count: 3\r\nexport var _DYN_IS_PERFORMANCE_TIMIN19 = \"isPerformanceTimingDataReady\"; // Count: 2\r\nexport var _DYN_GET_ENTRIES_BY_TYPE = \"getEntriesByType\"; // Count: 3\r\nexport var _DYN_RESPONSE_START = \"responseStart\"; // Count: 5\r\nexport var _DYN_REQUEST_START = \"requestStart\"; // Count: 3\r\nexport var _DYN_LOAD_EVENT_END = \"loadEventEnd\"; // Count: 4\r\nexport var _DYN_RESPONSE_END = \"responseEnd\"; // Count: 5\r\nexport var _DYN_CONNECT_END = \"connectEnd\"; // Count: 4\r\nexport var _DYN_PAGE_VISIT_START_TIM20 = \"pageVisitStartTime\"; // Count: 2\r\n","/*\n * Application Insights JavaScript SDK - Web Analytics, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { dateTimeUtilsDuration } from \"@microsoft/applicationinsights-common\";\r\nimport { _throwInternal, arrForEach, dumpObj, getDocument, getExceptionName, getLocation, isNullOrUndefined } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_DURATION, _DYN_GET_PERFORMANCE_TIMI17, _DYN_HREF, _DYN_IS_PERFORMANCE_TIMIN16, _DYN_IS_PERFORMANCE_TIMIN19, _DYN_LENGTH, _DYN_NAVIGATION_START, _DYN_POPULATE_PAGE_VIEW_P12, _DYN_SEND_PAGE_VIEW_INTER10, _DYN_SEND_PAGE_VIEW_PERFO11, _DYN_SHOULD_COLLECT_DURAT18, _DYN_TRACK_PAGE_VIEW } from \"../../__DynamicConstants\";\r\nvar _isWebWorker = null;\r\nfunction isWebWorker() {\r\n if (_isWebWorker == null) {\r\n try {\r\n _isWebWorker = !!(self && self instanceof WorkerGlobalScope);\r\n }\r\n catch (e) {\r\n _isWebWorker = false;\r\n }\r\n }\r\n return _isWebWorker;\r\n}\r\n/**\r\n * Class encapsulates sending page views and page view performance telemetry.\r\n */\r\nvar PageViewManager = /** @class */ (function () {\r\n function PageViewManager(appInsights, overridePageViewDuration, core, pageViewPerformanceManager) {\r\n dynamicProto(PageViewManager, this, function (_self) {\r\n var queueTimer = null;\r\n var itemQueue = [];\r\n var pageViewPerformanceSent = false;\r\n var _logger;\r\n if (core) {\r\n _logger = core.logger;\r\n }\r\n function _flushChannels(isAsync) {\r\n if (core) {\r\n core.flush(isAsync);\r\n }\r\n }\r\n function _startTimer() {\r\n if (!queueTimer) {\r\n queueTimer = setTimeout((function () {\r\n queueTimer = null;\r\n var allItems = itemQueue.slice(0);\r\n var doFlush = false;\r\n itemQueue = [];\r\n arrForEach(allItems, function (item) {\r\n if (!item()) {\r\n // Not processed so rescheduled\r\n itemQueue.push(item);\r\n }\r\n else {\r\n doFlush = true;\r\n }\r\n });\r\n if (itemQueue[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n _startTimer();\r\n }\r\n if (doFlush) {\r\n // We process at least one item so flush the queue\r\n _flushChannels(true);\r\n }\r\n }), 100);\r\n }\r\n }\r\n function _addQueue(cb) {\r\n itemQueue.push(cb);\r\n _startTimer();\r\n }\r\n _self[_DYN_TRACK_PAGE_VIEW /* @min:%2etrackPageView */] = function (pageView, customProperties) {\r\n var name = pageView.name;\r\n if (isNullOrUndefined(name) || typeof name !== \"string\") {\r\n var doc = getDocument();\r\n name = pageView.name = doc && doc.title || \"\";\r\n }\r\n var uri = pageView.uri;\r\n if (isNullOrUndefined(uri) || typeof uri !== \"string\") {\r\n var location_1 = getLocation();\r\n uri = pageView.uri = location_1 && location_1[_DYN_HREF /* @min:%2ehref */] || \"\";\r\n }\r\n // case 1a. if performance timing is not supported by the browser, send the page view telemetry with the duration provided by the user. If the user\r\n // do not provide the duration, set duration to undefined\r\n // Also this is case 4\r\n if (!pageViewPerformanceManager[_DYN_IS_PERFORMANCE_TIMIN16 /* @min:%2eisPerformanceTimingSupported */]()) {\r\n appInsights[_DYN_SEND_PAGE_VIEW_INTER10 /* @min:%2esendPageViewInternal */](pageView, customProperties);\r\n _flushChannels(true);\r\n if (!isWebWorker()) {\r\n // no navigation timing (IE 8, iOS Safari 8.4, Opera Mini 8 - see http://caniuse.com/#feat=nav-timing)\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 25 /* _eInternalMessageId.NavigationTimingNotSupported */, \"trackPageView: navigation timing API used for calculation of page duration is not supported in this browser. This page view will be collected without duration and timing info.\");\r\n }\r\n return;\r\n }\r\n var pageViewSent = false;\r\n var customDuration;\r\n // if the performance timing is supported by the browser, calculate the custom duration\r\n var start = pageViewPerformanceManager[_DYN_GET_PERFORMANCE_TIMI17 /* @min:%2egetPerformanceTiming */]()[_DYN_NAVIGATION_START /* @min:%2enavigationStart */];\r\n if (start > 0) {\r\n customDuration = dateTimeUtilsDuration(start, +new Date);\r\n if (!pageViewPerformanceManager[_DYN_SHOULD_COLLECT_DURAT18 /* @min:%2eshouldCollectDuration */](customDuration)) {\r\n customDuration = undefined;\r\n }\r\n }\r\n // if the user has provided duration, send a page view telemetry with the provided duration. Otherwise, if\r\n // overridePageViewDuration is set to true, send a page view telemetry with the custom duration calculated earlier\r\n var duration;\r\n if (!isNullOrUndefined(customProperties) &&\r\n !isNullOrUndefined(customProperties[_DYN_DURATION /* @min:%2eduration */])) {\r\n duration = customProperties[_DYN_DURATION /* @min:%2eduration */];\r\n }\r\n if (overridePageViewDuration || !isNaN(duration)) {\r\n if (isNaN(duration)) {\r\n // case 3\r\n if (!customProperties) {\r\n customProperties = {};\r\n }\r\n customProperties[_DYN_DURATION /* @min:%2eduration */] = customDuration;\r\n }\r\n // case 2\r\n appInsights[_DYN_SEND_PAGE_VIEW_INTER10 /* @min:%2esendPageViewInternal */](pageView, customProperties);\r\n _flushChannels(true);\r\n pageViewSent = true;\r\n }\r\n // now try to send the page view performance telemetry\r\n var maxDurationLimit = 60000;\r\n if (!customProperties) {\r\n customProperties = {};\r\n }\r\n // Queue the event for processing\r\n _addQueue(function () {\r\n var processed = false;\r\n try {\r\n if (pageViewPerformanceManager[_DYN_IS_PERFORMANCE_TIMIN19 /* @min:%2eisPerformanceTimingDataReady */]()) {\r\n processed = true;\r\n var pageViewPerformance = {\r\n name: name,\r\n uri: uri\r\n };\r\n pageViewPerformanceManager[_DYN_POPULATE_PAGE_VIEW_P12 /* @min:%2epopulatePageViewPerformanceEvent */](pageViewPerformance);\r\n if (!pageViewPerformance.isValid && !pageViewSent) {\r\n // If navigation timing gives invalid numbers, then go back to \"override page view duration\" mode.\r\n // That's the best value we can get that makes sense.\r\n customProperties[_DYN_DURATION /* @min:%2eduration */] = customDuration;\r\n appInsights[_DYN_SEND_PAGE_VIEW_INTER10 /* @min:%2esendPageViewInternal */](pageView, customProperties);\r\n }\r\n else {\r\n if (!pageViewSent) {\r\n customProperties[_DYN_DURATION /* @min:%2eduration */] = pageViewPerformance.durationMs;\r\n appInsights[_DYN_SEND_PAGE_VIEW_INTER10 /* @min:%2esendPageViewInternal */](pageView, customProperties);\r\n }\r\n if (!pageViewPerformanceSent) {\r\n appInsights[_DYN_SEND_PAGE_VIEW_PERFO11 /* @min:%2esendPageViewPerformanceInternal */](pageViewPerformance, customProperties);\r\n pageViewPerformanceSent = true;\r\n }\r\n }\r\n }\r\n else if (start > 0 && dateTimeUtilsDuration(start, +new Date) > maxDurationLimit) {\r\n // if performance timings are not ready but we exceeded the maximum duration limit, just log a page view telemetry\r\n // with the maximum duration limit. Otherwise, keep waiting until performance timings are ready\r\n processed = true;\r\n if (!pageViewSent) {\r\n customProperties[_DYN_DURATION /* @min:%2eduration */] = maxDurationLimit;\r\n appInsights[_DYN_SEND_PAGE_VIEW_INTER10 /* @min:%2esendPageViewInternal */](pageView, customProperties);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _throwInternal(_logger, 1 /* eLoggingSeverity.CRITICAL */, 38 /* _eInternalMessageId.TrackPVFailedCalc */, \"trackPageView failed on page load calculation: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n return processed;\r\n });\r\n };\r\n _self.teardown = function (unloadCtx, unloadState) {\r\n if (queueTimer) {\r\n clearTimeout(queueTimer);\r\n queueTimer = null;\r\n var allItems = itemQueue.slice(0);\r\n var doFlush_1 = false;\r\n itemQueue = [];\r\n arrForEach(allItems, function (item) {\r\n if (item()) {\r\n doFlush_1 = true;\r\n }\r\n });\r\n }\r\n };\r\n });\r\n }\r\n// Removed Stub for PageViewManager.prototype.trackPageView.\r\n// Removed Stub for PageViewManager.prototype.teardown.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n PageViewManager.__ieDyn=1;\n\n return PageViewManager;\r\n}());\r\nexport { PageViewManager };\r\n","/*\n * Application Insights JavaScript SDK - Web Analytics, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { dateTimeUtilsDuration, msToTimeSpan } from \"@microsoft/applicationinsights-common\";\r\nimport { _throwInternal, getNavigator, getPerformance, safeGetLogger } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_CONNECT_END, _DYN_DURATION, _DYN_GET_ENTRIES_BY_TYPE, _DYN_GET_PERFORMANCE_TIMI17, _DYN_IS_PERFORMANCE_TIMIN16, _DYN_IS_PERFORMANCE_TIMIN19, _DYN_LENGTH, _DYN_LOAD_EVENT_END, _DYN_NAVIGATION_START, _DYN_POPULATE_PAGE_VIEW_P12, _DYN_REQUEST_START, _DYN_RESPONSE_END, _DYN_RESPONSE_START, _DYN_SHOULD_COLLECT_DURAT18 } from \"../../__DynamicConstants\";\r\nvar MAX_DURATION_ALLOWED = 3600000; // 1h\r\nvar botAgentNames = [\"googlebot\", \"adsbot-google\", \"apis-google\", \"mediapartners-google\"];\r\nfunction _isPerformanceTimingSupported() {\r\n var perf = getPerformance();\r\n return perf && !!perf.timing;\r\n}\r\nfunction _isPerformanceNavigationTimingSupported() {\r\n var perf = getPerformance();\r\n return perf && perf.getEntriesByType && perf.getEntriesByType(\"navigation\")[_DYN_LENGTH /* @min:%2elength */] > 0;\r\n}\r\nfunction _isPerformanceTimingDataReady() {\r\n var perf = getPerformance();\r\n var timing = perf ? perf.timing : 0;\r\n return timing\r\n && timing.domainLookupStart > 0\r\n && timing[_DYN_NAVIGATION_START /* @min:%2enavigationStart */] > 0\r\n && timing[_DYN_RESPONSE_START /* @min:%2eresponseStart */] > 0\r\n && timing[_DYN_REQUEST_START /* @min:%2erequestStart */] > 0\r\n && timing[_DYN_LOAD_EVENT_END /* @min:%2eloadEventEnd */] > 0\r\n && timing[_DYN_RESPONSE_END /* @min:%2eresponseEnd */] > 0\r\n && timing[_DYN_CONNECT_END /* @min:%2econnectEnd */] > 0\r\n && timing.domLoading > 0;\r\n}\r\nfunction _getPerformanceTiming() {\r\n if (_isPerformanceTimingSupported()) {\r\n return getPerformance().timing;\r\n }\r\n return null;\r\n}\r\nfunction _getPerformanceNavigationTiming() {\r\n if (_isPerformanceNavigationTimingSupported()) {\r\n return getPerformance()[_DYN_GET_ENTRIES_BY_TYPE /* @min:%2egetEntriesByType */](\"navigation\")[0];\r\n }\r\n return null;\r\n}\r\n/**\r\n* This method tells if given durations should be excluded from collection.\r\n*/\r\nfunction _shouldCollectDuration() {\r\n var durations = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n durations[_i] = arguments[_i];\r\n }\r\n var _navigator = getNavigator() || {};\r\n // a full list of Google crawlers user agent strings - https://support.google.com/webmasters/answer/1061943?hl=en\r\n var userAgent = _navigator.userAgent;\r\n var isGoogleBot = false;\r\n if (userAgent) {\r\n for (var i = 0; i < botAgentNames[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n isGoogleBot = isGoogleBot || userAgent.toLowerCase().indexOf(botAgentNames[i]) !== -1;\r\n }\r\n }\r\n if (isGoogleBot) {\r\n // Don't report durations for GoogleBot, it is returning invalid values in performance.timing API.\r\n return false;\r\n }\r\n else {\r\n // for other page views, don't report if it's outside of a reasonable range\r\n for (var i = 0; i < durations[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n if (durations[i] < 0 || durations[i] >= MAX_DURATION_ALLOWED) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Class encapsulates sending page view performance telemetry.\r\n */\r\nvar PageViewPerformanceManager = /** @class */ (function () {\r\n function PageViewPerformanceManager(core) {\r\n var _logger = safeGetLogger(core);\r\n dynamicProto(PageViewPerformanceManager, this, function (_self) {\r\n _self[_DYN_POPULATE_PAGE_VIEW_P12 /* @min:%2epopulatePageViewPerformanceEvent */] = function (pageViewPerformance) {\r\n pageViewPerformance.isValid = false;\r\n /*\r\n * http://www.w3.org/TR/navigation-timing/#processing-model\r\n * |-navigationStart\r\n * | |-connectEnd\r\n * | ||-requestStart\r\n * | || |-responseStart\r\n * | || | |-responseEnd\r\n * | || | |\r\n * | || | | |-loadEventEnd\r\n * |---network---||---request---|---response---|---dom---|\r\n * |--------------------------total----------------------|\r\n *\r\n * total = The difference between the load event of the current document is completed and the first recorded timestamp of the performance entry : https://developer.mozilla.org/en-US/docs/Web/Performance/Navigation_and_resource_timings#duration\r\n * network = Redirect time + App Cache + DNS lookup time + TCP connection time\r\n * request = Request time : https://developer.mozilla.org/en-US/docs/Web/Performance/Navigation_and_resource_timings#request_time\r\n * response = Response time\r\n * dom = Document load time : https://html.spec.whatwg.org/multipage/dom.html#document-load-timing-info\r\n * = Document processing time : https://developers.google.com/web/fundamentals/performance/navigation-and-resource-timing/#document_processing\r\n * + Loading time : https://developers.google.com/web/fundamentals/performance/navigation-and-resource-timing/#loading\r\n */\r\n var navigationTiming = _getPerformanceNavigationTiming();\r\n var timing = _getPerformanceTiming();\r\n var total = 0;\r\n var network = 0;\r\n var request = 0;\r\n var response = 0;\r\n var dom = 0;\r\n if (navigationTiming || timing) {\r\n if (navigationTiming) {\r\n total = navigationTiming[_DYN_DURATION /* @min:%2eduration */];\r\n /**\r\n * support both cases:\r\n * - startTime is always zero: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\r\n * - for older browsers where the startTime is not zero\r\n */\r\n network = navigationTiming.startTime === 0 ? navigationTiming[_DYN_CONNECT_END /* @min:%2econnectEnd */] : dateTimeUtilsDuration(navigationTiming.startTime, navigationTiming[_DYN_CONNECT_END /* @min:%2econnectEnd */]);\r\n request = dateTimeUtilsDuration(navigationTiming.requestStart, navigationTiming[_DYN_RESPONSE_START /* @min:%2eresponseStart */]);\r\n response = dateTimeUtilsDuration(navigationTiming[_DYN_RESPONSE_START /* @min:%2eresponseStart */], navigationTiming[_DYN_RESPONSE_END /* @min:%2eresponseEnd */]);\r\n dom = dateTimeUtilsDuration(navigationTiming.responseEnd, navigationTiming[_DYN_LOAD_EVENT_END /* @min:%2eloadEventEnd */]);\r\n }\r\n else {\r\n total = dateTimeUtilsDuration(timing[_DYN_NAVIGATION_START /* @min:%2enavigationStart */], timing[_DYN_LOAD_EVENT_END /* @min:%2eloadEventEnd */]);\r\n network = dateTimeUtilsDuration(timing[_DYN_NAVIGATION_START /* @min:%2enavigationStart */], timing[_DYN_CONNECT_END /* @min:%2econnectEnd */]);\r\n request = dateTimeUtilsDuration(timing.requestStart, timing[_DYN_RESPONSE_START /* @min:%2eresponseStart */]);\r\n response = dateTimeUtilsDuration(timing[_DYN_RESPONSE_START /* @min:%2eresponseStart */], timing[_DYN_RESPONSE_END /* @min:%2eresponseEnd */]);\r\n dom = dateTimeUtilsDuration(timing.responseEnd, timing[_DYN_LOAD_EVENT_END /* @min:%2eloadEventEnd */]);\r\n }\r\n if (total === 0) {\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 10 /* _eInternalMessageId.ErrorPVCalc */, \"error calculating page view performance.\", { total: total, network: network, request: request, response: response, dom: dom });\r\n }\r\n else if (!_self[_DYN_SHOULD_COLLECT_DURAT18 /* @min:%2eshouldCollectDuration */](total, network, request, response, dom)) {\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 45 /* _eInternalMessageId.InvalidDurationValue */, \"Invalid page load duration value. Browser perf data won't be sent.\", { total: total, network: network, request: request, response: response, dom: dom });\r\n }\r\n else if (total < Math.floor(network) + Math.floor(request) + Math.floor(response) + Math.floor(dom)) {\r\n // some browsers may report individual components incorrectly so that the sum of the parts will be bigger than total PLT\r\n // in this case, don't report client performance from this page\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 8 /* _eInternalMessageId.ClientPerformanceMathError */, \"client performance math error.\", { total: total, network: network, request: request, response: response, dom: dom });\r\n }\r\n else {\r\n pageViewPerformance.durationMs = total;\r\n // // convert to timespans\r\n pageViewPerformance.perfTotal = pageViewPerformance[_DYN_DURATION /* @min:%2eduration */] = msToTimeSpan(total);\r\n pageViewPerformance.networkConnect = msToTimeSpan(network);\r\n pageViewPerformance.sentRequest = msToTimeSpan(request);\r\n pageViewPerformance.receivedResponse = msToTimeSpan(response);\r\n pageViewPerformance.domProcessing = msToTimeSpan(dom);\r\n pageViewPerformance.isValid = true;\r\n }\r\n }\r\n };\r\n _self[_DYN_GET_PERFORMANCE_TIMI17 /* @min:%2egetPerformanceTiming */] = _getPerformanceTiming;\r\n _self[_DYN_IS_PERFORMANCE_TIMIN16 /* @min:%2eisPerformanceTimingSupported */] = _isPerformanceTimingSupported;\r\n _self[_DYN_IS_PERFORMANCE_TIMIN19 /* @min:%2eisPerformanceTimingDataReady */] = _isPerformanceTimingDataReady;\r\n _self[_DYN_SHOULD_COLLECT_DURAT18 /* @min:%2eshouldCollectDuration */] = _shouldCollectDuration;\r\n });\r\n }\r\n// Removed Stub for PageViewPerformanceManager.prototype.populatePageViewPerformanceEvent.\r\n// Removed Stub for PageViewPerformanceManager.prototype.getPerformanceTiming.\r\n// Removed Stub for PageViewPerformanceManager.prototype.isPerformanceTimingSupported.\r\n// Removed Stub for PageViewPerformanceManager.prototype.isPerformanceTimingDataReady.\r\n// Removed Stub for PageViewPerformanceManager.prototype.shouldCollectDuration.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n PageViewPerformanceManager.__ieDyn=1;\n\n return PageViewPerformanceManager;\r\n}());\r\nexport { PageViewPerformanceManager };\r\n","/*\n * Application Insights JavaScript SDK - Web Analytics, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { utlCanUseSessionStorage, utlGetSessionStorage, utlRemoveSessionStorage, utlSetSessionStorage } from \"@microsoft/applicationinsights-common\";\r\nimport { _warnToConsole, dateNow, dumpObj, getJSON, hasJSON, objDefineAccessors, throwError } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_PAGE_VISIT_START_TIM20, _DYN_TRACK_PREVIOUS_PAGE_9 } from \"../../__DynamicConstants\";\r\n/**\r\n * Used to track page visit durations\r\n */\r\nvar PageVisitTimeManager = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of PageVisitTimeManager\r\n * @param pageVisitTimeTrackingHandler Delegate that will be called to send telemetry data to AI (when trackPreviousPageVisit is called)\r\n * @returns {}\r\n */\r\n function PageVisitTimeManager(logger, pageVisitTimeTrackingHandler) {\r\n var prevPageVisitDataKeyName = \"prevPageVisitData\";\r\n dynamicProto(PageVisitTimeManager, this, function (_self) {\r\n _self[_DYN_TRACK_PREVIOUS_PAGE_9 /* @min:%2etrackPreviousPageVisit */] = function (currentPageName, currentPageUrl) {\r\n try {\r\n // Restart timer for new page view\r\n var prevPageVisitTimeData = restartPageVisitTimer(currentPageName, currentPageUrl);\r\n // If there was a page already being timed, track the visit time for it now.\r\n if (prevPageVisitTimeData) {\r\n pageVisitTimeTrackingHandler(prevPageVisitTimeData.pageName, prevPageVisitTimeData.pageUrl, prevPageVisitTimeData.pageVisitTime);\r\n }\r\n }\r\n catch (e) {\r\n _warnToConsole(logger, \"Auto track page visit time failed, metric will not be collected: \" + dumpObj(e));\r\n }\r\n };\r\n /**\r\n * Stops timing of current page (if exists) and starts timing for duration of visit to pageName\r\n * @param pageName Name of page to begin timing visit duration\r\n * @returns {PageVisitData} Page visit data (including duration) of pageName from last call to start or restart, if exists. Null if not.\r\n */\r\n function restartPageVisitTimer(pageName, pageUrl) {\r\n var prevPageVisitData = null;\r\n try {\r\n prevPageVisitData = stopPageVisitTimer();\r\n startPageVisitTimer(pageName, pageUrl);\r\n }\r\n catch (e) {\r\n _warnToConsole(logger, \"Call to restart failed: \" + dumpObj(e));\r\n prevPageVisitData = null;\r\n }\r\n return prevPageVisitData;\r\n }\r\n /**\r\n * Starts timing visit duration of pageName\r\n * @param pageName\r\n * @returns {}\r\n */\r\n function startPageVisitTimer(pageName, pageUrl) {\r\n try {\r\n if (utlCanUseSessionStorage()) {\r\n if (utlGetSessionStorage(logger, prevPageVisitDataKeyName) != null) {\r\n throwError(\"Cannot call startPageVisit consecutively without first calling stopPageVisit\");\r\n }\r\n var currPageVisitData = new PageVisitData(pageName, pageUrl);\r\n var currPageVisitDataStr = getJSON().stringify(currPageVisitData);\r\n utlSetSessionStorage(logger, prevPageVisitDataKeyName, currPageVisitDataStr);\r\n }\r\n }\r\n catch (e) {\r\n // TODO: Remove this catch in next phase, since if start is called twice in a row the exception needs to be propagated out\r\n _warnToConsole(logger, \"Call to start failed: \" + dumpObj(e));\r\n }\r\n }\r\n /**\r\n * Stops timing of current page, if exists.\r\n * @returns {PageVisitData} Page visit data (including duration) of pageName from call to start, if exists. Null if not.\r\n */\r\n function stopPageVisitTimer() {\r\n var prevPageVisitData = null;\r\n try {\r\n if (utlCanUseSessionStorage()) {\r\n // Define end time of page's visit\r\n var pageVisitEndTime = dateNow();\r\n // Try to retrieve page name and start time from session storage\r\n var pageVisitDataJsonStr = utlGetSessionStorage(logger, prevPageVisitDataKeyName);\r\n if (pageVisitDataJsonStr && hasJSON()) {\r\n // if previous page data exists, set end time of visit\r\n prevPageVisitData = getJSON().parse(pageVisitDataJsonStr);\r\n prevPageVisitData.pageVisitTime = pageVisitEndTime - prevPageVisitData[_DYN_PAGE_VISIT_START_TIM20 /* @min:%2epageVisitStartTime */];\r\n // Remove data from storage since we already used it\r\n utlRemoveSessionStorage(logger, prevPageVisitDataKeyName);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _warnToConsole(logger, \"Stop page visit timer failed: \" + dumpObj(e));\r\n prevPageVisitData = null;\r\n }\r\n return prevPageVisitData;\r\n }\r\n // For backward compatibility\r\n objDefineAccessors(_self, \"_logger\", function () { return logger; });\r\n objDefineAccessors(_self, \"pageVisitTimeTrackingHandler\", function () { return pageVisitTimeTrackingHandler; });\r\n });\r\n }\r\n// Removed Stub for PageVisitTimeManager.prototype.trackPreviousPageVisit.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n PageVisitTimeManager.__ieDyn=1;\n\n return PageVisitTimeManager;\r\n}());\r\nexport { PageVisitTimeManager };\r\nvar PageVisitData = /** @class */ (function () {\r\n function PageVisitData(pageName, pageUrl) {\r\n this[_DYN_PAGE_VISIT_START_TIM20 /* @min:%2epageVisitStartTime */] = dateNow();\r\n this.pageName = pageName;\r\n this.pageUrl = pageUrl;\r\n }\r\n return PageVisitData;\r\n}());\r\nexport { PageVisitData };\r\n","/*\n * Application Insights JavaScript SDK - Web Analytics, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { dateTimeUtilsDuration } from \"@microsoft/applicationinsights-common\";\r\nimport { _throwInternal } from \"@microsoft/applicationinsights-core-js\";\r\n/**\r\n * Used to record timed events and page views.\r\n */\r\nvar Timing = /** @class */ (function () {\r\n function Timing(logger, name) {\r\n var _self = this;\r\n var _events = {};\r\n _self.start = function (name) {\r\n if (typeof _events[name] !== \"undefined\") {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 62 /* _eInternalMessageId.StartCalledMoreThanOnce */, \"start was called more than once for this event without calling stop.\", { name: name, key: name }, true);\r\n }\r\n _events[name] = +new Date;\r\n };\r\n _self.stop = function (name, url, properties, measurements) {\r\n var start = _events[name];\r\n if (isNaN(start)) {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 63 /* _eInternalMessageId.StopCalledWithoutStart */, \"stop was called without a corresponding start.\", { name: name, key: name }, true);\r\n }\r\n else {\r\n var end = +new Date;\r\n var duration = dateTimeUtilsDuration(start, end);\r\n _self.action(name, url, duration, properties, measurements);\r\n }\r\n delete _events[name];\r\n _events[name] = undefined;\r\n };\r\n }\r\n return Timing;\r\n}());\r\nexport { Timing };\r\n","/*\n * Application Insights JavaScript SDK - Web Analytics, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n/**\r\n* ApplicationInsights.ts\r\n* @copyright Microsoft 2018\r\n*/\r\nimport { __assignFn as __assign, __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { AnalyticsPluginIdentifier, Event as EventTelemetry, Exception, Metric, PageView, PageViewPerformance, PropertiesPluginIdentifier, RemoteDependencyData, Trace, createDistributedTraceContextFromTrace, createDomEvent, createTelemetryItem, dataSanitizeString, isCrossOriginError, strNotSpecified, stringToBoolOrDefault, utlDisableStorage, utlEnableStorage, utlSetStoragePrefix } from \"@microsoft/applicationinsights-common\";\r\nimport { BaseTelemetryPlugin, InstrumentEvent, arrForEach, createProcessTelemetryContext, createUniqueNamespace, dumpObj, eventOff, eventOn, generateW3CId, getDocument, getExceptionName, getHistory, getLocation, getWindow, hasHistory, hasWindow, isError, isFunction, isNullOrUndefined, isString, isUndefined, mergeEvtNamespace, objDefineAccessors, objForEachKey, safeGetCookieMgr, strUndefined, throwError } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_ADD_TELEMETRY_INITIA15, _DYN_AUTO_TRACK_PAGE_VISI1, _DYN_COLUMN_NUMBER, _DYN_CORE, _DYN_DATA_TYPE, _DYN_DIAG_LOG, _DYN_DISABLE_EXCEPTION_TR0, _DYN_DISABLE_FLUSH_ON_BEF7, _DYN_ENABLE_AUTO_ROUTE_TR6, _DYN_ENABLE_UNHANDLED_PRO3, _DYN_ENVELOPE_TYPE, _DYN_ERROR, _DYN_ERROR_SRC, _DYN_EXCEPTION, _DYN_HREF, _DYN_IS_BROWSER_LINK_TRAC5, _DYN_IS_STORAGE_USE_DISAB4, _DYN_LENGTH, _DYN_LINE_NUMBER, _DYN_MESSAGE, _DYN_NAME_PREFIX, _DYN_OVERRIDE_PAGE_VIEW_D2, _DYN_POPULATE_PAGE_VIEW_P12, _DYN_SAMPLING_PERCENTAGE, _DYN_SEND_EXCEPTION_INTER13, _DYN_SEND_PAGE_VIEW_INTER10, _DYN_SEND_PAGE_VIEW_PERFO11, _DYN_TO_STRING, _DYN_TRACK, _DYN_TRACK_PAGE_VIEW, _DYN_TRACK_PREVIOUS_PAGE_9, _DYN__CREATE_AUTO_EXCEPTI14, _DYN__ONERROR } from \"../__DynamicConstants\";\r\nimport { PageViewManager } from \"./Telemetry/PageViewManager\";\r\nimport { PageViewPerformanceManager } from \"./Telemetry/PageViewPerformanceManager\";\r\nimport { PageVisitTimeManager } from \"./Telemetry/PageVisitTimeManager\";\r\nimport { Timing } from \"./Timing\";\r\nvar strEvent = \"event\";\r\nfunction _dispatchEvent(target, evnt) {\r\n if (target && target.dispatchEvent && evnt) {\r\n target.dispatchEvent(evnt);\r\n }\r\n}\r\nfunction _getReason(error) {\r\n if (error && error.reason) {\r\n var reason = error.reason;\r\n if (!isString(reason) && isFunction(reason[_DYN_TO_STRING /* @min:%2etoString */])) {\r\n return reason[_DYN_TO_STRING /* @min:%2etoString */]();\r\n }\r\n return dumpObj(reason);\r\n }\r\n // Pass the original object down which will eventually get evaluated for any message or description\r\n return error || \"\";\r\n}\r\nvar MinMilliSeconds = 60000;\r\nfunction _configMilliseconds(value, defValue) {\r\n value = value || defValue;\r\n if (value < MinMilliSeconds) {\r\n value = MinMilliSeconds;\r\n }\r\n return value;\r\n}\r\nfunction _getDefaultConfig(config) {\r\n if (!config) {\r\n config = {};\r\n }\r\n // set default values\r\n config.sessionRenewalMs = _configMilliseconds(config.sessionRenewalMs, 30 * 60 * 1000);\r\n config.sessionExpirationMs = _configMilliseconds(config.sessionExpirationMs, 24 * 60 * 60 * 1000);\r\n config[_DYN_DISABLE_EXCEPTION_TR0 /* @min:%2edisableExceptionTracking */] = stringToBoolOrDefault(config[_DYN_DISABLE_EXCEPTION_TR0 /* @min:%2edisableExceptionTracking */]);\r\n config[_DYN_AUTO_TRACK_PAGE_VISI1 /* @min:%2eautoTrackPageVisitTime */] = stringToBoolOrDefault(config[_DYN_AUTO_TRACK_PAGE_VISI1 /* @min:%2eautoTrackPageVisitTime */]);\r\n config[_DYN_OVERRIDE_PAGE_VIEW_D2 /* @min:%2eoverridePageViewDuration */] = stringToBoolOrDefault(config[_DYN_OVERRIDE_PAGE_VIEW_D2 /* @min:%2eoverridePageViewDuration */]);\r\n config[_DYN_ENABLE_UNHANDLED_PRO3 /* @min:%2eenableUnhandledPromiseRejectionTracking */] = stringToBoolOrDefault(config[_DYN_ENABLE_UNHANDLED_PRO3 /* @min:%2eenableUnhandledPromiseRejectionTracking */]);\r\n if (isNaN(config[_DYN_SAMPLING_PERCENTAGE /* @min:%2esamplingPercentage */]) || config[_DYN_SAMPLING_PERCENTAGE /* @min:%2esamplingPercentage */] <= 0 || config[_DYN_SAMPLING_PERCENTAGE /* @min:%2esamplingPercentage */] >= 100) {\r\n config[_DYN_SAMPLING_PERCENTAGE /* @min:%2esamplingPercentage */] = 100;\r\n }\r\n config[_DYN_IS_STORAGE_USE_DISAB4 /* @min:%2eisStorageUseDisabled */] = stringToBoolOrDefault(config[_DYN_IS_STORAGE_USE_DISAB4 /* @min:%2eisStorageUseDisabled */]);\r\n config[_DYN_IS_BROWSER_LINK_TRAC5 /* @min:%2eisBrowserLinkTrackingEnabled */] = stringToBoolOrDefault(config[_DYN_IS_BROWSER_LINK_TRAC5 /* @min:%2eisBrowserLinkTrackingEnabled */]);\r\n config[_DYN_ENABLE_AUTO_ROUTE_TR6 /* @min:%2eenableAutoRouteTracking */] = stringToBoolOrDefault(config[_DYN_ENABLE_AUTO_ROUTE_TR6 /* @min:%2eenableAutoRouteTracking */]);\r\n config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */] = config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */] || \"\";\r\n config.enableDebug = stringToBoolOrDefault(config.enableDebug);\r\n config[_DYN_DISABLE_FLUSH_ON_BEF7 /* @min:%2edisableFlushOnBeforeUnload */] = stringToBoolOrDefault(config[_DYN_DISABLE_FLUSH_ON_BEF7 /* @min:%2edisableFlushOnBeforeUnload */]);\r\n config.disableFlushOnUnload = stringToBoolOrDefault(config.disableFlushOnUnload, config[_DYN_DISABLE_FLUSH_ON_BEF7 /* @min:%2edisableFlushOnBeforeUnload */]);\r\n return config;\r\n}\r\nfunction _updateStorageUsage(extConfig) {\r\n // Not resetting the storage usage as someone may have manually called utlDisableStorage, so this will only\r\n // reset based if the configuration option is provided\r\n if (!isUndefined(extConfig[_DYN_IS_STORAGE_USE_DISAB4 /* @min:%2eisStorageUseDisabled */])) {\r\n if (extConfig[_DYN_IS_STORAGE_USE_DISAB4 /* @min:%2eisStorageUseDisabled */]) {\r\n utlDisableStorage();\r\n }\r\n else {\r\n utlEnableStorage();\r\n }\r\n }\r\n}\r\nvar AnalyticsPlugin = /** @class */ (function (_super) {\r\n __extends(AnalyticsPlugin, _super);\r\n function AnalyticsPlugin() {\r\n var _this = _super.call(this) || this;\r\n _this.identifier = AnalyticsPluginIdentifier; // do not change name or priority\r\n _this.priority = 180; // take from reserved priority range 100- 200\r\n _this.autoRoutePVDelay = 500; // ms; Time to wait after a route change before triggering a pageview to allow DOM changes to take place\r\n var _eventTracking;\r\n var _pageTracking;\r\n var _pageViewManager;\r\n var _pageViewPerformanceManager;\r\n var _pageVisitTimeManager;\r\n var _preInitTelemetryInitializers;\r\n var _isBrowserLinkTrackingEnabled;\r\n var _browserLinkInitializerAdded;\r\n var _enableAutoRouteTracking;\r\n var _historyListenerAdded;\r\n var _disableExceptionTracking;\r\n var _autoExceptionInstrumented;\r\n var _enableUnhandledPromiseRejectionTracking;\r\n var _autoUnhandledPromiseInstrumented;\r\n // Counts number of trackAjax invocations.\r\n // By default we only monitor X ajax call per view to avoid too much load.\r\n // Default value is set in config.\r\n // This counter keeps increasing even after the limit is reached.\r\n var _trackAjaxAttempts = 0;\r\n // array with max length of 2 that store current url and previous url for SPA page route change trackPageview use.\r\n var _prevUri; // Assigned in the constructor\r\n var _currUri;\r\n var _evtNamespace;\r\n dynamicProto(AnalyticsPlugin, _this, function (_self, _base) {\r\n var _addHook = _base._addHook;\r\n _initDefaults();\r\n _self.getCookieMgr = function () {\r\n return safeGetCookieMgr(_self[_DYN_CORE /* @min:%2ecore */]);\r\n };\r\n _self.processTelemetry = function (env, itemCtx) {\r\n _self.processNext(env, itemCtx);\r\n };\r\n _self.trackEvent = function (event, customProperties) {\r\n try {\r\n var telemetryItem = createTelemetryItem(event, EventTelemetry[_DYN_DATA_TYPE /* @min:%2edataType */], EventTelemetry[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], _self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), customProperties);\r\n _self[_DYN_CORE /* @min:%2ecore */][_DYN_TRACK /* @min:%2etrack */](telemetryItem);\r\n }\r\n catch (e) {\r\n _throwInternal(2 /* eLoggingSeverity.WARNING */, 39 /* _eInternalMessageId.TrackTraceFailed */, \"trackTrace failed, trace will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * Start timing an extended event. Call `stopTrackEvent` to log the event when it ends.\r\n * @param name A string that identifies this event uniquely within the document.\r\n */\r\n _self.startTrackEvent = function (name) {\r\n try {\r\n _eventTracking.start(name);\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 29 /* _eInternalMessageId.StartTrackEventFailed */, \"startTrackEvent failed, event will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * Log an extended event that you started timing with `startTrackEvent`.\r\n * @param name The string you used to identify this event in `startTrackEvent`.\r\n * @param properties map[string, string] - additional data used to filter events and metrics in the portal. Defaults to empty.\r\n * @param measurements map[string, number] - metrics associated with this event, displayed in Metrics Explorer on the portal. Defaults to empty.\r\n */\r\n _self.stopTrackEvent = function (name, properties, measurements) {\r\n try {\r\n _eventTracking.stop(name, undefined, properties, measurements);\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 30 /* _eInternalMessageId.StopTrackEventFailed */, \"stopTrackEvent failed, event will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * @description Log a diagnostic message\r\n * @param {ITraceTelemetry} trace\r\n * @param ICustomProperties.\r\n * @memberof ApplicationInsights\r\n */\r\n _self.trackTrace = function (trace, customProperties) {\r\n try {\r\n var telemetryItem = createTelemetryItem(trace, Trace[_DYN_DATA_TYPE /* @min:%2edataType */], Trace[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], _self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), customProperties);\r\n _self[_DYN_CORE /* @min:%2ecore */][_DYN_TRACK /* @min:%2etrack */](telemetryItem);\r\n }\r\n catch (e) {\r\n _throwInternal(2 /* eLoggingSeverity.WARNING */, 39 /* _eInternalMessageId.TrackTraceFailed */, \"trackTrace failed, trace will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * @description Log a numeric value that is not associated with a specific event. Typically\r\n * used to send regular reports of performance indicators. To send single measurement, just\r\n * use the name and average fields of {@link IMetricTelemetry}. If you take measurements\r\n * frequently, you can reduce the telemetry bandwidth by aggregating multiple measurements\r\n * and sending the resulting average at intervals\r\n * @param {IMetricTelemetry} metric input object argument. Only name and average are mandatory.\r\n * @param {{[key: string]: any}} customProperties additional data used to filter metrics in the\r\n * portal. Defaults to empty.\r\n * @memberof ApplicationInsights\r\n */\r\n _self.trackMetric = function (metric, customProperties) {\r\n try {\r\n var telemetryItem = createTelemetryItem(metric, Metric[_DYN_DATA_TYPE /* @min:%2edataType */], Metric[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], _self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), customProperties);\r\n _self[_DYN_CORE /* @min:%2ecore */][_DYN_TRACK /* @min:%2etrack */](telemetryItem);\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 36 /* _eInternalMessageId.TrackMetricFailed */, \"trackMetric failed, metric will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * Logs that a page or other item was viewed.\r\n * @param IPageViewTelemetry The string you used as the name in startTrackPage. Defaults to the document title.\r\n * @param customProperties Additional data used to filter events and metrics. Defaults to empty.\r\n * If a user wants to provide duration for pageLoad, it'll have to be in pageView.properties.duration\r\n */\r\n _self[_DYN_TRACK_PAGE_VIEW /* @min:%2etrackPageView */] = function (pageView, customProperties) {\r\n try {\r\n var inPv = pageView || {};\r\n _pageViewManager[_DYN_TRACK_PAGE_VIEW /* @min:%2etrackPageView */](inPv, __assign(__assign(__assign({}, inPv.properties), inPv.measurements), customProperties));\r\n if (_self.config[_DYN_AUTO_TRACK_PAGE_VISI1 /* @min:%2eautoTrackPageVisitTime */]) {\r\n _pageVisitTimeManager[_DYN_TRACK_PREVIOUS_PAGE_9 /* @min:%2etrackPreviousPageVisit */](inPv.name, inPv.uri);\r\n }\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 37 /* _eInternalMessageId.TrackPVFailed */, \"trackPageView failed, page view will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * Create a page view telemetry item and send it to the SDK pipeline through the core.track API\r\n * @param pageView Page view item to be sent\r\n * @param properties Custom properties (Part C) that a user can add to the telemetry item\r\n * @param systemProperties System level properties (Part A) that a user can add to the telemetry item\r\n */\r\n _self[_DYN_SEND_PAGE_VIEW_INTER10 /* @min:%2esendPageViewInternal */] = function (pageView, properties, systemProperties) {\r\n var doc = getDocument();\r\n if (doc) {\r\n pageView.refUri = pageView.refUri === undefined ? doc.referrer : pageView.refUri;\r\n }\r\n var telemetryItem = createTelemetryItem(pageView, PageView[_DYN_DATA_TYPE /* @min:%2edataType */], PageView[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], _self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), properties, systemProperties);\r\n _self[_DYN_CORE /* @min:%2ecore */][_DYN_TRACK /* @min:%2etrack */](telemetryItem);\r\n // reset ajaxes counter\r\n _trackAjaxAttempts = 0;\r\n };\r\n /**\r\n * @ignore INTERNAL ONLY\r\n * @param pageViewPerformance\r\n * @param properties\r\n */\r\n _self[_DYN_SEND_PAGE_VIEW_PERFO11 /* @min:%2esendPageViewPerformanceInternal */] = function (pageViewPerformance, properties, systemProperties) {\r\n var telemetryItem = createTelemetryItem(pageViewPerformance, PageViewPerformance[_DYN_DATA_TYPE /* @min:%2edataType */], PageViewPerformance[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], _self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), properties, systemProperties);\r\n _self[_DYN_CORE /* @min:%2ecore */][_DYN_TRACK /* @min:%2etrack */](telemetryItem);\r\n };\r\n /**\r\n * Send browser performance metrics.\r\n * @param pageViewPerformance\r\n * @param customProperties\r\n */\r\n _self.trackPageViewPerformance = function (pageViewPerformance, customProperties) {\r\n var inPvp = pageViewPerformance || {};\r\n try {\r\n _pageViewPerformanceManager[_DYN_POPULATE_PAGE_VIEW_P12 /* @min:%2epopulatePageViewPerformanceEvent */](inPvp);\r\n _self[_DYN_SEND_PAGE_VIEW_PERFO11 /* @min:%2esendPageViewPerformanceInternal */](inPvp, customProperties);\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 37 /* _eInternalMessageId.TrackPVFailed */, \"trackPageViewPerformance failed, page view will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * Starts the timer for tracking a page load time. Use this instead of `trackPageView` if you want to control when the page view timer starts and stops,\r\n * but don't want to calculate the duration yourself. This method doesn't send any telemetry. Call `stopTrackPage` to log the end of the page view\r\n * and send the event.\r\n * @param name A string that idenfities this item, unique within this HTML document. Defaults to the document title.\r\n */\r\n _self.startTrackPage = function (name) {\r\n try {\r\n if (typeof name !== \"string\") {\r\n var doc = getDocument();\r\n name = doc && doc.title || \"\";\r\n }\r\n _pageTracking.start(name);\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 31 /* _eInternalMessageId.StartTrackFailed */, \"startTrackPage failed, page view may not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * Stops the timer that was started by calling `startTrackPage` and sends the pageview load time telemetry with the specified properties and measurements.\r\n * The duration of the page view will be the time between calling `startTrackPage` and `stopTrackPage`.\r\n * @param name The string you used as the name in startTrackPage. Defaults to the document title.\r\n * @param url String - a relative or absolute URL that identifies the page or other item. Defaults to the window location.\r\n * @param properties map[string, string] - additional data used to filter pages and metrics in the portal. Defaults to empty.\r\n * @param measurements map[string, number] - metrics associated with this page, displayed in Metrics Explorer on the portal. Defaults to empty.\r\n */\r\n _self.stopTrackPage = function (name, url, properties, measurement) {\r\n try {\r\n if (typeof name !== \"string\") {\r\n var doc = getDocument();\r\n name = doc && doc.title || \"\";\r\n }\r\n if (typeof url !== \"string\") {\r\n var loc = getLocation();\r\n url = loc && loc[_DYN_HREF /* @min:%2ehref */] || \"\";\r\n }\r\n _pageTracking.stop(name, url, properties, measurement);\r\n if (_self.config[_DYN_AUTO_TRACK_PAGE_VISI1 /* @min:%2eautoTrackPageVisitTime */]) {\r\n _pageVisitTimeManager[_DYN_TRACK_PREVIOUS_PAGE_9 /* @min:%2etrackPreviousPageVisit */](name, url);\r\n }\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 32 /* _eInternalMessageId.StopTrackFailed */, \"stopTrackPage failed, page view will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * @ignore INTERNAL ONLY\r\n * @param exception\r\n * @param properties\r\n * @param systemProperties\r\n */\r\n _self[_DYN_SEND_EXCEPTION_INTER13 /* @min:%2esendExceptionInternal */] = function (exception, customProperties, systemProperties) {\r\n // Adding additional edge cases to handle\r\n // - Not passing anything (null / undefined)\r\n var theError = (exception && (exception[_DYN_EXCEPTION /* @min:%2eexception */] || exception[_DYN_ERROR /* @min:%2eerror */])) ||\r\n // - Handle someone calling trackException based of v1 API where the exception was the Error\r\n isError(exception) && exception ||\r\n // - Handles no error being defined and instead of creating a new Error() instance attempt to map so any stacktrace\r\n // is preserved and does not list ApplicationInsights code as the source\r\n { name: (exception && typeof exception), message: exception || strNotSpecified };\r\n // If no exception object was passed assign to an empty object to avoid internal exceptions\r\n exception = exception || {};\r\n var exceptionPartB = new Exception(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), theError, exception.properties || customProperties, exception.measurements, exception.severityLevel, exception.id).toInterface();\r\n var telemetryItem = createTelemetryItem(exceptionPartB, Exception[_DYN_DATA_TYPE /* @min:%2edataType */], Exception[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], _self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), customProperties, systemProperties);\r\n _self[_DYN_CORE /* @min:%2ecore */][_DYN_TRACK /* @min:%2etrack */](telemetryItem);\r\n };\r\n /**\r\n * Log an exception you have caught.\r\n *\r\n * @param {IExceptionTelemetry} exception Object which contains exception to be sent\r\n * @param {{[key: string]: any}} customProperties Additional data used to filter pages and metrics in the portal. Defaults to empty.\r\n *\r\n * Any property of type double will be considered a measurement, and will be treated by Application Insights as a metric.\r\n * @memberof ApplicationInsights\r\n */\r\n _self.trackException = function (exception, customProperties) {\r\n if (exception && !exception[_DYN_EXCEPTION /* @min:%2eexception */] && exception[_DYN_ERROR /* @min:%2eerror */]) {\r\n exception[_DYN_EXCEPTION /* @min:%2eexception */] = exception[_DYN_ERROR /* @min:%2eerror */];\r\n }\r\n try {\r\n _self[_DYN_SEND_EXCEPTION_INTER13 /* @min:%2esendExceptionInternal */](exception, customProperties);\r\n }\r\n catch (e) {\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 35 /* _eInternalMessageId.TrackExceptionFailed */, \"trackException failed, exception will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n };\r\n /**\r\n * @description Custom error handler for Application Insights Analytics\r\n * @param {IAutoExceptionTelemetry} exception\r\n * @memberof ApplicationInsights\r\n */\r\n _self[_DYN__ONERROR /* @min:%2e_onerror */] = function (exception) {\r\n var error = exception && exception[_DYN_ERROR /* @min:%2eerror */];\r\n var evt = exception && exception.evt;\r\n try {\r\n if (!evt) {\r\n var _window = getWindow();\r\n if (_window) {\r\n evt = _window[strEvent];\r\n }\r\n }\r\n var url = (exception && exception.url) || (getDocument() || {}).URL;\r\n // If no error source is provided assume the default window.onerror handler\r\n var errorSrc = exception[_DYN_ERROR_SRC /* @min:%2eerrorSrc */] || \"window.onerror@\" + url + \":\" + (exception[_DYN_LINE_NUMBER /* @min:%2elineNumber */] || 0) + \":\" + (exception[_DYN_COLUMN_NUMBER /* @min:%2ecolumnNumber */] || 0);\r\n var properties = {\r\n errorSrc: errorSrc,\r\n url: url,\r\n lineNumber: exception[_DYN_LINE_NUMBER /* @min:%2elineNumber */] || 0,\r\n columnNumber: exception[_DYN_COLUMN_NUMBER /* @min:%2ecolumnNumber */] || 0,\r\n message: exception[_DYN_MESSAGE /* @min:%2emessage */]\r\n };\r\n if (isCrossOriginError(exception.message, exception.url, exception.lineNumber, exception.columnNumber, exception[_DYN_ERROR /* @min:%2eerror */])) {\r\n _sendCORSException(Exception[_DYN__CREATE_AUTO_EXCEPTI14 /* @min:%2eCreateAutoException */](\"Script error: The browser's same-origin policy prevents us from getting the details of this exception. Consider using the 'crossorigin' attribute.\", url, exception[_DYN_LINE_NUMBER /* @min:%2elineNumber */] || 0, exception[_DYN_COLUMN_NUMBER /* @min:%2ecolumnNumber */] || 0, error, evt, null, errorSrc), properties);\r\n }\r\n else {\r\n if (!exception[_DYN_ERROR_SRC /* @min:%2eerrorSrc */]) {\r\n exception[_DYN_ERROR_SRC /* @min:%2eerrorSrc */] = errorSrc;\r\n }\r\n _self.trackException({ exception: exception, severityLevel: 3 /* eSeverityLevel.Error */ }, properties);\r\n }\r\n }\r\n catch (e) {\r\n var errorString = error ? (error.name + \", \" + error[_DYN_MESSAGE /* @min:%2emessage */]) : \"null\";\r\n _throwInternal(1 /* eLoggingSeverity.CRITICAL */, 11 /* _eInternalMessageId.ExceptionWhileLoggingError */, \"_onError threw exception while logging error, error will not be collected: \"\r\n + getExceptionName(e), { exception: dumpObj(e), errorString: errorString });\r\n }\r\n };\r\n _self[_DYN_ADD_TELEMETRY_INITIA15 /* @min:%2eaddTelemetryInitializer */] = function (telemetryInitializer) {\r\n if (_self[_DYN_CORE /* @min:%2ecore */]) {\r\n // Just add to the core\r\n return _self[_DYN_CORE /* @min:%2ecore */][_DYN_ADD_TELEMETRY_INITIA15 /* @min:%2eaddTelemetryInitializer */](telemetryInitializer);\r\n }\r\n // Handle \"pre-initialization\" telemetry initializers (for backward compatibility)\r\n if (!_preInitTelemetryInitializers) {\r\n _preInitTelemetryInitializers = [];\r\n }\r\n _preInitTelemetryInitializers.push(telemetryInitializer);\r\n };\r\n _self.initialize = function (config, core, extensions, pluginChain) {\r\n if (_self.isInitialized()) {\r\n return;\r\n }\r\n if (isNullOrUndefined(core)) {\r\n throwError(\"Error initializing\");\r\n }\r\n _base.initialize(config, core, extensions, pluginChain);\r\n if (config.storagePrefix) {\r\n utlSetStoragePrefix(config.storagePrefix);\r\n }\r\n try {\r\n _evtNamespace = mergeEvtNamespace(createUniqueNamespace(_self.identifier), core.evtNamespace && core.evtNamespace());\r\n if (_preInitTelemetryInitializers) {\r\n arrForEach(_preInitTelemetryInitializers, function (initializer) {\r\n core[_DYN_ADD_TELEMETRY_INITIA15 /* @min:%2eaddTelemetryInitializer */](initializer);\r\n });\r\n _preInitTelemetryInitializers = null;\r\n }\r\n var extConfig = _populateDefaults(config);\r\n _updateStorageUsage(extConfig);\r\n _pageViewPerformanceManager = new PageViewPerformanceManager(_self[_DYN_CORE /* @min:%2ecore */]);\r\n _pageViewManager = new PageViewManager(_self, extConfig[_DYN_OVERRIDE_PAGE_VIEW_D2 /* @min:%2eoverridePageViewDuration */], _self[_DYN_CORE /* @min:%2ecore */], _pageViewPerformanceManager);\r\n _pageVisitTimeManager = new PageVisitTimeManager(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), function (pageName, pageUrl, pageVisitTime) { return trackPageVisitTime(pageName, pageUrl, pageVisitTime); });\r\n _updateBrowserLinkTracking(extConfig, config);\r\n _eventTracking = new Timing(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), \"trackEvent\");\r\n _eventTracking.action =\r\n function (name, url, duration, properties, measurements) {\r\n if (!properties) {\r\n properties = {};\r\n }\r\n if (!measurements) {\r\n measurements = {};\r\n }\r\n properties.duration = duration[_DYN_TO_STRING /* @min:%2etoString */]();\r\n _self.trackEvent({ name: name, properties: properties, measurements: measurements });\r\n };\r\n // initialize page view timing\r\n _pageTracking = new Timing(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), \"trackPageView\");\r\n _pageTracking.action = function (name, url, duration, properties, measurements) {\r\n // duration must be a custom property in order for the collector to extract it\r\n if (isNullOrUndefined(properties)) {\r\n properties = {};\r\n }\r\n properties.duration = duration[_DYN_TO_STRING /* @min:%2etoString */]();\r\n var pageViewItem = {\r\n name: name,\r\n uri: url,\r\n properties: properties,\r\n measurements: measurements\r\n };\r\n _self[_DYN_SEND_PAGE_VIEW_INTER10 /* @min:%2esendPageViewInternal */](pageViewItem, properties);\r\n };\r\n if (hasWindow()) {\r\n _updateExceptionTracking(extConfig);\r\n _updateLocationChange(extConfig);\r\n }\r\n }\r\n catch (e) {\r\n // resetting the initialized state because of failure\r\n _self.setInitialized(false);\r\n throw e;\r\n }\r\n };\r\n _self._doTeardown = function (unloadCtx, unloadState) {\r\n _pageViewManager && _pageViewManager.teardown(unloadCtx, unloadState);\r\n // Just register to remove all events associated with this namespace\r\n eventOff(window, null, null, _evtNamespace);\r\n _initDefaults();\r\n };\r\n function _populateDefaults(config) {\r\n var ctx = createProcessTelemetryContext(null, config, _self[_DYN_CORE /* @min:%2ecore */]);\r\n var identifier = _self.identifier;\r\n // load default values if specified\r\n var defaults = _getDefaultConfig(config);\r\n var extConfig = _self.config = ctx.getExtCfg(identifier);\r\n if (defaults !== undefined) {\r\n objForEachKey(defaults, function (field, value) {\r\n // for each unspecified field, set the default value\r\n extConfig[field] = ctx.getConfig(identifier, field, value);\r\n if (extConfig[field] === undefined) {\r\n extConfig = value;\r\n }\r\n });\r\n }\r\n return extConfig;\r\n }\r\n function _updateBrowserLinkTracking(extConfig, config) {\r\n _isBrowserLinkTrackingEnabled = extConfig[_DYN_IS_BROWSER_LINK_TRAC5 /* @min:%2eisBrowserLinkTrackingEnabled */] || config[_DYN_IS_BROWSER_LINK_TRAC5 /* @min:%2eisBrowserLinkTrackingEnabled */];\r\n _addDefaultTelemetryInitializers();\r\n }\r\n /**\r\n * Log a page visit time\r\n * @param pageName Name of page\r\n * @param pageVisitDuration Duration of visit to the page in milleseconds\r\n */\r\n function trackPageVisitTime(pageName, pageUrl, pageVisitTime) {\r\n var properties = { PageName: pageName, PageUrl: pageUrl };\r\n _self.trackMetric({\r\n name: \"PageVisitTime\",\r\n average: pageVisitTime,\r\n max: pageVisitTime,\r\n min: pageVisitTime,\r\n sampleCount: 1\r\n }, properties);\r\n }\r\n function _addDefaultTelemetryInitializers() {\r\n if (!_browserLinkInitializerAdded && _isBrowserLinkTrackingEnabled) {\r\n var browserLinkPaths_1 = [\"/browserLinkSignalR/\", \"/__browserLink/\"];\r\n var dropBrowserLinkRequests = function (envelope) {\r\n if (_isBrowserLinkTrackingEnabled && envelope.baseType === RemoteDependencyData[_DYN_DATA_TYPE /* @min:%2edataType */]) {\r\n var remoteData = envelope.baseData;\r\n if (remoteData) {\r\n for (var i = 0; i < browserLinkPaths_1[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n if (remoteData.target && remoteData.target.indexOf(browserLinkPaths_1[i]) >= 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n _self[_DYN_ADD_TELEMETRY_INITIA15 /* @min:%2eaddTelemetryInitializer */](dropBrowserLinkRequests);\r\n _browserLinkInitializerAdded = true;\r\n }\r\n }\r\n function _sendCORSException(exception, properties) {\r\n var telemetryItem = createTelemetryItem(exception, Exception[_DYN_DATA_TYPE /* @min:%2edataType */], Exception[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], _self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), properties);\r\n _self[_DYN_CORE /* @min:%2ecore */][_DYN_TRACK /* @min:%2etrack */](telemetryItem);\r\n }\r\n function _updateExceptionTracking(extConfig) {\r\n var _window = getWindow();\r\n var locn = getLocation(true);\r\n _disableExceptionTracking = extConfig[_DYN_DISABLE_EXCEPTION_TR0 /* @min:%2edisableExceptionTracking */];\r\n if (!_disableExceptionTracking && !_autoExceptionInstrumented && !extConfig.autoExceptionInstrumented) {\r\n // We want to enable exception auto collection and it has not been done so yet\r\n _addHook(InstrumentEvent(_window, \"onerror\", {\r\n ns: _evtNamespace,\r\n rsp: function (callDetails, message, url, lineNumber, columnNumber, error) {\r\n if (!_disableExceptionTracking && callDetails.rslt !== true) {\r\n _self[_DYN__ONERROR /* @min:%2e_onerror */](Exception[_DYN__CREATE_AUTO_EXCEPTI14 /* @min:%2eCreateAutoException */](message, url, lineNumber, columnNumber, error, callDetails.evt));\r\n }\r\n }\r\n }, false));\r\n _autoExceptionInstrumented = true;\r\n }\r\n _addUnhandledPromiseRejectionTracking(extConfig, _window, locn);\r\n }\r\n function _updateLocationChange(extConfig) {\r\n var win = getWindow();\r\n var locn = getLocation(true);\r\n _enableAutoRouteTracking = extConfig[_DYN_ENABLE_AUTO_ROUTE_TR6 /* @min:%2eenableAutoRouteTracking */] === true;\r\n /**\r\n * Create a custom \"locationchange\" event which is triggered each time the history object is changed\r\n */\r\n if (win && _enableAutoRouteTracking && hasHistory()) {\r\n var _history = getHistory();\r\n if (isFunction(_history.pushState) && isFunction(_history.replaceState) && typeof Event !== strUndefined) {\r\n _addHistoryListener(extConfig, win, _history, locn);\r\n }\r\n }\r\n }\r\n function _getDistributedTraceCtx() {\r\n var distributedTraceCtx = null;\r\n if (_self[_DYN_CORE /* @min:%2ecore */] && _self[_DYN_CORE /* @min:%2ecore */].getTraceCtx) {\r\n distributedTraceCtx = _self[_DYN_CORE /* @min:%2ecore */].getTraceCtx(false);\r\n }\r\n if (!distributedTraceCtx) {\r\n // Fallback when using an older Core and PropertiesPlugin\r\n var properties = _self[_DYN_CORE /* @min:%2ecore */].getPlugin(PropertiesPluginIdentifier);\r\n if (properties) {\r\n var context = properties.plugin.context;\r\n if (context) {\r\n distributedTraceCtx = createDistributedTraceContextFromTrace(context.telemetryTrace);\r\n }\r\n }\r\n }\r\n return distributedTraceCtx;\r\n }\r\n /**\r\n * Create a custom \"locationchange\" event which is triggered each time the history object is changed\r\n */\r\n function _addHistoryListener(extConfig, win, history, locn) {\r\n var namePrefix = extConfig[_DYN_NAME_PREFIX /* @min:%2enamePrefix */] || \"\";\r\n function _popstateHandler() {\r\n if (_enableAutoRouteTracking) {\r\n _dispatchEvent(win, createDomEvent(namePrefix + \"locationchange\"));\r\n }\r\n }\r\n function _locationChangeHandler() {\r\n // We always track the changes (if the handler is installed) to handle the feature being disabled between location changes\r\n if (_currUri) {\r\n _prevUri = _currUri;\r\n _currUri = locn && locn[_DYN_HREF /* @min:%2ehref */] || \"\";\r\n }\r\n else {\r\n _currUri = locn && locn[_DYN_HREF /* @min:%2ehref */] || \"\";\r\n }\r\n if (_enableAutoRouteTracking) {\r\n var distributedTraceCtx = _getDistributedTraceCtx();\r\n if (distributedTraceCtx) {\r\n distributedTraceCtx.setTraceId(generateW3CId());\r\n var traceLocationName = \"_unknown_\";\r\n if (locn && locn.pathname) {\r\n traceLocationName = locn.pathname + (locn.hash || \"\");\r\n }\r\n // This populates the ai.operation.name which has a maximum size of 1024 so we need to sanitize it\r\n distributedTraceCtx.setName(dataSanitizeString(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), traceLocationName));\r\n }\r\n setTimeout((function (uri) {\r\n // todo: override start time so that it is not affected by autoRoutePVDelay\r\n _self[_DYN_TRACK_PAGE_VIEW /* @min:%2etrackPageView */]({ refUri: uri, properties: { duration: 0 } }); // SPA route change loading durations are undefined, so send 0\r\n }).bind(_self, _prevUri), _self.autoRoutePVDelay);\r\n }\r\n }\r\n if (!_historyListenerAdded) {\r\n _addHook(InstrumentEvent(history, \"pushState\", {\r\n ns: _evtNamespace,\r\n rsp: function () {\r\n if (_enableAutoRouteTracking) {\r\n _dispatchEvent(win, createDomEvent(namePrefix + \"pushState\"));\r\n _dispatchEvent(win, createDomEvent(namePrefix + \"locationchange\"));\r\n }\r\n }\r\n }, true));\r\n _addHook(InstrumentEvent(history, \"replaceState\", {\r\n ns: _evtNamespace,\r\n rsp: function () {\r\n if (_enableAutoRouteTracking) {\r\n _dispatchEvent(win, createDomEvent(namePrefix + \"replaceState\"));\r\n _dispatchEvent(win, createDomEvent(namePrefix + \"locationchange\"));\r\n }\r\n }\r\n }, true));\r\n eventOn(win, namePrefix + \"popstate\", _popstateHandler, _evtNamespace);\r\n eventOn(win, namePrefix + \"locationchange\", _locationChangeHandler, _evtNamespace);\r\n _historyListenerAdded = true;\r\n }\r\n }\r\n function _addUnhandledPromiseRejectionTracking(extConfig, _window, _location) {\r\n _enableUnhandledPromiseRejectionTracking = extConfig[_DYN_ENABLE_UNHANDLED_PRO3 /* @min:%2eenableUnhandledPromiseRejectionTracking */] === true;\r\n if (_enableUnhandledPromiseRejectionTracking && !_autoUnhandledPromiseInstrumented) {\r\n // We want to enable exception auto collection and it has not been done so yet\r\n _addHook(InstrumentEvent(_window, \"onunhandledrejection\", {\r\n ns: _evtNamespace,\r\n rsp: function (callDetails, error) {\r\n if (_enableUnhandledPromiseRejectionTracking && callDetails.rslt !== true) { // handled could be typeof function\r\n _self[_DYN__ONERROR /* @min:%2e_onerror */](Exception[_DYN__CREATE_AUTO_EXCEPTI14 /* @min:%2eCreateAutoException */](_getReason(error), _location ? _location[_DYN_HREF /* @min:%2ehref */] : \"\", 0, 0, error, callDetails.evt));\r\n }\r\n }\r\n }, false));\r\n _autoUnhandledPromiseInstrumented = true;\r\n extConfig.autoUnhandledPromiseInstrumented = _autoUnhandledPromiseInstrumented;\r\n }\r\n }\r\n /**\r\n * This method will throw exceptions in debug mode or attempt to log the error as a console warning.\r\n * @param severity {eLoggingSeverity} - The severity of the log message\r\n * @param message {_InternalLogMessage} - The log message.\r\n */\r\n function _throwInternal(severity, msgId, msg, properties, isUserAct) {\r\n _self[_DYN_DIAG_LOG /* @min:%2ediagLog */]().throwInternal(severity, msgId, msg, properties, isUserAct);\r\n }\r\n function _initDefaults() {\r\n _eventTracking = null;\r\n _pageTracking = null;\r\n _pageViewManager = null;\r\n _pageViewPerformanceManager = null;\r\n _pageVisitTimeManager = null;\r\n _preInitTelemetryInitializers = null;\r\n _isBrowserLinkTrackingEnabled = false;\r\n _browserLinkInitializerAdded = false;\r\n _enableAutoRouteTracking = false;\r\n _historyListenerAdded = false;\r\n _disableExceptionTracking = false;\r\n _autoExceptionInstrumented = false;\r\n _enableUnhandledPromiseRejectionTracking = false;\r\n _autoUnhandledPromiseInstrumented = false;\r\n // Counts number of trackAjax invocations.\r\n // By default we only monitor X ajax call per view to avoid too much load.\r\n // Default value is set in config.\r\n // This counter keeps increasing even after the limit is reached.\r\n _trackAjaxAttempts = 0;\r\n // array with max length of 2 that store current url and previous url for SPA page route change trackPageview use.\r\n var location = getLocation(true);\r\n _prevUri = location && location[_DYN_HREF /* @min:%2ehref */] || \"\";\r\n _currUri = null;\r\n _evtNamespace = null;\r\n }\r\n // For backward compatibility\r\n objDefineAccessors(_self, \"_pageViewManager\", function () { return _pageViewManager; });\r\n objDefineAccessors(_self, \"_pageViewPerformanceManager\", function () { return _pageViewPerformanceManager; });\r\n objDefineAccessors(_self, \"_pageVisitTimeManager\", function () { return _pageVisitTimeManager; });\r\n objDefineAccessors(_self, \"_evtNamespace\", function () { return \".\" + _evtNamespace; });\r\n });\r\n return _this;\r\n }\r\n// Removed Stub for AnalyticsPlugin.prototype.getCookieMgr.\r\n// Removed Stub for AnalyticsPlugin.prototype.processTelemetry.\r\n// Removed Stub for AnalyticsPlugin.prototype.trackEvent.\r\n// Removed Stub for AnalyticsPlugin.prototype.startTrackEvent.\r\n// Removed Stub for AnalyticsPlugin.prototype.stopTrackEvent.\r\n// Removed Stub for AnalyticsPlugin.prototype.trackTrace.\r\n// Removed Stub for AnalyticsPlugin.prototype.trackMetric.\r\n// Removed Stub for AnalyticsPlugin.prototype.trackPageView.\r\n// Removed Stub for AnalyticsPlugin.prototype.sendPageViewInternal.\r\n// Removed Stub for AnalyticsPlugin.prototype.sendPageViewPerformanceInternal.\r\n// Removed Stub for AnalyticsPlugin.prototype.trackPageViewPerformance.\r\n// Removed Stub for AnalyticsPlugin.prototype.startTrackPage.\r\n// Removed Stub for AnalyticsPlugin.prototype.stopTrackPage.\r\n// Removed Stub for AnalyticsPlugin.prototype.sendExceptionInternal.\r\n// Removed Stub for AnalyticsPlugin.prototype.trackException.\r\n// Removed Stub for AnalyticsPlugin.prototype._onerror.\r\n// Removed Stub for AnalyticsPlugin.prototype.addTelemetryInitializer.\r\n// Removed Stub for AnalyticsPlugin.prototype.initialize.\r\n AnalyticsPlugin.Version = '2.8.16'; // Not currently used anywhere\r\n AnalyticsPlugin.getDefaultConfig = _getDefaultConfig;\r\n return AnalyticsPlugin;\r\n}(BaseTelemetryPlugin));\r\nexport { AnalyticsPlugin };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\nimport { createClassFromInterface } from \"@microsoft/applicationinsights-core-js\";\r\nfunction _aiNameFunc(baseName) {\r\n var aiName = \"ai.\" + baseName + \".\";\r\n return function (name) {\r\n return aiName + name;\r\n };\r\n}\r\nvar _aiApplication = _aiNameFunc(\"application\");\r\nvar _aiDevice = _aiNameFunc(\"device\");\r\nvar _aiLocation = _aiNameFunc(\"location\");\r\nvar _aiOperation = _aiNameFunc(\"operation\");\r\nvar _aiSession = _aiNameFunc(\"session\");\r\nvar _aiUser = _aiNameFunc(\"user\");\r\nvar _aiCloud = _aiNameFunc(\"cloud\");\r\nvar _aiInternal = _aiNameFunc(\"internal\");\r\nvar ContextTagKeys = /** @class */ (function (_super) {\r\n __extends(ContextTagKeys, _super);\r\n function ContextTagKeys() {\r\n return _super.call(this) || this;\r\n }\r\n return ContextTagKeys;\r\n}(createClassFromInterface({\r\n applicationVersion: _aiApplication(\"ver\"),\r\n applicationBuild: _aiApplication(\"build\"),\r\n applicationTypeId: _aiApplication(\"typeId\"),\r\n applicationId: _aiApplication(\"applicationId\"),\r\n applicationLayer: _aiApplication(\"layer\"),\r\n deviceId: _aiDevice(\"id\"),\r\n deviceIp: _aiDevice(\"ip\"),\r\n deviceLanguage: _aiDevice(\"language\"),\r\n deviceLocale: _aiDevice(\"locale\"),\r\n deviceModel: _aiDevice(\"model\"),\r\n deviceFriendlyName: _aiDevice(\"friendlyName\"),\r\n deviceNetwork: _aiDevice(\"network\"),\r\n deviceNetworkName: _aiDevice(\"networkName\"),\r\n deviceOEMName: _aiDevice(\"oemName\"),\r\n deviceOS: _aiDevice(\"os\"),\r\n deviceOSVersion: _aiDevice(\"osVersion\"),\r\n deviceRoleInstance: _aiDevice(\"roleInstance\"),\r\n deviceRoleName: _aiDevice(\"roleName\"),\r\n deviceScreenResolution: _aiDevice(\"screenResolution\"),\r\n deviceType: _aiDevice(\"type\"),\r\n deviceMachineName: _aiDevice(\"machineName\"),\r\n deviceVMName: _aiDevice(\"vmName\"),\r\n deviceBrowser: _aiDevice(\"browser\"),\r\n deviceBrowserVersion: _aiDevice(\"browserVersion\"),\r\n locationIp: _aiLocation(\"ip\"),\r\n locationCountry: _aiLocation(\"country\"),\r\n locationProvince: _aiLocation(\"province\"),\r\n locationCity: _aiLocation(\"city\"),\r\n operationId: _aiOperation(\"id\"),\r\n operationName: _aiOperation(\"name\"),\r\n operationParentId: _aiOperation(\"parentId\"),\r\n operationRootId: _aiOperation(\"rootId\"),\r\n operationSyntheticSource: _aiOperation(\"syntheticSource\"),\r\n operationCorrelationVector: _aiOperation(\"correlationVector\"),\r\n sessionId: _aiSession(\"id\"),\r\n sessionIsFirst: _aiSession(\"isFirst\"),\r\n sessionIsNew: _aiSession(\"isNew\"),\r\n userAccountAcquisitionDate: _aiUser(\"accountAcquisitionDate\"),\r\n userAccountId: _aiUser(\"accountId\"),\r\n userAgent: _aiUser(\"userAgent\"),\r\n userId: _aiUser(\"id\"),\r\n userStoreRegion: _aiUser(\"storeRegion\"),\r\n userAuthUserId: _aiUser(\"authUserId\"),\r\n userAnonymousUserAcquisitionDate: _aiUser(\"anonUserAcquisitionDate\"),\r\n userAuthenticatedUserAcquisitionDate: _aiUser(\"authUserAcquisitionDate\"),\r\n cloudName: _aiCloud(\"name\"),\r\n cloudRole: _aiCloud(\"role\"),\r\n cloudRoleVer: _aiCloud(\"roleVer\"),\r\n cloudRoleInstance: _aiCloud(\"roleInstance\"),\r\n cloudEnvironment: _aiCloud(\"environment\"),\r\n cloudLocation: _aiCloud(\"location\"),\r\n cloudDeploymentUnit: _aiCloud(\"deploymentUnit\"),\r\n internalNodeName: _aiInternal(\"nodeName\"),\r\n internalSdkVersion: _aiInternal(\"sdkVersion\"),\r\n internalAgentVersion: _aiInternal(\"agentVersion\"),\r\n internalSnippet: _aiInternal(\"snippet\"),\r\n internalSdkSrc: _aiInternal(\"sdkSrc\")\r\n})));\r\nexport { ContextTagKeys };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport { ContextTagKeys } from \"./Contracts/ContextTagKeys\";\r\nexport var Extensions = {\r\n UserExt: \"user\",\r\n DeviceExt: \"device\",\r\n TraceExt: \"trace\",\r\n WebExt: \"web\",\r\n AppExt: \"app\",\r\n OSExt: \"os\",\r\n SessionExt: \"ses\",\r\n SDKExt: \"sdk\"\r\n};\r\nexport var CtxTagKeys = new ContextTagKeys();\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { toISOString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { strNotSpecified } from \"../../Constants\";\r\nimport { _DYN_NAME } from \"../../__DynamicConstants\";\r\nimport { dataSanitizeString } from \"./DataSanitizer\";\r\nvar Envelope = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of telemetry data.\r\n */\r\n function Envelope(logger, data, name) {\r\n var _this = this;\r\n var _self = this;\r\n _self.ver = 1;\r\n _self.sampleRate = 100.0;\r\n _self.tags = {};\r\n _self[_DYN_NAME /* @min:%2ename */] = dataSanitizeString(logger, name) || strNotSpecified;\r\n _self.data = data;\r\n _self.time = toISOString(new Date());\r\n _self.aiDataContract = {\r\n time: 1 /* FieldType.Required */,\r\n iKey: 1 /* FieldType.Required */,\r\n name: 1 /* FieldType.Required */,\r\n sampleRate: function () {\r\n return (_this.sampleRate === 100) ? 4 /* FieldType.Hidden */ : 1 /* FieldType.Required */;\r\n },\r\n tags: 1 /* FieldType.Required */,\r\n data: 1 /* FieldType.Required */\r\n };\r\n }\r\n return Envelope;\r\n}());\r\nexport { Envelope };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nvar Data = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of telemetry data.\r\n */\r\n function Data(baseType, data) {\r\n /**\r\n * The data contract for serializing this object.\r\n */\r\n this.aiDataContract = {\r\n baseType: 1 /* FieldType.Required */,\r\n baseData: 1 /* FieldType.Required */\r\n };\r\n this.baseType = baseType;\r\n this.baseData = data;\r\n }\r\n return Data;\r\n}());\r\nexport { Data };\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Generally you should only put values that are used more than 2 times and then only if not already exposed as a constant (such as SdkCoreNames)\r\n// as when using \"short\" named values from here they will be will be minified smaller than the SdkCoreNames[eSdkCoreNames.xxxx] value.\r\nexport var STR_DURATION = \"duration\";\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// @skip-file-minify\r\n// ##############################################################\r\n// AUTO GENERATED FILE: This file is Auto Generated during build.\r\n// ##############################################################\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\nexport var _DYN_TAGS = \"tags\"; // Count: 17\r\nexport var _DYN_DEVICE_TYPE = \"deviceType\"; // Count: 3\r\nexport var _DYN_DATA = \"data\"; // Count: 13\r\nexport var _DYN_NAME = \"name\"; // Count: 8\r\nexport var _DYN_TRACE_ID = \"traceID\"; // Count: 5\r\nexport var _DYN_LENGTH = \"length\"; // Count: 36\r\nexport var _DYN_STRINGIFY = \"stringify\"; // Count: 5\r\nexport var _DYN_MEASUREMENTS = \"measurements\"; // Count: 7\r\nexport var _DYN_DATA_TYPE = \"dataType\"; // Count: 10\r\nexport var _DYN_ENVELOPE_TYPE = \"envelopeType\"; // Count: 7\r\nexport var _DYN_TO_STRING = \"toString\"; // Count: 7\r\nexport var _DYN_ON_LINE = \"onLine\"; // Count: 4\r\nexport var _DYN_IS_ONLINE = \"isOnline\"; // Count: 3\r\nexport var _DYN_ENQUEUE = \"enqueue\"; // Count: 5\r\nexport var _DYN_COUNT = \"count\"; // Count: 6\r\nexport var _DYN_PUSH = \"push\"; // Count: 6\r\nexport var _DYN_EMIT_LINE_DELIMITED_0 = \"emitLineDelimitedJson\"; // Count: 3\r\nexport var _DYN_CLEAR = \"clear\"; // Count: 6\r\nexport var _DYN_BATCH_PAYLOADS = \"batchPayloads\"; // Count: 5\r\nexport var _DYN_MARK_AS_SENT = \"markAsSent\"; // Count: 6\r\nexport var _DYN_CLEAR_SENT = \"clearSent\"; // Count: 5\r\nexport var _DYN_BUFFER_OVERRIDE = \"bufferOverride\"; // Count: 3\r\nexport var _DYN__BUFFER__KEY = \"BUFFER_KEY\"; // Count: 5\r\nexport var _DYN__SENT__BUFFER__KEY = \"SENT_BUFFER_KEY\"; // Count: 7\r\nexport var _DYN__MAX__BUFFER__SIZE = \"MAX_BUFFER_SIZE\"; // Count: 5\r\nexport var _DYN_NAME_PREFIX = \"namePrefix\"; // Count: 6\r\nexport var _DYN_MAX_BATCH_SIZE_IN_BY1 = \"maxBatchSizeInBytes\"; // Count: 3\r\nexport var _DYN_TRIGGER_SEND = \"triggerSend\"; // Count: 6\r\nexport var _DYN_DIAG_LOG = \"diagLog\"; // Count: 15\r\nexport var _DYN_ONUNLOAD_DISABLE_BEA2 = \"onunloadDisableBeacon\"; // Count: 2\r\nexport var _DYN_IS_BEACON_API_DISABL3 = \"isBeaconApiDisabled\"; // Count: 3\r\nexport var _DYN__SENDER = \"_sender\"; // Count: 5\r\nexport var _DYN__SENDER_CONFIG = \"_senderConfig\"; // Count: 4\r\nexport var _DYN_ENABLE_SESSION_STORA4 = \"enableSessionStorageBuffer\"; // Count: 2\r\nexport var _DYN__BUFFER = \"_buffer\"; // Count: 9\r\nexport var _DYN_SAMPLING_PERCENTAGE = \"samplingPercentage\"; // Count: 2\r\nexport var _DYN_INSTRUMENTATION_KEY = \"instrumentationKey\"; // Count: 4\r\nexport var _DYN_ENDPOINT_URL = \"endpointUrl\"; // Count: 8\r\nexport var _DYN_CUSTOM_HEADERS = \"customHeaders\"; // Count: 4\r\nexport var _DYN_DISABLE_XHR = \"disableXhr\"; // Count: 5\r\nexport var _DYN_ONUNLOAD_DISABLE_FET5 = \"onunloadDisableFetch\"; // Count: 2\r\nexport var _DYN_DISABLE_TELEMETRY = \"disableTelemetry\"; // Count: 2\r\nexport var _DYN_BASE_TYPE = \"baseType\"; // Count: 4\r\nexport var _DYN_SAMPLE_RATE = \"sampleRate\"; // Count: 4\r\nexport var _DYN_CONVERT_UNDEFINED = \"convertUndefined\"; // Count: 2\r\nexport var _DYN__XHR_READY_STATE_CHA6 = \"_xhrReadyStateChange\"; // Count: 2\r\nexport var _DYN__ON_ERROR = \"_onError\"; // Count: 11\r\nexport var _DYN__ON_PARTIAL_SUCCESS = \"_onPartialSuccess\"; // Count: 3\r\nexport var _DYN__ON_SUCCESS = \"_onSuccess\"; // Count: 6\r\nexport var _DYN_ITEMS_ACCEPTED = \"itemsAccepted\"; // Count: 5\r\nexport var _DYN_ITEMS_RECEIVED = \"itemsReceived\"; // Count: 6\r\nexport var _DYN_IS_RETRY_DISABLED = \"isRetryDisabled\"; // Count: 5\r\nexport var _DYN_SET_REQUEST_HEADER = \"setRequestHeader\"; // Count: 3\r\nexport var _DYN_MAX_BATCH_INTERVAL = \"maxBatchInterval\"; // Count: 2\r\nexport var _DYN_EVENTS_SEND_REQUEST = \"eventsSendRequest\"; // Count: 2\r\nexport var _DYN_DISABLE_INSTRUMENTAT7 = \"disableInstrumentationKeyValidation\"; // Count: 2\r\nexport var _DYN_GET_SAMPLING_SCORE = \"getSamplingScore\"; // Count: 2\r\nexport var _DYN_GET_HASH_CODE_SCORE = \"getHashCodeScore\"; // Count: 4\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport { __assignFn as __assign } from \"@microsoft/applicationinsights-shims\";\r\nimport { CtxTagKeys, Data, Envelope, Event, Exception, HttpMethod, Metric, PageView, PageViewPerformance, RemoteDependencyData, SampleRate, Trace, dataSanitizeString } from \"@microsoft/applicationinsights-common\";\r\nimport { _throwInternal, _warnToConsole, getJSON, hasJSON, isNullOrUndefined, isNumber, isString, isTruthy, objForEachKey, optimizeObject, setValue, toISOString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { STR_DURATION } from \"./InternalConstants\";\r\nimport { _DYN_DATA, _DYN_DATA_TYPE, _DYN_DEVICE_TYPE, _DYN_ENVELOPE_TYPE, _DYN_LENGTH, _DYN_MEASUREMENTS, _DYN_NAME, _DYN_STRINGIFY, _DYN_TAGS, _DYN_TO_STRING, _DYN_TRACE_ID } from \"./__DynamicConstants\";\r\n// these two constants are used to filter out properties not needed when trying to extract custom properties and measurements from the incoming payload\r\nvar strBaseType = \"baseType\";\r\nvar strBaseData = \"baseData\";\r\nvar strProperties = \"properties\";\r\nvar strTrue = \"true\";\r\nfunction _setValueIf(target, field, value) {\r\n return setValue(target, field, value, isTruthy);\r\n}\r\n/*\r\n * Maps Part A data from CS 4.0\r\n */\r\nfunction _extractPartAExtensions(logger, item, env) {\r\n // todo: switch to keys from common in this method\r\n var envTags = env[_DYN_TAGS /* @min:%2etags */] = env[_DYN_TAGS /* @min:%2etags */] || {};\r\n var itmExt = item.ext = item.ext || {};\r\n var itmTags = item[_DYN_TAGS /* @min:%2etags */] = item[_DYN_TAGS /* @min:%2etags */] || [];\r\n var extUser = itmExt.user;\r\n if (extUser) {\r\n _setValueIf(envTags, CtxTagKeys.userAuthUserId, extUser.authId);\r\n _setValueIf(envTags, CtxTagKeys.userId, extUser.id || extUser.localId);\r\n }\r\n var extApp = itmExt.app;\r\n if (extApp) {\r\n _setValueIf(envTags, CtxTagKeys.sessionId, extApp.sesId);\r\n }\r\n var extDevice = itmExt.device;\r\n if (extDevice) {\r\n _setValueIf(envTags, CtxTagKeys.deviceId, extDevice.id || extDevice.localId);\r\n _setValueIf(envTags, CtxTagKeys[_DYN_DEVICE_TYPE /* @min:%2edeviceType */], extDevice.deviceClass);\r\n _setValueIf(envTags, CtxTagKeys.deviceIp, extDevice.ip);\r\n _setValueIf(envTags, CtxTagKeys.deviceModel, extDevice.model);\r\n _setValueIf(envTags, CtxTagKeys[_DYN_DEVICE_TYPE /* @min:%2edeviceType */], extDevice[_DYN_DEVICE_TYPE /* @min:%2edeviceType */]);\r\n }\r\n var web = item.ext.web;\r\n if (web) {\r\n _setValueIf(envTags, CtxTagKeys.deviceLanguage, web.browserLang);\r\n _setValueIf(envTags, CtxTagKeys.deviceBrowserVersion, web.browserVer);\r\n _setValueIf(envTags, CtxTagKeys.deviceBrowser, web.browser);\r\n var envData = env[_DYN_DATA /* @min:%2edata */] = env[_DYN_DATA /* @min:%2edata */] || {};\r\n var envBaseData = envData[strBaseData] = envData[strBaseData] || {};\r\n var envProps = envBaseData[strProperties] = envBaseData[strProperties] || {};\r\n _setValueIf(envProps, \"domain\", web.domain);\r\n _setValueIf(envProps, \"isManual\", web.isManual ? strTrue : null);\r\n _setValueIf(envProps, \"screenRes\", web.screenRes);\r\n _setValueIf(envProps, \"userConsent\", web.userConsent ? strTrue : null);\r\n }\r\n var extOs = itmExt.os;\r\n if (extOs) {\r\n _setValueIf(envTags, CtxTagKeys.deviceOS, extOs[_DYN_NAME /* @min:%2ename */]);\r\n }\r\n // No support for mapping Trace.traceState to 2.0 as it is currently empty\r\n var extTrace = itmExt.trace;\r\n if (extTrace) {\r\n _setValueIf(envTags, CtxTagKeys.operationParentId, extTrace.parentID);\r\n _setValueIf(envTags, CtxTagKeys.operationName, dataSanitizeString(logger, extTrace[_DYN_NAME /* @min:%2ename */]));\r\n _setValueIf(envTags, CtxTagKeys.operationId, extTrace[_DYN_TRACE_ID /* @min:%2etraceID */]);\r\n }\r\n // Sample 4.0 schema\r\n // {\r\n // \"time\" : \"2018-09-05T22:51:22.4936Z\",\r\n // \"name\" : \"MetricWithNamespace\",\r\n // \"iKey\" : \"ABC-5a4cbd20-e601-4ef5-a3c6-5d6577e4398e\",\r\n // \"ext\": { \"cloud\": {\r\n // \"role\": \"WATSON3\",\r\n // \"roleInstance\": \"CO4AEAP00000260\"\r\n // },\r\n // \"device\": {}, \"correlation\": {} },\r\n // \"tags\": [\r\n // { \"amazon.region\" : \"east2\" },\r\n // { \"os.expid\" : \"wp:02df239\" }\r\n // ]\r\n // }\r\n var tgs = {};\r\n // deals with tags.push({object})\r\n for (var i = itmTags[_DYN_LENGTH /* @min:%2elength */] - 1; i >= 0; i--) {\r\n var tg = itmTags[i];\r\n objForEachKey(tg, function (key, value) {\r\n tgs[key] = value;\r\n });\r\n itmTags.splice(i, 1);\r\n }\r\n // deals with tags[key]=value (and handles hasOwnProperty)\r\n objForEachKey(itmTags, function (tg, value) {\r\n tgs[tg] = value;\r\n });\r\n var theTags = __assign(__assign({}, envTags), tgs);\r\n if (!theTags[CtxTagKeys.internalSdkVersion]) {\r\n // Append a version in case it is not already set\r\n theTags[CtxTagKeys.internalSdkVersion] = dataSanitizeString(logger, \"javascript:\".concat(EnvelopeCreator.Version), 64);\r\n }\r\n env[_DYN_TAGS /* @min:%2etags */] = optimizeObject(theTags);\r\n}\r\nfunction _extractPropsAndMeasurements(data, properties, measurements) {\r\n if (!isNullOrUndefined(data)) {\r\n objForEachKey(data, function (key, value) {\r\n if (isNumber(value)) {\r\n measurements[key] = value;\r\n }\r\n else if (isString(value)) {\r\n properties[key] = value;\r\n }\r\n else if (hasJSON()) {\r\n properties[key] = getJSON()[_DYN_STRINGIFY /* @min:%2estringify */](value);\r\n }\r\n });\r\n }\r\n}\r\nfunction _convertPropsUndefinedToCustomDefinedValue(properties, customUndefinedValue) {\r\n if (!isNullOrUndefined(properties)) {\r\n objForEachKey(properties, function (key, value) {\r\n properties[key] = value || customUndefinedValue;\r\n });\r\n }\r\n}\r\n// TODO: Do we want this to take logger as arg or use this._logger as nonstatic?\r\nfunction _createEnvelope(logger, envelopeType, telemetryItem, data) {\r\n var envelope = new Envelope(logger, data, envelopeType);\r\n _setValueIf(envelope, \"sampleRate\", telemetryItem[SampleRate]);\r\n if ((telemetryItem[strBaseData] || {}).startTime) {\r\n envelope.time = toISOString(telemetryItem[strBaseData].startTime);\r\n }\r\n envelope.iKey = telemetryItem.iKey;\r\n var iKeyNoDashes = telemetryItem.iKey.replace(/-/g, \"\");\r\n envelope[_DYN_NAME /* @min:%2ename */] = envelope[_DYN_NAME /* @min:%2ename */].replace(\"{0}\", iKeyNoDashes);\r\n // extract all extensions from ctx\r\n _extractPartAExtensions(logger, telemetryItem, envelope);\r\n // loop through the envelope tags (extension of Part A) and pick out the ones that should go in outgoing envelope tags\r\n telemetryItem[_DYN_TAGS /* @min:%2etags */] = telemetryItem[_DYN_TAGS /* @min:%2etags */] || [];\r\n return optimizeObject(envelope);\r\n}\r\nfunction EnvelopeCreatorInit(logger, telemetryItem) {\r\n if (isNullOrUndefined(telemetryItem[strBaseData])) {\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 46 /* _eInternalMessageId.TelemetryEnvelopeInvalid */, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n}\r\nexport var EnvelopeCreator = {\r\n Version: '2.8.16'\r\n};\r\nexport function DependencyEnvelopeCreator(logger, telemetryItem, customUndefinedValue) {\r\n EnvelopeCreatorInit(logger, telemetryItem);\r\n var customMeasurements = telemetryItem[strBaseData][_DYN_MEASUREMENTS /* @min:%2emeasurements */] || {};\r\n var customProperties = telemetryItem[strBaseData][strProperties] || {};\r\n _extractPropsAndMeasurements(telemetryItem[_DYN_DATA /* @min:%2edata */], customProperties, customMeasurements);\r\n if (!isNullOrUndefined(customUndefinedValue)) {\r\n _convertPropsUndefinedToCustomDefinedValue(customProperties, customUndefinedValue);\r\n }\r\n var bd = telemetryItem[strBaseData];\r\n if (isNullOrUndefined(bd)) {\r\n _warnToConsole(logger, \"Invalid input for dependency data\");\r\n return null;\r\n }\r\n var method = bd[strProperties] && bd[strProperties][HttpMethod] ? bd[strProperties][HttpMethod] : \"GET\";\r\n var remoteDepData = new RemoteDependencyData(logger, bd.id, bd.target, bd[_DYN_NAME /* @min:%2ename */], bd[STR_DURATION /* @min:%2eduration */], bd.success, bd.responseCode, method, bd.type, bd.correlationContext, customProperties, customMeasurements);\r\n var data = new Data(RemoteDependencyData[_DYN_DATA_TYPE /* @min:%2edataType */], remoteDepData);\r\n return _createEnvelope(logger, RemoteDependencyData[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], telemetryItem, data);\r\n}\r\nexport function EventEnvelopeCreator(logger, telemetryItem, customUndefinedValue) {\r\n EnvelopeCreatorInit(logger, telemetryItem);\r\n var customProperties = {};\r\n var customMeasurements = {};\r\n if (telemetryItem[strBaseType] !== Event[_DYN_DATA_TYPE /* @min:%2edataType */]) {\r\n customProperties[\"baseTypeSource\"] = telemetryItem[strBaseType]; // save the passed in base type as a property\r\n }\r\n if (telemetryItem[strBaseType] === Event[_DYN_DATA_TYPE /* @min:%2edataType */]) { // take collection\r\n customProperties = telemetryItem[strBaseData][strProperties] || {};\r\n customMeasurements = telemetryItem[strBaseData][_DYN_MEASUREMENTS /* @min:%2emeasurements */] || {};\r\n }\r\n else { // if its not a known type, convert to custom event\r\n if (telemetryItem[strBaseData]) {\r\n _extractPropsAndMeasurements(telemetryItem[strBaseData], customProperties, customMeasurements);\r\n }\r\n }\r\n // Extract root level properties from part C telemetryItem.data\r\n _extractPropsAndMeasurements(telemetryItem[_DYN_DATA /* @min:%2edata */], customProperties, customMeasurements);\r\n if (!isNullOrUndefined(customUndefinedValue)) {\r\n _convertPropsUndefinedToCustomDefinedValue(customProperties, customUndefinedValue);\r\n }\r\n var eventName = telemetryItem[strBaseData][_DYN_NAME /* @min:%2ename */];\r\n var eventData = new Event(logger, eventName, customProperties, customMeasurements);\r\n var data = new Data(Event[_DYN_DATA_TYPE /* @min:%2edataType */], eventData);\r\n return _createEnvelope(logger, Event[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], telemetryItem, data);\r\n}\r\nexport function ExceptionEnvelopeCreator(logger, telemetryItem, customUndefinedValue) {\r\n EnvelopeCreatorInit(logger, telemetryItem);\r\n // Extract root level properties from part C telemetryItem.data\r\n var customMeasurements = telemetryItem[strBaseData][_DYN_MEASUREMENTS /* @min:%2emeasurements */] || {};\r\n var customProperties = telemetryItem[strBaseData][strProperties] || {};\r\n _extractPropsAndMeasurements(telemetryItem[_DYN_DATA /* @min:%2edata */], customProperties, customMeasurements);\r\n if (!isNullOrUndefined(customUndefinedValue)) {\r\n _convertPropsUndefinedToCustomDefinedValue(customProperties, customUndefinedValue);\r\n }\r\n var bd = telemetryItem[strBaseData];\r\n var exData = Exception.CreateFromInterface(logger, bd, customProperties, customMeasurements);\r\n var data = new Data(Exception[_DYN_DATA_TYPE /* @min:%2edataType */], exData);\r\n return _createEnvelope(logger, Exception[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], telemetryItem, data);\r\n}\r\nexport function MetricEnvelopeCreator(logger, telemetryItem, customUndefinedValue) {\r\n EnvelopeCreatorInit(logger, telemetryItem);\r\n var baseData = telemetryItem[strBaseData];\r\n var props = baseData[strProperties] || {};\r\n var measurements = baseData[_DYN_MEASUREMENTS /* @min:%2emeasurements */] || {};\r\n _extractPropsAndMeasurements(telemetryItem[_DYN_DATA /* @min:%2edata */], props, measurements);\r\n if (!isNullOrUndefined(customUndefinedValue)) {\r\n _convertPropsUndefinedToCustomDefinedValue(props, customUndefinedValue);\r\n }\r\n var baseMetricData = new Metric(logger, baseData[_DYN_NAME /* @min:%2ename */], baseData.average, baseData.sampleCount, baseData.min, baseData.max, baseData.stdDev, props, measurements);\r\n var data = new Data(Metric[_DYN_DATA_TYPE /* @min:%2edataType */], baseMetricData);\r\n return _createEnvelope(logger, Metric[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], telemetryItem, data);\r\n}\r\nexport function PageViewEnvelopeCreator(logger, telemetryItem, customUndefinedValue) {\r\n EnvelopeCreatorInit(logger, telemetryItem);\r\n // Since duration is not part of the domain properties in Common Schema, extract it from part C\r\n var duration;\r\n var baseData = telemetryItem[strBaseData];\r\n if (!isNullOrUndefined(baseData) &&\r\n !isNullOrUndefined(baseData[strProperties]) &&\r\n !isNullOrUndefined(baseData[strProperties][STR_DURATION])) { // from part B properties\r\n duration = baseData[strProperties][STR_DURATION];\r\n delete baseData[strProperties][STR_DURATION];\r\n }\r\n else if (!isNullOrUndefined(telemetryItem[_DYN_DATA /* @min:%2edata */]) &&\r\n !isNullOrUndefined(telemetryItem[_DYN_DATA /* @min:%2edata */][STR_DURATION])) { // from custom properties\r\n duration = telemetryItem[_DYN_DATA /* @min:%2edata */][STR_DURATION];\r\n delete telemetryItem[_DYN_DATA /* @min:%2edata */][STR_DURATION];\r\n }\r\n var bd = telemetryItem[strBaseData];\r\n // special case: pageview.id is grabbed from current operation id. Analytics plugin is decoupled from properties plugin, so this is done here instead. This can be made a default telemetry intializer instead if needed to be decoupled from channel\r\n var currentContextId;\r\n if (((telemetryItem.ext || {}).trace || {})[_DYN_TRACE_ID /* @min:%2etraceID */]) {\r\n currentContextId = telemetryItem.ext.trace[_DYN_TRACE_ID /* @min:%2etraceID */];\r\n }\r\n var id = bd.id || currentContextId;\r\n var name = bd[_DYN_NAME /* @min:%2ename */];\r\n var url = bd.uri;\r\n var properties = bd[strProperties] || {};\r\n var measurements = bd[_DYN_MEASUREMENTS /* @min:%2emeasurements */] || {};\r\n // refUri is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!isNullOrUndefined(bd.refUri)) {\r\n properties[\"refUri\"] = bd.refUri;\r\n }\r\n // pageType is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!isNullOrUndefined(bd.pageType)) {\r\n properties[\"pageType\"] = bd.pageType;\r\n }\r\n // isLoggedIn is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!isNullOrUndefined(bd.isLoggedIn)) {\r\n properties[\"isLoggedIn\"] = bd.isLoggedIn[_DYN_TO_STRING /* @min:%2etoString */]();\r\n }\r\n // pageTags is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!isNullOrUndefined(bd[strProperties])) {\r\n var pageTags = bd[strProperties];\r\n objForEachKey(pageTags, function (key, value) {\r\n properties[key] = value;\r\n });\r\n }\r\n _extractPropsAndMeasurements(telemetryItem[_DYN_DATA /* @min:%2edata */], properties, measurements);\r\n if (!isNullOrUndefined(customUndefinedValue)) {\r\n _convertPropsUndefinedToCustomDefinedValue(properties, customUndefinedValue);\r\n }\r\n var pageViewData = new PageView(logger, name, url, duration, properties, measurements, id);\r\n var data = new Data(PageView[_DYN_DATA_TYPE /* @min:%2edataType */], pageViewData);\r\n return _createEnvelope(logger, PageView[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], telemetryItem, data);\r\n}\r\nexport function PageViewPerformanceEnvelopeCreator(logger, telemetryItem, customUndefinedValue) {\r\n EnvelopeCreatorInit(logger, telemetryItem);\r\n var bd = telemetryItem[strBaseData];\r\n var name = bd[_DYN_NAME /* @min:%2ename */];\r\n var url = bd.uri || bd.url;\r\n var properties = bd[strProperties] || {};\r\n var measurements = bd[_DYN_MEASUREMENTS /* @min:%2emeasurements */] || {};\r\n _extractPropsAndMeasurements(telemetryItem[_DYN_DATA /* @min:%2edata */], properties, measurements);\r\n if (!isNullOrUndefined(customUndefinedValue)) {\r\n _convertPropsUndefinedToCustomDefinedValue(properties, customUndefinedValue);\r\n }\r\n var baseData = new PageViewPerformance(logger, name, url, undefined, properties, measurements, bd);\r\n var data = new Data(PageViewPerformance[_DYN_DATA_TYPE /* @min:%2edataType */], baseData);\r\n return _createEnvelope(logger, PageViewPerformance[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], telemetryItem, data);\r\n}\r\nexport function TraceEnvelopeCreator(logger, telemetryItem, customUndefinedValue) {\r\n EnvelopeCreatorInit(logger, telemetryItem);\r\n var message = telemetryItem[strBaseData].message;\r\n var severityLevel = telemetryItem[strBaseData].severityLevel;\r\n var props = telemetryItem[strBaseData][strProperties] || {};\r\n var measurements = telemetryItem[strBaseData][_DYN_MEASUREMENTS /* @min:%2emeasurements */] || {};\r\n _extractPropsAndMeasurements(telemetryItem[_DYN_DATA /* @min:%2edata */], props, measurements);\r\n if (!isNullOrUndefined(customUndefinedValue)) {\r\n _convertPropsUndefinedToCustomDefinedValue(props, customUndefinedValue);\r\n }\r\n var baseData = new Trace(logger, message, severityLevel, props, measurements);\r\n var data = new Data(Trace[_DYN_DATA_TYPE /* @min:%2edataType */], baseData);\r\n return _createEnvelope(logger, Trace[_DYN_ENVELOPE_TYPE /* @min:%2eenvelopeType */], telemetryItem, data);\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport { createUniqueNamespace, eventOff, eventOn, getDocument, getNavigator, getWindow, isNullOrUndefined, isUndefined, mergeEvtNamespace } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_IS_ONLINE, _DYN_ON_LINE } from \"./__DynamicConstants\";\r\nfunction _disableEvents(target, evtNamespace) {\r\n eventOff(target, null, null, evtNamespace);\r\n}\r\n/**\r\n * Create a new OfflineListener instance to monitor browser online / offline events\r\n * @param parentEvtNamespace - The parent event namespace to append to any specific events for this instance\r\n */\r\nexport function createOfflineListener(parentEvtNamespace) {\r\n var _a;\r\n var _document = getDocument();\r\n var _navigator = getNavigator(); // Gets the window.navigator or workerNavigator depending on the global\r\n var _isListening = false;\r\n var _onlineStatus = true;\r\n var _evtNamespace = mergeEvtNamespace(createUniqueNamespace(\"OfflineListener\"), parentEvtNamespace);\r\n try {\r\n if (_enableEvents(getWindow())) {\r\n _isListening = true;\r\n }\r\n if (_document) {\r\n // Also attach to the document.body or document\r\n var target = _document.body || _document;\r\n if (target.ononline) {\r\n if (_enableEvents(target)) {\r\n _isListening = true;\r\n }\r\n }\r\n }\r\n if (_isListening) {\r\n // We are listening to events so lets set the current status rather than assuming we are online #1538\r\n if (_navigator && !isNullOrUndefined(_navigator[_DYN_ON_LINE /* @min:%2eonLine */])) { // navigator.onLine is undefined in react-native\r\n _onlineStatus = _navigator[_DYN_ON_LINE /* @min:%2eonLine */];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // this makes react-native less angry\r\n _isListening = false;\r\n }\r\n function _enableEvents(target) {\r\n var enabled = false;\r\n if (target) {\r\n enabled = eventOn(target, \"online\", _setOnline, _evtNamespace);\r\n if (enabled) {\r\n eventOn(target, \"offline\", _setOffline, _evtNamespace);\r\n }\r\n }\r\n return enabled;\r\n }\r\n function _setOnline() {\r\n _onlineStatus = true;\r\n }\r\n function _setOffline() {\r\n _onlineStatus = false;\r\n }\r\n function _isOnline() {\r\n var result = true;\r\n if (_isListening) {\r\n result = _onlineStatus;\r\n }\r\n else if (_navigator && !isNullOrUndefined(_navigator[_DYN_ON_LINE /* @min:%2eonLine */])) { // navigator.onLine is undefined in react-native\r\n result = _navigator[_DYN_ON_LINE /* @min:%2eonLine */];\r\n }\r\n return result;\r\n }\r\n function _unload() {\r\n var win = getWindow();\r\n if (win && _isListening) {\r\n _disableEvents(win, _evtNamespace);\r\n if (_document) {\r\n // Also attach to the document.body or document\r\n var target = _document.body || _document;\r\n if (!isUndefined(target.ononline)) {\r\n _disableEvents(target, _evtNamespace);\r\n }\r\n }\r\n _isListening = false;\r\n }\r\n }\r\n return _a = {},\r\n _a[_DYN_IS_ONLINE /* @min:isOnline */] = _isOnline,\r\n _a.isListening = function () { return _isListening; },\r\n _a.unload = _unload,\r\n _a;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport { __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { utlGetSessionStorage, utlSetSessionStorage } from \"@microsoft/applicationinsights-common\";\r\nimport { _throwInternal, arrForEach, arrIndexOf, dumpObj, getExceptionName, getJSON, isArray, isFunction, isString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_BATCH_PAYLOADS, _DYN_BUFFER_OVERRIDE, _DYN_CLEAR, _DYN_CLEAR_SENT, _DYN_COUNT, _DYN_EMIT_LINE_DELIMITED_0, _DYN_ENQUEUE, _DYN_LENGTH, _DYN_MARK_AS_SENT, _DYN_NAME_PREFIX, _DYN_PUSH, _DYN_STRINGIFY, _DYN__BUFFER__KEY, _DYN__MAX__BUFFER__SIZE, _DYN__SENT__BUFFER__KEY } from \"./__DynamicConstants\";\r\nvar BaseSendBuffer = /** @class */ (function () {\r\n function BaseSendBuffer(logger, config) {\r\n var _buffer = [];\r\n var _bufferFullMessageSent = false;\r\n this._get = function () {\r\n return _buffer;\r\n };\r\n this._set = function (buffer) {\r\n _buffer = buffer;\r\n return _buffer;\r\n };\r\n dynamicProto(BaseSendBuffer, this, function (_self) {\r\n _self[_DYN_ENQUEUE /* @min:%2eenqueue */] = function (payload) {\r\n if (_self[_DYN_COUNT /* @min:%2ecount */]() >= config.eventsLimitInMem()) {\r\n // sent internal log only once per page view\r\n if (!_bufferFullMessageSent) {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 105 /* _eInternalMessageId.InMemoryStorageBufferFull */, \"Maximum in-memory buffer size reached: \" + _self[_DYN_COUNT /* @min:%2ecount */](), true);\r\n _bufferFullMessageSent = true;\r\n }\r\n return;\r\n }\r\n _buffer[_DYN_PUSH /* @min:%2epush */](payload);\r\n };\r\n _self[_DYN_COUNT /* @min:%2ecount */] = function () {\r\n return _buffer[_DYN_LENGTH /* @min:%2elength */];\r\n };\r\n _self.size = function () {\r\n var size = _buffer[_DYN_LENGTH /* @min:%2elength */];\r\n for (var lp = 0; lp < _buffer[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n size += _buffer[lp][_DYN_LENGTH /* @min:%2elength */];\r\n }\r\n if (!config[_DYN_EMIT_LINE_DELIMITED_0 /* @min:%2eemitLineDelimitedJson */]()) {\r\n size += 2;\r\n }\r\n return size;\r\n };\r\n _self[_DYN_CLEAR /* @min:%2eclear */] = function () {\r\n _buffer = [];\r\n _bufferFullMessageSent = false;\r\n };\r\n _self.getItems = function () {\r\n return _buffer.slice(0);\r\n };\r\n _self[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */] = function (payload) {\r\n if (payload && payload[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n var batch = config[_DYN_EMIT_LINE_DELIMITED_0 /* @min:%2eemitLineDelimitedJson */]() ?\r\n payload.join(\"\\n\") :\r\n \"[\" + payload.join(\",\") + \"]\";\r\n return batch;\r\n }\r\n return null;\r\n };\r\n });\r\n }\r\n// Removed Stub for BaseSendBuffer.prototype.enqueue.\r\n// Removed Stub for BaseSendBuffer.prototype.count.\r\n// Removed Stub for BaseSendBuffer.prototype.size.\r\n// Removed Stub for BaseSendBuffer.prototype.clear.\r\n// Removed Stub for BaseSendBuffer.prototype.getItems.\r\n// Removed Stub for BaseSendBuffer.prototype.batchPayloads.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n BaseSendBuffer.__ieDyn=1;\n\n return BaseSendBuffer;\r\n}());\r\n/*\r\n * An array based send buffer.\r\n */\r\nvar ArraySendBuffer = /** @class */ (function (_super) {\r\n __extends(ArraySendBuffer, _super);\r\n function ArraySendBuffer(logger, config) {\r\n var _this = _super.call(this, logger, config) || this;\r\n dynamicProto(ArraySendBuffer, _this, function (_self, _base) {\r\n _self[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */] = function (payload) {\r\n _base[_DYN_CLEAR /* @min:%2eclear */]();\r\n };\r\n _self[_DYN_CLEAR_SENT /* @min:%2eclearSent */] = function (payload) {\r\n // not supported\r\n };\r\n });\r\n return _this;\r\n }\r\n// Removed Stub for ArraySendBuffer.prototype.markAsSent.\r\n// Removed Stub for ArraySendBuffer.prototype.clearSent.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n ArraySendBuffer.__ieDyn=1;\n\n return ArraySendBuffer;\r\n}(BaseSendBuffer));\r\nexport { ArraySendBuffer };\r\n/*\r\n * Session storage buffer holds a copy of all unsent items in the browser session storage.\r\n */\r\nvar SessionStorageSendBuffer = /** @class */ (function (_super) {\r\n __extends(SessionStorageSendBuffer, _super);\r\n function SessionStorageSendBuffer(logger, config) {\r\n var _this = _super.call(this, logger, config) || this;\r\n var _bufferFullMessageSent = false;\r\n var _a = config[_DYN_BUFFER_OVERRIDE /* @min:%2ebufferOverride */]() || { getItem: utlGetSessionStorage, setItem: utlSetSessionStorage }, getItem = _a.getItem, setItem = _a.setItem;\r\n dynamicProto(SessionStorageSendBuffer, _this, function (_self, _base) {\r\n var bufferItems = _getBuffer(SessionStorageSendBuffer[_DYN__BUFFER__KEY /* @min:%2eBUFFER_KEY */]);\r\n var notDeliveredItems = _getBuffer(SessionStorageSendBuffer[_DYN__SENT__BUFFER__KEY /* @min:%2eSENT_BUFFER_KEY */]);\r\n var buffer = _self._set(bufferItems.concat(notDeliveredItems));\r\n // If the buffer has too many items, drop items from the end.\r\n if (buffer[_DYN_LENGTH /* @min:%2elength */] > SessionStorageSendBuffer[_DYN__MAX__BUFFER__SIZE /* @min:%2eMAX_BUFFER_SIZE */]) {\r\n buffer[_DYN_LENGTH /* @min:%2elength */] = SessionStorageSendBuffer[_DYN__MAX__BUFFER__SIZE /* @min:%2eMAX_BUFFER_SIZE */];\r\n }\r\n _setBuffer(SessionStorageSendBuffer[_DYN__SENT__BUFFER__KEY /* @min:%2eSENT_BUFFER_KEY */], []);\r\n _setBuffer(SessionStorageSendBuffer[_DYN__BUFFER__KEY /* @min:%2eBUFFER_KEY */], buffer);\r\n _self[_DYN_ENQUEUE /* @min:%2eenqueue */] = function (payload) {\r\n if (_self[_DYN_COUNT /* @min:%2ecount */]() >= SessionStorageSendBuffer[_DYN__MAX__BUFFER__SIZE /* @min:%2eMAX_BUFFER_SIZE */]) {\r\n // sent internal log only once per page view\r\n if (!_bufferFullMessageSent) {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 67 /* _eInternalMessageId.SessionStorageBufferFull */, \"Maximum buffer size reached: \" + _self[_DYN_COUNT /* @min:%2ecount */](), true);\r\n _bufferFullMessageSent = true;\r\n }\r\n return;\r\n }\r\n _base[_DYN_ENQUEUE /* @min:%2eenqueue */](payload);\r\n _setBuffer(SessionStorageSendBuffer[_DYN__BUFFER__KEY /* @min:%2eBUFFER_KEY */], _self._get());\r\n };\r\n _self[_DYN_CLEAR /* @min:%2eclear */] = function () {\r\n _base[_DYN_CLEAR /* @min:%2eclear */]();\r\n _setBuffer(SessionStorageSendBuffer[_DYN__BUFFER__KEY /* @min:%2eBUFFER_KEY */], _self._get());\r\n _setBuffer(SessionStorageSendBuffer[_DYN__SENT__BUFFER__KEY /* @min:%2eSENT_BUFFER_KEY */], []);\r\n _bufferFullMessageSent = false;\r\n };\r\n _self[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */] = function (payload) {\r\n _setBuffer(SessionStorageSendBuffer[_DYN__BUFFER__KEY /* @min:%2eBUFFER_KEY */], _self._set(_removePayloadsFromBuffer(payload, _self._get())));\r\n var sentElements = _getBuffer(SessionStorageSendBuffer[_DYN__SENT__BUFFER__KEY /* @min:%2eSENT_BUFFER_KEY */]);\r\n if (sentElements instanceof Array && payload instanceof Array) {\r\n sentElements = sentElements.concat(payload);\r\n if (sentElements[_DYN_LENGTH /* @min:%2elength */] > SessionStorageSendBuffer[_DYN__MAX__BUFFER__SIZE /* @min:%2eMAX_BUFFER_SIZE */]) {\r\n // We send telemetry normally. If the SENT_BUFFER is too big we don't add new elements\r\n // until we receive a response from the backend and the buffer has free space again (see clearSent method)\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 67 /* _eInternalMessageId.SessionStorageBufferFull */, \"Sent buffer reached its maximum size: \" + sentElements[_DYN_LENGTH /* @min:%2elength */], true);\r\n sentElements[_DYN_LENGTH /* @min:%2elength */] = SessionStorageSendBuffer[_DYN__MAX__BUFFER__SIZE /* @min:%2eMAX_BUFFER_SIZE */];\r\n }\r\n _setBuffer(SessionStorageSendBuffer[_DYN__SENT__BUFFER__KEY /* @min:%2eSENT_BUFFER_KEY */], sentElements);\r\n }\r\n };\r\n _self[_DYN_CLEAR_SENT /* @min:%2eclearSent */] = function (payload) {\r\n var sentElements = _getBuffer(SessionStorageSendBuffer[_DYN__SENT__BUFFER__KEY /* @min:%2eSENT_BUFFER_KEY */]);\r\n sentElements = _removePayloadsFromBuffer(payload, sentElements);\r\n _setBuffer(SessionStorageSendBuffer[_DYN__SENT__BUFFER__KEY /* @min:%2eSENT_BUFFER_KEY */], sentElements);\r\n };\r\n function _removePayloadsFromBuffer(payloads, buffer) {\r\n var remaining = [];\r\n arrForEach(buffer, function (value) {\r\n if (!isFunction(value) && arrIndexOf(payloads, value) === -1) {\r\n remaining[_DYN_PUSH /* @min:%2epush */](value);\r\n }\r\n });\r\n return remaining;\r\n }\r\n function _getBuffer(key) {\r\n var prefixedKey = key;\r\n try {\r\n prefixedKey = config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */] && config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */]() ? config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */]() + \"_\" + prefixedKey : prefixedKey;\r\n var bufferJson = getItem(logger, prefixedKey);\r\n if (bufferJson) {\r\n var buffer_1 = getJSON().parse(bufferJson);\r\n if (isString(buffer_1)) {\r\n // When using some version prototype.js the stringify / parse cycle does not decode array's correctly\r\n buffer_1 = getJSON().parse(buffer_1);\r\n }\r\n if (buffer_1 && isArray(buffer_1)) {\r\n return buffer_1;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 42 /* _eInternalMessageId.FailedToRestoreStorageBuffer */, \" storage key: \" + prefixedKey + \", \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n return [];\r\n }\r\n function _setBuffer(key, buffer) {\r\n var prefixedKey = key;\r\n try {\r\n prefixedKey = config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */] && config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */]() ? config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */]() + \"_\" + prefixedKey : prefixedKey;\r\n var bufferJson = JSON[_DYN_STRINGIFY /* @min:%2estringify */](buffer);\r\n setItem(logger, prefixedKey, bufferJson);\r\n }\r\n catch (e) {\r\n // if there was an error, clear the buffer\r\n // telemetry is stored in the _buffer array so we won't loose any items\r\n setItem(logger, prefixedKey, JSON[_DYN_STRINGIFY /* @min:%2estringify */]([]));\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 41 /* _eInternalMessageId.FailedToSetStorageBuffer */, \" storage key: \" + prefixedKey + \", \" + getExceptionName(e) + \". Buffer cleared\", { exception: dumpObj(e) });\r\n }\r\n }\r\n });\r\n return _this;\r\n }\r\n// Removed Stub for SessionStorageSendBuffer.prototype.enqueue.\r\n// Removed Stub for SessionStorageSendBuffer.prototype.clear.\r\n// Removed Stub for SessionStorageSendBuffer.prototype.markAsSent.\r\n// Removed Stub for SessionStorageSendBuffer.prototype.clearSent.\r\n SessionStorageSendBuffer.BUFFER_KEY = \"AI_buffer\";\r\n SessionStorageSendBuffer.SENT_BUFFER_KEY = \"AI_sentBuffer\";\r\n // Maximum number of payloads stored in the buffer. If the buffer is full, new elements will be dropped.\r\n SessionStorageSendBuffer.MAX_BUFFER_SIZE = 2000;\r\n return SessionStorageSendBuffer;\r\n}(BaseSendBuffer));\r\nexport { SessionStorageSendBuffer };\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nvar _a;\r\nimport { __assignFn as __assign, __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { BreezeChannelIdentifier, DEFAULT_BREEZE_ENDPOINT, DEFAULT_BREEZE_PATH, DisabledPropertyName, Event, Exception, Metric, PageView, PageViewPerformance, ProcessLegacy, RemoteDependencyData, RequestHeaders, SampleRate, Trace, isInternalApplicationInsightsEndpoint, utlCanUseSessionStorage, utlSetStoragePrefix } from \"@microsoft/applicationinsights-common\";\r\nimport { BaseTelemetryPlugin, _throwInternal, _warnToConsole, arrForEach, createUniqueNamespace, dateNow, dumpObj, getExceptionName, getIEVersion, getJSON, getNavigator, getWindow, isArray, isBeaconsSupported, isFetchSupported, isNullOrUndefined, isXhrSupported, mergeEvtNamespace, objForEachKey, objKeys, useXDomainRequest } from \"@microsoft/applicationinsights-core-js\";\r\nimport { DependencyEnvelopeCreator, EventEnvelopeCreator, ExceptionEnvelopeCreator, MetricEnvelopeCreator, PageViewEnvelopeCreator, PageViewPerformanceEnvelopeCreator, TraceEnvelopeCreator } from \"./EnvelopeCreator\";\r\nimport { createOfflineListener } from \"./Offline\";\r\nimport { ArraySendBuffer, SessionStorageSendBuffer } from \"./SendBuffer\";\r\nimport { Serializer } from \"./Serializer\";\r\nimport { Sample } from \"./TelemetryProcessors/Sample\";\r\nimport { _DYN_BASE_TYPE, _DYN_BATCH_PAYLOADS, _DYN_BUFFER_OVERRIDE, _DYN_CLEAR, _DYN_CLEAR_SENT, _DYN_CONVERT_UNDEFINED, _DYN_COUNT, _DYN_CUSTOM_HEADERS, _DYN_DIAG_LOG, _DYN_DISABLE_INSTRUMENTAT7, _DYN_DISABLE_TELEMETRY, _DYN_DISABLE_XHR, _DYN_EMIT_LINE_DELIMITED_0, _DYN_ENABLE_SESSION_STORA4, _DYN_ENDPOINT_URL, _DYN_ENQUEUE, _DYN_EVENTS_SEND_REQUEST, _DYN_INSTRUMENTATION_KEY, _DYN_IS_BEACON_API_DISABL3, _DYN_IS_ONLINE, _DYN_IS_RETRY_DISABLED, _DYN_ITEMS_ACCEPTED, _DYN_ITEMS_RECEIVED, _DYN_LENGTH, _DYN_MARK_AS_SENT, _DYN_MAX_BATCH_INTERVAL, _DYN_MAX_BATCH_SIZE_IN_BY1, _DYN_NAME_PREFIX, _DYN_ONUNLOAD_DISABLE_BEA2, _DYN_ONUNLOAD_DISABLE_FET5, _DYN_PUSH, _DYN_SAMPLE_RATE, _DYN_SAMPLING_PERCENTAGE, _DYN_SET_REQUEST_HEADER, _DYN_TAGS, _DYN_TRIGGER_SEND, _DYN__BUFFER, _DYN__ON_ERROR, _DYN__ON_PARTIAL_SUCCESS, _DYN__ON_SUCCESS, _DYN__SENDER, _DYN__SENDER_CONFIG, _DYN__XHR_READY_STATE_CHA6 } from \"./__DynamicConstants\";\r\nvar FetchSyncRequestSizeLimitBytes = 65000; // approx 64kb (the current Edge, Firefox and Chrome max limit)\r\nfunction _getResponseText(xhr) {\r\n try {\r\n return xhr.responseText;\r\n }\r\n catch (e) {\r\n // Best effort, as XHR may throw while XDR wont so just ignore\r\n }\r\n return null;\r\n}\r\nfunction _getDefaultAppInsightsChannelConfig() {\r\n var _a;\r\n var defaultValue;\r\n var defaultCustomHeaders;\r\n // set default values\r\n return _a = {\r\n endpointUrl: function () { return DEFAULT_BREEZE_ENDPOINT + DEFAULT_BREEZE_PATH; }\r\n },\r\n _a[_DYN_EMIT_LINE_DELIMITED_0 /* @min:emitLineDelimitedJson */] = function () { return false; },\r\n _a[_DYN_MAX_BATCH_INTERVAL /* @min:maxBatchInterval */] = function () { return 15000; },\r\n _a[_DYN_MAX_BATCH_SIZE_IN_BY1 /* @min:maxBatchSizeInBytes */] = function () { return 102400; },\r\n _a[_DYN_DISABLE_TELEMETRY /* @min:disableTelemetry */] = function () { return false; },\r\n _a[_DYN_ENABLE_SESSION_STORA4 /* @min:enableSessionStorageBuffer */] = function () { return true; },\r\n _a[_DYN_BUFFER_OVERRIDE /* @min:bufferOverride */] = function () { return false; },\r\n _a[_DYN_IS_RETRY_DISABLED /* @min:isRetryDisabled */] = function () { return false; },\r\n _a[_DYN_IS_BEACON_API_DISABL3 /* @min:isBeaconApiDisabled */] = function () { return true; },\r\n _a[_DYN_DISABLE_XHR /* @min:disableXhr */] = function () { return false; },\r\n _a[_DYN_ONUNLOAD_DISABLE_FET5 /* @min:onunloadDisableFetch */] = function () { return false; },\r\n _a[_DYN_ONUNLOAD_DISABLE_BEA2 /* @min:onunloadDisableBeacon */] = function () { return false; },\r\n _a[_DYN_INSTRUMENTATION_KEY /* @min:instrumentationKey */] = function () { return defaultValue; },\r\n _a[_DYN_NAME_PREFIX /* @min:namePrefix */] = function () { return defaultValue; },\r\n _a[_DYN_SAMPLING_PERCENTAGE /* @min:samplingPercentage */] = function () { return 100; },\r\n _a[_DYN_CUSTOM_HEADERS /* @min:customHeaders */] = function () { return defaultCustomHeaders; },\r\n _a[_DYN_CONVERT_UNDEFINED /* @min:convertUndefined */] = function () { return defaultValue; },\r\n _a.eventsLimitInMem = function () { return 10000; },\r\n _a;\r\n}\r\nvar EnvelopeTypeCreator = (_a = {},\r\n _a[Event.dataType] = EventEnvelopeCreator,\r\n _a[Trace.dataType] = TraceEnvelopeCreator,\r\n _a[PageView.dataType] = PageViewEnvelopeCreator,\r\n _a[PageViewPerformance.dataType] = PageViewPerformanceEnvelopeCreator,\r\n _a[Exception.dataType] = ExceptionEnvelopeCreator,\r\n _a[Metric.dataType] = MetricEnvelopeCreator,\r\n _a[RemoteDependencyData.dataType] = DependencyEnvelopeCreator,\r\n _a);\r\nvar Sender = /** @class */ (function (_super) {\r\n __extends(Sender, _super);\r\n function Sender() {\r\n var _this = _super.call(this) || this;\r\n _this.priority = 1001;\r\n _this.identifier = BreezeChannelIdentifier;\r\n /**\r\n * The configuration for this sender instance\r\n */\r\n _this._senderConfig = _getDefaultAppInsightsChannelConfig();\r\n // Don't set the defaults here, set them in the _initDefaults() as this is also called during unload\r\n var _consecutiveErrors; // How many times in a row a retryable error condition has occurred.\r\n var _retryAt; // The time to retry at in milliseconds from 1970/01/01 (this makes the timer calculation easy).\r\n var _lastSend; // The time of the last send operation.\r\n var _paused; // Flag indicating that the sending should be paused\r\n var _timeoutHandle; // Handle to the timer for delayed sending of batches of data.\r\n var _serializer;\r\n var _stamp_specific_redirects;\r\n var _headers;\r\n var _syncFetchPayload = 0; // Keep track of the outstanding sync fetch payload total (as sync fetch has limits)\r\n var _fallbackSender; // The sender to use if the payload size is too large\r\n var _syncUnloadSender; // The identified sender to use for the synchronous unload stage\r\n var _offlineListener;\r\n var _evtNamespace;\r\n dynamicProto(Sender, _this, function (_self, _base) {\r\n _initDefaults();\r\n _self.pause = function () {\r\n _clearScheduledTimer();\r\n _paused = true;\r\n };\r\n _self.resume = function () {\r\n if (_paused) {\r\n _paused = false;\r\n _retryAt = null;\r\n // flush if we have exceeded the max-size already\r\n if (_self._buffer.size() > _self._senderConfig[_DYN_MAX_BATCH_SIZE_IN_BY1 /* @min:%2emaxBatchSizeInBytes */]()) {\r\n _self[_DYN_TRIGGER_SEND /* @min:%2etriggerSend */](true, null, 10 /* SendRequestReason.MaxBatchSize */);\r\n }\r\n _setupTimer();\r\n }\r\n };\r\n _self.flush = function (isAsync, callBack, sendReason) {\r\n if (isAsync === void 0) { isAsync = true; }\r\n if (!_paused) {\r\n // Clear the normal schedule timer as we are going to try and flush ASAP\r\n _clearScheduledTimer();\r\n try {\r\n _self[_DYN_TRIGGER_SEND /* @min:%2etriggerSend */](isAsync, null, sendReason || 1 /* SendRequestReason.ManualFlush */);\r\n }\r\n catch (e) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 22 /* _eInternalMessageId.FlushFailed */, \"flush failed, telemetry will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n };\r\n _self.onunloadFlush = function () {\r\n if (!_paused) {\r\n if ((_self._senderConfig[_DYN_ONUNLOAD_DISABLE_BEA2 /* @min:%2eonunloadDisableBeacon */]() === false || _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_IS_BEACON_API_DISABL3 /* @min:%2eisBeaconApiDisabled */]() === false) && isBeaconsSupported()) {\r\n try {\r\n _self[_DYN_TRIGGER_SEND /* @min:%2etriggerSend */](true, _doUnloadSend, 2 /* SendRequestReason.Unload */);\r\n }\r\n catch (e) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 20 /* _eInternalMessageId.FailedToSendQueuedTelemetry */, \"failed to flush with beacon sender on page unload, telemetry will not be collected: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n else {\r\n _self.flush();\r\n }\r\n }\r\n };\r\n _self.addHeader = function (name, value) {\r\n _headers[name] = value;\r\n };\r\n _self.initialize = function (config, core, extensions, pluginChain) {\r\n if (_self.isInitialized()) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 28 /* _eInternalMessageId.SenderNotInitialized */, \"Sender is already initialized\");\r\n }\r\n _base.initialize(config, core, extensions, pluginChain);\r\n var ctx = _self._getTelCtx();\r\n var identifier = _self.identifier;\r\n _serializer = new Serializer(core.logger);\r\n _consecutiveErrors = 0;\r\n _retryAt = null;\r\n _lastSend = 0;\r\n _self[_DYN__SENDER /* @min:%2e_sender */] = null;\r\n _stamp_specific_redirects = 0;\r\n var diagLog = _self[_DYN_DIAG_LOG /* @min:%2ediagLog */]();\r\n _evtNamespace = mergeEvtNamespace(createUniqueNamespace(\"Sender\"), core.evtNamespace && core.evtNamespace());\r\n _offlineListener = createOfflineListener(_evtNamespace);\r\n // TODO v3.x: Change the ISenderConfig to not be function calls\r\n var defaultConfig = _getDefaultAppInsightsChannelConfig();\r\n objForEachKey(defaultConfig, function (field, value) {\r\n _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][field] = function () {\r\n var theValue = ctx.getConfig(identifier, field, value());\r\n if (!theValue && field === \"endpointUrl\") {\r\n // Use the default value (handles empty string in the configuration)\r\n theValue = value();\r\n }\r\n return theValue;\r\n };\r\n });\r\n if (config.storagePrefix) {\r\n utlSetStoragePrefix(config.storagePrefix);\r\n }\r\n var useSessionStorage = _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENABLE_SESSION_STORA4 /* @min:%2eenableSessionStorageBuffer */]() &&\r\n !!(_self._senderConfig[_DYN_BUFFER_OVERRIDE /* @min:%2ebufferOverride */]() || utlCanUseSessionStorage());\r\n _self[_DYN__BUFFER /* @min:%2e_buffer */] = useSessionStorage\r\n ? new SessionStorageSendBuffer(diagLog, _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */])\r\n : new ArraySendBuffer(diagLog, _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */]);\r\n _self._sample = new Sample(_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_SAMPLING_PERCENTAGE /* @min:%2esamplingPercentage */](), diagLog);\r\n if (!_validateInstrumentationKey(config)) {\r\n _throwInternal(diagLog, 1 /* eLoggingSeverity.CRITICAL */, 100 /* _eInternalMessageId.InvalidInstrumentationKey */, \"Invalid Instrumentation key \" + config[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */]);\r\n }\r\n if (!isInternalApplicationInsightsEndpoint(_self._senderConfig.endpointUrl()) && _self._senderConfig.customHeaders() && _self._senderConfig.customHeaders()[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n arrForEach(_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_CUSTOM_HEADERS /* @min:%2ecustomHeaders */](), function (customHeader) {\r\n _this.addHeader(customHeader.header, customHeader.value);\r\n });\r\n }\r\n var senderConfig = _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */];\r\n var sendPostFunc = null;\r\n if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */]() && useXDomainRequest()) {\r\n sendPostFunc = _xdrSender; // IE 8 and 9\r\n }\r\n else if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */]() && isXhrSupported()) {\r\n sendPostFunc = _xhrSender;\r\n }\r\n if (!sendPostFunc && isFetchSupported()) {\r\n sendPostFunc = _fetchSender;\r\n }\r\n // always fallback to XHR\r\n _fallbackSender = sendPostFunc || _xhrSender;\r\n if (!senderConfig[_DYN_IS_BEACON_API_DISABL3 /* @min:%2eisBeaconApiDisabled */]() && isBeaconsSupported()) {\r\n // Config is set to always used beacon sending\r\n sendPostFunc = _beaconSender;\r\n }\r\n _self[_DYN__SENDER /* @min:%2e_sender */] = sendPostFunc || _xhrSender;\r\n if (!senderConfig[_DYN_ONUNLOAD_DISABLE_FET5 /* @min:%2eonunloadDisableFetch */]() && isFetchSupported(true)) {\r\n // Try and use the fetch with keepalive\r\n _syncUnloadSender = _fetchKeepAliveSender;\r\n }\r\n else if (isBeaconsSupported()) {\r\n // Try and use sendBeacon\r\n _syncUnloadSender = _beaconSender;\r\n }\r\n else if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */]() && useXDomainRequest()) {\r\n _syncUnloadSender = _xdrSender; // IE 8 and 9\r\n }\r\n else if (!senderConfig[_DYN_DISABLE_XHR /* @min:%2edisableXhr */]() && isXhrSupported()) {\r\n _syncUnloadSender = _xhrSender;\r\n }\r\n else {\r\n _syncUnloadSender = _fallbackSender;\r\n }\r\n };\r\n _self.processTelemetry = function (telemetryItem, itemCtx) {\r\n itemCtx = _self._getTelCtx(itemCtx);\r\n var diagLogger = itemCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */]();\r\n try {\r\n // if master off switch is set, don't send any data\r\n if (_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_DISABLE_TELEMETRY /* @min:%2edisableTelemetry */]()) {\r\n // Do not send/save data\r\n return;\r\n }\r\n // validate input\r\n if (!telemetryItem) {\r\n _throwInternal(diagLogger, 1 /* eLoggingSeverity.CRITICAL */, 7 /* _eInternalMessageId.CannotSendEmptyTelemetry */, \"Cannot send empty telemetry\");\r\n return;\r\n }\r\n // validate event\r\n if (telemetryItem.baseData && !telemetryItem[_DYN_BASE_TYPE /* @min:%2ebaseType */]) {\r\n _throwInternal(diagLogger, 1 /* eLoggingSeverity.CRITICAL */, 70 /* _eInternalMessageId.InvalidEvent */, \"Cannot send telemetry without baseData and baseType\");\r\n return;\r\n }\r\n if (!telemetryItem[_DYN_BASE_TYPE /* @min:%2ebaseType */]) {\r\n // Default\r\n telemetryItem[_DYN_BASE_TYPE /* @min:%2ebaseType */] = \"EventData\";\r\n }\r\n // ensure a sender was constructed\r\n if (!_self[_DYN__SENDER /* @min:%2e_sender */]) {\r\n _throwInternal(diagLogger, 1 /* eLoggingSeverity.CRITICAL */, 28 /* _eInternalMessageId.SenderNotInitialized */, \"Sender was not initialized\");\r\n return;\r\n }\r\n // check if this item should be sampled in, else add sampleRate tag\r\n if (!_isSampledIn(telemetryItem)) {\r\n // Item is sampled out, do not send it\r\n _throwInternal(diagLogger, 2 /* eLoggingSeverity.WARNING */, 33 /* _eInternalMessageId.TelemetrySampledAndNotSent */, \"Telemetry item was sampled out and not sent\", { SampleRate: _self._sample[_DYN_SAMPLE_RATE /* @min:%2esampleRate */] });\r\n return;\r\n }\r\n else {\r\n telemetryItem[SampleRate] = _self._sample[_DYN_SAMPLE_RATE /* @min:%2esampleRate */];\r\n }\r\n var convertUndefined = _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_CONVERT_UNDEFINED /* @min:%2econvertUndefined */]() || undefined;\r\n // construct an envelope that Application Insights endpoint can understand\r\n // if ikey of telemetry is provided and not empty, envelope will use this iKey instead of senderConfig iKey\r\n var defaultEnvelopeIkey = telemetryItem.iKey || _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */]();\r\n var aiEnvelope_1 = Sender.constructEnvelope(telemetryItem, defaultEnvelopeIkey, diagLogger, convertUndefined);\r\n if (!aiEnvelope_1) {\r\n _throwInternal(diagLogger, 1 /* eLoggingSeverity.CRITICAL */, 47 /* _eInternalMessageId.CreateEnvelopeError */, \"Unable to create an AppInsights envelope\");\r\n return;\r\n }\r\n var doNotSendItem_1 = false;\r\n // this is for running in legacy mode, where customer may already have a custom initializer present\r\n if (telemetryItem[_DYN_TAGS /* @min:%2etags */] && telemetryItem[_DYN_TAGS /* @min:%2etags */][ProcessLegacy]) {\r\n arrForEach(telemetryItem[_DYN_TAGS /* @min:%2etags */][ProcessLegacy], function (callBack) {\r\n try {\r\n if (callBack && callBack(aiEnvelope_1) === false) {\r\n doNotSendItem_1 = true;\r\n _warnToConsole(diagLogger, \"Telemetry processor check returns false\");\r\n }\r\n }\r\n catch (e) {\r\n // log error but dont stop executing rest of the telemetry initializers\r\n // doNotSendItem = true;\r\n _throwInternal(diagLogger, 1 /* eLoggingSeverity.CRITICAL */, 64 /* _eInternalMessageId.TelemetryInitializerFailed */, \"One of telemetry initializers failed, telemetry item will not be sent: \" + getExceptionName(e), { exception: dumpObj(e) }, true);\r\n }\r\n });\r\n delete telemetryItem[_DYN_TAGS /* @min:%2etags */][ProcessLegacy];\r\n }\r\n if (doNotSendItem_1) {\r\n return; // do not send, no need to execute next plugin\r\n }\r\n // check if the incoming payload is too large, truncate if necessary\r\n var payload = _serializer.serialize(aiEnvelope_1);\r\n // flush if we would exceed the max-size limit by adding this item\r\n var buffer = _self[_DYN__BUFFER /* @min:%2e_buffer */];\r\n var bufferSize = buffer.size();\r\n if ((bufferSize + payload[_DYN_LENGTH /* @min:%2elength */]) > _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_MAX_BATCH_SIZE_IN_BY1 /* @min:%2emaxBatchSizeInBytes */]()) {\r\n if (!_offlineListener || _offlineListener[_DYN_IS_ONLINE /* @min:%2eisOnline */]()) { // only trigger send when currently online\r\n _self[_DYN_TRIGGER_SEND /* @min:%2etriggerSend */](true, null, 10 /* SendRequestReason.MaxBatchSize */);\r\n }\r\n }\r\n // enqueue the payload\r\n buffer[_DYN_ENQUEUE /* @min:%2eenqueue */](payload);\r\n // ensure an invocation timeout is set\r\n _setupTimer();\r\n }\r\n catch (e) {\r\n _throwInternal(diagLogger, 2 /* eLoggingSeverity.WARNING */, 12 /* _eInternalMessageId.FailedAddingTelemetryToBuffer */, \"Failed adding telemetry to the sender's buffer, some telemetry will be lost: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n // hand off the telemetry item to the next plugin\r\n _self.processNext(telemetryItem, itemCtx);\r\n };\r\n /**\r\n * xhr state changes\r\n */\r\n _self[_DYN__XHR_READY_STATE_CHA6 /* @min:%2e_xhrReadyStateChange */] = function (xhr, payload, countOfItemsInPayload) {\r\n if (xhr.readyState === 4) {\r\n _checkResponsStatus(xhr.status, payload, xhr.responseURL, countOfItemsInPayload, _formatErrorMessageXhr(xhr), _getResponseText(xhr) || xhr.response);\r\n }\r\n };\r\n /**\r\n * Immediately send buffered data\r\n * @param async {boolean} - Indicates if the events should be sent asynchronously\r\n * @param forcedSender {SenderFunction} - Indicates the forcedSender, undefined if not passed\r\n */\r\n _self[_DYN_TRIGGER_SEND /* @min:%2etriggerSend */] = function (async, forcedSender, sendReason) {\r\n if (async === void 0) { async = true; }\r\n if (!_paused) {\r\n try {\r\n var buffer = _self[_DYN__BUFFER /* @min:%2e_buffer */];\r\n // Send data only if disableTelemetry is false\r\n if (!_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_DISABLE_TELEMETRY /* @min:%2edisableTelemetry */]()) {\r\n if (buffer[_DYN_COUNT /* @min:%2ecount */]() > 0) {\r\n var payload = buffer.getItems();\r\n _notifySendRequest(sendReason || 0 /* SendRequestReason.Undefined */, async);\r\n // invoke send\r\n if (forcedSender) {\r\n forcedSender.call(_self, payload, async);\r\n }\r\n else {\r\n _self[_DYN__SENDER /* @min:%2e_sender */](payload, async);\r\n }\r\n }\r\n // update lastSend time to enable throttling\r\n _lastSend = +new Date;\r\n }\r\n else {\r\n buffer[_DYN_CLEAR /* @min:%2eclear */]();\r\n }\r\n _clearScheduledTimer();\r\n }\r\n catch (e) {\r\n /* Ignore this error for IE under v10 */\r\n var ieVer = getIEVersion();\r\n if (!ieVer || ieVer > 9) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 40 /* _eInternalMessageId.TransmissionFailed */, \"Telemetry transmission failed, some telemetry will be lost: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n }\r\n };\r\n _self._doTeardown = function (unloadCtx, unloadState) {\r\n _self.onunloadFlush();\r\n _offlineListener.unload();\r\n _initDefaults();\r\n };\r\n /**\r\n * error handler\r\n */\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */] = function (payload, message, event) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 26 /* _eInternalMessageId.OnError */, \"Failed to send telemetry.\", { message: message });\r\n _self._buffer && _self._buffer[_DYN_CLEAR_SENT /* @min:%2eclearSent */](payload);\r\n };\r\n /**\r\n * partial success handler\r\n */\r\n _self[_DYN__ON_PARTIAL_SUCCESS /* @min:%2e_onPartialSuccess */] = function (payload, results) {\r\n var failed = [];\r\n var retry = [];\r\n // Iterate through the reversed array of errors so that splicing doesn't have invalid indexes after the first item.\r\n var errors = results.errors.reverse();\r\n for (var _i = 0, errors_1 = errors; _i < errors_1.length; _i++) {\r\n var error = errors_1[_i];\r\n var extracted = payload.splice(error.index, 1)[0];\r\n if (_isRetriable(error.statusCode)) {\r\n retry[_DYN_PUSH /* @min:%2epush */](extracted);\r\n }\r\n else {\r\n // All other errors, including: 402 (Monthly quota exceeded) and 439 (Too many requests and refresh cache).\r\n failed[_DYN_PUSH /* @min:%2epush */](extracted);\r\n }\r\n }\r\n if (payload[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n _self[_DYN__ON_SUCCESS /* @min:%2e_onSuccess */](payload, results[_DYN_ITEMS_ACCEPTED /* @min:%2eitemsAccepted */]);\r\n }\r\n if (failed[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](failed, _formatErrorMessageXhr(null, [\"partial success\", results[_DYN_ITEMS_ACCEPTED /* @min:%2eitemsAccepted */], \"of\", results.itemsReceived].join(\" \")));\r\n }\r\n if (retry[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n _resendPayload(retry);\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, \"Partial success. \" +\r\n \"Delivered: \" + payload[_DYN_LENGTH /* @min:%2elength */] + \", Failed: \" + failed[_DYN_LENGTH /* @min:%2elength */] +\r\n \". Will retry to send \" + retry[_DYN_LENGTH /* @min:%2elength */] + \" our of \" + results[_DYN_ITEMS_RECEIVED /* @min:%2eitemsReceived */] + \" items\");\r\n }\r\n };\r\n /**\r\n * success handler\r\n */\r\n _self[_DYN__ON_SUCCESS /* @min:%2e_onSuccess */] = function (payload, countOfItemsInPayload) {\r\n _self._buffer && _self._buffer[_DYN_CLEAR_SENT /* @min:%2eclearSent */](payload);\r\n };\r\n /**\r\n * xdr state changes\r\n */\r\n _self._xdrOnLoad = function (xdr, payload) {\r\n var responseText = _getResponseText(xdr);\r\n if (xdr && (responseText + \"\" === \"200\" || responseText === \"\")) {\r\n _consecutiveErrors = 0;\r\n _self[_DYN__ON_SUCCESS /* @min:%2e_onSuccess */](payload, 0);\r\n }\r\n else {\r\n var results = _parseResponse(responseText);\r\n if (results && results.itemsReceived && results.itemsReceived > results[_DYN_ITEMS_ACCEPTED /* @min:%2eitemsAccepted */]\r\n && !_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_IS_RETRY_DISABLED /* @min:%2eisRetryDisabled */]()) {\r\n _self[_DYN__ON_PARTIAL_SUCCESS /* @min:%2e_onPartialSuccess */](payload, results);\r\n }\r\n else {\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, _formatErrorMessageXdr(xdr));\r\n }\r\n }\r\n };\r\n function _isSampledIn(envelope) {\r\n return _self._sample.isSampledIn(envelope);\r\n }\r\n function _checkResponsStatus(status, payload, responseUrl, countOfItemsInPayload, errorMessage, res) {\r\n var response = null;\r\n if (!_self._appId) {\r\n response = _parseResponse(res);\r\n if (response && response.appId) {\r\n _self._appId = response.appId;\r\n }\r\n }\r\n if ((status < 200 || status >= 300) && status !== 0) {\r\n // Update End Point url if permanent redirect or moved permanently\r\n // Updates the end point url before retry\r\n if (status === 301 || status === 307 || status === 308) {\r\n if (!_checkAndUpdateEndPointUrl(responseUrl)) {\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, errorMessage);\r\n return;\r\n }\r\n }\r\n if (!_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_IS_RETRY_DISABLED /* @min:%2eisRetryDisabled */]() && _isRetriable(status)) {\r\n _resendPayload(payload);\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, \". \" +\r\n \"Response code \" + status + \". Will retry to send \" + payload[_DYN_LENGTH /* @min:%2elength */] + \" items.\");\r\n }\r\n else {\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, errorMessage);\r\n }\r\n }\r\n else if (_offlineListener && !_offlineListener[_DYN_IS_ONLINE /* @min:%2eisOnline */]()) { // offline\r\n // Note: Don't check for status == 0, since adblock gives this code\r\n if (!_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_IS_RETRY_DISABLED /* @min:%2eisRetryDisabled */]()) {\r\n var offlineBackOffMultiplier = 10; // arbritrary number\r\n _resendPayload(payload, offlineBackOffMultiplier);\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, \". Offline - Response Code: \".concat(status, \". Offline status: \").concat(!_offlineListener.isOnline(), \". Will retry to send \").concat(payload.length, \" items.\"));\r\n }\r\n }\r\n else {\r\n // check if the xhr's responseURL or fetch's response.url is same as endpoint url\r\n // TODO after 10 redirects force send telemetry with 'redirect=false' as query parameter.\r\n _checkAndUpdateEndPointUrl(responseUrl);\r\n if (status === 206) {\r\n if (!response) {\r\n response = _parseResponse(res);\r\n }\r\n if (response && !_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_IS_RETRY_DISABLED /* @min:%2eisRetryDisabled */]()) {\r\n _self[_DYN__ON_PARTIAL_SUCCESS /* @min:%2e_onPartialSuccess */](payload, response);\r\n }\r\n else {\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, errorMessage);\r\n }\r\n }\r\n else {\r\n _consecutiveErrors = 0;\r\n _self[_DYN__ON_SUCCESS /* @min:%2e_onSuccess */](payload, countOfItemsInPayload);\r\n }\r\n }\r\n }\r\n function _checkAndUpdateEndPointUrl(responseUrl) {\r\n // Maximum stamp specific redirects allowed(uncomment this when breeze is ready with not allowing redirects feature)\r\n if (_stamp_specific_redirects >= 10) {\r\n // _self._senderConfig.endpointUrl = () => Sender._getDefaultAppInsightsChannelConfig().endpointUrl()+\"/?redirect=false\";\r\n // _stamp_specific_redirects = 0;\r\n return false;\r\n }\r\n if (!isNullOrUndefined(responseUrl) && responseUrl !== \"\") {\r\n if (responseUrl !== _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */]()) {\r\n _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */] = function () { return responseUrl; };\r\n ++_stamp_specific_redirects;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n function _doUnloadSend(payload, isAsync) {\r\n if (_syncUnloadSender) {\r\n // We are unloading so always call the sender with sync set to false\r\n _syncUnloadSender(payload, false);\r\n }\r\n else {\r\n // Fallback to the previous beacon Sender (which causes a CORB warning on chrome now)\r\n _beaconSender(payload, isAsync);\r\n }\r\n }\r\n function _doBeaconSend(payload) {\r\n var nav = getNavigator();\r\n var buffer = _self[_DYN__BUFFER /* @min:%2e_buffer */];\r\n var url = _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */]();\r\n var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);\r\n // Chrome only allows CORS-safelisted values for the sendBeacon data argument\r\n // see: https://bugs.chromium.org/p/chromium/issues/detail?id=720283\r\n var plainTextBatch = new Blob([batch], { type: \"text/plain;charset=UTF-8\" });\r\n // The sendBeacon method returns true if the user agent is able to successfully queue the data for transfer. Otherwise it returns false.\r\n var queued = nav.sendBeacon(url, plainTextBatch);\r\n if (queued) {\r\n buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);\r\n // no response from beaconSender, clear buffer\r\n _self._onSuccess(payload, payload[_DYN_LENGTH /* @min:%2elength */]);\r\n }\r\n return queued;\r\n }\r\n /**\r\n * Send Beacon API request\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - not used\r\n * Note: Beacon API does not support custom headers and we are not able to get\r\n * appId from the backend for the correct correlation.\r\n */\r\n function _beaconSender(payload, isAsync) {\r\n if (isArray(payload) && payload[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n // The sendBeacon method returns true if the user agent is able to successfully queue the data for transfer. Otherwise it returns false.\r\n if (!_doBeaconSend(payload)) {\r\n // Failed to send entire payload so try and split data and try to send as much events as possible\r\n var droppedPayload = [];\r\n for (var lp = 0; lp < payload[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n var thePayload = payload[lp];\r\n if (!_doBeaconSend([thePayload])) {\r\n // Can't send anymore, so split the batch and drop the rest\r\n droppedPayload[_DYN_PUSH /* @min:%2epush */](thePayload);\r\n }\r\n }\r\n if (droppedPayload[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n _fallbackSender && _fallbackSender(droppedPayload, true);\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, \". \" + \"Failed to send telemetry with Beacon API, retried with normal sender.\");\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Send XMLHttpRequest\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - Indicates if the request should be sent asynchronously\r\n */\r\n function _xhrSender(payload, isAsync) {\r\n var xhr = new XMLHttpRequest();\r\n var endPointUrl = _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */]();\r\n try {\r\n xhr[DisabledPropertyName] = true;\r\n }\r\n catch (e) {\r\n // If the environment has locked down the XMLHttpRequest (preventExtensions and/or freeze), this would\r\n // cause the request to fail and we no telemetry would be sent\r\n }\r\n xhr.open(\"POST\", endPointUrl, isAsync);\r\n xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](\"Content-type\", \"application/json\");\r\n // append Sdk-Context request header only in case of breeze endpoint\r\n if (isInternalApplicationInsightsEndpoint(endPointUrl)) {\r\n xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[6 /* eRequestHeaders.sdkContextHeader */], RequestHeaders[7 /* eRequestHeaders.sdkContextHeaderAppIdRequest */]);\r\n }\r\n arrForEach(objKeys(_headers), function (headerName) {\r\n xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](headerName, _headers[headerName]);\r\n });\r\n xhr.onreadystatechange = function () { return _self._xhrReadyStateChange(xhr, payload, payload[_DYN_LENGTH /* @min:%2elength */]); };\r\n xhr.onerror = function (event) { return _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, _formatErrorMessageXhr(xhr), event); };\r\n // compose an array of payloads\r\n var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);\r\n xhr.send(batch);\r\n _self._buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);\r\n }\r\n function _fetchKeepAliveSender(payload, isAsync) {\r\n if (isArray(payload)) {\r\n var payloadSize = payload[_DYN_LENGTH /* @min:%2elength */];\r\n for (var lp = 0; lp < payload[_DYN_LENGTH /* @min:%2elength */]; lp++) {\r\n payloadSize += payload[lp][_DYN_LENGTH /* @min:%2elength */];\r\n }\r\n if ((_syncFetchPayload + payloadSize) <= FetchSyncRequestSizeLimitBytes) {\r\n _doFetchSender(payload, false);\r\n }\r\n else if (isBeaconsSupported()) {\r\n // Fallback to beacon sender as we at least get told which events can't be scheduled\r\n _beaconSender(payload, isAsync);\r\n }\r\n else {\r\n // Payload is going to be too big so just try and send via XHR\r\n _fallbackSender && _fallbackSender(payload, true);\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, \". \" + \"Failed to send telemetry with Beacon API, retried with xhrSender.\");\r\n }\r\n }\r\n }\r\n /**\r\n * Send fetch API request\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - not used\r\n */\r\n function _fetchSender(payload, isAsync) {\r\n _doFetchSender(payload, true);\r\n }\r\n /**\r\n * Send fetch API request\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - For fetch this identifies whether we are \"unloading\" (false) or a normal request\r\n */\r\n function _doFetchSender(payload, isAsync) {\r\n var _a;\r\n var endPointUrl = _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */]();\r\n var batch = _self._buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);\r\n var plainTextBatch = new Blob([batch], { type: \"application/json\" });\r\n var requestHeaders = new Headers();\r\n var batchLength = batch[_DYN_LENGTH /* @min:%2elength */];\r\n var ignoreResponse = false;\r\n var responseHandled = false;\r\n // append Sdk-Context request header only in case of breeze endpoint\r\n if (isInternalApplicationInsightsEndpoint(endPointUrl)) {\r\n requestHeaders.append(RequestHeaders[6 /* eRequestHeaders.sdkContextHeader */], RequestHeaders[7 /* eRequestHeaders.sdkContextHeaderAppIdRequest */]);\r\n }\r\n arrForEach(objKeys(_headers), function (headerName) {\r\n requestHeaders.append(headerName, _headers[headerName]);\r\n });\r\n var init = (_a = {\r\n method: \"POST\",\r\n headers: requestHeaders,\r\n body: plainTextBatch\r\n },\r\n _a[DisabledPropertyName] = true // Mark so we don't attempt to track this request\r\n ,\r\n _a);\r\n if (!isAsync) {\r\n init.keepalive = true;\r\n // As a sync request (during unload), it is unlikely that we will get a chance to process the response so\r\n // just like beacon send assume that the events have been accepted and processed\r\n ignoreResponse = true;\r\n _syncFetchPayload += batchLength;\r\n }\r\n var request = new Request(endPointUrl, init);\r\n try {\r\n // Also try and tag the request (just in case the value in init is not copied over)\r\n request[DisabledPropertyName] = true;\r\n }\r\n catch (e) {\r\n // If the environment has locked down the XMLHttpRequest (preventExtensions and/or freeze), this would\r\n // cause the request to fail and we no telemetry would be sent\r\n }\r\n _self._buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);\r\n try {\r\n fetch(request).then(function (response) {\r\n if (!isAsync) {\r\n _syncFetchPayload -= batchLength;\r\n batchLength = 0;\r\n }\r\n if (!responseHandled) {\r\n responseHandled = true;\r\n /**\r\n * The Promise returned from fetch() won’t reject on HTTP error status even if the response is an HTTP 404 or 500.\r\n * Instead, it will resolve normally (with ok status set to false), and it will only reject on network failure\r\n * or if anything prevented the request from completing.\r\n */\r\n if (!response.ok) {\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, response.statusText);\r\n }\r\n else {\r\n response.text().then(function (text) {\r\n _checkResponsStatus(response.status, payload, response.url, payload[_DYN_LENGTH /* @min:%2elength */], response.statusText, text);\r\n });\r\n }\r\n }\r\n })[\"catch\"](function (error) {\r\n if (!isAsync) {\r\n _syncFetchPayload -= batchLength;\r\n batchLength = 0;\r\n }\r\n if (!responseHandled) {\r\n responseHandled = true;\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, error.message);\r\n }\r\n });\r\n }\r\n catch (e) {\r\n if (!responseHandled) {\r\n _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, dumpObj(e));\r\n }\r\n }\r\n if (ignoreResponse && !responseHandled) {\r\n // Assume success during unload processing as we most likely won't get the response\r\n responseHandled = true;\r\n _self._onSuccess(payload, payload[_DYN_LENGTH /* @min:%2elength */]);\r\n }\r\n }\r\n /**\r\n * Parses the response from the backend.\r\n * @param response - XMLHttpRequest or XDomainRequest response\r\n */\r\n function _parseResponse(response) {\r\n try {\r\n if (response && response !== \"\") {\r\n var result = getJSON().parse(response);\r\n if (result && result.itemsReceived && result.itemsReceived >= result[_DYN_ITEMS_ACCEPTED /* @min:%2eitemsAccepted */] &&\r\n result.itemsReceived - result.itemsAccepted === result.errors[_DYN_LENGTH /* @min:%2elength */]) {\r\n return result;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 43 /* _eInternalMessageId.InvalidBackendResponse */, \"Cannot parse the response. \" + getExceptionName(e), {\r\n response: response\r\n });\r\n }\r\n return null;\r\n }\r\n /**\r\n * Resend payload. Adds payload back to the send buffer and setup a send timer (with exponential backoff).\r\n * @param payload\r\n */\r\n function _resendPayload(payload, linearFactor) {\r\n if (linearFactor === void 0) { linearFactor = 1; }\r\n if (!payload || payload[_DYN_LENGTH /* @min:%2elength */] === 0) {\r\n return;\r\n }\r\n var buffer = _self[_DYN__BUFFER /* @min:%2e_buffer */];\r\n buffer[_DYN_CLEAR_SENT /* @min:%2eclearSent */](payload);\r\n _consecutiveErrors++;\r\n for (var _i = 0, payload_1 = payload; _i < payload_1.length; _i++) {\r\n var item = payload_1[_i];\r\n buffer[_DYN_ENQUEUE /* @min:%2eenqueue */](item);\r\n }\r\n // setup timer\r\n _setRetryTime(linearFactor);\r\n _setupTimer();\r\n }\r\n /**\r\n * Calculates the time to wait before retrying in case of an error based on\r\n * http://en.wikipedia.org/wiki/Exponential_backoff\r\n */\r\n function _setRetryTime(linearFactor) {\r\n var SlotDelayInSeconds = 10;\r\n var delayInSeconds;\r\n if (_consecutiveErrors <= 1) {\r\n delayInSeconds = SlotDelayInSeconds;\r\n }\r\n else {\r\n var backOffSlot = (Math.pow(2, _consecutiveErrors) - 1) / 2;\r\n // tslint:disable-next-line:insecure-random\r\n var backOffDelay = Math.floor(Math.random() * backOffSlot * SlotDelayInSeconds) + 1;\r\n backOffDelay = linearFactor * backOffDelay;\r\n delayInSeconds = Math.max(Math.min(backOffDelay, 3600), SlotDelayInSeconds);\r\n }\r\n // TODO: Log the backoff time like the C# version does.\r\n var retryAfterTimeSpan = dateNow() + (delayInSeconds * 1000);\r\n // TODO: Log the retry at time like the C# version does.\r\n _retryAt = retryAfterTimeSpan;\r\n }\r\n /**\r\n * Sets up the timer which triggers actually sending the data.\r\n */\r\n function _setupTimer() {\r\n if (!_timeoutHandle && !_paused) {\r\n var retryInterval = _retryAt ? Math.max(0, _retryAt - dateNow()) : 0;\r\n var timerValue = Math.max(_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_MAX_BATCH_INTERVAL /* @min:%2emaxBatchInterval */](), retryInterval);\r\n _timeoutHandle = setTimeout(function () {\r\n _timeoutHandle = null;\r\n _self[_DYN_TRIGGER_SEND /* @min:%2etriggerSend */](true, null, 1 /* SendRequestReason.NormalSchedule */);\r\n }, timerValue);\r\n }\r\n }\r\n function _clearScheduledTimer() {\r\n clearTimeout(_timeoutHandle);\r\n _timeoutHandle = null;\r\n _retryAt = null;\r\n }\r\n /**\r\n * Checks if the SDK should resend the payload after receiving this status code from the backend.\r\n * @param statusCode\r\n */\r\n function _isRetriable(statusCode) {\r\n return statusCode === 401 // Unauthorized\r\n || statusCode === 403 // Forbidden\r\n || statusCode === 408 // Timeout\r\n || statusCode === 429 // Too many requests.\r\n || statusCode === 500 // Internal server error.\r\n || statusCode === 502 // Bad Gateway.\r\n || statusCode === 503 // Service unavailable.\r\n || statusCode === 504; // Gateway timeout.\r\n }\r\n function _formatErrorMessageXhr(xhr, message) {\r\n if (xhr) {\r\n return \"XMLHttpRequest,Status:\" + xhr.status + \",Response:\" + _getResponseText(xhr) || xhr.response || \"\";\r\n }\r\n return message;\r\n }\r\n /**\r\n * Send XDomainRequest\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - Indicates if the request should be sent asynchronously\r\n *\r\n * Note: XDomainRequest does not support sync requests. This 'isAsync' parameter is added\r\n * to maintain consistency with the xhrSender's contract\r\n * Note: XDomainRequest does not support custom headers and we are not able to get\r\n * appId from the backend for the correct correlation.\r\n */\r\n function _xdrSender(payload, isAsync) {\r\n var buffer = _self[_DYN__BUFFER /* @min:%2e_buffer */];\r\n var _window = getWindow();\r\n var xdr = new XDomainRequest();\r\n xdr.onload = function () { return _self._xdrOnLoad(xdr, payload); };\r\n xdr.onerror = function (event) { return _self[_DYN__ON_ERROR /* @min:%2e_onError */](payload, _formatErrorMessageXdr(xdr), event); };\r\n // XDomainRequest requires the same protocol as the hosting page.\r\n // If the protocol doesn't match, we can't send the telemetry :(.\r\n var hostingProtocol = _window && _window.location && _window.location.protocol || \"\";\r\n if (_self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */]().lastIndexOf(hostingProtocol, 0) !== 0) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 2 /* eLoggingSeverity.WARNING */, 40 /* _eInternalMessageId.TransmissionFailed */, \". \" +\r\n \"Cannot send XDomain request. The endpoint URL protocol doesn't match the hosting page protocol.\");\r\n buffer[_DYN_CLEAR /* @min:%2eclear */]();\r\n return;\r\n }\r\n var endpointUrl = _self[_DYN__SENDER_CONFIG /* @min:%2e_senderConfig */][_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */]().replace(/^(https?:)/, \"\");\r\n xdr.open(\"POST\", endpointUrl);\r\n // compose an array of payloads\r\n var batch = buffer[_DYN_BATCH_PAYLOADS /* @min:%2ebatchPayloads */](payload);\r\n xdr.send(batch);\r\n buffer[_DYN_MARK_AS_SENT /* @min:%2emarkAsSent */](payload);\r\n }\r\n function _formatErrorMessageXdr(xdr, message) {\r\n if (xdr) {\r\n return \"XDomainRequest,Response:\" + _getResponseText(xdr) || \"\";\r\n }\r\n return message;\r\n }\r\n // Using function lookups for backward compatibility as the getNotifyMgr() did not exist until after v2.5.6\r\n function _getNotifyMgr() {\r\n var func = \"getNotifyMgr\";\r\n if (_self.core[func]) {\r\n return _self.core[func]();\r\n }\r\n // using _self.core['_notificationManager'] for backward compatibility\r\n return _self.core[\"_notificationManager\"];\r\n }\r\n function _notifySendRequest(sendRequest, isAsync) {\r\n var manager = _getNotifyMgr();\r\n if (manager && manager[_DYN_EVENTS_SEND_REQUEST /* @min:%2eeventsSendRequest */]) {\r\n try {\r\n manager[_DYN_EVENTS_SEND_REQUEST /* @min:%2eeventsSendRequest */](sendRequest, isAsync);\r\n }\r\n catch (e) {\r\n _throwInternal(_self[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 74 /* _eInternalMessageId.NotificationException */, \"send request notification failed: \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n }\r\n /**\r\n * Validate UUID Format\r\n * Specs taken from https://tools.ietf.org/html/rfc4122 and breeze repo\r\n */\r\n function _validateInstrumentationKey(config) {\r\n var disableIKeyValidationFlag = isNullOrUndefined(config[_DYN_DISABLE_INSTRUMENTAT7 /* @min:%2edisableInstrumentationKeyValidation */]) ? false : config[_DYN_DISABLE_INSTRUMENTAT7 /* @min:%2edisableInstrumentationKeyValidation */];\r\n if (disableIKeyValidationFlag) {\r\n return true;\r\n }\r\n var UUID_Regex = \"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\";\r\n var regexp = new RegExp(UUID_Regex);\r\n return regexp.test(config[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */]);\r\n }\r\n function _initDefaults() {\r\n _self[_DYN__SENDER /* @min:%2e_sender */] = null;\r\n _self[_DYN__BUFFER /* @min:%2e_buffer */] = null;\r\n _self._appId = null;\r\n _self._sample = null;\r\n _headers = {};\r\n _offlineListener = null;\r\n _consecutiveErrors = 0;\r\n _retryAt = null;\r\n _lastSend = null;\r\n _paused = false;\r\n _timeoutHandle = null;\r\n _serializer = null;\r\n _stamp_specific_redirects = 0;\r\n _syncFetchPayload = 0;\r\n _fallbackSender = null;\r\n _syncUnloadSender = null;\r\n _evtNamespace = null;\r\n }\r\n });\r\n return _this;\r\n }\r\n Sender.constructEnvelope = function (orig, iKey, logger, convertUndefined) {\r\n var envelope;\r\n if (iKey !== orig.iKey && !isNullOrUndefined(iKey)) {\r\n envelope = __assign(__assign({}, orig), { iKey: iKey });\r\n }\r\n else {\r\n envelope = orig;\r\n }\r\n var creator = EnvelopeTypeCreator[envelope.baseType] || EventEnvelopeCreator;\r\n return creator(logger, envelope, convertUndefined);\r\n };\r\n// Removed Stub for Sender.prototype.pause.\r\n// Removed Stub for Sender.prototype.resume.\r\n// Removed Stub for Sender.prototype.flush.\r\n// Removed Stub for Sender.prototype.onunloadFlush.\r\n// Removed Stub for Sender.prototype.initialize.\r\n// Removed Stub for Sender.prototype.processTelemetry.\r\n// Removed Stub for Sender.prototype._xhrReadyStateChange.\r\n// Removed Stub for Sender.prototype.triggerSend.\r\n// Removed Stub for Sender.prototype._onError.\r\n// Removed Stub for Sender.prototype._onPartialSuccess.\r\n// Removed Stub for Sender.prototype._onSuccess.\r\n// Removed Stub for Sender.prototype._xdrOnLoad.\r\n// Removed Stub for Sender.prototype.addHeader.\r\n return Sender;\r\n}(BaseTelemetryPlugin));\r\nexport { Sender };\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _throwInternal, getJSON, isArray, isFunction, isObject, objForEachKey } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_LENGTH, _DYN_PUSH, _DYN_STRINGIFY, _DYN_TO_STRING } from \"./__DynamicConstants\";\r\nvar Serializer = /** @class */ (function () {\r\n function Serializer(logger) {\r\n dynamicProto(Serializer, this, function (_self) {\r\n /**\r\n * Serializes the current object to a JSON string.\r\n */\r\n _self.serialize = function (input) {\r\n var output = _serializeObject(input, \"root\");\r\n try {\r\n return getJSON()[_DYN_STRINGIFY /* @min:%2estringify */](output);\r\n }\r\n catch (e) {\r\n // if serialization fails return an empty string\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 48 /* _eInternalMessageId.CannotSerializeObject */, (e && isFunction(e[_DYN_TO_STRING /* @min:%2etoString */])) ? e[_DYN_TO_STRING /* @min:%2etoString */]() : \"Error serializing object\", null, true);\r\n }\r\n };\r\n function _serializeObject(source, name) {\r\n var circularReferenceCheck = \"__aiCircularRefCheck\";\r\n var output = {};\r\n if (!source) {\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 48 /* _eInternalMessageId.CannotSerializeObject */, \"cannot serialize object because it is null or undefined\", { name: name }, true);\r\n return output;\r\n }\r\n if (source[circularReferenceCheck]) {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 50 /* _eInternalMessageId.CircularReferenceDetected */, \"Circular reference detected while serializing object\", { name: name }, true);\r\n return output;\r\n }\r\n if (!source.aiDataContract) {\r\n // special case for measurements/properties/tags\r\n if (name === \"measurements\") {\r\n output = _serializeStringMap(source, \"number\", name);\r\n }\r\n else if (name === \"properties\") {\r\n output = _serializeStringMap(source, \"string\", name);\r\n }\r\n else if (name === \"tags\") {\r\n output = _serializeStringMap(source, \"string\", name);\r\n }\r\n else if (isArray(source)) {\r\n output = _serializeArray(source, name);\r\n }\r\n else {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 49 /* _eInternalMessageId.CannotSerializeObjectNonSerializable */, \"Attempting to serialize an object which does not implement ISerializable\", { name: name }, true);\r\n try {\r\n // verify that the object can be stringified\r\n getJSON()[_DYN_STRINGIFY /* @min:%2estringify */](source);\r\n output = source;\r\n }\r\n catch (e) {\r\n // if serialization fails return an empty string\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 48 /* _eInternalMessageId.CannotSerializeObject */, (e && isFunction(e[_DYN_TO_STRING /* @min:%2etoString */])) ? e[_DYN_TO_STRING /* @min:%2etoString */]() : \"Error serializing object\", null, true);\r\n }\r\n }\r\n return output;\r\n }\r\n source[circularReferenceCheck] = true;\r\n objForEachKey(source.aiDataContract, function (field, contract) {\r\n var isRequired = (isFunction(contract)) ? (contract() & 1 /* FieldType.Required */) : (contract & 1 /* FieldType.Required */);\r\n var isHidden = (isFunction(contract)) ? (contract() & 4 /* FieldType.Hidden */) : (contract & 4 /* FieldType.Hidden */);\r\n var isArray = contract & 2 /* FieldType.Array */;\r\n var isPresent = source[field] !== undefined;\r\n var isObj = isObject(source[field]) && source[field] !== null;\r\n if (isRequired && !isPresent && !isArray) {\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 24 /* _eInternalMessageId.MissingRequiredFieldSpecification */, \"Missing required field specification. The field is required but not present on source\", { field: field, name: name });\r\n // If not in debug mode, continue and hope the error is permissible\r\n }\r\n else if (!isHidden) { // Don't serialize hidden fields\r\n var value = void 0;\r\n if (isObj) {\r\n if (isArray) {\r\n // special case; recurse on each object in the source array\r\n value = _serializeArray(source[field], field);\r\n }\r\n else {\r\n // recurse on the source object in this field\r\n value = _serializeObject(source[field], field);\r\n }\r\n }\r\n else {\r\n // assign the source field to the output even if undefined or required\r\n value = source[field];\r\n }\r\n // only emit this field if the value is defined\r\n if (value !== undefined) {\r\n output[field] = value;\r\n }\r\n }\r\n });\r\n delete source[circularReferenceCheck];\r\n return output;\r\n }\r\n function _serializeArray(sources, name) {\r\n var output;\r\n if (!!sources) {\r\n if (!isArray(sources)) {\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, 54 /* _eInternalMessageId.ItemNotInArray */, \"This field was specified as an array in the contract but the item is not an array.\\r\\n\", { name: name }, true);\r\n }\r\n else {\r\n output = [];\r\n for (var i = 0; i < sources[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n var source = sources[i];\r\n var item = _serializeObject(source, name + \"[\" + i + \"]\");\r\n output[_DYN_PUSH /* @min:%2epush */](item);\r\n }\r\n }\r\n }\r\n return output;\r\n }\r\n function _serializeStringMap(map, expectedType, name) {\r\n var output;\r\n if (map) {\r\n output = {};\r\n objForEachKey(map, function (field, value) {\r\n if (expectedType === \"string\") {\r\n if (value === undefined) {\r\n output[field] = \"undefined\";\r\n }\r\n else if (value === null) {\r\n output[field] = \"null\";\r\n }\r\n else if (!value[_DYN_TO_STRING /* @min:%2etoString */]) {\r\n output[field] = \"invalid field: toString() is not defined.\";\r\n }\r\n else {\r\n output[field] = value[_DYN_TO_STRING /* @min:%2etoString */]();\r\n }\r\n }\r\n else if (expectedType === \"number\") {\r\n if (value === undefined) {\r\n output[field] = \"undefined\";\r\n }\r\n else if (value === null) {\r\n output[field] = \"null\";\r\n }\r\n else {\r\n var num = parseFloat(value);\r\n if (isNaN(num)) {\r\n output[field] = \"NaN\";\r\n }\r\n else {\r\n output[field] = num;\r\n }\r\n }\r\n }\r\n else {\r\n output[field] = \"invalid field: \" + name + \" is of unknown type.\";\r\n _throwInternal(logger, 1 /* eLoggingSeverity.CRITICAL */, output[field], null, true);\r\n }\r\n });\r\n }\r\n return output;\r\n }\r\n });\r\n }\r\n// Removed Stub for Serializer.prototype.serialize.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n Serializer.__ieDyn=1;\n\n return Serializer;\r\n}());\r\nexport { Serializer };\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { _DYN_LENGTH } from \"../../__DynamicConstants\";\r\n// (Magic number) DJB algorithm can't work on shorter strings (results in poor distribution\r\nvar MIN_INPUT_LENGTH = 8;\r\nvar HashCodeScoreGenerator = /** @class */ (function () {\r\n function HashCodeScoreGenerator() {\r\n }\r\n HashCodeScoreGenerator.prototype.getHashCodeScore = function (key) {\r\n var score = this.getHashCode(key) / HashCodeScoreGenerator.INT_MAX_VALUE;\r\n return score * 100;\r\n };\r\n HashCodeScoreGenerator.prototype.getHashCode = function (input) {\r\n if (input === \"\") {\r\n return 0;\r\n }\r\n while (input[_DYN_LENGTH /* @min:%2elength */] < MIN_INPUT_LENGTH) {\r\n input = input.concat(input);\r\n }\r\n // 5381 is a magic number: http://stackoverflow.com/questions/10696223/reason-for-5381-number-in-djb-hash-function\r\n var hash = 5381;\r\n for (var i = 0; i < input[_DYN_LENGTH /* @min:%2elength */]; ++i) {\r\n hash = ((hash << 5) + hash) + input.charCodeAt(i);\r\n // 'hash' is of number type which means 53 bit integer (http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types-number-type)\r\n // 'hash & hash' will keep it 32 bit integer - just to make it clearer what the result is.\r\n hash = hash & hash;\r\n }\r\n return Math.abs(hash);\r\n };\r\n // We're using 32 bit math, hence max value is (2^31 - 1)\r\n HashCodeScoreGenerator.INT_MAX_VALUE = 2147483647;\r\n return HashCodeScoreGenerator;\r\n}());\r\nexport { HashCodeScoreGenerator };\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { ContextTagKeys } from \"@microsoft/applicationinsights-common\";\r\nimport { _DYN_GET_HASH_CODE_SCORE, _DYN_GET_SAMPLING_SCORE, _DYN_TAGS, _DYN_TRACE_ID } from \"../../__DynamicConstants\";\r\nimport { HashCodeScoreGenerator } from \"./HashCodeScoreGenerator\";\r\nvar SamplingScoreGenerator = /** @class */ (function () {\r\n function SamplingScoreGenerator() {\r\n var _self = this;\r\n var hashCodeGenerator = new HashCodeScoreGenerator();\r\n var keys = new ContextTagKeys();\r\n _self[_DYN_GET_SAMPLING_SCORE /* @min:%2egetSamplingScore */] = function (item) {\r\n var score = 0;\r\n if (item[_DYN_TAGS /* @min:%2etags */] && item[_DYN_TAGS /* @min:%2etags */][keys.userId]) { // search in tags first, then ext\r\n score = hashCodeGenerator.getHashCodeScore(item[_DYN_TAGS /* @min:%2etags */][keys.userId]);\r\n }\r\n else if (item.ext && item.ext.user && item.ext.user.id) {\r\n score = hashCodeGenerator[_DYN_GET_HASH_CODE_SCORE /* @min:%2egetHashCodeScore */](item.ext.user.id);\r\n }\r\n else if (item[_DYN_TAGS /* @min:%2etags */] && item[_DYN_TAGS /* @min:%2etags */][keys.operationId]) { // search in tags first, then ext\r\n score = hashCodeGenerator.getHashCodeScore(item[_DYN_TAGS /* @min:%2etags */][keys.operationId]);\r\n }\r\n else if (item.ext && item.ext.telemetryTrace && item.ext.telemetryTrace[_DYN_TRACE_ID /* @min:%2etraceID */]) {\r\n score = hashCodeGenerator.getHashCodeScore(item.ext.telemetryTrace[_DYN_TRACE_ID /* @min:%2etraceID */]);\r\n }\r\n else {\r\n // tslint:disable-next-line:insecure-random\r\n score = (Math.random() * 100);\r\n }\r\n return score;\r\n };\r\n }\r\n return SamplingScoreGenerator;\r\n}());\r\nexport { SamplingScoreGenerator };\r\n","/*\n * Application Insights JavaScript SDK - Channel, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { Metric } from \"@microsoft/applicationinsights-common\";\r\nimport { safeGetLogger } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_DATA_TYPE, _DYN_GET_SAMPLING_SCORE, _DYN_SAMPLE_RATE } from \"../__DynamicConstants\";\r\nimport { SamplingScoreGenerator } from \"./SamplingScoreGenerators/SamplingScoreGenerator\";\r\nvar Sample = /** @class */ (function () {\r\n function Sample(sampleRate, logger) {\r\n // We're using 32 bit math, hence max value is (2^31 - 1)\r\n this.INT_MAX_VALUE = 2147483647;\r\n var _logger = logger || safeGetLogger(null);\r\n if (sampleRate > 100 || sampleRate < 0) {\r\n _logger.throwInternal(2 /* eLoggingSeverity.WARNING */, 58 /* _eInternalMessageId.SampleRateOutOfRange */, \"Sampling rate is out of range (0..100). Sampling will be disabled, you may be sending too much data which may affect your AI service level.\", { samplingRate: sampleRate }, true);\r\n sampleRate = 100;\r\n }\r\n this[_DYN_SAMPLE_RATE /* @min:%2esampleRate */] = sampleRate;\r\n this.samplingScoreGenerator = new SamplingScoreGenerator();\r\n }\r\n /**\r\n * Determines if an envelope is sampled in (i.e. will be sent) or not (i.e. will be dropped).\r\n */\r\n Sample.prototype.isSampledIn = function (envelope) {\r\n var samplingPercentage = this[_DYN_SAMPLE_RATE /* @min:%2esampleRate */]; // 0 - 100\r\n var isSampledIn = false;\r\n if (samplingPercentage === null || samplingPercentage === undefined || samplingPercentage >= 100) {\r\n return true;\r\n }\r\n else if (envelope.baseType === Metric[_DYN_DATA_TYPE /* @min:%2edataType */]) {\r\n // exclude MetricData telemetry from sampling\r\n return true;\r\n }\r\n isSampledIn = this.samplingScoreGenerator[_DYN_GET_SAMPLING_SCORE /* @min:%2egetSamplingScore */](envelope) < samplingPercentage;\r\n return isSampledIn;\r\n };\r\n return Sample;\r\n}());\r\nexport { Sample };\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { arrReduce, objKeys } from \"@microsoft/applicationinsights-core-js\";\r\nimport { DEFAULT_BREEZE_ENDPOINT } from \"./Constants\";\r\nimport { _DYN_INGESTIONENDPOINT, _DYN_LENGTH, _DYN_SPLIT, _DYN_TO_LOWER_CASE } from \"./__DynamicConstants\";\r\nvar _FIELDS_SEPARATOR = \";\";\r\nvar _FIELD_KEY_VALUE_SEPARATOR = \"=\";\r\nexport function parseConnectionString(connectionString) {\r\n if (!connectionString) {\r\n return {};\r\n }\r\n var kvPairs = connectionString[_DYN_SPLIT /* @min:%2esplit */](_FIELDS_SEPARATOR);\r\n var result = arrReduce(kvPairs, function (fields, kv) {\r\n var kvParts = kv[_DYN_SPLIT /* @min:%2esplit */](_FIELD_KEY_VALUE_SEPARATOR);\r\n if (kvParts[_DYN_LENGTH /* @min:%2elength */] === 2) { // only save fields with valid formats\r\n var key = kvParts[0][_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n var value = kvParts[1];\r\n fields[key] = value;\r\n }\r\n return fields;\r\n }, {});\r\n if (objKeys(result)[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n // this is a valid connection string, so parse the results\r\n if (result.endpointsuffix) {\r\n // use endpoint suffix where overrides are not provided\r\n var locationPrefix = result.location ? result.location + \".\" : \"\";\r\n result[_DYN_INGESTIONENDPOINT /* @min:%2eingestionendpoint */] = result[_DYN_INGESTIONENDPOINT /* @min:%2eingestionendpoint */] || (\"https://\" + locationPrefix + \"dc.\" + result.endpointsuffix);\r\n }\r\n // apply the default endpoints\r\n result[_DYN_INGESTIONENDPOINT /* @min:%2eingestionendpoint */] = result[_DYN_INGESTIONENDPOINT /* @min:%2eingestionendpoint */] || DEFAULT_BREEZE_ENDPOINT;\r\n }\r\n return result;\r\n}\r\nexport var ConnectionStringParser = {\r\n parse: parseConnectionString\r\n};\r\n","/*\n * Application Insights JavaScript SDK - Common, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { createEnumStyle } from \"@microsoft/applicationinsights-core-js\";\r\n/**\r\n * Defines the level of severity for the event.\r\n */\r\nexport var SeverityLevel = createEnumStyle({\r\n Verbose: 0 /* eSeverityLevel.Verbose */,\r\n Information: 1 /* eSeverityLevel.Information */,\r\n Warning: 2 /* eSeverityLevel.Warning */,\r\n Error: 3 /* eSeverityLevel.Error */,\r\n Critical: 4 /* eSeverityLevel.Critical */\r\n});\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n// \r\nimport { _DYN_CONFIG, _DYN_CREATE_NEW, _DYN_FLUSH, _DYN_IDENTIFIER, _DYN_LENGTH, _DYN_ON_COMPLETE, _DYN_PROCESS_NEXT, _DYN_PUSH } from \"../__DynamicConstants\";\r\nimport { arrForEach, isArray, objFreeze, throwError } from \"./HelperFuncs\";\r\nimport { STR_PRIORITY } from \"./InternalConstants\";\r\nimport { createProcessTelemetryContext, createTelemetryProxyChain } from \"./ProcessTelemetryContext\";\r\nimport { initializePlugins } from \"./TelemetryHelpers\";\r\nexport var ChannelControllerPriority = 500;\r\nvar ChannelValidationMessage = \"Channel has invalid priority - \";\r\nfunction _addChannelQueue(channelQueue, queue, core) {\r\n if (queue && isArray(queue) && queue[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n queue = queue.sort(function (a, b) {\r\n return a[STR_PRIORITY /* @min:%2epriority */] - b[STR_PRIORITY /* @min:%2epriority */];\r\n });\r\n arrForEach(queue, function (queueItem) {\r\n if (queueItem[STR_PRIORITY /* @min:%2epriority */] < ChannelControllerPriority) {\r\n throwError(ChannelValidationMessage + queueItem[_DYN_IDENTIFIER /* @min:%2eidentifier */]);\r\n }\r\n });\r\n channelQueue[_DYN_PUSH /* @min:%2epush */]({\r\n queue: objFreeze(queue),\r\n chain: createTelemetryProxyChain(queue, core[_DYN_CONFIG /* @min:%2econfig */], core)\r\n });\r\n }\r\n}\r\nexport function createChannelControllerPlugin(channelQueue, core) {\r\n function _getTelCtx() {\r\n return createProcessTelemetryContext(null, core[_DYN_CONFIG /* @min:%2econfig */], core, null);\r\n }\r\n function _processChannelQueue(theChannels, itemCtx, processFn, onComplete) {\r\n var waiting = theChannels ? (theChannels[_DYN_LENGTH /* @min:%2elength */] + 1) : 1;\r\n function _runChainOnComplete() {\r\n waiting--;\r\n if (waiting === 0) {\r\n onComplete && onComplete();\r\n onComplete = null;\r\n }\r\n }\r\n if (waiting > 0) {\r\n arrForEach(theChannels, function (channels) {\r\n // pass on to first item in queue\r\n if (channels && channels.queue[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n var channelChain = channels.chain;\r\n var chainCtx = itemCtx[_DYN_CREATE_NEW /* @min:%2ecreateNew */](channelChain);\r\n chainCtx[_DYN_ON_COMPLETE /* @min:%2eonComplete */](_runChainOnComplete);\r\n // Cause this chain to start processing\r\n processFn(chainCtx);\r\n }\r\n else {\r\n waiting--;\r\n }\r\n });\r\n }\r\n _runChainOnComplete();\r\n }\r\n function _doUpdate(updateCtx, updateState) {\r\n var theUpdateState = updateState || {\r\n reason: 0 /* TelemetryUpdateReason.Unknown */\r\n };\r\n _processChannelQueue(channelQueue, updateCtx, function (chainCtx) {\r\n chainCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](theUpdateState);\r\n }, function () {\r\n updateCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](theUpdateState);\r\n });\r\n return true;\r\n }\r\n function _doTeardown(unloadCtx, unloadState) {\r\n var theUnloadState = unloadState || {\r\n reason: 0 /* TelemetryUnloadReason.ManualTeardown */,\r\n isAsync: false\r\n };\r\n _processChannelQueue(channelQueue, unloadCtx, function (chainCtx) {\r\n chainCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](theUnloadState);\r\n }, function () {\r\n unloadCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](theUnloadState);\r\n isInitialized = false;\r\n });\r\n return true;\r\n }\r\n function _getChannel(pluginIdentifier) {\r\n var thePlugin = null;\r\n if (channelQueue && channelQueue[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n arrForEach(channelQueue, function (channels) {\r\n // pass on to first item in queue\r\n if (channels && channels.queue[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n arrForEach(channels.queue, function (ext) {\r\n if (ext[_DYN_IDENTIFIER /* @min:%2eidentifier */] === pluginIdentifier) {\r\n thePlugin = ext;\r\n // Cause arrForEach to stop iterating\r\n return -1;\r\n }\r\n });\r\n if (thePlugin) {\r\n // Cause arrForEach to stop iterating\r\n return -1;\r\n }\r\n }\r\n });\r\n }\r\n return thePlugin;\r\n }\r\n var isInitialized = false;\r\n var channelController = {\r\n identifier: \"ChannelControllerPlugin\",\r\n priority: ChannelControllerPriority,\r\n initialize: function (config, core, extensions, pluginChain) {\r\n isInitialized = true;\r\n arrForEach(channelQueue, function (channels) {\r\n if (channels && channels.queue[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n initializePlugins(createProcessTelemetryContext(channels.chain, config, core), extensions);\r\n }\r\n });\r\n },\r\n isInitialized: function () {\r\n return isInitialized;\r\n },\r\n processTelemetry: function (item, itemCtx) {\r\n _processChannelQueue(channelQueue, itemCtx || _getTelCtx(), function (chainCtx) {\r\n chainCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](item);\r\n }, function () {\r\n itemCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](item);\r\n });\r\n },\r\n update: _doUpdate,\r\n pause: function () {\r\n _processChannelQueue(channelQueue, _getTelCtx(), function (chainCtx) {\r\n chainCtx.iterate(function (plugin) {\r\n plugin.pause && plugin.pause();\r\n });\r\n }, null);\r\n },\r\n resume: function () {\r\n _processChannelQueue(channelQueue, _getTelCtx(), function (chainCtx) {\r\n chainCtx.iterate(function (plugin) {\r\n plugin.resume && plugin.resume();\r\n });\r\n }, null);\r\n },\r\n teardown: _doTeardown,\r\n getChannel: _getChannel,\r\n flush: function (isAsync, callBack, sendReason, cbTimeout) {\r\n // Setting waiting to one so that we don't call the callBack until we finish iterating\r\n var waiting = 1;\r\n var doneIterating = false;\r\n var cbTimer = null;\r\n cbTimeout = cbTimeout || 5000;\r\n function doCallback() {\r\n waiting--;\r\n if (doneIterating && waiting === 0) {\r\n if (cbTimer) {\r\n clearTimeout(cbTimer);\r\n cbTimer = null;\r\n }\r\n callBack && callBack(doneIterating);\r\n callBack = null;\r\n }\r\n }\r\n _processChannelQueue(channelQueue, _getTelCtx(), function (chainCtx) {\r\n chainCtx.iterate(function (plugin) {\r\n if (plugin[_DYN_FLUSH /* @min:%2eflush */]) {\r\n waiting++;\r\n var handled_1 = false;\r\n // Not all channels will call this callback for every scenario\r\n if (!plugin[_DYN_FLUSH /* @min:%2eflush */](isAsync, function () {\r\n handled_1 = true;\r\n doCallback();\r\n }, sendReason)) {\r\n if (!handled_1) {\r\n // If any channel doesn't return true and it didn't call the callback, then we should assume that the callback\r\n // will never be called, so use a timeout to allow the channel(s) some time to \"finish\" before triggering any\r\n // followup function (such as unloading)\r\n if (isAsync && cbTimer == null) {\r\n cbTimer = setTimeout(function () {\r\n cbTimer = null;\r\n doCallback();\r\n }, cbTimeout);\r\n }\r\n else {\r\n doCallback();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }, function () {\r\n doneIterating = true;\r\n doCallback();\r\n });\r\n return true;\r\n },\r\n _setQueue: function (queue) {\r\n channelQueue = queue;\r\n }\r\n };\r\n return channelController;\r\n}\r\nexport function createChannelQueues(channels, extensions, core) {\r\n var channelQueue = [];\r\n if (channels) {\r\n // Add and sort the configuration channel queues\r\n arrForEach(channels, function (queue) { return _addChannelQueue(channelQueue, queue, core); });\r\n }\r\n if (extensions) {\r\n // Create a new channel queue for any extensions with a priority > the ChannelControllerPriority\r\n var extensionQueue_1 = [];\r\n arrForEach(extensions, function (plugin) {\r\n if (plugin[STR_PRIORITY /* @min:%2epriority */] > ChannelControllerPriority) {\r\n extensionQueue_1[_DYN_PUSH /* @min:%2epush */](plugin);\r\n }\r\n });\r\n _addChannelQueue(channelQueue, extensionQueue_1, core);\r\n }\r\n return channelQueue;\r\n}\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n// \r\n// \r\nimport { __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _DYN_APPLY, _DYN_DIAG_LOG, _DYN_LENGTH, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_SPLICE, _DYN__DO_TEARDOWN } from \"../__DynamicConstants\";\r\nimport { BaseTelemetryPlugin } from \"./BaseTelemetryPlugin\";\r\nimport { _throwInternal } from \"./DiagnosticLogger\";\r\nimport { dumpObj } from \"./EnvUtils\";\r\nimport { arrForEach, getExceptionName } from \"./HelperFuncs\";\r\nimport { STR_PROCESS_TELEMETRY } from \"./InternalConstants\";\r\nvar TelemetryInitializerPlugin = /** @class */ (function (_super) {\r\n __extends(TelemetryInitializerPlugin, _super);\r\n function TelemetryInitializerPlugin() {\r\n var _this = _super.call(this) || this;\r\n _this.identifier = \"TelemetryInitializerPlugin\";\r\n _this.priority = 199;\r\n // NOTE!: DON'T set default values here, instead set them in the _initDefaults() function as it is also called during teardown()\r\n var _id;\r\n var _initializers;\r\n _initDefaults();\r\n dynamicProto(TelemetryInitializerPlugin, _this, function (_self, _base) {\r\n _self.addTelemetryInitializer = function (telemetryInitializer) {\r\n var theInitializer = {\r\n id: _id++,\r\n fn: telemetryInitializer\r\n };\r\n _initializers[_DYN_PUSH /* @min:%2epush */](theInitializer);\r\n var handler = {\r\n remove: function () {\r\n arrForEach(_initializers, function (initializer, idx) {\r\n if (initializer.id === theInitializer.id) {\r\n _initializers[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n return -1;\r\n }\r\n });\r\n }\r\n };\r\n return handler;\r\n };\r\n _self[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */] = function (item, itemCtx) {\r\n var doNotSendItem = false;\r\n var telemetryInitializersCount = _initializers[_DYN_LENGTH /* @min:%2elength */];\r\n for (var i = 0; i < telemetryInitializersCount; ++i) {\r\n var telemetryInitializer = _initializers[i];\r\n if (telemetryInitializer) {\r\n try {\r\n if (telemetryInitializer.fn[_DYN_APPLY /* @min:%2eapply */](null, [item]) === false) {\r\n doNotSendItem = true;\r\n break;\r\n }\r\n }\r\n catch (e) {\r\n // log error but dont stop executing rest of the telemetry initializers\r\n // doNotSendItem = true;\r\n _throwInternal(itemCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 64 /* _eInternalMessageId.TelemetryInitializerFailed */, \"One of telemetry initializers failed, telemetry item will not be sent: \" + getExceptionName(e), { exception: dumpObj(e) }, true);\r\n }\r\n }\r\n }\r\n if (!doNotSendItem) {\r\n _self[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](item, itemCtx);\r\n }\r\n };\r\n _self[_DYN__DO_TEARDOWN /* @min:%2e_doTeardown */] = function () {\r\n _initDefaults();\r\n };\r\n });\r\n function _initDefaults() {\r\n _id = 0;\r\n _initializers = [];\r\n }\r\n return _this;\r\n }\r\n// Removed Stub for TelemetryInitializerPlugin.prototype.addTelemetryInitializer.\r\n// Removed Stub for TelemetryInitializerPlugin.prototype.processTelemetry.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n TelemetryInitializerPlugin.__ieDyn=1;\n\n return TelemetryInitializerPlugin;\r\n}(BaseTelemetryPlugin));\r\nexport { TelemetryInitializerPlugin };\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport { __spreadArrayFn as __spreadArray } from \"@microsoft/applicationinsights-shims\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { objCreateFn } from \"@microsoft/applicationinsights-shims\";\r\nimport { _DYN_ADD_NOTIFICATION_LIS1, _DYN_CONFIG, _DYN_FLUSH, _DYN_GET_NOTIFY_MGR, _DYN_GET_PLUGIN, _DYN_GET_PROCESS_TEL_CONT0, _DYN_IDENTIFIER, _DYN_INITIALIZE, _DYN_INSTRUMENTATION_KEY, _DYN_IS_ASYNC, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_LOGGER, _DYN_MESSAGE, _DYN_MESSAGE_ID, _DYN_NAME, _DYN_ON_COMPLETE, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_REMOVE_NOTIFICATION_2, _DYN_SET_ENABLED, _DYN_SPLICE, _DYN_STOP_POLLING_INTERNA3, _DYN_TEARDOWN, _DYN_TIME, _DYN__EXTENSIONS } from \"../__DynamicConstants\";\r\nimport { ChannelControllerPriority, createChannelControllerPlugin, createChannelQueues } from \"./ChannelController\";\r\nimport { createCookieMgr } from \"./CookieMgr\";\r\nimport { createUniqueNamespace } from \"./DataCacheHelper\";\r\nimport { getDebugListener } from \"./DbgExtensionUtils\";\r\nimport { DiagnosticLogger, _InternalLogMessage, _throwInternal, _warnToConsole } from \"./DiagnosticLogger\";\r\nimport { arrForEach, arrIndexOf, getCfgValue, getSetValue, isFunction, isNullOrUndefined, objExtend, objFreeze, proxyFunctionAs, proxyFunctions, throwError, toISOString } from \"./HelperFuncs\";\r\nimport { STR_CHANNELS, STR_CORE, STR_CREATE_PERF_MGR, STR_DISABLED, STR_EVENTS_DISCARDED, STR_EVENTS_SEND_REQUEST, STR_EVENTS_SENT, STR_EXTENSIONS, STR_EXTENSION_CONFIG, STR_GET_PERF_MGR, STR_PRIORITY } from \"./InternalConstants\";\r\nimport { PerfManager, getGblPerfMgr } from \"./PerfManager\";\r\nimport { createProcessTelemetryContext, createProcessTelemetryUnloadContext, createProcessTelemetryUpdateContext, createTelemetryProxyChain } from \"./ProcessTelemetryContext\";\r\nimport { _getPluginState, createDistributedTraceContext, initializePlugins, sortPlugins } from \"./TelemetryHelpers\";\r\nimport { TelemetryInitializerPlugin } from \"./TelemetryInitializerPlugin\";\r\nimport { createUnloadHandlerContainer } from \"./UnloadHandlerContainer\";\r\nvar strValidationError = \"Plugins must provide initialize method\";\r\nvar strNotificationManager = \"_notificationManager\";\r\nvar strSdkUnloadingError = \"SDK is still unloading...\";\r\nvar strSdkNotInitialized = \"SDK is not initialized\";\r\n// const strPluginUnloadFailed = \"Failed to unload plugin\";\r\nvar defaultInitConfig = {\r\n // Have the Diagnostic Logger default to log critical errors to the console\r\n loggingLevelConsole: 1 /* eLoggingSeverity.CRITICAL */\r\n};\r\n/**\r\n * Helper to create the default performance manager\r\n * @param core\r\n * @param notificationMgr\r\n */\r\nfunction _createPerfManager(core, notificationMgr) {\r\n return new PerfManager(notificationMgr);\r\n}\r\nfunction _validateExtensions(logger, channelPriority, allExtensions) {\r\n var _a;\r\n // Concat all available extensions\r\n var coreExtensions = [];\r\n // Check if any two extensions have the same priority, then warn to console\r\n // And extract the local extensions from the\r\n var extPriorities = {};\r\n // Extension validation\r\n arrForEach(allExtensions, function (ext) {\r\n // Check for ext.initialize\r\n if (isNullOrUndefined(ext) || isNullOrUndefined(ext[_DYN_INITIALIZE /* @min:%2einitialize */])) {\r\n throwError(strValidationError);\r\n }\r\n var extPriority = ext[STR_PRIORITY /* @min:%2epriority */];\r\n var identifier = ext[_DYN_IDENTIFIER /* @min:%2eidentifier */];\r\n if (ext && extPriority) {\r\n if (!isNullOrUndefined(extPriorities[extPriority])) {\r\n _warnToConsole(logger, \"Two extensions have same priority #\" + extPriority + \" - \" + extPriorities[extPriority] + \", \" + identifier);\r\n }\r\n else {\r\n // set a value\r\n extPriorities[extPriority] = identifier;\r\n }\r\n }\r\n // Split extensions to core and channelController\r\n if (!extPriority || extPriority < channelPriority) {\r\n // Add to core extension that will be managed by BaseCore\r\n coreExtensions[_DYN_PUSH /* @min:%2epush */](ext);\r\n }\r\n });\r\n return _a = {\r\n all: allExtensions\r\n },\r\n _a[STR_CORE /* @min:core */] = coreExtensions,\r\n _a;\r\n}\r\nfunction _isPluginPresent(thePlugin, plugins) {\r\n var exists = false;\r\n arrForEach(plugins, function (plugin) {\r\n if (plugin === thePlugin) {\r\n exists = true;\r\n return -1;\r\n }\r\n });\r\n return exists;\r\n}\r\nfunction _createDummyNotificationManager() {\r\n var _a;\r\n return objCreateFn((_a = {},\r\n _a[_DYN_ADD_NOTIFICATION_LIS1 /* @min:addNotificationListener */] = function (listener) { },\r\n _a[_DYN_REMOVE_NOTIFICATION_2 /* @min:removeNotificationListener */] = function (listener) { },\r\n _a[STR_EVENTS_SENT /* @min:eventsSent */] = function (events) { },\r\n _a[STR_EVENTS_DISCARDED /* @min:eventsDiscarded */] = function (events, reason) { },\r\n _a[STR_EVENTS_SEND_REQUEST /* @min:eventsSendRequest */] = function (sendReason, isAsync) { },\r\n _a));\r\n}\r\nvar BaseCore = /** @class */ (function () {\r\n function BaseCore() {\r\n // NOTE!: DON'T set default values here, instead set them in the _initDefaults() function as it is also called during teardown()\r\n var _config;\r\n var _isInitialized;\r\n var _eventQueue;\r\n var _notificationManager;\r\n var _perfManager;\r\n var _cfgPerfManager;\r\n var _cookieManager;\r\n var _pluginChain;\r\n var _configExtensions;\r\n var _coreExtensions;\r\n var _channelControl;\r\n var _channelConfig;\r\n var _channelQueue;\r\n var _isUnloading;\r\n var _telemetryInitializerPlugin;\r\n var _internalLogsEventName;\r\n var _evtNamespace;\r\n var _unloadHandlers;\r\n var _debugListener;\r\n var _traceCtx;\r\n /**\r\n * Internal log poller\r\n */\r\n var _internalLogPoller = 0;\r\n var _forceStopInternalLogPoller = false;\r\n dynamicProto(BaseCore, this, function (_self) {\r\n // Set the default values (also called during teardown)\r\n _initDefaults();\r\n _self[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = function () { return _isInitialized; };\r\n // Creating the self.initialize = ()\r\n _self[_DYN_INITIALIZE /* @min:%2einitialize */] = function (config, extensions, logger, notificationManager) {\r\n if (_isUnloading) {\r\n throwError(strSdkUnloadingError);\r\n }\r\n // Make sure core is only initialized once\r\n if (_self[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]()) {\r\n throwError(\"Core should not be initialized more than once\");\r\n }\r\n _config = config || {};\r\n _self[_DYN_CONFIG /* @min:%2econfig */] = _config;\r\n if (isNullOrUndefined(config[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */])) {\r\n throwError(\"Please provide instrumentation key\");\r\n }\r\n _notificationManager = notificationManager;\r\n // For backward compatibility only\r\n _self[strNotificationManager] = notificationManager;\r\n _initDebugListener();\r\n _initPerfManager();\r\n // add notification to the extensions in the config so other plugins can access it\r\n _initExtConfig();\r\n if (logger) {\r\n _self[_DYN_LOGGER /* @min:%2elogger */] = logger;\r\n }\r\n var cfgExtensions = getSetValue(_config, STR_EXTENSIONS, []);\r\n // Extension validation\r\n _configExtensions = [];\r\n _configExtensions[_DYN_PUSH /* @min:%2epush */].apply(_configExtensions, __spreadArray(__spreadArray([], extensions, false), cfgExtensions, false));\r\n _channelConfig = getSetValue(_config, STR_CHANNELS, []);\r\n _initPluginChain(null);\r\n if (!_channelQueue || _channelQueue[_DYN_LENGTH /* @min:%2elength */] === 0) {\r\n throwError(\"No \" + STR_CHANNELS + \" available\");\r\n }\r\n _isInitialized = true;\r\n _self.releaseQueue();\r\n };\r\n _self.getTransmissionControls = function () {\r\n var controls = [];\r\n if (_channelQueue) {\r\n arrForEach(_channelQueue, function (channels) {\r\n controls[_DYN_PUSH /* @min:%2epush */](channels.queue);\r\n });\r\n }\r\n return objFreeze(controls);\r\n };\r\n _self.track = function (telemetryItem) {\r\n // setup default iKey if not passed in\r\n telemetryItem.iKey = telemetryItem.iKey || _config[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */];\r\n // add default timestamp if not passed in\r\n telemetryItem[_DYN_TIME /* @min:%2etime */] = telemetryItem[_DYN_TIME /* @min:%2etime */] || toISOString(new Date());\r\n // Common Schema 4.0\r\n telemetryItem.ver = telemetryItem.ver || \"4.0\";\r\n if (!_isUnloading && _self[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]()) {\r\n // Process the telemetry plugin chain\r\n _createTelCtx()[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](telemetryItem);\r\n }\r\n else {\r\n // Queue events until all extensions are initialized\r\n _eventQueue[_DYN_PUSH /* @min:%2epush */](telemetryItem);\r\n }\r\n };\r\n _self[_DYN_GET_PROCESS_TEL_CONT0 /* @min:%2egetProcessTelContext */] = _createTelCtx;\r\n _self[_DYN_GET_NOTIFY_MGR /* @min:%2egetNotifyMgr */] = function () {\r\n if (!_notificationManager) {\r\n // Create Dummy notification manager\r\n _notificationManager = _createDummyNotificationManager();\r\n // For backward compatibility only\r\n _self[strNotificationManager] = _notificationManager;\r\n }\r\n return _notificationManager;\r\n };\r\n /**\r\n * Adds a notification listener. The SDK calls methods on the listener when an appropriate notification is raised.\r\n * The added plugins must raise notifications. If the plugins do not implement the notifications, then no methods will be\r\n * called.\r\n * @param {INotificationListener} listener - An INotificationListener object.\r\n */\r\n _self[_DYN_ADD_NOTIFICATION_LIS1 /* @min:%2eaddNotificationListener */] = function (listener) {\r\n if (_notificationManager) {\r\n _notificationManager[_DYN_ADD_NOTIFICATION_LIS1 /* @min:%2eaddNotificationListener */](listener);\r\n }\r\n };\r\n /**\r\n * Removes all instances of the listener.\r\n * @param {INotificationListener} listener - INotificationListener to remove.\r\n */\r\n _self[_DYN_REMOVE_NOTIFICATION_2 /* @min:%2eremoveNotificationListener */] = function (listener) {\r\n if (_notificationManager) {\r\n _notificationManager[_DYN_REMOVE_NOTIFICATION_2 /* @min:%2eremoveNotificationListener */](listener);\r\n }\r\n };\r\n _self.getCookieMgr = function () {\r\n if (!_cookieManager) {\r\n _cookieManager = createCookieMgr(_config, _self[_DYN_LOGGER /* @min:%2elogger */]);\r\n }\r\n return _cookieManager;\r\n };\r\n _self.setCookieMgr = function (cookieMgr) {\r\n _cookieManager = cookieMgr;\r\n };\r\n _self[STR_GET_PERF_MGR /* @min:%2egetPerfMgr */] = function () {\r\n if (!_perfManager && !_cfgPerfManager) {\r\n if (getCfgValue(_config.enablePerfMgr)) {\r\n var createPerfMgr = getCfgValue(_config[STR_CREATE_PERF_MGR /* @min:%2ecreatePerfMgr */]);\r\n if (isFunction(createPerfMgr)) {\r\n _cfgPerfManager = createPerfMgr(_self, _self[_DYN_GET_NOTIFY_MGR /* @min:%2egetNotifyMgr */]());\r\n }\r\n }\r\n }\r\n return _perfManager || _cfgPerfManager || getGblPerfMgr();\r\n };\r\n _self.setPerfMgr = function (perfMgr) {\r\n _perfManager = perfMgr;\r\n };\r\n _self.eventCnt = function () {\r\n return _eventQueue[_DYN_LENGTH /* @min:%2elength */];\r\n };\r\n _self.releaseQueue = function () {\r\n if (_isInitialized && _eventQueue[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n var eventQueue = _eventQueue;\r\n _eventQueue = [];\r\n arrForEach(eventQueue, function (event) {\r\n _createTelCtx()[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](event);\r\n });\r\n }\r\n };\r\n _self.pollInternalLogs = function (eventName) {\r\n _internalLogsEventName = eventName || null;\r\n _forceStopInternalLogPoller = false;\r\n if (_internalLogPoller) {\r\n clearInterval(_internalLogPoller);\r\n _internalLogPoller = null;\r\n }\r\n return _startInternalLogTimer(true);\r\n };\r\n function _startInternalLogTimer(alwaysStart) {\r\n if (!_internalLogPoller && !_forceStopInternalLogPoller) {\r\n var shouldStart = alwaysStart || (_self[_DYN_LOGGER /* @min:%2elogger */] && _self[_DYN_LOGGER /* @min:%2elogger */].queue[_DYN_LENGTH /* @min:%2elength */] > 0);\r\n if (shouldStart) {\r\n var interval = getCfgValue(_config.diagnosticLogInterval);\r\n if (!interval || !(interval > 0)) {\r\n interval = 10000;\r\n }\r\n // Keeping as an interval timer for backward compatibility as it returns the result\r\n _internalLogPoller = setInterval(function () {\r\n clearInterval(_internalLogPoller);\r\n _internalLogPoller = 0;\r\n _flushInternalLogs();\r\n }, interval);\r\n }\r\n }\r\n return _internalLogPoller;\r\n }\r\n _self[_DYN_STOP_POLLING_INTERNA3 /* @min:%2estopPollingInternalLogs */] = function () {\r\n _forceStopInternalLogPoller = true;\r\n if (_internalLogPoller) {\r\n clearInterval(_internalLogPoller);\r\n _internalLogPoller = 0;\r\n _flushInternalLogs();\r\n }\r\n };\r\n // Add addTelemetryInitializer\r\n proxyFunctions(_self, function () { return _telemetryInitializerPlugin; }, [\"addTelemetryInitializer\"]);\r\n _self.unload = function (isAsync, unloadComplete, cbTimeout) {\r\n var _a;\r\n if (isAsync === void 0) { isAsync = true; }\r\n if (!_isInitialized) {\r\n // The SDK is not initialized\r\n throwError(strSdkNotInitialized);\r\n }\r\n // Check if the SDK still unloading so throw\r\n if (_isUnloading) {\r\n // The SDK is already unloading\r\n throwError(strSdkUnloadingError);\r\n }\r\n var unloadState = (_a = {\r\n reason: 50 /* TelemetryUnloadReason.SdkUnload */\r\n },\r\n _a[_DYN_IS_ASYNC /* @min:isAsync */] = isAsync,\r\n _a.flushComplete = false,\r\n _a);\r\n var processUnloadCtx = createProcessTelemetryUnloadContext(_getPluginChain(), _self);\r\n processUnloadCtx[_DYN_ON_COMPLETE /* @min:%2eonComplete */](function () {\r\n _initDefaults();\r\n unloadComplete && unloadComplete(unloadState);\r\n }, _self);\r\n function _doUnload(flushComplete) {\r\n unloadState.flushComplete = flushComplete;\r\n _isUnloading = true;\r\n // Run all of the unload handlers first (before unloading the plugins)\r\n _unloadHandlers.run(processUnloadCtx, unloadState);\r\n // Stop polling the internal logs\r\n _self[_DYN_STOP_POLLING_INTERNA3 /* @min:%2estopPollingInternalLogs */]();\r\n // Start unloading the components, from this point onwards the SDK should be considered to be in an unstable state\r\n processUnloadCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](unloadState);\r\n }\r\n _flushInternalLogs();\r\n if (!_flushChannels(isAsync, _doUnload, 6 /* SendRequestReason.SdkUnload */, cbTimeout)) {\r\n _doUnload(false);\r\n }\r\n };\r\n _self[_DYN_GET_PLUGIN /* @min:%2egetPlugin */] = _getPlugin;\r\n _self.addPlugin = function (plugin, replaceExisting, isAsync, addCb) {\r\n if (!plugin) {\r\n addCb && addCb(false);\r\n _logOrThrowError(strValidationError);\r\n return;\r\n }\r\n var existingPlugin = _getPlugin(plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */]);\r\n if (existingPlugin && !replaceExisting) {\r\n addCb && addCb(false);\r\n _logOrThrowError(\"Plugin [\" + plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */] + \"] is already loaded!\");\r\n return;\r\n }\r\n var updateState = {\r\n reason: 16 /* TelemetryUpdateReason.PluginAdded */\r\n };\r\n function _addPlugin(removed) {\r\n _configExtensions[_DYN_PUSH /* @min:%2epush */](plugin);\r\n updateState.added = [plugin];\r\n // Re-Initialize the plugin chain\r\n _initPluginChain(updateState);\r\n addCb && addCb(true);\r\n }\r\n if (existingPlugin) {\r\n var removedPlugins_1 = [existingPlugin.plugin];\r\n var unloadState = {\r\n reason: 2 /* TelemetryUnloadReason.PluginReplace */,\r\n isAsync: !!isAsync\r\n };\r\n _removePlugins(removedPlugins_1, unloadState, function (removed) {\r\n if (!removed) {\r\n // Previous plugin was successfully removed or was not installed\r\n addCb && addCb(false);\r\n }\r\n else {\r\n updateState.removed = removedPlugins_1;\r\n updateState.reason |= 32 /* TelemetryUpdateReason.PluginRemoved */;\r\n _addPlugin(true);\r\n }\r\n });\r\n }\r\n else {\r\n _addPlugin(false);\r\n }\r\n };\r\n _self.evtNamespace = function () {\r\n return _evtNamespace;\r\n };\r\n _self[_DYN_FLUSH /* @min:%2eflush */] = _flushChannels;\r\n _self.getTraceCtx = function (createNew) {\r\n if (!_traceCtx) {\r\n _traceCtx = createDistributedTraceContext();\r\n }\r\n return _traceCtx;\r\n };\r\n _self.setTraceCtx = function (traceCtx) {\r\n _traceCtx = traceCtx || null;\r\n };\r\n // Create the addUnloadCb\r\n proxyFunctionAs(_self, \"addUnloadCb\", function () { return _unloadHandlers; }, \"add\");\r\n function _initDefaults() {\r\n _isInitialized = false;\r\n // Use a default logger so initialization errors are not dropped on the floor with full logging\r\n _config = objExtend(true, {}, defaultInitConfig);\r\n _self[_DYN_CONFIG /* @min:%2econfig */] = _config;\r\n _self[_DYN_LOGGER /* @min:%2elogger */] = new DiagnosticLogger(_config);\r\n _self[_DYN__EXTENSIONS /* @min:%2e_extensions */] = [];\r\n _telemetryInitializerPlugin = new TelemetryInitializerPlugin();\r\n _eventQueue = [];\r\n _notificationManager = null;\r\n _perfManager = null;\r\n _cfgPerfManager = null;\r\n _cookieManager = null;\r\n _pluginChain = null;\r\n _coreExtensions = null;\r\n _configExtensions = [];\r\n _channelControl = null;\r\n _channelConfig = null;\r\n _channelQueue = null;\r\n _isUnloading = false;\r\n _internalLogsEventName = null;\r\n _evtNamespace = createUniqueNamespace(\"AIBaseCore\", true);\r\n _unloadHandlers = createUnloadHandlerContainer();\r\n _traceCtx = null;\r\n }\r\n function _createTelCtx() {\r\n var theCtx = createProcessTelemetryContext(_getPluginChain(), _config, _self);\r\n theCtx[_DYN_ON_COMPLETE /* @min:%2eonComplete */](_startInternalLogTimer);\r\n return theCtx;\r\n }\r\n // Initialize or Re-initialize the plugins\r\n function _initPluginChain(updateState) {\r\n // Extension validation\r\n var theExtensions = _validateExtensions(_self[_DYN_LOGGER /* @min:%2elogger */], ChannelControllerPriority, _configExtensions);\r\n _coreExtensions = theExtensions[STR_CORE /* @min:%2ecore */];\r\n _pluginChain = null;\r\n // Sort the complete set of extensions by priority\r\n var allExtensions = theExtensions.all;\r\n // Initialize the Channel Queues and the channel plugins first\r\n _channelQueue = objFreeze(createChannelQueues(_channelConfig, allExtensions, _self));\r\n if (_channelControl) {\r\n // During add / remove of a plugin this may get called again, so don't re-add if already present\r\n // But we also want the controller as the last, so remove if already present\r\n // And reusing the existing instance, just in case an installed plugin has a reference and\r\n // is using it.\r\n var idx = arrIndexOf(allExtensions, _channelControl);\r\n if (idx !== -1) {\r\n allExtensions[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n }\r\n idx = arrIndexOf(_coreExtensions, _channelControl);\r\n if (idx !== -1) {\r\n _coreExtensions[_DYN_SPLICE /* @min:%2esplice */](idx, 1);\r\n }\r\n _channelControl._setQueue(_channelQueue);\r\n }\r\n else {\r\n _channelControl = createChannelControllerPlugin(_channelQueue, _self);\r\n }\r\n // Add on \"channelController\" as the last \"plugin\"\r\n allExtensions[_DYN_PUSH /* @min:%2epush */](_channelControl);\r\n _coreExtensions[_DYN_PUSH /* @min:%2epush */](_channelControl);\r\n // Required to allow plugins to call core.getPlugin() during their own initialization\r\n _self[_DYN__EXTENSIONS /* @min:%2e_extensions */] = sortPlugins(allExtensions);\r\n // Initialize the controls\r\n _channelControl[_DYN_INITIALIZE /* @min:%2einitialize */](_config, _self, allExtensions);\r\n var initCtx = _createTelCtx();\r\n initializePlugins(initCtx, allExtensions);\r\n // Now reset the extensions to just those being managed by Basecore\r\n _self[_DYN__EXTENSIONS /* @min:%2e_extensions */] = objFreeze(sortPlugins(_coreExtensions || [])).slice();\r\n if (updateState) {\r\n _doUpdate(updateState);\r\n }\r\n }\r\n function _getPlugin(pluginIdentifier) {\r\n var _a;\r\n var theExt = null;\r\n var thePlugin = null;\r\n arrForEach(_self[_DYN__EXTENSIONS /* @min:%2e_extensions */], function (ext) {\r\n if (ext[_DYN_IDENTIFIER /* @min:%2eidentifier */] === pluginIdentifier && ext !== _channelControl && ext !== _telemetryInitializerPlugin) {\r\n thePlugin = ext;\r\n return -1;\r\n }\r\n });\r\n if (!thePlugin && _channelControl) {\r\n // Check the channel Controller\r\n thePlugin = _channelControl.getChannel(pluginIdentifier);\r\n }\r\n if (thePlugin) {\r\n theExt = (_a = {\r\n plugin: thePlugin\r\n },\r\n _a[_DYN_SET_ENABLED /* @min:setEnabled */] = function (enabled) {\r\n _getPluginState(thePlugin)[STR_DISABLED] = !enabled;\r\n },\r\n _a.isEnabled = function () {\r\n var pluginState = _getPluginState(thePlugin);\r\n return !pluginState[_DYN_TEARDOWN /* @min:%2eteardown */] && !pluginState[STR_DISABLED];\r\n },\r\n _a.remove = function (isAsync, removeCb) {\r\n var _a;\r\n if (isAsync === void 0) { isAsync = true; }\r\n var pluginsToRemove = [thePlugin];\r\n var unloadState = (_a = {\r\n reason: 1 /* TelemetryUnloadReason.PluginUnload */\r\n },\r\n _a[_DYN_IS_ASYNC /* @min:isAsync */] = isAsync,\r\n _a);\r\n _removePlugins(pluginsToRemove, unloadState, function (removed) {\r\n if (removed) {\r\n // Re-Initialize the plugin chain\r\n _initPluginChain({\r\n reason: 32 /* TelemetryUpdateReason.PluginRemoved */,\r\n removed: pluginsToRemove\r\n });\r\n }\r\n removeCb && removeCb(removed);\r\n });\r\n },\r\n _a);\r\n }\r\n return theExt;\r\n }\r\n function _getPluginChain() {\r\n if (!_pluginChain) {\r\n // copy the collection of extensions\r\n var extensions = (_coreExtensions || []).slice();\r\n // During add / remove this may get called again, so don't readd if already present\r\n if (arrIndexOf(extensions, _telemetryInitializerPlugin) === -1) {\r\n extensions[_DYN_PUSH /* @min:%2epush */](_telemetryInitializerPlugin);\r\n }\r\n _pluginChain = createTelemetryProxyChain(sortPlugins(extensions), _config, _self);\r\n }\r\n return _pluginChain;\r\n }\r\n function _removePlugins(thePlugins, unloadState, removeComplete) {\r\n if (thePlugins && thePlugins[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n var unloadChain = createTelemetryProxyChain(thePlugins, _config, _self);\r\n var unloadCtx = createProcessTelemetryUnloadContext(unloadChain, _self);\r\n unloadCtx[_DYN_ON_COMPLETE /* @min:%2eonComplete */](function () {\r\n var removed = false;\r\n // Remove the listed config extensions\r\n var newConfigExtensions = [];\r\n arrForEach(_configExtensions, function (plugin, idx) {\r\n if (!_isPluginPresent(plugin, thePlugins)) {\r\n newConfigExtensions[_DYN_PUSH /* @min:%2epush */](plugin);\r\n }\r\n else {\r\n removed = true;\r\n }\r\n });\r\n _configExtensions = newConfigExtensions;\r\n // Re-Create the channel config\r\n var newChannelConfig = [];\r\n if (_channelConfig) {\r\n arrForEach(_channelConfig, function (queue, idx) {\r\n var newQueue = [];\r\n arrForEach(queue, function (channel) {\r\n if (!_isPluginPresent(channel, thePlugins)) {\r\n newQueue[_DYN_PUSH /* @min:%2epush */](channel);\r\n }\r\n else {\r\n removed = true;\r\n }\r\n });\r\n newChannelConfig[_DYN_PUSH /* @min:%2epush */](newQueue);\r\n });\r\n _channelConfig = newChannelConfig;\r\n }\r\n removeComplete && removeComplete(removed);\r\n _startInternalLogTimer();\r\n });\r\n unloadCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](unloadState);\r\n }\r\n else {\r\n removeComplete(false);\r\n }\r\n }\r\n function _flushInternalLogs() {\r\n if (_self[_DYN_LOGGER /* @min:%2elogger */] && _self[_DYN_LOGGER /* @min:%2elogger */].queue) {\r\n var queue = _self[_DYN_LOGGER /* @min:%2elogger */].queue.slice(0);\r\n _self[_DYN_LOGGER /* @min:%2elogger */].queue[_DYN_LENGTH /* @min:%2elength */] = 0;\r\n arrForEach(queue, function (logMessage) {\r\n var _a;\r\n var item = (_a = {},\r\n _a[_DYN_NAME /* @min:name */] = _internalLogsEventName ? _internalLogsEventName : \"InternalMessageId: \" + logMessage[_DYN_MESSAGE_ID /* @min:%2emessageId */],\r\n _a.iKey = getCfgValue(_config[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */]),\r\n _a.time = toISOString(new Date()),\r\n _a.baseType = _InternalLogMessage.dataType,\r\n _a.baseData = { message: logMessage[_DYN_MESSAGE /* @min:%2emessage */] },\r\n _a);\r\n _self.track(item);\r\n });\r\n }\r\n }\r\n function _flushChannels(isAsync, callBack, sendReason, cbTimeout) {\r\n if (_channelControl) {\r\n return _channelControl[_DYN_FLUSH /* @min:%2eflush */](isAsync, callBack, sendReason || 6 /* SendRequestReason.SdkUnload */, cbTimeout);\r\n }\r\n callBack && callBack(false);\r\n return true;\r\n }\r\n function _initDebugListener() {\r\n var disableDbgExt = getCfgValue(_config.disableDbgExt);\r\n if (disableDbgExt === true && _debugListener) {\r\n // Remove any previously loaded debug listener\r\n _notificationManager[_DYN_REMOVE_NOTIFICATION_2 /* @min:%2eremoveNotificationListener */](_debugListener);\r\n _debugListener = null;\r\n }\r\n if (_notificationManager && !_debugListener && disableDbgExt !== true) {\r\n _debugListener = getDebugListener(_config);\r\n _notificationManager[_DYN_ADD_NOTIFICATION_LIS1 /* @min:%2eaddNotificationListener */](_debugListener);\r\n }\r\n }\r\n function _initPerfManager() {\r\n var enablePerfMgr = getCfgValue(_config.enablePerfMgr);\r\n if (!enablePerfMgr && _cfgPerfManager) {\r\n // Remove any existing config based performance manager\r\n _cfgPerfManager = null;\r\n }\r\n if (enablePerfMgr) {\r\n // Set the performance manager creation function if not defined\r\n getSetValue(_config, STR_CREATE_PERF_MGR, _createPerfManager);\r\n }\r\n }\r\n function _initExtConfig() {\r\n var extConfig = getSetValue(_config, STR_EXTENSION_CONFIG, {});\r\n extConfig.NotificationManager = _notificationManager;\r\n }\r\n function _doUpdate(updateState) {\r\n var updateCtx = createProcessTelemetryUpdateContext(_getPluginChain(), _self);\r\n updateCtx[_DYN_ON_COMPLETE /* @min:%2eonComplete */](_startInternalLogTimer);\r\n if (!_self._updateHook || _self._updateHook(updateCtx, updateState) !== true) {\r\n updateCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](updateState);\r\n }\r\n }\r\n function _logOrThrowError(message) {\r\n var logger = _self[_DYN_LOGGER /* @min:%2elogger */];\r\n if (logger) {\r\n // there should always be a logger\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 73 /* _eInternalMessageId.PluginException */, message);\r\n _startInternalLogTimer();\r\n }\r\n else {\r\n throwError(message);\r\n }\r\n }\r\n });\r\n }\r\n// Removed Stub for BaseCore.prototype.initialize.\r\n// Removed Stub for BaseCore.prototype.getTransmissionControls.\r\n// Removed Stub for BaseCore.prototype.track.\r\n// Removed Stub for BaseCore.prototype.getProcessTelContext.\r\n// Removed Stub for BaseCore.prototype.getNotifyMgr.\r\n// Removed Stub for BaseCore.prototype.addNotificationListener.\r\n// Removed Stub for BaseCore.prototype.removeNotificationListener.\r\n// Removed Stub for BaseCore.prototype.getCookieMgr.\r\n// Removed Stub for BaseCore.prototype.setCookieMgr.\r\n// Removed Stub for BaseCore.prototype.getPerfMgr.\r\n// Removed Stub for BaseCore.prototype.setPerfMgr.\r\n// Removed Stub for BaseCore.prototype.eventCnt.\r\n// Removed Stub for BaseCore.prototype.pollInternalLogs.\r\n// Removed Stub for BaseCore.prototype.stopPollingInternalLogs.\r\n// Removed Stub for BaseCore.prototype.addTelemetryInitializer.\r\n// Removed Stub for BaseCore.prototype.unload.\r\n// Removed Stub for BaseCore.prototype.getPlugin.\r\n// Removed Stub for BaseCore.prototype.addPlugin.\r\n// Removed Stub for BaseCore.prototype.evtNamespace.\r\n// Removed Stub for BaseCore.prototype.addUnloadCb.\r\n// Removed Stub for BaseCore.prototype.flush.\r\n// Removed Stub for BaseCore.prototype.getTraceCtx.\r\n// Removed Stub for BaseCore.prototype.setTraceCtx.\r\n// Removed Stub for BaseCore.prototype.releaseQueue.\r\n// Removed Stub for BaseCore.prototype._updateHook.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n BaseCore.__ieDyn=1;\n\n return BaseCore;\r\n}());\r\nexport { BaseCore };\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _DYN_ADD_NOTIFICATION_LIS1, _DYN_IS_ASYNC, _DYN_IS_CHILD_EVT, _DYN_LISTENERS, _DYN_PUSH, _DYN_REMOVE_NOTIFICATION_2, _DYN_SPLICE } from \"../__DynamicConstants\";\r\nimport { arrForEach, arrIndexOf } from \"./HelperFuncs\";\r\nimport { STR_EVENTS_DISCARDED, STR_EVENTS_SEND_REQUEST, STR_EVENTS_SENT, STR_PERF_EVENT } from \"./InternalConstants\";\r\nfunction _runListeners(listeners, name, isAsync, callback) {\r\n arrForEach(listeners, function (listener) {\r\n if (listener && listener[name]) {\r\n if (isAsync) {\r\n setTimeout(function () { return callback(listener); }, 0);\r\n }\r\n else {\r\n try {\r\n callback(listener);\r\n }\r\n catch (e) {\r\n // Catch errors to ensure we don't block sending the requests\r\n }\r\n }\r\n }\r\n });\r\n}\r\n/**\r\n * Class to manage sending notifications to all the listeners.\r\n */\r\nvar NotificationManager = /** @class */ (function () {\r\n function NotificationManager(config) {\r\n this.listeners = [];\r\n var perfEvtsSendAll = !!(config || {}).perfEvtsSendAll;\r\n dynamicProto(NotificationManager, this, function (_self) {\r\n _self[_DYN_ADD_NOTIFICATION_LIS1 /* @min:%2eaddNotificationListener */] = function (listener) {\r\n _self.listeners[_DYN_PUSH /* @min:%2epush */](listener);\r\n };\r\n /**\r\n * Removes all instances of the listener.\r\n * @param {INotificationListener} listener - AWTNotificationListener to remove.\r\n */\r\n _self[_DYN_REMOVE_NOTIFICATION_2 /* @min:%2eremoveNotificationListener */] = function (listener) {\r\n var index = arrIndexOf(_self[_DYN_LISTENERS /* @min:%2elisteners */], listener);\r\n while (index > -1) {\r\n _self.listeners[_DYN_SPLICE /* @min:%2esplice */](index, 1);\r\n index = arrIndexOf(_self[_DYN_LISTENERS /* @min:%2elisteners */], listener);\r\n }\r\n };\r\n /**\r\n * Notification for events sent.\r\n * @param {ITelemetryItem[]} events - The array of events that have been sent.\r\n */\r\n _self[STR_EVENTS_SENT /* @min:%2eeventsSent */] = function (events) {\r\n _runListeners(_self[_DYN_LISTENERS /* @min:%2elisteners */], STR_EVENTS_SENT, true, function (listener) {\r\n listener[STR_EVENTS_SENT /* @min:%2eeventsSent */](events);\r\n });\r\n };\r\n /**\r\n * Notification for events being discarded.\r\n * @param {ITelemetryItem[]} events - The array of events that have been discarded by the SDK.\r\n * @param {number} reason - The reason for which the SDK discarded the events. The EventsDiscardedReason\r\n * constant should be used to check the different values.\r\n */\r\n _self[STR_EVENTS_DISCARDED /* @min:%2eeventsDiscarded */] = function (events, reason) {\r\n _runListeners(_self[_DYN_LISTENERS /* @min:%2elisteners */], STR_EVENTS_DISCARDED, true, function (listener) {\r\n listener[STR_EVENTS_DISCARDED /* @min:%2eeventsDiscarded */](events, reason);\r\n });\r\n };\r\n /**\r\n * [Optional] A function called when the events have been requested to be sent to the sever.\r\n * @param {number} sendReason - The reason why the event batch is being sent.\r\n * @param {boolean} isAsync - A flag which identifies whether the requests are being sent in an async or sync manner.\r\n */\r\n _self[STR_EVENTS_SEND_REQUEST /* @min:%2eeventsSendRequest */] = function (sendReason, isAsync) {\r\n _runListeners(_self[_DYN_LISTENERS /* @min:%2elisteners */], STR_EVENTS_SEND_REQUEST, isAsync, function (listener) {\r\n listener[STR_EVENTS_SEND_REQUEST /* @min:%2eeventsSendRequest */](sendReason, isAsync);\r\n });\r\n };\r\n _self[STR_PERF_EVENT /* @min:%2eperfEvent */] = function (perfEvent) {\r\n if (perfEvent) {\r\n // Send all events or only parent events\r\n if (perfEvtsSendAll || !perfEvent[_DYN_IS_CHILD_EVT /* @min:%2eisChildEvt */]()) {\r\n _runListeners(_self[_DYN_LISTENERS /* @min:%2elisteners */], STR_PERF_EVENT, false, function (listener) {\r\n if (perfEvent[_DYN_IS_ASYNC /* @min:%2eisAsync */]) {\r\n setTimeout(function () { return listener[STR_PERF_EVENT /* @min:%2eperfEvent */](perfEvent); }, 0);\r\n }\r\n else {\r\n listener[STR_PERF_EVENT /* @min:%2eperfEvent */](perfEvent);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n });\r\n }\r\n// Removed Stub for NotificationManager.prototype.addNotificationListener.\r\n// Removed Stub for NotificationManager.prototype.removeNotificationListener.\r\n// Removed Stub for NotificationManager.prototype.eventsSent.\r\n// Removed Stub for NotificationManager.prototype.eventsDiscarded.\r\n// Removed Stub for NotificationManager.prototype.eventsSendRequest.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n NotificationManager.__ieDyn=1;\n\n return NotificationManager;\r\n}());\r\nexport { NotificationManager };\r\n","/*\n * Application Insights JavaScript SDK - Core, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\nimport { __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _DYN_GET_NOTIFY_MGR, _DYN_INITIALIZE, _DYN_NAME } from \"../__DynamicConstants\";\r\nimport { BaseCore } from \"./BaseCore\";\r\nimport { DiagnosticLogger } from \"./DiagnosticLogger\";\r\nimport { isNullOrUndefined, throwError } from \"./HelperFuncs\";\r\nimport { STR_EVENTS_DISCARDED, STR_GET_PERF_MGR } from \"./InternalConstants\";\r\nimport { NotificationManager } from \"./NotificationManager\";\r\nimport { doPerf } from \"./PerfManager\";\r\nvar AppInsightsCore = /** @class */ (function (_super) {\r\n __extends(AppInsightsCore, _super);\r\n function AppInsightsCore() {\r\n var _this = _super.call(this) || this;\r\n dynamicProto(AppInsightsCore, _this, function (_self, _base) {\r\n _self[_DYN_INITIALIZE /* @min:%2einitialize */] = function (config, extensions, logger, notificationManager) {\r\n _base[_DYN_INITIALIZE /* @min:%2einitialize */](config, extensions, logger || new DiagnosticLogger(config), notificationManager || new NotificationManager(config));\r\n };\r\n _self.track = function (telemetryItem) {\r\n doPerf(_self[STR_GET_PERF_MGR /* @min:%2egetPerfMgr */](), function () { return \"AppInsightsCore:track\"; }, function () {\r\n if (telemetryItem === null) {\r\n _notifyInvalidEvent(telemetryItem);\r\n // throw error\r\n throwError(\"Invalid telemetry item\");\r\n }\r\n // do basic validation before sending it through the pipeline\r\n _validateTelemetryItem(telemetryItem);\r\n _base.track(telemetryItem);\r\n }, function () { return ({ item: telemetryItem }); }, !(telemetryItem.sync));\r\n };\r\n function _validateTelemetryItem(telemetryItem) {\r\n if (isNullOrUndefined(telemetryItem[_DYN_NAME /* @min:%2ename */])) {\r\n _notifyInvalidEvent(telemetryItem);\r\n throwError(\"telemetry name required\");\r\n }\r\n }\r\n function _notifyInvalidEvent(telemetryItem) {\r\n var manager = _self[_DYN_GET_NOTIFY_MGR /* @min:%2egetNotifyMgr */]();\r\n if (manager) {\r\n manager[STR_EVENTS_DISCARDED /* @min:%2eeventsDiscarded */]([telemetryItem], 2 /* eEventsDiscardedReason.InvalidEvent */);\r\n }\r\n }\r\n });\r\n return _this;\r\n }\r\n// Removed Stub for AppInsightsCore.prototype.initialize.\r\n// Removed Stub for AppInsightsCore.prototype.track.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n AppInsightsCore.__ieDyn=1;\n\n return AppInsightsCore;\r\n}(BaseCore));\r\nexport { AppInsightsCore };\r\n","/*\n * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Generally you should only put values that are used more than 2 times and then only if not already exposed as a constant (such as SdkCoreNames)\r\n// as when using \"short\" named values from here they will be will be minified smaller than the SdkCoreNames[eSdkCoreNames.xxxx] value.\r\nexport var STR_DURATION = \"duration\";\r\nexport var STR_PROPERTIES = \"properties\";\r\n","/*\n * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// @skip-file-minify\r\n// ##############################################################\r\n// AUTO GENERATED FILE: This file is Auto Generated during build.\r\n// ##############################################################\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\nexport var _DYN_REQUEST_URL = \"requestUrl\"; // Count: 12\r\nexport var _DYN_INST = \"inst\"; // Count: 5\r\nexport var _DYN_LENGTH = \"length\"; // Count: 10\r\nexport var _DYN_TRACE_ID = \"traceID\"; // Count: 9\r\nexport var _DYN_SPAN_ID = \"spanID\"; // Count: 8\r\nexport var _DYN_TRACE_FLAGS = \"traceFlags\"; // Count: 13\r\nexport var _DYN_CONTEXT = \"context\"; // Count: 7\r\nexport var _DYN_ABORTED = \"aborted\"; // Count: 7\r\nexport var _DYN_TRACE_ID0 = \"traceId\"; // Count: 5\r\nexport var _DYN_SPAN_ID1 = \"spanId\"; // Count: 5\r\nexport var _DYN_CORE = \"core\"; // Count: 8\r\nexport var _DYN_INCLUDE_CORRELATION_2 = \"includeCorrelationHeaders\"; // Count: 4\r\nexport var _DYN_CAN_INCLUDE_CORRELAT3 = \"canIncludeCorrelationHeader\"; // Count: 2\r\nexport var _DYN_GET_ABSOLUTE_URL = \"getAbsoluteUrl\"; // Count: 3\r\nexport var _DYN_HEADERS = \"headers\"; // Count: 6\r\nexport var _DYN_REQUEST_HEADERS = \"requestHeaders\"; // Count: 13\r\nexport var _DYN_APP_ID = \"appId\"; // Count: 5\r\nexport var _DYN_SET_REQUEST_HEADER = \"setRequestHeader\"; // Count: 3\r\nexport var _DYN_TRACK_DEPENDENCY_DAT4 = \"trackDependencyDataInternal\"; // Count: 2\r\nexport var _DYN_DISTRIBUTED_TRACING_5 = \"distributedTracingMode\"; // Count: 3\r\nexport var _DYN_START_TIME = \"startTime\"; // Count: 6\r\nexport var _DYN_TO_LOWER_CASE = \"toLowerCase\"; // Count: 6\r\nexport var _DYN_ENABLE_REQUEST_HEADE6 = \"enableRequestHeaderTracking\"; // Count: 2\r\nexport var _DYN_ENABLE_AJAX_ERROR_ST7 = \"enableAjaxErrorStatusText\"; // Count: 2\r\nexport var _DYN_ENABLE_AJAX_PERF_TRA8 = \"enableAjaxPerfTracking\"; // Count: 2\r\nexport var _DYN_MAX_AJAX_CALLS_PER_V9 = \"maxAjaxCallsPerView\"; // Count: 2\r\nexport var _DYN_ENABLE_RESPONSE_HEAD10 = \"enableResponseHeaderTracking\"; // Count: 2\r\nexport var _DYN_EXCLUDE_REQUEST_FROM11 = \"excludeRequestFromAutoTrackingPatterns\"; // Count: 2\r\nexport var _DYN_ADD_REQUEST_CONTEXT = \"addRequestContext\"; // Count: 2\r\nexport var _DYN_DISABLE_AJAX_TRACKIN12 = \"disableAjaxTracking\"; // Count: 2\r\nexport var _DYN_DISABLE_FETCH_TRACKI13 = \"disableFetchTracking\"; // Count: 2\r\nexport var _DYN_STATUS = \"status\"; // Count: 11\r\nexport var _DYN_STATUS_TEXT = \"statusText\"; // Count: 9\r\nexport var _DYN_HEADER_MAP = \"headerMap\"; // Count: 8\r\nexport var _DYN_OPEN_DONE = \"openDone\"; // Count: 3\r\nexport var _DYN_SEND_DONE = \"sendDone\"; // Count: 3\r\nexport var _DYN_REQUEST_SENT_TIME = \"requestSentTime\"; // Count: 9\r\nexport var _DYN_ABORT_DONE = \"abortDone\"; // Count: 3\r\nexport var _DYN_GET_TRACE_ID = \"getTraceId\"; // Count: 3\r\nexport var _DYN_GET_TRACE_FLAGS = \"getTraceFlags\"; // Count: 3\r\nexport var _DYN_METHOD = \"method\"; // Count: 8\r\nexport var _DYN_ERROR_STATUS_TEXT = \"errorStatusText\"; // Count: 3\r\nexport var _DYN_STATE_CHANGE_ATTACHE14 = \"stateChangeAttached\"; // Count: 2\r\nexport var _DYN_RESPONSE_TEXT = \"responseText\"; // Count: 6\r\nexport var _DYN_RESPONSE_FINISHED_TI15 = \"responseFinishedTime\"; // Count: 7\r\nexport var _DYN__CREATE_TRACK_ITEM = \"CreateTrackItem\"; // Count: 3\r\nexport var _DYN_RESPONSE = \"response\"; // Count: 4\r\nexport var _DYN_GET_ALL_RESPONSE_HEA16 = \"getAllResponseHeaders\"; // Count: 2\r\nexport var _DYN_GET_PART_APROPS = \"getPartAProps\"; // Count: 3\r\nexport var _DYN_GET_CORRELATION_CONT17 = \"getCorrelationContext\"; // Count: 2\r\nexport var _DYN_PERF_MARK = \"perfMark\"; // Count: 4\r\nexport var _DYN_AJAX_PERF_LOOKUP_DEL18 = \"ajaxPerfLookupDelay\"; // Count: 2\r\nexport var _DYN_NAME = \"name\"; // Count: 6\r\nexport var _DYN_PERF_TIMING = \"perfTiming\"; // Count: 3\r\nexport var _DYN_AJAX_DIAGNOSTICS_MES19 = \"ajaxDiagnosticsMessage\"; // Count: 3\r\nexport var _DYN_CORRELATION_CONTEXT = \"correlationContext\"; // Count: 3\r\nexport var _DYN_AJAX_TOTAL_DURATION = \"ajaxTotalDuration\"; // Count: 3\r\nexport var _DYN_EVENT_TRACE_CTX = \"eventTraceCtx\"; // Count: 3\r\n","/*\n * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { Extensions, dataSanitizeUrl, dateTimeUtilsDuration, msToTimeSpan, urlGetAbsoluteUrl, urlGetCompleteUrl } from \"@microsoft/applicationinsights-common\";\r\nimport { arrForEach, isNullOrUndefined, isNumber, isString, normalizeJsName, objForEachKey, objKeys } from \"@microsoft/applicationinsights-core-js\";\r\nimport { STR_DURATION, STR_PROPERTIES } from \"./InternalConstants\";\r\nimport { _DYN_ABORTED, _DYN_ABORT_DONE, _DYN_AJAX_TOTAL_DURATION, _DYN_CORRELATION_CONTEXT, _DYN_ERROR_STATUS_TEXT, _DYN_EVENT_TRACE_CTX, _DYN_GET_ABSOLUTE_URL, _DYN_GET_PART_APROPS, _DYN_GET_TRACE_FLAGS, _DYN_GET_TRACE_ID, _DYN_HEADER_MAP, _DYN_LENGTH, _DYN_METHOD, _DYN_NAME, _DYN_OPEN_DONE, _DYN_PERF_MARK, _DYN_PERF_TIMING, _DYN_REQUEST_HEADERS, _DYN_REQUEST_SENT_TIME, _DYN_REQUEST_URL, _DYN_RESPONSE, _DYN_RESPONSE_FINISHED_TI15, _DYN_SEND_DONE, _DYN_SPAN_ID, _DYN_SPAN_ID1, _DYN_START_TIME, _DYN_STATE_CHANGE_ATTACHE14, _DYN_STATUS, _DYN_STATUS_TEXT, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_TRACE_ID0, _DYN__CREATE_TRACK_ITEM } from \"./__DynamicConstants\";\r\n/** @ignore */\r\nfunction _calcPerfDuration(resourceEntry, start, end) {\r\n var result = 0;\r\n var from = resourceEntry[start];\r\n var to = resourceEntry[end];\r\n if (from && to) {\r\n result = dateTimeUtilsDuration(from, to);\r\n }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _setPerfDuration(props, name, resourceEntry, start, end) {\r\n var result = 0;\r\n var value = _calcPerfDuration(resourceEntry, start, end);\r\n if (value) {\r\n result = _setPerfValue(props, name, msToTimeSpan(value));\r\n }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _setPerfValue(props, name, value) {\r\n var strPerf = \"ajaxPerf\";\r\n var result = 0;\r\n if (props && name && value) {\r\n var perfData = props[strPerf] = (props[strPerf] || {});\r\n perfData[name] = value;\r\n result = 1;\r\n }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _populatePerfData(ajaxData, dependency) {\r\n /*\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API/Using_the_Resource_Timing_API\r\n * | -startTime\r\n * | -redirectStart\r\n * | | -redirectEnd\r\n * | | | -fetchStart\r\n * | | | | -domainLookupStart\r\n * | | | | |- domainLookupEnd\r\n * | | | | | | -connectStart\r\n * | | | | | | | -secureConnectionStart\r\n * | | | | | | | | -connectEnd\r\n * | | | | | | | | | -requestStart\r\n * | | | | | | | | | | | -responseStart\r\n * | | | | | | | | | | | | | -responseEnd\r\n * +------------+-+---+----------------+-+--+--------+-+-----------+-+------------+-+\r\n * |--redirect--| |---|--domainLookup--| |--connect--| |--request--| |--response--| |\r\n * |-------------------networkConnect----------------|\r\n * | |---------sentRequest--------|\r\n * |------------------------------------perfTotal-----------------------------------|\r\n */\r\n var resourceEntry = ajaxData[_DYN_PERF_TIMING /* @min:%2eperfTiming */];\r\n var props = dependency[STR_PROPERTIES /* @min:%2eproperties */] || {};\r\n var propsSet = 0;\r\n var strName = \"name\";\r\n var strStart = \"Start\";\r\n var strEnd = \"End\";\r\n var strDomainLookup = \"domainLookup\";\r\n var strConnect = \"connect\";\r\n var strRedirect = \"redirect\";\r\n var strRequest = \"request\";\r\n var strResponse = \"response\";\r\n var strStartTime = \"startTime\";\r\n var strDomainLookupStart = strDomainLookup + strStart;\r\n var strDomainLookupEnd = strDomainLookup + strEnd;\r\n var strConnectStart = strConnect + strStart;\r\n var strConnectEnd = strConnect + strEnd;\r\n var strRequestStart = strRequest + strStart;\r\n var strRequestEnd = strRequest + strEnd;\r\n var strResponseStart = strResponse + strStart;\r\n var strResponseEnd = strResponse + strEnd;\r\n var strRedirectStart = strRedirect + strStart;\r\n var strRedirectEnd = strRedirect = strEnd;\r\n var strTransferSize = \"transferSize\";\r\n var strEncodedBodySize = \"encodedBodySize\";\r\n var strDecodedBodySize = \"decodedBodySize\";\r\n var strServerTiming = \"serverTiming\";\r\n if (resourceEntry) {\r\n // redirect\r\n propsSet |= _setPerfDuration(props, strRedirect, resourceEntry, strRedirectStart, strRedirectEnd);\r\n // domainLookup\r\n propsSet |= _setPerfDuration(props, strDomainLookup, resourceEntry, strDomainLookupStart, strDomainLookupEnd);\r\n // connect\r\n propsSet |= _setPerfDuration(props, strConnect, resourceEntry, strConnectStart, strConnectEnd);\r\n // request\r\n propsSet |= _setPerfDuration(props, strRequest, resourceEntry, strRequestStart, strRequestEnd);\r\n // response\r\n propsSet |= _setPerfDuration(props, strResponse, resourceEntry, strResponseStart, strResponseEnd);\r\n // Network connection time\r\n propsSet |= _setPerfDuration(props, \"networkConnect\", resourceEntry, strStartTime, strConnectEnd);\r\n // Sent Request\r\n propsSet |= _setPerfDuration(props, \"sentRequest\", resourceEntry, strRequestStart, strResponseEnd);\r\n // PerfTotal / Duration\r\n var duration = resourceEntry[STR_DURATION /* @min:%2eduration */];\r\n if (!duration) {\r\n duration = _calcPerfDuration(resourceEntry, strStartTime, strResponseEnd) || 0;\r\n }\r\n propsSet |= _setPerfValue(props, STR_DURATION, duration);\r\n propsSet |= _setPerfValue(props, \"perfTotal\", duration);\r\n var serverTiming = resourceEntry[strServerTiming];\r\n if (serverTiming) {\r\n var server_1 = {};\r\n arrForEach(serverTiming, function (value, idx) {\r\n var name = normalizeJsName(value[strName] || \"\" + idx);\r\n var newValue = server_1[name] || {};\r\n objForEachKey(value, function (key, val) {\r\n if (key !== strName && isString(val) || isNumber(val)) {\r\n if (newValue[key]) {\r\n val = newValue[key] + \";\" + val;\r\n }\r\n if (val || !isString(val)) {\r\n // Only set the value if it has a value and it's not an empty string\r\n newValue[key] = val;\r\n }\r\n }\r\n });\r\n server_1[name] = newValue;\r\n });\r\n propsSet |= _setPerfValue(props, strServerTiming, server_1);\r\n }\r\n propsSet |= _setPerfValue(props, strTransferSize, resourceEntry[strTransferSize]);\r\n propsSet |= _setPerfValue(props, strEncodedBodySize, resourceEntry[strEncodedBodySize]);\r\n propsSet |= _setPerfValue(props, strDecodedBodySize, resourceEntry[strDecodedBodySize]);\r\n }\r\n else {\r\n if (ajaxData[_DYN_PERF_MARK /* @min:%2eperfMark */]) {\r\n propsSet |= _setPerfValue(props, \"missing\", ajaxData.perfAttempts);\r\n }\r\n }\r\n if (propsSet) {\r\n dependency[STR_PROPERTIES /* @min:%2eproperties */] = props;\r\n }\r\n}\r\nvar XHRMonitoringState = /** @class */ (function () {\r\n function XHRMonitoringState() {\r\n var self = this;\r\n self[_DYN_OPEN_DONE /* @min:%2eopenDone */] = false;\r\n self.setRequestHeaderDone = false;\r\n self[_DYN_SEND_DONE /* @min:%2esendDone */] = false;\r\n self[_DYN_ABORT_DONE /* @min:%2eabortDone */] = false;\r\n // True, if onreadyStateChangeCallback function attached to xhr, otherwise false\r\n self[_DYN_STATE_CHANGE_ATTACHE14 /* @min:%2estateChangeAttached */] = false;\r\n }\r\n return XHRMonitoringState;\r\n}());\r\nexport { XHRMonitoringState };\r\nvar ajaxRecord = /** @class */ (function () {\r\n function ajaxRecord(traceId, spanId, logger, traceCtx) {\r\n var _a;\r\n var self = this;\r\n var _logger = logger;\r\n var strResponseText = \"responseText\";\r\n // Assigning the initial/default values within the constructor to avoid typescript from creating a bunch of\r\n // this.XXXX = null\r\n self[_DYN_PERF_MARK /* @min:%2eperfMark */] = null;\r\n self.completed = false;\r\n self.requestHeadersSize = null;\r\n self[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */] = null;\r\n self.responseReceivingDuration = null;\r\n self.callbackDuration = null;\r\n self[_DYN_AJAX_TOTAL_DURATION /* @min:%2eajaxTotalDuration */] = null;\r\n self[_DYN_ABORTED /* @min:%2eaborted */] = 0;\r\n self.pageUrl = null;\r\n self[_DYN_REQUEST_URL /* @min:%2erequestUrl */] = null;\r\n self.requestSize = 0;\r\n self[_DYN_METHOD /* @min:%2emethod */] = null;\r\n self[_DYN_STATUS /* @min:%2estatus */] = null;\r\n self[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */] = null;\r\n self.responseStartedTime = null;\r\n self[_DYN_RESPONSE_FINISHED_TI15 /* @min:%2eresponseFinishedTime */] = null;\r\n self.callbackFinishedTime = null;\r\n self.endTime = null;\r\n self.xhrMonitoringState = new XHRMonitoringState();\r\n self.clientFailure = 0;\r\n self[_DYN_TRACE_ID /* @min:%2etraceID */] = traceId;\r\n self[_DYN_SPAN_ID /* @min:%2espanID */] = spanId;\r\n self[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] = traceCtx === null || traceCtx === void 0 ? void 0 : traceCtx.getTraceFlags();\r\n if (traceCtx) {\r\n self[_DYN_EVENT_TRACE_CTX /* @min:%2eeventTraceCtx */] = (_a = {},\r\n _a[_DYN_TRACE_ID0 /* @min:traceId */] = traceCtx[_DYN_GET_TRACE_ID /* @min:%2egetTraceId */](),\r\n _a[_DYN_SPAN_ID1 /* @min:spanId */] = traceCtx.getSpanId(),\r\n _a[_DYN_TRACE_FLAGS /* @min:traceFlags */] = traceCtx[_DYN_GET_TRACE_FLAGS /* @min:%2egetTraceFlags */](),\r\n _a);\r\n }\r\n else {\r\n self[_DYN_EVENT_TRACE_CTX /* @min:%2eeventTraceCtx */] = null;\r\n }\r\n dynamicProto(ajaxRecord, self, function (self) {\r\n self.getAbsoluteUrl = function () {\r\n return self[_DYN_REQUEST_URL /* @min:%2erequestUrl */] ? urlGetAbsoluteUrl(self[_DYN_REQUEST_URL /* @min:%2erequestUrl */]) : null;\r\n };\r\n self.getPathName = function () {\r\n return self[_DYN_REQUEST_URL /* @min:%2erequestUrl */] ? dataSanitizeUrl(_logger, urlGetCompleteUrl(self[_DYN_METHOD /* @min:%2emethod */], self[_DYN_REQUEST_URL /* @min:%2erequestUrl */])) : null;\r\n };\r\n self[_DYN__CREATE_TRACK_ITEM /* @min:%2eCreateTrackItem */] = function (ajaxType, enableRequestHeaderTracking, getResponse) {\r\n var _a;\r\n // round to 3 decimal points\r\n self.ajaxTotalDuration = Math.round(dateTimeUtilsDuration(self.requestSentTime, self.responseFinishedTime) * 1000) / 1000;\r\n if (self[_DYN_AJAX_TOTAL_DURATION /* @min:%2eajaxTotalDuration */] < 0) {\r\n return null;\r\n }\r\n var dependency = (_a = {\r\n id: \"|\" + self[_DYN_TRACE_ID /* @min:%2etraceID */] + \".\" + self[_DYN_SPAN_ID /* @min:%2espanID */],\r\n target: self[_DYN_GET_ABSOLUTE_URL /* @min:%2egetAbsoluteUrl */]()\r\n },\r\n _a[_DYN_NAME /* @min:name */] = self.getPathName(),\r\n _a.type = ajaxType,\r\n _a[_DYN_START_TIME /* @min:startTime */] = null,\r\n _a.duration = self[_DYN_AJAX_TOTAL_DURATION /* @min:%2eajaxTotalDuration */],\r\n _a.success = (+(self[_DYN_STATUS /* @min:%2estatus */])) >= 200 && (+(self[_DYN_STATUS /* @min:%2estatus */])) < 400,\r\n _a.responseCode = (+(self[_DYN_STATUS /* @min:%2estatus */])),\r\n _a[STR_PROPERTIES] = { HttpMethod: self[_DYN_METHOD /* @min:%2emethod */] },\r\n _a);\r\n var props = dependency[STR_PROPERTIES];\r\n if (self[_DYN_ABORTED /* @min:%2eaborted */]) {\r\n props[_DYN_ABORTED /* @min:%2eaborted */] = true;\r\n }\r\n if (self[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */]) {\r\n // Set the correct dependency start time\r\n dependency[_DYN_START_TIME /* @min:%2estartTime */] = new Date();\r\n dependency[_DYN_START_TIME /* @min:%2estartTime */].setTime(self[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */]);\r\n }\r\n // Add Ajax perf details if available\r\n _populatePerfData(self, dependency);\r\n if (enableRequestHeaderTracking) {\r\n if (objKeys(self.requestHeaders)[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n props[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */] = self[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */];\r\n }\r\n }\r\n if (getResponse) {\r\n var response = getResponse();\r\n if (response) {\r\n // enrich dependency target with correlation context from the server\r\n var correlationContext = response[_DYN_CORRELATION_CONTEXT /* @min:%2ecorrelationContext */];\r\n if (correlationContext) {\r\n dependency.correlationContext = /* dependency.target + \" | \" + */ correlationContext;\r\n }\r\n if (response[_DYN_HEADER_MAP /* @min:%2eheaderMap */]) {\r\n if (objKeys(response.headerMap)[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n props.responseHeaders = response[_DYN_HEADER_MAP /* @min:%2eheaderMap */];\r\n }\r\n }\r\n if (self[_DYN_ERROR_STATUS_TEXT /* @min:%2eerrorStatusText */]) {\r\n if (self[_DYN_STATUS /* @min:%2estatus */] >= 400) {\r\n var responseType = response.type;\r\n if (responseType === \"\" || responseType === \"text\") {\r\n props.responseText = response.responseText ? response[_DYN_STATUS_TEXT /* @min:%2estatusText */] + \" - \" + response[strResponseText] : response[_DYN_STATUS_TEXT /* @min:%2estatusText */];\r\n }\r\n if (responseType === \"json\") {\r\n props.responseText = response.response ? response[_DYN_STATUS_TEXT /* @min:%2estatusText */] + \" - \" + JSON.stringify(response[_DYN_RESPONSE /* @min:%2eresponse */]) : response[_DYN_STATUS_TEXT /* @min:%2estatusText */];\r\n }\r\n }\r\n else if (self[_DYN_STATUS /* @min:%2estatus */] === 0) {\r\n props.responseText = response[_DYN_STATUS_TEXT /* @min:%2estatusText */] || \"\";\r\n }\r\n }\r\n }\r\n }\r\n return dependency;\r\n };\r\n self[_DYN_GET_PART_APROPS /* @min:%2egetPartAProps */] = function () {\r\n var _a;\r\n var partA = null;\r\n var traceCtx = self[_DYN_EVENT_TRACE_CTX /* @min:%2eeventTraceCtx */];\r\n if (traceCtx && (traceCtx[_DYN_TRACE_ID0 /* @min:%2etraceId */] || traceCtx[_DYN_SPAN_ID1 /* @min:%2espanId */])) {\r\n partA = {};\r\n var traceExt = partA[Extensions.TraceExt] = (_a = {},\r\n _a[_DYN_TRACE_ID /* @min:traceID */] = traceCtx[_DYN_TRACE_ID0 /* @min:%2etraceId */],\r\n _a.parentID = traceCtx[_DYN_SPAN_ID1 /* @min:%2espanId */],\r\n _a);\r\n if (!isNullOrUndefined(traceCtx[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */])) {\r\n traceExt[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] = traceCtx[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */];\r\n }\r\n }\r\n return partA;\r\n };\r\n });\r\n }\r\n// Removed Stub for ajaxRecord.prototype.getAbsoluteUrl.\r\n// Removed Stub for ajaxRecord.prototype.getPathName.\r\n// Removed Stub for ajaxRecord.prototype.CreateTrackItem.\r\n// Removed Stub for ajaxRecord.prototype.getPartAProps.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n ajaxRecord.__ieDyn=1;\n\n return ajaxRecord;\r\n}());\r\nexport { ajaxRecord };\r\n","/*\n * Application Insights JavaScript SDK - Dependencies Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { __assignFn as __assign, __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { CorrelationIdHelper, DisabledPropertyName, PropertiesPluginIdentifier, RemoteDependencyData, RequestHeaders, createDistributedTraceContextFromTrace, createTelemetryItem, createTraceParent, dateTimeUtilsNow, formatTraceParent, isInternalApplicationInsightsEndpoint } from \"@microsoft/applicationinsights-common\";\r\nimport { BaseTelemetryPlugin, InstrumentFunc, InstrumentProto, _throwInternal, arrForEach, createProcessTelemetryContext, createUniqueNamespace, deepFreeze, dumpObj, eventOn, generateW3CId, getExceptionName, getGlobal, getIEVersion, getLocation, getPerformance, isFunction, isNullOrUndefined, isString, isXhrSupported, mergeEvtNamespace, objForEachKey, strPrototype, strTrim } from \"@microsoft/applicationinsights-core-js\";\r\nimport { STR_PROPERTIES } from \"./InternalConstants\";\r\nimport { _DYN_ABORTED, _DYN_ABORT_DONE, _DYN_ADD_REQUEST_CONTEXT, _DYN_AJAX_PERF_LOOKUP_DEL18, _DYN_APP_ID, _DYN_CAN_INCLUDE_CORRELAT3, _DYN_CONTEXT, _DYN_CORE, _DYN_DISABLE_AJAX_TRACKIN12, _DYN_DISABLE_FETCH_TRACKI13, _DYN_DISTRIBUTED_TRACING_5, _DYN_ENABLE_AJAX_ERROR_ST7, _DYN_ENABLE_AJAX_PERF_TRA8, _DYN_ENABLE_REQUEST_HEADE6, _DYN_ENABLE_RESPONSE_HEAD10, _DYN_ERROR_STATUS_TEXT, _DYN_EXCLUDE_REQUEST_FROM11, _DYN_GET_ABSOLUTE_URL, _DYN_GET_ALL_RESPONSE_HEA16, _DYN_GET_CORRELATION_CONT17, _DYN_GET_PART_APROPS, _DYN_GET_TRACE_FLAGS, _DYN_GET_TRACE_ID, _DYN_HEADERS, _DYN_HEADER_MAP, _DYN_INCLUDE_CORRELATION_2, _DYN_INST, _DYN_LENGTH, _DYN_MAX_AJAX_CALLS_PER_V9, _DYN_METHOD, _DYN_NAME, _DYN_OPEN_DONE, _DYN_PERF_MARK, _DYN_PERF_TIMING, _DYN_REQUEST_HEADERS, _DYN_REQUEST_SENT_TIME, _DYN_REQUEST_URL, _DYN_RESPONSE, _DYN_RESPONSE_FINISHED_TI15, _DYN_RESPONSE_TEXT, _DYN_SEND_DONE, _DYN_SET_REQUEST_HEADER, _DYN_SPAN_ID, _DYN_SPAN_ID1, _DYN_START_TIME, _DYN_STATE_CHANGE_ATTACHE14, _DYN_STATUS, _DYN_STATUS_TEXT, _DYN_TO_LOWER_CASE, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_TRACE_ID0, _DYN_TRACK_DEPENDENCY_DAT4, _DYN__CREATE_TRACK_ITEM } from \"./__DynamicConstants\";\r\nimport { ajaxRecord } from \"./ajaxRecord\";\r\nvar AJAX_MONITOR_PREFIX = \"ai.ajxmn.\";\r\nvar strDiagLog = \"diagLog\";\r\nvar AJAX_DATA_CONTAINER = \"_ajaxData\";\r\nvar STR_FETCH = \"fetch\";\r\nvar ERROR_HEADER = \"Failed to monitor XMLHttpRequest\";\r\nvar ERROR_PREFIX = \", monitoring data for this ajax call \";\r\nvar ERROR_POSTFIX = ERROR_PREFIX + \"may be incorrect.\";\r\nvar ERROR_NOT_SENT = ERROR_PREFIX + \"won't be sent.\";\r\nvar CORRELATION_HEADER_ERROR = \"Failed to get Request-Context correlation header as it may be not included in the response or not accessible.\";\r\nvar CUSTOM_REQUEST_CONTEXT_ERROR = \"Failed to add custom defined request context as configured call back may missing a null check.\";\r\nvar FAILED_TO_CALCULATE_DURATION_ERROR = \"Failed to calculate the duration of the \";\r\n// Using a global value so that to handle same iKey with multiple app insights instances (mostly for testing)\r\nvar _markCount = 0;\r\n/** @Ignore */\r\nfunction _supportsFetch() {\r\n var _global = getGlobal();\r\n if (!_global ||\r\n isNullOrUndefined(_global.Request) ||\r\n isNullOrUndefined(_global.Request[strPrototype]) ||\r\n isNullOrUndefined(_global[STR_FETCH])) {\r\n return null;\r\n }\r\n return _global[STR_FETCH];\r\n}\r\nvar _isWebWorker = null;\r\nfunction isWebWorker() {\r\n if (_isWebWorker == null) {\r\n try {\r\n _isWebWorker = !!(self && self instanceof WorkerGlobalScope);\r\n }\r\n catch (e) {\r\n _isWebWorker = false;\r\n }\r\n }\r\n return _isWebWorker;\r\n}\r\n/**\r\n * Determines whether ajax monitoring can be enabled on this document\r\n * @returns True if Ajax monitoring is supported on this page, otherwise false\r\n * @ignore\r\n */\r\nfunction _supportsAjaxMonitoring(ajaxMonitorInstance, ajaxDataId) {\r\n var _a;\r\n var result = false;\r\n if (isXhrSupported()) {\r\n var proto = XMLHttpRequest[strPrototype];\r\n result = !isNullOrUndefined(proto) &&\r\n !isNullOrUndefined(proto.open) && // eslint-disable-line security/detect-non-literal-fs-filename -- false positive\r\n !isNullOrUndefined(proto.send) &&\r\n !isNullOrUndefined(proto.abort);\r\n }\r\n var ieVer = getIEVersion();\r\n if (ieVer && ieVer < 9) {\r\n result = false;\r\n }\r\n if (result) {\r\n // Disable if the XmlHttpRequest can't be extended or hooked\r\n try {\r\n var xhr = new XMLHttpRequest();\r\n var xhrData = {\r\n xh: [],\r\n i: (_a = {},\r\n _a[ajaxDataId] = {},\r\n _a)\r\n };\r\n xhr[AJAX_DATA_CONTAINER] = xhrData;\r\n // Check that we can update the prototype\r\n var theOpen = XMLHttpRequest[strPrototype].open;\r\n XMLHttpRequest[strPrototype].open = theOpen;\r\n }\r\n catch (e) {\r\n // We can't decorate the xhr object so disable monitoring\r\n result = false;\r\n _throwInternalCritical(ajaxMonitorInstance, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, \"Failed to enable XMLHttpRequest monitoring, extension is not supported\", {\r\n exception: dumpObj(e)\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Internal helper to fetch the SDK instance tracking data for this XHR request\r\n * @param xhr\r\n * @param ajaxDataId\r\n * @returns\r\n */\r\nvar _getAjaxData = function (xhr, ajaxDataId) {\r\n if (xhr && ajaxDataId && xhr[AJAX_DATA_CONTAINER]) {\r\n return (xhr[AJAX_DATA_CONTAINER].i || {})[ajaxDataId];\r\n }\r\n return null;\r\n};\r\n/**\r\n * @ignore\r\n * Internal helper to track the singleton shared tracking headers, so we can attempt to not create headers\r\n * that might cause an issue if multiple values are populated.\r\n * @param xhr - The instrumented XHR instance\r\n */\r\nvar _addSharedXhrHeaders = function (xhr, name, value) {\r\n if (xhr) {\r\n var headers = (xhr[AJAX_DATA_CONTAINER] || {}).xh;\r\n if (headers) {\r\n headers.push({\r\n n: name,\r\n v: value\r\n });\r\n }\r\n }\r\n};\r\nvar _isHeaderSet = function (xhr, name) {\r\n var isPresent = false;\r\n if (xhr) {\r\n var headers = (xhr[AJAX_DATA_CONTAINER] || {}).xh;\r\n if (headers) {\r\n arrForEach(headers, function (header) {\r\n if (header.n === name) {\r\n isPresent = true;\r\n return -1;\r\n }\r\n });\r\n }\r\n }\r\n return isPresent;\r\n};\r\n/** @Ignore */\r\nfunction _getFailedAjaxDiagnosticsMessage(xhr, ajaxDataId) {\r\n var result = \"\";\r\n try {\r\n var ajaxData = _getAjaxData(xhr, ajaxDataId);\r\n if (ajaxData && ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */]) {\r\n result += \"(url: '\" + ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */] + \"')\";\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _throwInternalCritical(ajaxMonitorInstance, msgId, message, properties, isUserAct) {\r\n _throwInternal(ajaxMonitorInstance[strDiagLog](), 1 /* eLoggingSeverity.CRITICAL */, msgId, message, properties, isUserAct);\r\n}\r\n/** @ignore */\r\nfunction _throwInternalWarning(ajaxMonitorInstance, msgId, message, properties, isUserAct) {\r\n _throwInternal(ajaxMonitorInstance[strDiagLog](), 2 /* eLoggingSeverity.WARNING */, msgId, message, properties, isUserAct);\r\n}\r\n/** @Ignore */\r\nfunction _createErrorCallbackFunc(ajaxMonitorInstance, internalMessage, message) {\r\n // tslint:disable-next-line\r\n return function (callDetails) {\r\n _throwInternalCritical(ajaxMonitorInstance, internalMessage, message, {\r\n ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(callDetails[_DYN_INST /* @min:%2einst */], ajaxMonitorInstance._ajaxDataId),\r\n exception: dumpObj(callDetails.err)\r\n });\r\n };\r\n}\r\nfunction _indexOf(value, match) {\r\n if (value && match) {\r\n return value.indexOf(match);\r\n }\r\n return -1;\r\n}\r\nfunction _addHandler(container, id, theFunc) {\r\n var theHandler = {\r\n id: id,\r\n fn: theFunc\r\n };\r\n container.push(theHandler);\r\n return {\r\n remove: function () {\r\n arrForEach(container, function (initializer, idx) {\r\n if (initializer.id === theHandler.id) {\r\n container.splice(idx, 1);\r\n return -1;\r\n }\r\n });\r\n }\r\n };\r\n}\r\nfunction _processDependencyContainer(core, container, details, message) {\r\n var result = true;\r\n arrForEach(container, function (theFunc, idx) {\r\n try {\r\n if (theFunc.fn.call(null, details) === false) {\r\n result = false;\r\n }\r\n }\r\n catch (e) {\r\n _throwInternal(core && core.logger, 1 /* eLoggingSeverity.CRITICAL */, 64 /* _eInternalMessageId.TelemetryInitializerFailed */, \"Dependency \" + message + \" [#\" + idx + \"] failed: \" + getExceptionName(e), { exception: dumpObj(e) }, true);\r\n }\r\n });\r\n return result;\r\n}\r\nfunction _processDependencyListeners(listeners, core, ajaxData, xhr, input, init) {\r\n var initializersCount = listeners[_DYN_LENGTH /* @min:%2elength */];\r\n if (initializersCount > 0) {\r\n var details = {\r\n core: core,\r\n xhr: xhr,\r\n input: input,\r\n init: init,\r\n traceId: ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */],\r\n spanId: ajaxData[_DYN_SPAN_ID /* @min:%2espanID */],\r\n traceFlags: ajaxData[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */],\r\n context: ajaxData[_DYN_CONTEXT /* @min:%2econtext */] || {},\r\n aborted: !!ajaxData[_DYN_ABORTED /* @min:%2eaborted */]\r\n };\r\n _processDependencyContainer(core, listeners, details, \"listener\");\r\n ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */] = details[_DYN_TRACE_ID0 /* @min:%2etraceId */];\r\n ajaxData[_DYN_SPAN_ID /* @min:%2espanID */] = details[_DYN_SPAN_ID1 /* @min:%2espanId */];\r\n ajaxData[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] = details[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */];\r\n ajaxData[_DYN_CONTEXT /* @min:%2econtext */] = details[_DYN_CONTEXT /* @min:%2econtext */];\r\n }\r\n}\r\nvar BLOB_CORE = \"*.blob.core.\";\r\nexport var DfltAjaxCorrelationHeaderExDomains = deepFreeze([\r\n BLOB_CORE + \"windows.net\",\r\n BLOB_CORE + \"chinacloudapi.cn\",\r\n BLOB_CORE + \"cloudapi.de\",\r\n BLOB_CORE + \"usgovcloudapi.net\"\r\n]);\r\nvar _internalExcludeEndpoints = [\r\n /https:\\/\\/[^\\/]*(\\.pipe\\.aria|aria\\.pipe|events\\.data|collector\\.azure)\\.[^\\/]+\\/(OneCollector\\/1|Collector\\/3)\\.0/i\r\n];\r\nfunction _getDefaultConfig() {\r\n var config = {\r\n maxAjaxCallsPerView: 500,\r\n disableAjaxTracking: false,\r\n disableFetchTracking: false,\r\n excludeRequestFromAutoTrackingPatterns: undefined,\r\n disableCorrelationHeaders: false,\r\n distributedTracingMode: 1 /* eDistributedTracingModes.AI_AND_W3C */,\r\n correlationHeaderExcludedDomains: DfltAjaxCorrelationHeaderExDomains,\r\n correlationHeaderDomains: undefined,\r\n correlationHeaderExcludePatterns: undefined,\r\n appId: undefined,\r\n enableCorsCorrelation: false,\r\n enableRequestHeaderTracking: false,\r\n enableResponseHeaderTracking: false,\r\n enableAjaxErrorStatusText: false,\r\n enableAjaxPerfTracking: false,\r\n maxAjaxPerfLookupAttempts: 3,\r\n ajaxPerfLookupDelay: 25,\r\n ignoreHeaders: [\r\n \"Authorization\",\r\n \"X-API-Key\",\r\n \"WWW-Authenticate\"\r\n ],\r\n addRequestContext: undefined,\r\n addIntEndpoints: true\r\n };\r\n return config;\r\n}\r\nfunction _getEmptyConfig() {\r\n var emptyConfig = _getDefaultConfig();\r\n objForEachKey(emptyConfig, function (value) {\r\n emptyConfig[value] = undefined;\r\n });\r\n return emptyConfig;\r\n}\r\nvar AjaxMonitor = /** @class */ (function (_super) {\r\n __extends(AjaxMonitor, _super);\r\n function AjaxMonitor() {\r\n var _this = _super.call(this) || this;\r\n _this.identifier = AjaxMonitor.identifier;\r\n _this.priority = 120;\r\n var _fetchInitialized; // fetch monitoring initialized\r\n var _xhrInitialized; // XHR monitoring initialized\r\n var _currentWindowHost;\r\n var _config;\r\n var _enableRequestHeaderTracking;\r\n var _enableAjaxErrorStatusText;\r\n var _trackAjaxAttempts;\r\n var _context;\r\n var _isUsingW3CHeaders;\r\n var _isUsingAIHeaders;\r\n var _markPrefix;\r\n var _enableAjaxPerfTracking;\r\n var _maxAjaxCallsPerView;\r\n var _enableResponseHeaderTracking;\r\n var _disabledUrls;\r\n var _disableAjaxTracking;\r\n var _disableFetchTracking;\r\n var _excludeRequestFromAutoTrackingPatterns;\r\n var _addRequestContext;\r\n var _evtNamespace;\r\n var _ajaxDataId;\r\n var _dependencyHandlerId;\r\n var _dependencyListeners;\r\n var _dependencyInitializers;\r\n dynamicProto(AjaxMonitor, _this, function (_self, _base) {\r\n var _addHook = _base._addHook;\r\n _initDefaults();\r\n _self.initialize = function (config, core, extensions, pluginChain) {\r\n if (!_self.isInitialized()) {\r\n _base.initialize(config, core, extensions, pluginChain);\r\n _evtNamespace = mergeEvtNamespace(createUniqueNamespace(\"ajax\"), core && core.evtNamespace && core.evtNamespace());\r\n _populateDefaults(config);\r\n _instrumentXhr();\r\n _instrumentFetch();\r\n _populateContext();\r\n }\r\n };\r\n _self._doTeardown = function () {\r\n _initDefaults();\r\n };\r\n _self.trackDependencyData = function (dependency, properties) {\r\n _reportDependencyInternal(_dependencyInitializers, _self[_DYN_CORE /* @min:%2ecore */], null, dependency, properties);\r\n };\r\n _self[_DYN_INCLUDE_CORRELATION_2 /* @min:%2eincludeCorrelationHeaders */] = function (ajaxData, input, init, xhr) {\r\n // Test Hook to allow the overriding of the location host\r\n var currentWindowHost = _self[\"_currentWindowHost\"] || _currentWindowHost;\r\n _processDependencyListeners(_dependencyListeners, _self[_DYN_CORE /* @min:%2ecore */], ajaxData, xhr, input, init);\r\n if (input || input === \"\") { // Fetch\r\n if (CorrelationIdHelper[_DYN_CAN_INCLUDE_CORRELAT3 /* @min:%2ecanIncludeCorrelationHeader */](_config, ajaxData[_DYN_GET_ABSOLUTE_URL /* @min:%2egetAbsoluteUrl */](), currentWindowHost)) {\r\n if (!init) {\r\n init = {};\r\n }\r\n // init headers override original request headers\r\n // so, if they exist use only them, otherwise use request's because they should have been applied in the first place\r\n // not using original request headers will result in them being lost\r\n var headers = new Headers(init[_DYN_HEADERS /* @min:%2eheaders */] || (input instanceof Request ? (input[_DYN_HEADERS /* @min:%2eheaders */] || {}) : {}));\r\n if (_isUsingAIHeaders) {\r\n var id = \"|\" + ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */] + \".\" + ajaxData[_DYN_SPAN_ID /* @min:%2espanID */];\r\n headers.set(RequestHeaders[3 /* eRequestHeaders.requestIdHeader */], id);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[3 /* eRequestHeaders.requestIdHeader */]] = id;\r\n }\r\n }\r\n var appId = _config[_DYN_APP_ID /* @min:%2eappId */] || (_context && _context[_DYN_APP_ID /* @min:%2eappId */]());\r\n if (appId) {\r\n headers.set(RequestHeaders[0 /* eRequestHeaders.requestContextHeader */], RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]] = RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId;\r\n }\r\n }\r\n if (_isUsingW3CHeaders) {\r\n var traceFlags = ajaxData[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */];\r\n if (isNullOrUndefined(traceFlags)) {\r\n traceFlags = 0x01;\r\n }\r\n var traceParent = formatTraceParent(createTraceParent(ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */], ajaxData[_DYN_SPAN_ID /* @min:%2espanID */], traceFlags));\r\n headers.set(RequestHeaders[4 /* eRequestHeaders.traceParentHeader */], traceParent);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[4 /* eRequestHeaders.traceParentHeader */]] = traceParent;\r\n }\r\n }\r\n init[_DYN_HEADERS /* @min:%2eheaders */] = headers;\r\n }\r\n return init;\r\n }\r\n else if (xhr) { // XHR\r\n if (CorrelationIdHelper[_DYN_CAN_INCLUDE_CORRELAT3 /* @min:%2ecanIncludeCorrelationHeader */](_config, ajaxData[_DYN_GET_ABSOLUTE_URL /* @min:%2egetAbsoluteUrl */](), currentWindowHost)) {\r\n if (_isUsingAIHeaders) {\r\n if (!_isHeaderSet(xhr, RequestHeaders[3 /* eRequestHeaders.requestIdHeader */])) {\r\n var id = \"|\" + ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */] + \".\" + ajaxData[_DYN_SPAN_ID /* @min:%2espanID */];\r\n xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[3 /* eRequestHeaders.requestIdHeader */], id);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[3 /* eRequestHeaders.requestIdHeader */]] = id;\r\n }\r\n }\r\n else {\r\n _throwInternalWarning(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, \"Unable to set [\" + RequestHeaders[3 /* eRequestHeaders.requestIdHeader */] + \"] as it has already been set by another instance\");\r\n }\r\n }\r\n var appId = _config[_DYN_APP_ID /* @min:%2eappId */] || (_context && _context[_DYN_APP_ID /* @min:%2eappId */]());\r\n if (appId) {\r\n if (!_isHeaderSet(xhr, RequestHeaders[0 /* eRequestHeaders.requestContextHeader */])) {\r\n xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[0 /* eRequestHeaders.requestContextHeader */], RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]] = RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId;\r\n }\r\n }\r\n else {\r\n _throwInternalWarning(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, \"Unable to set [\" + RequestHeaders[0 /* eRequestHeaders.requestContextHeader */] + \"] as it has already been set by another instance\");\r\n }\r\n }\r\n if (_isUsingW3CHeaders) {\r\n var traceFlags = ajaxData[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */];\r\n if (isNullOrUndefined(traceFlags)) {\r\n traceFlags = 0x01;\r\n }\r\n if (!_isHeaderSet(xhr, RequestHeaders[4 /* eRequestHeaders.traceParentHeader */])) {\r\n var traceParent = formatTraceParent(createTraceParent(ajaxData[_DYN_TRACE_ID /* @min:%2etraceID */], ajaxData[_DYN_SPAN_ID /* @min:%2espanID */], traceFlags));\r\n xhr[_DYN_SET_REQUEST_HEADER /* @min:%2esetRequestHeader */](RequestHeaders[4 /* eRequestHeaders.traceParentHeader */], traceParent);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][RequestHeaders[4 /* eRequestHeaders.traceParentHeader */]] = traceParent;\r\n }\r\n }\r\n else {\r\n _throwInternalWarning(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, \"Unable to set [\" + RequestHeaders[4 /* eRequestHeaders.traceParentHeader */] + \"] as it has already been set by another instance\");\r\n }\r\n }\r\n }\r\n return xhr;\r\n }\r\n return undefined;\r\n };\r\n _self[_DYN_TRACK_DEPENDENCY_DAT4 /* @min:%2etrackDependencyDataInternal */] = function (dependency, properties, systemProperties) {\r\n if (_maxAjaxCallsPerView === -1 || _trackAjaxAttempts < _maxAjaxCallsPerView) {\r\n // Hack since expected format in w3c mode is |abc.def.\r\n // Non-w3c format is |abc.def\r\n // @todo Remove if better solution is available, e.g. handle in portal\r\n if ((_config[_DYN_DISTRIBUTED_TRACING_5 /* @min:%2edistributedTracingMode */] === 2 /* eDistributedTracingModes.W3C */\r\n || _config[_DYN_DISTRIBUTED_TRACING_5 /* @min:%2edistributedTracingMode */] === 1 /* eDistributedTracingModes.AI_AND_W3C */)\r\n && typeof dependency.id === \"string\" && dependency.id[dependency.id[_DYN_LENGTH /* @min:%2elength */] - 1] !== \".\") {\r\n dependency.id += \".\";\r\n }\r\n if (isNullOrUndefined(dependency[_DYN_START_TIME /* @min:%2estartTime */])) {\r\n dependency[_DYN_START_TIME /* @min:%2estartTime */] = new Date();\r\n }\r\n var item = createTelemetryItem(dependency, RemoteDependencyData.dataType, RemoteDependencyData.envelopeType, _self[strDiagLog](), properties, systemProperties);\r\n _self[_DYN_CORE /* @min:%2ecore */].track(item);\r\n }\r\n else if (_trackAjaxAttempts === _maxAjaxCallsPerView) {\r\n _throwInternalCritical(_self, 55 /* _eInternalMessageId.MaxAjaxPerPVExceeded */, \"Maximum ajax per page view limit reached, ajax monitoring is paused until the next trackPageView(). In order to increase the limit set the maxAjaxCallsPerView configuration parameter.\", true);\r\n }\r\n ++_trackAjaxAttempts;\r\n };\r\n _self.addDependencyListener = function (dependencyListener) {\r\n return _addHandler(_dependencyListeners, _dependencyHandlerId++, dependencyListener);\r\n };\r\n _self.addDependencyInitializer = function (dependencyInitializer) {\r\n return _addHandler(_dependencyInitializers, _dependencyHandlerId++, dependencyInitializer);\r\n };\r\n function _initDefaults() {\r\n var location = getLocation();\r\n _fetchInitialized = false; // fetch monitoring initialized\r\n _xhrInitialized = false; // XHR monitoring initialized\r\n _currentWindowHost = location && location.host && location.host[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n _config = AjaxMonitor.getEmptyConfig();\r\n _enableRequestHeaderTracking = false;\r\n _enableAjaxErrorStatusText = false;\r\n _trackAjaxAttempts = 0;\r\n _context = null;\r\n _isUsingW3CHeaders = false;\r\n _isUsingAIHeaders = false;\r\n _markPrefix = null;\r\n _enableAjaxPerfTracking = false;\r\n _maxAjaxCallsPerView = 0;\r\n _enableResponseHeaderTracking = false;\r\n _disabledUrls = {};\r\n _disableAjaxTracking = false;\r\n _disableFetchTracking = false;\r\n _excludeRequestFromAutoTrackingPatterns = null;\r\n _addRequestContext = null;\r\n _evtNamespace = null;\r\n _dependencyHandlerId = 0;\r\n _dependencyListeners = [];\r\n _dependencyInitializers = [];\r\n _ajaxDataId = createUniqueNamespace(\"ajaxData\");\r\n _self._ajaxDataId = _ajaxDataId;\r\n }\r\n function _populateDefaults(config) {\r\n var ctx = createProcessTelemetryContext(null, config, _self[_DYN_CORE /* @min:%2ecore */]);\r\n // Reset to the empty config\r\n _config = _getEmptyConfig();\r\n var defaultConfig = _getDefaultConfig();\r\n objForEachKey(defaultConfig, function (field, value) {\r\n _config[field] = ctx.getConfig(AjaxMonitor.identifier, field, value);\r\n });\r\n var distributedTracingMode = _config[_DYN_DISTRIBUTED_TRACING_5 /* @min:%2edistributedTracingMode */];\r\n _enableRequestHeaderTracking = _config[_DYN_ENABLE_REQUEST_HEADE6 /* @min:%2eenableRequestHeaderTracking */];\r\n _enableAjaxErrorStatusText = _config[_DYN_ENABLE_AJAX_ERROR_ST7 /* @min:%2eenableAjaxErrorStatusText */];\r\n _enableAjaxPerfTracking = _config[_DYN_ENABLE_AJAX_PERF_TRA8 /* @min:%2eenableAjaxPerfTracking */];\r\n _maxAjaxCallsPerView = _config[_DYN_MAX_AJAX_CALLS_PER_V9 /* @min:%2emaxAjaxCallsPerView */];\r\n _enableResponseHeaderTracking = _config[_DYN_ENABLE_RESPONSE_HEAD10 /* @min:%2eenableResponseHeaderTracking */];\r\n _excludeRequestFromAutoTrackingPatterns = [].concat(_config[_DYN_EXCLUDE_REQUEST_FROM11 /* @min:%2eexcludeRequestFromAutoTrackingPatterns */] || [], _config.addIntEndpoints !== false ? _internalExcludeEndpoints : []);\r\n _addRequestContext = _config[_DYN_ADD_REQUEST_CONTEXT /* @min:%2eaddRequestContext */];\r\n _isUsingAIHeaders = distributedTracingMode === 0 /* eDistributedTracingModes.AI */ || distributedTracingMode === 1 /* eDistributedTracingModes.AI_AND_W3C */;\r\n _isUsingW3CHeaders = distributedTracingMode === 1 /* eDistributedTracingModes.AI_AND_W3C */ || distributedTracingMode === 2 /* eDistributedTracingModes.W3C */;\r\n if (_enableAjaxPerfTracking) {\r\n var iKey = config.instrumentationKey || \"unkwn\";\r\n if (iKey[_DYN_LENGTH /* @min:%2elength */] > 5) {\r\n _markPrefix = AJAX_MONITOR_PREFIX + iKey.substring(iKey[_DYN_LENGTH /* @min:%2elength */] - 5) + \".\";\r\n }\r\n else {\r\n _markPrefix = AJAX_MONITOR_PREFIX + iKey + \".\";\r\n }\r\n }\r\n _disableAjaxTracking = !!_config[_DYN_DISABLE_AJAX_TRACKIN12 /* @min:%2edisableAjaxTracking */];\r\n _disableFetchTracking = !!_config[_DYN_DISABLE_FETCH_TRACKI13 /* @min:%2edisableFetchTracking */];\r\n }\r\n function _populateContext() {\r\n var propExt = _self[_DYN_CORE /* @min:%2ecore */].getPlugin(PropertiesPluginIdentifier);\r\n if (propExt) {\r\n _context = propExt.plugin[_DYN_CONTEXT /* @min:%2econtext */]; // we could move IPropertiesPlugin to common as well\r\n }\r\n }\r\n // discard the header if it's defined as ignoreHeaders in ICorrelationConfig\r\n function _canIncludeHeaders(header) {\r\n var rlt = true;\r\n if (header || _config.ignoreHeaders) {\r\n arrForEach(_config.ignoreHeaders, (function (key) {\r\n if (key[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]() === header[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]()) {\r\n rlt = false;\r\n return -1;\r\n }\r\n }));\r\n }\r\n return rlt;\r\n }\r\n // Fetch Stuff\r\n function _instrumentFetch() {\r\n var fetch = _supportsFetch();\r\n if (!fetch) {\r\n return;\r\n }\r\n var global = getGlobal();\r\n var isPolyfill = fetch.polyfill;\r\n if (!_disableFetchTracking && !_fetchInitialized) {\r\n _addHook(InstrumentFunc(global, STR_FETCH, {\r\n ns: _evtNamespace,\r\n // Add request hook\r\n req: function (callDetails, input, init) {\r\n var fetchData;\r\n if (!_disableFetchTracking && _fetchInitialized &&\r\n !_isDisabledRequest(null, input, init) &&\r\n // If we have a polyfil and XHR instrumented then let XHR report otherwise we get duplicates\r\n !(isPolyfill && _xhrInitialized)) {\r\n var ctx = callDetails.ctx();\r\n fetchData = _createFetchRecord(input, init);\r\n var newInit = _self[_DYN_INCLUDE_CORRELATION_2 /* @min:%2eincludeCorrelationHeaders */](fetchData, input, init);\r\n if (newInit !== init) {\r\n callDetails.set(1, newInit);\r\n }\r\n ctx.data = fetchData;\r\n }\r\n },\r\n rsp: function (callDetails, input) {\r\n if (!_disableFetchTracking) {\r\n var fetchData_1 = callDetails.ctx().data;\r\n if (fetchData_1) {\r\n // Replace the result with the new promise from this code\r\n callDetails.rslt = callDetails.rslt.then(function (response) {\r\n _reportFetchMetrics(callDetails, (response || {})[_DYN_STATUS /* @min:%2estatus */], input, response, fetchData_1, function () {\r\n var ajaxResponse = {\r\n statusText: (response || {})[_DYN_STATUS_TEXT /* @min:%2estatusText */],\r\n headerMap: null,\r\n correlationContext: _getFetchCorrelationContext(response)\r\n };\r\n if (_enableResponseHeaderTracking && response) {\r\n var responseHeaderMap_1 = {};\r\n response.headers.forEach(function (value, name) {\r\n if (_canIncludeHeaders(name)) {\r\n responseHeaderMap_1[name] = value;\r\n }\r\n });\r\n ajaxResponse[_DYN_HEADER_MAP /* @min:%2eheaderMap */] = responseHeaderMap_1;\r\n }\r\n return ajaxResponse;\r\n });\r\n return response;\r\n })[\"catch\"](function (reason) {\r\n _reportFetchMetrics(callDetails, 0, input, null, fetchData_1, null, { error: reason.message || dumpObj(reason) });\r\n throw reason;\r\n });\r\n }\r\n }\r\n },\r\n // Create an error callback to report any hook errors\r\n hkErr: _createErrorCallbackFunc(_self, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, \"Failed to monitor Window.fetch\" + ERROR_POSTFIX)\r\n }, true, isWebWorker()));\r\n _fetchInitialized = true;\r\n }\r\n else if (isPolyfill) {\r\n // If fetch is a polyfill we need to capture the request to ensure that we correctly track\r\n // disabled request URLS (i.e. internal urls) to ensure we don't end up in a constant loop\r\n // of reporting ourselves, for example React Native uses a polyfill for fetch\r\n // Note: Polyfill implementations that don't support the \"poyyfill\" tag are not supported\r\n // the workaround is to add a polyfill property to your fetch implementation before initializing\r\n // App Insights\r\n _addHook(InstrumentFunc(global, STR_FETCH, {\r\n ns: _evtNamespace,\r\n req: function (callDetails, input, init) {\r\n // Just call so that we record any disabled URL\r\n _isDisabledRequest(null, input, init);\r\n }\r\n }));\r\n }\r\n if (isPolyfill) {\r\n // retag the instrumented fetch with the same polyfill settings this is mostly for testing\r\n // But also supports multiple App Insights usages\r\n global[STR_FETCH].polyfill = isPolyfill;\r\n }\r\n }\r\n function _hookProto(target, funcName, callbacks) {\r\n _addHook(InstrumentProto(target, funcName, callbacks));\r\n }\r\n function _instrumentXhr() {\r\n if (_supportsAjaxMonitoring(_self, _ajaxDataId) && !_disableAjaxTracking && !_xhrInitialized) {\r\n // Instrument open\r\n _hookProto(XMLHttpRequest, \"open\", {\r\n ns: _evtNamespace,\r\n req: function (callDetails, method, url, async) {\r\n if (!_disableAjaxTracking) {\r\n var xhr = callDetails[_DYN_INST /* @min:%2einst */];\r\n var ajaxData = _getAjaxData(xhr, _ajaxDataId);\r\n if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, ajaxData, true)) {\r\n if (!ajaxData || !ajaxData.xhrMonitoringState[_DYN_OPEN_DONE /* @min:%2eopenDone */]) {\r\n // Only create a single ajaxData (even when multiple AI instances are running)\r\n ajaxData = _openHandler(xhr, method, url, async);\r\n }\r\n // always attach to the on ready state change (required for handling multiple instances)\r\n _attachToOnReadyStateChange(xhr, ajaxData);\r\n }\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, ERROR_HEADER + \".open\" + ERROR_POSTFIX)\r\n });\r\n // Instrument send\r\n _hookProto(XMLHttpRequest, \"send\", {\r\n ns: _evtNamespace,\r\n req: function (callDetails, context) {\r\n if (!_disableAjaxTracking) {\r\n var xhr = callDetails[_DYN_INST /* @min:%2einst */];\r\n var ajaxData = _getAjaxData(xhr, _ajaxDataId);\r\n if (_isMonitoredXhrInstance(xhr, ajaxData) && !ajaxData.xhrMonitoringState[_DYN_SEND_DONE /* @min:%2esendDone */]) {\r\n _createMarkId(\"xhr\", ajaxData);\r\n ajaxData[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */] = dateTimeUtilsNow();\r\n _self[_DYN_INCLUDE_CORRELATION_2 /* @min:%2eincludeCorrelationHeaders */](ajaxData, undefined, undefined, xhr);\r\n ajaxData.xhrMonitoringState[_DYN_SEND_DONE /* @min:%2esendDone */] = true;\r\n }\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, 17 /* _eInternalMessageId.FailedMonitorAjaxSend */, ERROR_HEADER + ERROR_POSTFIX)\r\n });\r\n // Instrument abort\r\n _hookProto(XMLHttpRequest, \"abort\", {\r\n ns: _evtNamespace,\r\n req: function (callDetails) {\r\n if (!_disableAjaxTracking) {\r\n var xhr = callDetails[_DYN_INST /* @min:%2einst */];\r\n var ajaxData = _getAjaxData(xhr, _ajaxDataId);\r\n if (_isMonitoredXhrInstance(xhr, ajaxData) && !ajaxData.xhrMonitoringState[_DYN_ABORT_DONE /* @min:%2eabortDone */]) {\r\n ajaxData[_DYN_ABORTED /* @min:%2eaborted */] = 1;\r\n ajaxData.xhrMonitoringState[_DYN_ABORT_DONE /* @min:%2eabortDone */] = true;\r\n }\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, 13 /* _eInternalMessageId.FailedMonitorAjaxAbort */, ERROR_HEADER + \".abort\" + ERROR_POSTFIX)\r\n });\r\n // Instrument setRequestHeader\r\n _hookProto(XMLHttpRequest, \"setRequestHeader\", {\r\n ns: _evtNamespace,\r\n req: function (callDetails, header, value) {\r\n if (!_disableAjaxTracking) {\r\n var xhr = callDetails[_DYN_INST /* @min:%2einst */];\r\n var ajaxData = _getAjaxData(xhr, _ajaxDataId);\r\n if (ajaxData && _isMonitoredXhrInstance(xhr, ajaxData)) {\r\n _addSharedXhrHeaders(xhr, header, value);\r\n if (_enableRequestHeaderTracking && _canIncludeHeaders(header)) {\r\n if (ajaxData) {\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */][header] = value;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, ERROR_HEADER + \".setRequestHeader\" + ERROR_POSTFIX)\r\n });\r\n _xhrInitialized = true;\r\n }\r\n }\r\n function _isDisabledRequest(xhr, request, init) {\r\n var isDisabled = false;\r\n var theUrl = ((!isString(request) ? (request || {}).url || \"\" : request) || \"\")[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */]();\r\n // check excludeRequestFromAutoTrackingPatterns before stripping off any query string\r\n arrForEach(_excludeRequestFromAutoTrackingPatterns, function (regex) {\r\n var theRegex = regex;\r\n if (isString(regex)) {\r\n theRegex = new RegExp(regex);\r\n }\r\n if (!isDisabled) {\r\n isDisabled = theRegex.test(theUrl);\r\n }\r\n });\r\n // if request url matches with exclude regex pattern, return true and no need to check for headers\r\n if (isDisabled) {\r\n return isDisabled;\r\n }\r\n var idx = _indexOf(theUrl, \"?\");\r\n var idx2 = _indexOf(theUrl, \"#\");\r\n if (idx === -1 || (idx2 !== -1 && idx2 < idx)) {\r\n idx = idx2;\r\n }\r\n if (idx !== -1) {\r\n // Strip off any Query string\r\n theUrl = theUrl.substring(0, idx);\r\n }\r\n // check that this instance is not not used by ajax call performed inside client side monitoring to send data to collector\r\n if (!isNullOrUndefined(xhr)) {\r\n // Look on the XMLHttpRequest of the URL string value\r\n isDisabled = xhr[DisabledPropertyName] === true || theUrl[DisabledPropertyName] === true;\r\n }\r\n else if (!isNullOrUndefined(request)) { // fetch\r\n // Look for DisabledPropertyName in either Request or RequestInit\r\n isDisabled = (typeof request === \"object\" ? request[DisabledPropertyName] === true : false) ||\r\n (init ? init[DisabledPropertyName] === true : false);\r\n }\r\n // Also add extra check just in case the XHR or fetch objects where not decorated with the DisableProperty due to sealing or freezing\r\n if (!isDisabled && theUrl && isInternalApplicationInsightsEndpoint(theUrl)) {\r\n isDisabled = true;\r\n }\r\n if (isDisabled) {\r\n // Add the disabled url if not present\r\n if (!_disabledUrls[theUrl]) {\r\n _disabledUrls[theUrl] = 1;\r\n }\r\n }\r\n else {\r\n // Check to see if the url is listed as disabled\r\n if (_disabledUrls[theUrl]) {\r\n isDisabled = true;\r\n }\r\n }\r\n return isDisabled;\r\n }\r\n /// Verifies that particular instance of XMLHttpRequest needs to be monitored\r\n /// Optional parameter. True if ajaxData must be excluded from verification\r\n /// True if instance needs to be monitored, otherwise false\r\n function _isMonitoredXhrInstance(xhr, ajaxData, excludeAjaxDataValidation) {\r\n var ajaxValidation = true;\r\n var initialized = _xhrInitialized;\r\n if (!isNullOrUndefined(xhr)) {\r\n ajaxValidation = excludeAjaxDataValidation === true || !isNullOrUndefined(ajaxData);\r\n }\r\n // checking to see that all interested functions on xhr were instrumented\r\n return initialized\r\n // checking on ajaxData to see that it was not removed in user code\r\n && ajaxValidation;\r\n }\r\n function _getDistributedTraceCtx() {\r\n var distributedTraceCtx = null;\r\n if (_self[_DYN_CORE /* @min:%2ecore */] && _self[_DYN_CORE /* @min:%2ecore */].getTraceCtx) {\r\n distributedTraceCtx = _self[_DYN_CORE /* @min:%2ecore */].getTraceCtx(false);\r\n }\r\n // Fall back\r\n if (!distributedTraceCtx && _context && _context.telemetryTrace) {\r\n distributedTraceCtx = createDistributedTraceContextFromTrace(_context.telemetryTrace);\r\n }\r\n return distributedTraceCtx;\r\n }\r\n function _openHandler(xhr, method, url, async) {\r\n var _a;\r\n var distributedTraceCtx = _getDistributedTraceCtx();\r\n var traceID = (distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_ID /* @min:%2egetTraceId */]()) || generateW3CId();\r\n var spanID = generateW3CId().substr(0, 16);\r\n var xhrRequestData = xhr[AJAX_DATA_CONTAINER] = (xhr[AJAX_DATA_CONTAINER] || { xh: [], i: {} });\r\n var ajaxDataCntr = xhrRequestData.i = (xhrRequestData.i || {});\r\n var ajaxData = ajaxDataCntr[_ajaxDataId] = (ajaxDataCntr[_ajaxDataId] || new ajaxRecord(traceID, spanID, _self[strDiagLog](), (_a = _self.core) === null || _a === void 0 ? void 0 : _a.getTraceCtx()));\r\n ajaxData[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] = distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_FLAGS /* @min:%2egetTraceFlags */]();\r\n ajaxData[_DYN_METHOD /* @min:%2emethod */] = method;\r\n ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */] = url;\r\n ajaxData.xhrMonitoringState[_DYN_OPEN_DONE /* @min:%2eopenDone */] = true;\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */] = {};\r\n ajaxData.async = async;\r\n ajaxData[_DYN_ERROR_STATUS_TEXT /* @min:%2eerrorStatusText */] = _enableAjaxErrorStatusText;\r\n return ajaxData;\r\n }\r\n function _attachToOnReadyStateChange(xhr, ajaxData) {\r\n ajaxData.xhrMonitoringState[_DYN_STATE_CHANGE_ATTACHE14 /* @min:%2estateChangeAttached */] = eventOn(xhr, \"readystatechange\", function () {\r\n try {\r\n if (xhr && xhr.readyState === 4 && _isMonitoredXhrInstance(xhr, ajaxData)) {\r\n _onAjaxComplete(xhr);\r\n }\r\n }\r\n catch (e) {\r\n var exceptionText = dumpObj(e);\r\n // ignore messages with c00c023f, as this a known IE9 XHR abort issue\r\n if (!exceptionText || _indexOf(exceptionText[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */](), \"c00c023f\") === -1) {\r\n _throwInternalCritical(_self, 16 /* _eInternalMessageId.FailedMonitorAjaxRSC */, ERROR_HEADER + \" 'readystatechange' event handler\" + ERROR_POSTFIX, {\r\n ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId),\r\n exception: exceptionText\r\n });\r\n }\r\n }\r\n }, _evtNamespace);\r\n }\r\n function _getResponseText(xhr) {\r\n try {\r\n var responseType = xhr.responseType;\r\n if (responseType === \"\" || responseType === \"text\") {\r\n // As per the specification responseText is only valid if the type is an empty string or \"text\"\r\n return xhr[_DYN_RESPONSE_TEXT /* @min:%2eresponseText */];\r\n }\r\n }\r\n catch (e) {\r\n // This shouldn't happen because of the above check -- but just in case, so just ignore\r\n }\r\n return null;\r\n }\r\n function _onAjaxComplete(xhr) {\r\n var ajaxData = _getAjaxData(xhr, _ajaxDataId);\r\n ajaxData[_DYN_RESPONSE_FINISHED_TI15 /* @min:%2eresponseFinishedTime */] = dateTimeUtilsNow();\r\n ajaxData[_DYN_STATUS /* @min:%2estatus */] = xhr[_DYN_STATUS /* @min:%2estatus */];\r\n function _reportXhrError(e, failedProps) {\r\n var errorProps = failedProps || {};\r\n errorProps[\"ajaxDiagnosticsMessage\"] = _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId);\r\n if (e) {\r\n errorProps[\"exception\"] = dumpObj(e);\r\n }\r\n _throwInternalWarning(_self, 14 /* _eInternalMessageId.FailedMonitorAjaxDur */, FAILED_TO_CALCULATE_DURATION_ERROR + \"ajax call\" + ERROR_NOT_SENT, errorProps);\r\n }\r\n _findPerfResourceEntry(\"xmlhttprequest\", ajaxData, function () {\r\n try {\r\n var dependency = ajaxData[_DYN__CREATE_TRACK_ITEM /* @min:%2eCreateTrackItem */](\"Ajax\", _enableRequestHeaderTracking, function () {\r\n var ajaxResponse = {\r\n statusText: xhr[_DYN_STATUS_TEXT /* @min:%2estatusText */],\r\n headerMap: null,\r\n correlationContext: _getAjaxCorrelationContext(xhr),\r\n type: xhr.responseType,\r\n responseText: _getResponseText(xhr),\r\n response: xhr[_DYN_RESPONSE /* @min:%2eresponse */]\r\n };\r\n if (_enableResponseHeaderTracking) {\r\n var headers = xhr[_DYN_GET_ALL_RESPONSE_HEA16 /* @min:%2egetAllResponseHeaders */]();\r\n if (headers) {\r\n // xhr.getAllResponseHeaders() method returns all the response headers, separated by CRLF, as a string or null\r\n // the regex converts the header string into an array of individual headers\r\n var arr = strTrim(headers).split(/[\\r\\n]+/);\r\n var responseHeaderMap_2 = {};\r\n arrForEach(arr, function (line) {\r\n var parts = line.split(\": \");\r\n var header = parts.shift();\r\n var value = parts.join(\": \");\r\n if (_canIncludeHeaders(header)) {\r\n responseHeaderMap_2[header] = value;\r\n }\r\n });\r\n ajaxResponse[_DYN_HEADER_MAP /* @min:%2eheaderMap */] = responseHeaderMap_2;\r\n }\r\n }\r\n return ajaxResponse;\r\n });\r\n var properties = void 0;\r\n try {\r\n if (!!_addRequestContext) {\r\n properties = _addRequestContext({ status: xhr[_DYN_STATUS /* @min:%2estatus */], xhr: xhr });\r\n }\r\n }\r\n catch (e) {\r\n _throwInternalWarning(_self, 104 /* _eInternalMessageId.FailedAddingCustomDefinedRequestContext */, CUSTOM_REQUEST_CONTEXT_ERROR);\r\n }\r\n if (dependency) {\r\n if (properties !== undefined) {\r\n dependency[STR_PROPERTIES /* @min:%2eproperties */] = __assign(__assign({}, dependency.properties), properties);\r\n }\r\n var sysProperties = ajaxData[_DYN_GET_PART_APROPS /* @min:%2egetPartAProps */]();\r\n _reportDependencyInternal(_dependencyInitializers, _self[_DYN_CORE /* @min:%2ecore */], ajaxData, dependency, null, sysProperties);\r\n }\r\n else {\r\n _reportXhrError(null, {\r\n requestSentTime: ajaxData[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */],\r\n responseFinishedTime: ajaxData[_DYN_RESPONSE_FINISHED_TI15 /* @min:%2eresponseFinishedTime */]\r\n });\r\n }\r\n }\r\n finally {\r\n // cleanup telemetry data\r\n try {\r\n var xhrRequestData = (xhr[AJAX_DATA_CONTAINER] || { i: {} });\r\n var ajaxDataCntr = (xhrRequestData.i || {});\r\n if (ajaxDataCntr[_ajaxDataId]) {\r\n ajaxDataCntr[_ajaxDataId] = null;\r\n }\r\n }\r\n catch (e) {\r\n // May throw in environments that prevent extension or freeze xhr\r\n }\r\n }\r\n }, function (e) {\r\n _reportXhrError(e, null);\r\n });\r\n }\r\n function _getAjaxCorrelationContext(xhr) {\r\n try {\r\n var responseHeadersString = xhr[_DYN_GET_ALL_RESPONSE_HEA16 /* @min:%2egetAllResponseHeaders */]();\r\n if (responseHeadersString !== null) {\r\n var index = _indexOf(responseHeadersString[_DYN_TO_LOWER_CASE /* @min:%2etoLowerCase */](), RequestHeaders[8 /* eRequestHeaders.requestContextHeaderLowerCase */]);\r\n if (index !== -1) {\r\n var responseHeader = xhr.getResponseHeader(RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]);\r\n return CorrelationIdHelper[_DYN_GET_CORRELATION_CONT17 /* @min:%2egetCorrelationContext */](responseHeader);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _throwInternalWarning(_self, 18 /* _eInternalMessageId.FailedMonitorAjaxGetCorrelationHeader */, CORRELATION_HEADER_ERROR, {\r\n ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr, _ajaxDataId),\r\n exception: dumpObj(e)\r\n });\r\n }\r\n }\r\n function _createMarkId(type, ajaxData) {\r\n if (ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */] && _markPrefix && _enableAjaxPerfTracking) {\r\n var performance_1 = getPerformance();\r\n if (performance_1 && isFunction(performance_1.mark)) {\r\n _markCount++;\r\n var markId = _markPrefix + type + \"#\" + _markCount;\r\n performance_1.mark(markId);\r\n var entries = performance_1.getEntriesByName(markId);\r\n if (entries && entries[_DYN_LENGTH /* @min:%2elength */] === 1) {\r\n ajaxData[_DYN_PERF_MARK /* @min:%2eperfMark */] = entries[0];\r\n }\r\n }\r\n }\r\n }\r\n function _findPerfResourceEntry(initiatorType, ajaxData, trackCallback, reportError) {\r\n var perfMark = ajaxData[_DYN_PERF_MARK /* @min:%2eperfMark */];\r\n var performance = getPerformance();\r\n var maxAttempts = _config.maxAjaxPerfLookupAttempts;\r\n var retryDelay = _config[_DYN_AJAX_PERF_LOOKUP_DEL18 /* @min:%2eajaxPerfLookupDelay */];\r\n var requestUrl = ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */];\r\n var attempt = 0;\r\n (function locateResourceTiming() {\r\n try {\r\n if (performance && perfMark) {\r\n attempt++;\r\n var perfTiming = null;\r\n var entries = performance.getEntries();\r\n for (var lp = entries[_DYN_LENGTH /* @min:%2elength */] - 1; lp >= 0; lp--) {\r\n var entry = entries[lp];\r\n if (entry) {\r\n if (entry.entryType === \"resource\") {\r\n if (entry.initiatorType === initiatorType &&\r\n (_indexOf(entry[_DYN_NAME /* @min:%2ename */], requestUrl) !== -1 || _indexOf(requestUrl, entry[_DYN_NAME /* @min:%2ename */]) !== -1)) {\r\n perfTiming = entry;\r\n }\r\n }\r\n else if (entry.entryType === \"mark\" && entry[_DYN_NAME /* @min:%2ename */] === perfMark[_DYN_NAME /* @min:%2ename */]) {\r\n // We hit the start event\r\n ajaxData[_DYN_PERF_TIMING /* @min:%2eperfTiming */] = perfTiming;\r\n break;\r\n }\r\n if (entry[_DYN_START_TIME /* @min:%2estartTime */] < perfMark[_DYN_START_TIME /* @min:%2estartTime */] - 1000) {\r\n // Fallback to try and reduce the time spent looking for the perf entry\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!perfMark || // - we don't have a perfMark or\r\n ajaxData[_DYN_PERF_TIMING /* @min:%2eperfTiming */] || // - we have not found the perf entry or\r\n attempt >= maxAttempts || // - we have tried too many attempts or\r\n ajaxData.async === false) { // - this is a sync request\r\n if (perfMark && isFunction(performance.clearMarks)) {\r\n // Remove the mark so we don't fill up the performance resources too much\r\n performance.clearMarks(perfMark[_DYN_NAME /* @min:%2ename */]);\r\n }\r\n ajaxData.perfAttempts = attempt;\r\n // just continue and report the track event\r\n trackCallback();\r\n }\r\n else {\r\n // We need to wait for the browser to populate the window.performance entry\r\n // This needs to be at least 1ms as waiting <= 1 (on firefox) is not enough time for fetch or xhr,\r\n // this is a scheduling issue for the browser implementation\r\n setTimeout(locateResourceTiming, retryDelay);\r\n }\r\n }\r\n catch (e) {\r\n reportError(e);\r\n }\r\n })();\r\n }\r\n function _createFetchRecord(input, init) {\r\n var _a;\r\n var distributedTraceCtx = _getDistributedTraceCtx();\r\n var traceID = (distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_ID /* @min:%2egetTraceId */]()) || generateW3CId();\r\n var spanID = generateW3CId().substr(0, 16);\r\n var ajaxData = new ajaxRecord(traceID, spanID, _self[strDiagLog](), (_a = _self.core) === null || _a === void 0 ? void 0 : _a.getTraceCtx());\r\n ajaxData[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] = distributedTraceCtx && distributedTraceCtx[_DYN_GET_TRACE_FLAGS /* @min:%2egetTraceFlags */]();\r\n ajaxData[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */] = dateTimeUtilsNow();\r\n ajaxData[_DYN_ERROR_STATUS_TEXT /* @min:%2eerrorStatusText */] = _enableAjaxErrorStatusText;\r\n if (input instanceof Request) {\r\n ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */] = input ? input.url : \"\";\r\n }\r\n else {\r\n ajaxData[_DYN_REQUEST_URL /* @min:%2erequestUrl */] = input;\r\n }\r\n var method = \"GET\";\r\n if (init && init[_DYN_METHOD /* @min:%2emethod */]) {\r\n method = init[_DYN_METHOD /* @min:%2emethod */];\r\n }\r\n else if (input && input instanceof Request) {\r\n method = input[_DYN_METHOD /* @min:%2emethod */];\r\n }\r\n ajaxData[_DYN_METHOD /* @min:%2emethod */] = method;\r\n var requestHeaders = {};\r\n if (_enableRequestHeaderTracking) {\r\n var headers = new Headers((init ? init[_DYN_HEADERS /* @min:%2eheaders */] : 0) || (input instanceof Request ? (input[_DYN_HEADERS /* @min:%2eheaders */] || {}) : {}));\r\n headers.forEach(function (value, key) {\r\n if (_canIncludeHeaders(key)) {\r\n requestHeaders[key] = value;\r\n }\r\n });\r\n }\r\n ajaxData[_DYN_REQUEST_HEADERS /* @min:%2erequestHeaders */] = requestHeaders;\r\n _createMarkId(STR_FETCH, ajaxData);\r\n return ajaxData;\r\n }\r\n function _getFailedFetchDiagnosticsMessage(input) {\r\n var result = \"\";\r\n try {\r\n if (!isNullOrUndefined(input)) {\r\n if (isString(input)) {\r\n result += \"(url: '\".concat(input, \"')\");\r\n }\r\n else {\r\n result += \"(url: '\".concat(input.url, \"')\");\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _throwInternalCritical(_self, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, \"Failed to grab failed fetch diagnostics message\", { exception: dumpObj(e) });\r\n }\r\n return result;\r\n }\r\n function _reportFetchMetrics(callDetails, status, input, response, ajaxData, getResponse, properties) {\r\n if (!ajaxData) {\r\n return;\r\n }\r\n function _reportFetchError(msgId, e, failedProps) {\r\n var errorProps = failedProps || {};\r\n errorProps[\"fetchDiagnosticsMessage\"] = _getFailedFetchDiagnosticsMessage(input);\r\n if (e) {\r\n errorProps[\"exception\"] = dumpObj(e);\r\n }\r\n _throwInternalWarning(_self, msgId, FAILED_TO_CALCULATE_DURATION_ERROR + \"fetch call\" + ERROR_NOT_SENT, errorProps);\r\n }\r\n ajaxData[_DYN_RESPONSE_FINISHED_TI15 /* @min:%2eresponseFinishedTime */] = dateTimeUtilsNow();\r\n ajaxData[_DYN_STATUS /* @min:%2estatus */] = status;\r\n _findPerfResourceEntry(STR_FETCH, ajaxData, function () {\r\n var dependency = ajaxData[_DYN__CREATE_TRACK_ITEM /* @min:%2eCreateTrackItem */](\"Fetch\", _enableRequestHeaderTracking, getResponse);\r\n var properties;\r\n try {\r\n if (!!_addRequestContext) {\r\n properties = _addRequestContext({ status: status, request: input, response: response });\r\n }\r\n }\r\n catch (e) {\r\n _throwInternalWarning(_self, 104 /* _eInternalMessageId.FailedAddingCustomDefinedRequestContext */, CUSTOM_REQUEST_CONTEXT_ERROR);\r\n }\r\n if (dependency) {\r\n if (properties !== undefined) {\r\n dependency[STR_PROPERTIES /* @min:%2eproperties */] = __assign(__assign({}, dependency.properties), properties);\r\n }\r\n var sysProperties = ajaxData[_DYN_GET_PART_APROPS /* @min:%2egetPartAProps */]();\r\n _reportDependencyInternal(_dependencyInitializers, _self[_DYN_CORE /* @min:%2ecore */], ajaxData, dependency, null, sysProperties);\r\n }\r\n else {\r\n _reportFetchError(14 /* _eInternalMessageId.FailedMonitorAjaxDur */, null, {\r\n requestSentTime: ajaxData[_DYN_REQUEST_SENT_TIME /* @min:%2erequestSentTime */],\r\n responseFinishedTime: ajaxData[_DYN_RESPONSE_FINISHED_TI15 /* @min:%2eresponseFinishedTime */]\r\n });\r\n }\r\n }, function (e) {\r\n _reportFetchError(18 /* _eInternalMessageId.FailedMonitorAjaxGetCorrelationHeader */, e, null);\r\n });\r\n }\r\n function _getFetchCorrelationContext(response) {\r\n if (response && response[_DYN_HEADERS /* @min:%2eheaders */]) {\r\n try {\r\n var responseHeader = response[_DYN_HEADERS /* @min:%2eheaders */].get(RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]);\r\n return CorrelationIdHelper[_DYN_GET_CORRELATION_CONT17 /* @min:%2egetCorrelationContext */](responseHeader);\r\n }\r\n catch (e) {\r\n _throwInternalWarning(_self, 18 /* _eInternalMessageId.FailedMonitorAjaxGetCorrelationHeader */, CORRELATION_HEADER_ERROR, {\r\n fetchDiagnosticsMessage: _getFailedFetchDiagnosticsMessage(response),\r\n exception: dumpObj(e)\r\n });\r\n }\r\n }\r\n }\r\n function _reportDependencyInternal(initializers, core, ajaxData, dependency, properties, systemProperties) {\r\n var result = true;\r\n var initializersCount = initializers[_DYN_LENGTH /* @min:%2elength */];\r\n if (initializersCount > 0) {\r\n var details = {\r\n item: dependency,\r\n properties: properties,\r\n sysProperties: systemProperties,\r\n context: ajaxData ? ajaxData[_DYN_CONTEXT /* @min:%2econtext */] : null,\r\n aborted: ajaxData ? !!ajaxData[_DYN_ABORTED /* @min:%2eaborted */] : false\r\n };\r\n result = _processDependencyContainer(core, initializers, details, \"initializer\");\r\n }\r\n if (result) {\r\n _self[_DYN_TRACK_DEPENDENCY_DAT4 /* @min:%2etrackDependencyDataInternal */](dependency, properties, systemProperties);\r\n }\r\n }\r\n });\r\n return _this;\r\n }\r\n// Removed Stub for AjaxMonitor.prototype.initialize.\r\n AjaxMonitor.prototype.processTelemetry = function (item, itemCtx) {\r\n this.processNext(item, itemCtx);\r\n };\r\n// Removed Stub for AjaxMonitor.prototype.trackDependencyData.\r\n// Removed Stub for AjaxMonitor.prototype.includeCorrelationHeaders.\r\n// Removed Stub for AjaxMonitor.prototype.addDependencyListener.\r\n /**\r\n * Add an dependency telemetry initializer callback function to allow populating additional properties or drop the request.\r\n * It is called after the dependency call has completed and any available performance details are available. A dependency\r\n * initializer is similar to the TelemetryInitializer function but it allows you to block the reporting of the dependency\r\n * request so that it doesn't count against the `maxAjaxCallsPerView`.\r\n * @param dependencyInitializer - The Dependency Telemetry Initializer function\r\n * @returns - A IDependencyInitializerHandler to enable the initializer to be removed\r\n */\r\n AjaxMonitor.prototype.addDependencyInitializer = function (dependencyInitializer) {\r\n return null;\r\n };\r\n// Removed Stub for AjaxMonitor.prototype.trackDependencyDataInternal.\r\n AjaxMonitor.identifier = \"AjaxDependencyPlugin\";\r\n AjaxMonitor.getDefaultConfig = _getDefaultConfig;\r\n AjaxMonitor.getEmptyConfig = _getEmptyConfig;\r\n return AjaxMonitor;\r\n}(BaseTelemetryPlugin));\r\nexport { AjaxMonitor };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nvar Application = /** @class */ (function () {\r\n function Application() {\r\n }\r\n return Application;\r\n}());\r\nexport { Application };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nvar Device = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the Device class\r\n */\r\n function Device() {\r\n // don't attempt to fingerprint browsers\r\n this.id = \"browser\";\r\n // Device type is a dimension in our data platform\r\n // Setting it to 'Browser' allows to separate client and server dependencies/exceptions\r\n this.deviceClass = \"Browser\";\r\n }\r\n return Device;\r\n}());\r\nexport { Device };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// @skip-file-minify\r\n// ##############################################################\r\n// AUTO GENERATED FILE: This file is Auto Generated during build.\r\n// ##############################################################\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\nexport var _DYN_SESSION_MANAGER = \"sessionManager\"; // Count: 3\r\nexport var _DYN_UPDATE = \"update\"; // Count: 4\r\nexport var _DYN_IS_USER_COOKIE_SET = \"isUserCookieSet\"; // Count: 4\r\nexport var _DYN_IS_NEW_USER = \"isNewUser\"; // Count: 4\r\nexport var _DYN_GET_TRACE_CTX = \"getTraceCtx\"; // Count: 3\r\nexport var _DYN_TELEMETRY_TRACE = \"telemetryTrace\"; // Count: 3\r\nexport var _DYN_APPLY_SESSION_CONTEX0 = \"applySessionContext\"; // Count: 2\r\nexport var _DYN_APPLY_APPLICATION_CO1 = \"applyApplicationContext\"; // Count: 2\r\nexport var _DYN_APPLY_DEVICE_CONTEXT = \"applyDeviceContext\"; // Count: 2\r\nexport var _DYN_APPLY_OPERATION_CONT2 = \"applyOperationContext\"; // Count: 2\r\nexport var _DYN_APPLY_USER_CONTEXT = \"applyUserContext\"; // Count: 2\r\nexport var _DYN_APPLY_OPERATING_SYST3 = \"applyOperatingSystemContxt\"; // Count: 2\r\nexport var _DYN_APPLY_LOCATION_CONTE4 = \"applyLocationContext\"; // Count: 2\r\nexport var _DYN_APPLY_INTERNAL_CONTE5 = \"applyInternalContext\"; // Count: 2\r\nexport var _DYN_ACCOUNT_ID = \"accountId\"; // Count: 8\r\nexport var _DYN_SDK_EXTENSION = \"sdkExtension\"; // Count: 4\r\nexport var _DYN_GET_SESSION_ID = \"getSessionId\"; // Count: 4\r\nexport var _DYN_NAME_PREFIX = \"namePrefix\"; // Count: 7\r\nexport var _DYN_SESSION_COOKIE_POSTF6 = \"sessionCookiePostfix\"; // Count: 4\r\nexport var _DYN_USER_COOKIE_POSTFIX = \"userCookiePostfix\"; // Count: 4\r\nexport var _DYN_ID_LENGTH = \"idLength\"; // Count: 5\r\nexport var _DYN_GET_NEW_ID = \"getNewId\"; // Count: 6\r\nexport var _DYN_LENGTH = \"length\"; // Count: 4\r\nexport var _DYN_AUTOMATIC_SESSION = \"automaticSession\"; // Count: 5\r\nexport var _DYN_AUTHENTICATED_ID = \"authenticatedId\"; // Count: 6\r\nexport var _DYN_SESSION_EXPIRATION_M7 = \"sessionExpirationMs\"; // Count: 5\r\nexport var _DYN_SESSION_RENEWAL_MS = \"sessionRenewalMs\"; // Count: 4\r\nexport var _DYN_CONFIG = \"config\"; // Count: 4\r\nexport var _DYN_ACQUISITION_DATE = \"acquisitionDate\"; // Count: 5\r\nexport var _DYN_RENEWAL_DATE = \"renewalDate\"; // Count: 4\r\nexport var _DYN_COOKIE_DOMAIN = \"cookieDomain\"; // Count: 3\r\nexport var _DYN_JOIN = \"join\"; // Count: 5\r\nexport var _DYN_COOKIE_SEPARATOR = \"cookieSeparator\"; // Count: 5\r\nexport var _DYN_AUTH_USER_COOKIE_NAM8 = \"authUserCookieName\"; // Count: 3\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { _DYN_SDK_EXTENSION } from \"../__DynamicConstants\";\r\nvar Version = '2.8.16';\r\nvar Internal = /** @class */ (function () {\r\n /**\r\n * Constructs a new instance of the internal telemetry data class.\r\n */\r\n function Internal(config) {\r\n this.sdkVersion = (config[_DYN_SDK_EXTENSION /* @min:%2esdkExtension */] && config[_DYN_SDK_EXTENSION /* @min:%2esdkExtension */]() ? config[_DYN_SDK_EXTENSION /* @min:%2esdkExtension */]() + \"_\" : \"\") + \"javascript:\" + Version;\r\n }\r\n return Internal;\r\n}());\r\nexport { Internal };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nvar Location = /** @class */ (function () {\r\n function Location() {\r\n }\r\n return Location;\r\n}());\r\nexport { Location };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { utlCanUseLocalStorage, utlGetLocalStorage, utlSetLocalStorage } from \"@microsoft/applicationinsights-common\";\r\nimport { _throwInternal, dateNow, dumpObj, getExceptionName, isFunction, newId, safeGetCookieMgr, safeGetLogger } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_ACQUISITION_DATE, _DYN_AUTOMATIC_SESSION, _DYN_CONFIG, _DYN_COOKIE_DOMAIN, _DYN_GET_NEW_ID, _DYN_ID_LENGTH, _DYN_JOIN, _DYN_LENGTH, _DYN_NAME_PREFIX, _DYN_RENEWAL_DATE, _DYN_SESSION_COOKIE_POSTF6, _DYN_SESSION_EXPIRATION_M7, _DYN_SESSION_RENEWAL_MS, _DYN_UPDATE } from \"../__DynamicConstants\";\r\nvar cookieNameConst = \"ai_session\";\r\nvar Session = /** @class */ (function () {\r\n function Session() {\r\n }\r\n return Session;\r\n}());\r\nexport { Session };\r\nvar _SessionManager = /** @class */ (function () {\r\n function _SessionManager(config, core) {\r\n var self = this;\r\n var _storageNamePrefix;\r\n var _cookieUpdatedTimestamp;\r\n var _logger = safeGetLogger(core);\r\n var _cookieManager = safeGetCookieMgr(core);\r\n dynamicProto(_SessionManager, self, function (_self) {\r\n if (!config) {\r\n config = {};\r\n }\r\n if (!isFunction(config[_DYN_SESSION_EXPIRATION_M7 /* @min:%2esessionExpirationMs */])) {\r\n config[_DYN_SESSION_EXPIRATION_M7 /* @min:%2esessionExpirationMs */] = function () { return _SessionManager.acquisitionSpan; };\r\n }\r\n if (!isFunction(config[_DYN_SESSION_RENEWAL_MS /* @min:%2esessionRenewalMs */])) {\r\n config[_DYN_SESSION_RENEWAL_MS /* @min:%2esessionRenewalMs */] = function () { return _SessionManager.renewalSpan; };\r\n }\r\n _self[_DYN_CONFIG /* @min:%2econfig */] = config;\r\n // sessionCookiePostfix takes the preference if it is configured, otherwise takes namePrefix if configured.\r\n var sessionCookiePostfix = (_self.config[_DYN_SESSION_COOKIE_POSTF6 /* @min:%2esessionCookiePostfix */] && _self[_DYN_CONFIG /* @min:%2econfig */][_DYN_SESSION_COOKIE_POSTF6 /* @min:%2esessionCookiePostfix */]()) ?\r\n _self.config[_DYN_SESSION_COOKIE_POSTF6 /* @min:%2esessionCookiePostfix */]() :\r\n ((_self.config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */] && _self[_DYN_CONFIG /* @min:%2econfig */][_DYN_NAME_PREFIX /* @min:%2enamePrefix */]()) ? _self[_DYN_CONFIG /* @min:%2econfig */][_DYN_NAME_PREFIX /* @min:%2enamePrefix */]() : \"\");\r\n _storageNamePrefix = function () { return cookieNameConst + sessionCookiePostfix; };\r\n _self[_DYN_AUTOMATIC_SESSION /* @min:%2eautomaticSession */] = new Session();\r\n _self[_DYN_UPDATE /* @min:%2eupdate */] = function () {\r\n // Always using Date getTime() as there is a bug in older IE instances that causes the performance timings to have the hi-bit set eg 0x800000000 causing\r\n // the number to be incorrect.\r\n var nowMs = dateNow();\r\n var isExpired = false;\r\n var session = _self[_DYN_AUTOMATIC_SESSION /* @min:%2eautomaticSession */];\r\n if (!session.id) {\r\n isExpired = !_initializeAutomaticSession(session, nowMs);\r\n }\r\n var sessionExpirationMs = _self.config[_DYN_SESSION_EXPIRATION_M7 /* @min:%2esessionExpirationMs */]();\r\n if (!isExpired && sessionExpirationMs > 0) {\r\n var sessionRenewalMs = _self.config[_DYN_SESSION_RENEWAL_MS /* @min:%2esessionRenewalMs */]();\r\n var timeSinceAcqMs = nowMs - session[_DYN_ACQUISITION_DATE /* @min:%2eacquisitionDate */];\r\n var timeSinceRenewalMs = nowMs - session[_DYN_RENEWAL_DATE /* @min:%2erenewalDate */];\r\n isExpired = timeSinceAcqMs < 0 || timeSinceRenewalMs < 0; // expired if the acquisition or last renewal are in the future\r\n isExpired = isExpired || timeSinceAcqMs > sessionExpirationMs; // expired if the time since acquisition is more than session Expiration\r\n isExpired = isExpired || timeSinceRenewalMs > sessionRenewalMs; // expired if the time since last renewal is more than renewal period\r\n }\r\n // renew if acquisitionSpan or renewalSpan has elapsed\r\n if (isExpired) {\r\n // update automaticSession so session state has correct id\r\n _renew(nowMs);\r\n }\r\n else {\r\n // do not update the cookie more often than cookieUpdateInterval\r\n if (!_cookieUpdatedTimestamp || nowMs - _cookieUpdatedTimestamp > _SessionManager.cookieUpdateInterval) {\r\n _setCookie(session, nowMs);\r\n }\r\n }\r\n };\r\n /**\r\n * Record the current state of the automatic session and store it in our cookie string format\r\n * into the browser's local storage. This is used to restore the session data when the cookie\r\n * expires.\r\n */\r\n _self.backup = function () {\r\n var session = _self[_DYN_AUTOMATIC_SESSION /* @min:%2eautomaticSession */];\r\n _setStorage(session.id, session[_DYN_ACQUISITION_DATE /* @min:%2eacquisitionDate */], session[_DYN_RENEWAL_DATE /* @min:%2erenewalDate */]);\r\n };\r\n /**\r\n * Use config.namePrefix + ai_session cookie data or local storage data (when the cookie is unavailable) to\r\n * initialize the automatic session.\r\n * @returns true if values set otherwise false\r\n */\r\n function _initializeAutomaticSession(session, now) {\r\n var isValid = false;\r\n var cookieValue = _cookieManager.get(_storageNamePrefix());\r\n if (cookieValue && isFunction(cookieValue.split)) {\r\n isValid = _initializeAutomaticSessionWithData(session, cookieValue);\r\n }\r\n else {\r\n // There's no cookie, but we might have session data in local storage\r\n // This can happen if the session expired or the user actively deleted the cookie\r\n // We only want to recover data if the cookie is missing from expiry. We should respect the user's wishes if the cookie was deleted actively.\r\n // The User class handles this for us and deletes our local storage object if the persistent user cookie was removed.\r\n var storageValue = utlGetLocalStorage(_logger, _storageNamePrefix());\r\n if (storageValue) {\r\n isValid = _initializeAutomaticSessionWithData(session, storageValue);\r\n }\r\n }\r\n return isValid || !!session.id;\r\n }\r\n /**\r\n * Extract id, acquisitionDate, and renewalDate from an ai_session payload string and\r\n * use this data to initialize automaticSession.\r\n *\r\n * @param {string} sessionData - The string stored in an ai_session cookie or local storage backup\r\n * @returns true if values set otherwise false\r\n */\r\n function _initializeAutomaticSessionWithData(session, sessionData) {\r\n var isValid = false;\r\n var sessionReset = \", session will be reset\";\r\n var tokens = sessionData.split(\"|\");\r\n if (tokens[_DYN_LENGTH /* @min:%2elength */] >= 2) {\r\n try {\r\n var acqMs = +tokens[1] || 0;\r\n var renewalMs = +tokens[2] || 0;\r\n if (isNaN(acqMs) || acqMs <= 0) {\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 27 /* _eInternalMessageId.SessionRenewalDateIsZero */, \"AI session acquisition date is 0\" + sessionReset);\r\n }\r\n else if (isNaN(renewalMs) || renewalMs <= 0) {\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 27 /* _eInternalMessageId.SessionRenewalDateIsZero */, \"AI session renewal date is 0\" + sessionReset);\r\n }\r\n else if (tokens[0]) {\r\n // Everything looks valid so set the values\r\n session.id = tokens[0];\r\n session[_DYN_ACQUISITION_DATE /* @min:%2eacquisitionDate */] = acqMs;\r\n session[_DYN_RENEWAL_DATE /* @min:%2erenewalDate */] = renewalMs;\r\n isValid = true;\r\n }\r\n }\r\n catch (e) {\r\n _throwInternal(_logger, 1 /* eLoggingSeverity.CRITICAL */, 9 /* _eInternalMessageId.ErrorParsingAISessionCookie */, \"Error parsing ai_session value [\" + (sessionData || \"\") + \"]\" + sessionReset + \" - \" + getExceptionName(e), { exception: dumpObj(e) });\r\n }\r\n }\r\n return isValid;\r\n }\r\n function _renew(nowMs) {\r\n var theConfig = (_self[_DYN_CONFIG /* @min:%2econfig */] || {});\r\n var getNewId = (theConfig[_DYN_GET_NEW_ID /* @min:%2egetNewId */] ? theConfig[_DYN_GET_NEW_ID /* @min:%2egetNewId */]() : null) || newId;\r\n _self.automaticSession.id = getNewId(theConfig[_DYN_ID_LENGTH /* @min:%2eidLength */] ? theConfig[_DYN_ID_LENGTH /* @min:%2eidLength */]() : 22);\r\n _self[_DYN_AUTOMATIC_SESSION /* @min:%2eautomaticSession */][_DYN_ACQUISITION_DATE /* @min:%2eacquisitionDate */] = nowMs;\r\n _setCookie(_self[_DYN_AUTOMATIC_SESSION /* @min:%2eautomaticSession */], nowMs);\r\n // If this browser does not support local storage, fire an internal log to keep track of it at this point\r\n if (!utlCanUseLocalStorage()) {\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 0 /* _eInternalMessageId.BrowserDoesNotSupportLocalStorage */, \"Browser does not support local storage. Session durations will be inaccurate.\");\r\n }\r\n }\r\n function _setCookie(session, nowMs) {\r\n var acq = session[_DYN_ACQUISITION_DATE /* @min:%2eacquisitionDate */];\r\n session[_DYN_RENEWAL_DATE /* @min:%2erenewalDate */] = nowMs;\r\n var config = _self[_DYN_CONFIG /* @min:%2econfig */];\r\n var renewalPeriodMs = config[_DYN_SESSION_RENEWAL_MS /* @min:%2esessionRenewalMs */]();\r\n // Set cookie to expire after the session expiry time passes or the session renewal deadline, whichever is sooner\r\n // Expiring the cookie will cause the session to expire even if the user isn't on the page\r\n var acqTimeLeftMs = (acq + config[_DYN_SESSION_EXPIRATION_M7 /* @min:%2esessionExpirationMs */]()) - nowMs;\r\n var cookie = [session.id, acq, nowMs];\r\n var maxAgeSec = 0;\r\n if (acqTimeLeftMs < renewalPeriodMs) {\r\n maxAgeSec = acqTimeLeftMs / 1000;\r\n }\r\n else {\r\n maxAgeSec = renewalPeriodMs / 1000;\r\n }\r\n var cookieDomain = config[_DYN_COOKIE_DOMAIN /* @min:%2ecookieDomain */] ? config[_DYN_COOKIE_DOMAIN /* @min:%2ecookieDomain */]() : null;\r\n // if sessionExpirationMs is set to 0, it means the expiry is set to 0 for this session cookie\r\n // A cookie with 0 expiry in the session cookie will never expire for that browser session. If the browser is closed the cookie expires.\r\n // Depending on the browser, another instance does not inherit this cookie, however, another tab will\r\n _cookieManager.set(_storageNamePrefix(), cookie.join(\"|\"), config[_DYN_SESSION_EXPIRATION_M7 /* @min:%2esessionExpirationMs */]() > 0 ? maxAgeSec : null, cookieDomain);\r\n _cookieUpdatedTimestamp = nowMs;\r\n }\r\n function _setStorage(guid, acq, renewal) {\r\n // Keep data in local storage to retain the last session id, allowing us to cleanly end the session when it expires\r\n // Browsers that don't support local storage won't be able to end sessions cleanly from the client\r\n // The server will notice this and end the sessions itself, with loss of accurate session duration\r\n utlSetLocalStorage(_logger, _storageNamePrefix(), [guid, acq, renewal][_DYN_JOIN /* @min:%2ejoin */](\"|\"));\r\n }\r\n });\r\n }\r\n// Removed Stub for _SessionManager.prototype.update.\r\n// Removed Stub for _SessionManager.prototype.backup.\r\n _SessionManager.acquisitionSpan = 86400000; // 24 hours in ms\r\n _SessionManager.renewalSpan = 1800000; // 30 minutes in ms\r\n _SessionManager.cookieUpdateInterval = 60000; // 1 minute in ms\r\n return _SessionManager;\r\n}());\r\nexport { _SessionManager };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport { dataSanitizeString } from \"@microsoft/applicationinsights-common\";\r\nimport { generateW3CId, getLocation } from \"@microsoft/applicationinsights-core-js\";\r\nvar TelemetryTrace = /** @class */ (function () {\r\n function TelemetryTrace(id, parentId, name, logger) {\r\n var _self = this;\r\n _self.traceID = id || generateW3CId();\r\n _self.parentID = parentId;\r\n var location = getLocation();\r\n if (!name && location && location.pathname) {\r\n name = location.pathname;\r\n }\r\n _self.name = dataSanitizeString(logger, name);\r\n }\r\n return TelemetryTrace;\r\n}());\r\nexport { TelemetryTrace };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { utlRemoveStorage } from \"@microsoft/applicationinsights-common\";\r\nimport { _throwInternal, newId, safeGetCookieMgr, safeGetLogger, toISOString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_ACCOUNT_ID, _DYN_AUTHENTICATED_ID, _DYN_AUTH_USER_COOKIE_NAM8, _DYN_CONFIG, _DYN_COOKIE_SEPARATOR, _DYN_GET_NEW_ID, _DYN_ID_LENGTH, _DYN_IS_NEW_USER, _DYN_IS_USER_COOKIE_SET, _DYN_JOIN, _DYN_LENGTH, _DYN_NAME_PREFIX, _DYN_UPDATE, _DYN_USER_COOKIE_POSTFIX } from \"../__DynamicConstants\";\r\nfunction _validateUserInput(id) {\r\n // Validate:\r\n // 1. Id is a non-empty string.\r\n // 2. It does not contain special characters for cookies.\r\n if (typeof id !== \"string\" ||\r\n !id ||\r\n id.match(/,|;|=| |\\|/)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nvar User = /** @class */ (function () {\r\n function User(config, core) {\r\n /**\r\n * A flag indicating whether this represents a new user\r\n */\r\n this.isNewUser = false;\r\n /**\r\n * A flag indicating whether the user cookie has been set\r\n */\r\n this.isUserCookieSet = false;\r\n var _logger = safeGetLogger(core);\r\n var _cookieManager = safeGetCookieMgr(core);\r\n var _storageNamePrefix;\r\n dynamicProto(User, this, function (_self) {\r\n _self[_DYN_CONFIG /* @min:%2econfig */] = config;\r\n var userCookiePostfix = (_self.config[_DYN_USER_COOKIE_POSTFIX /* @min:%2euserCookiePostfix */] && _self[_DYN_CONFIG /* @min:%2econfig */][_DYN_USER_COOKIE_POSTFIX /* @min:%2euserCookiePostfix */]()) ? _self[_DYN_CONFIG /* @min:%2econfig */][_DYN_USER_COOKIE_POSTFIX /* @min:%2euserCookiePostfix */]() : \"\";\r\n _storageNamePrefix = function () { return User.userCookieName + userCookiePostfix; };\r\n // get userId or create new one if none exists\r\n var cookie = _cookieManager.get(_storageNamePrefix());\r\n if (cookie) {\r\n _self[_DYN_IS_NEW_USER /* @min:%2eisNewUser */] = false;\r\n var params = cookie.split(User[_DYN_COOKIE_SEPARATOR /* @min:%2ecookieSeparator */]);\r\n if (params[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n _self.id = params[0];\r\n // we already have a cookie\r\n _self[_DYN_IS_USER_COOKIE_SET /* @min:%2eisUserCookieSet */] = !!_self.id;\r\n }\r\n }\r\n function _generateNewId() {\r\n var theConfig = (config || {});\r\n var getNewId = (theConfig[_DYN_GET_NEW_ID /* @min:%2egetNewId */] ? theConfig[_DYN_GET_NEW_ID /* @min:%2egetNewId */]() : null) || newId;\r\n var id = getNewId(theConfig[_DYN_ID_LENGTH /* @min:%2eidLength */] ? config[_DYN_ID_LENGTH /* @min:%2eidLength */]() : 22);\r\n return id;\r\n }\r\n function _generateNewCookie(userId) {\r\n var acqStr = toISOString(new Date());\r\n _self.accountAcquisitionDate = acqStr;\r\n _self[_DYN_IS_NEW_USER /* @min:%2eisNewUser */] = true;\r\n var newCookie = [userId, acqStr];\r\n return newCookie;\r\n }\r\n function _setUserCookie(cookie) {\r\n // without expiration, cookies expire at the end of the session\r\n // set it to 365 days from now\r\n // 365 * 24 * 60 * 60 = 31536000\r\n var oneYear = 31536000;\r\n _self[_DYN_IS_USER_COOKIE_SET /* @min:%2eisUserCookieSet */] = _cookieManager.set(_storageNamePrefix(), cookie, oneYear);\r\n }\r\n if (!_self.id) {\r\n _self.id = _generateNewId();\r\n var newCookie = _generateNewCookie(_self.id);\r\n _setUserCookie(newCookie[_DYN_JOIN /* @min:%2ejoin */](User[_DYN_COOKIE_SEPARATOR /* @min:%2ecookieSeparator */]));\r\n // If we have an config.namePrefix() + ai_session in local storage this means the user actively removed our cookies.\r\n // We should respect their wishes and clear ourselves from local storage\r\n var name_1 = config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */] && config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */]() ? config[_DYN_NAME_PREFIX /* @min:%2enamePrefix */]() + \"ai_session\" : \"ai_session\";\r\n utlRemoveStorage(_logger, name_1);\r\n }\r\n // We still take the account id from the ctor param for backward compatibility.\r\n // But if the the customer set the accountId through the newer setAuthenticatedUserContext API, we will override it.\r\n _self[_DYN_ACCOUNT_ID /* @min:%2eaccountId */] = config[_DYN_ACCOUNT_ID /* @min:%2eaccountId */] ? config[_DYN_ACCOUNT_ID /* @min:%2eaccountId */]() : undefined;\r\n // Get the auth user id and account id from the cookie if exists\r\n // Cookie is in the pattern: |\r\n var authCookie = _cookieManager.get(User[_DYN_AUTH_USER_COOKIE_NAM8 /* @min:%2eauthUserCookieName */]);\r\n if (authCookie) {\r\n authCookie = decodeURI(authCookie);\r\n var authCookieString = authCookie.split(User[_DYN_COOKIE_SEPARATOR /* @min:%2ecookieSeparator */]);\r\n if (authCookieString[0]) {\r\n _self[_DYN_AUTHENTICATED_ID /* @min:%2eauthenticatedId */] = authCookieString[0];\r\n }\r\n if (authCookieString[_DYN_LENGTH /* @min:%2elength */] > 1 && authCookieString[1]) {\r\n _self[_DYN_ACCOUNT_ID /* @min:%2eaccountId */] = authCookieString[1];\r\n }\r\n }\r\n _self.setAuthenticatedUserContext = function (authenticatedUserId, accountId, storeInCookie) {\r\n if (storeInCookie === void 0) { storeInCookie = false; }\r\n // Validate inputs to ensure no cookie control characters.\r\n var isInvalidInput = !_validateUserInput(authenticatedUserId) || (accountId && !_validateUserInput(accountId));\r\n if (isInvalidInput) {\r\n _throwInternal(_logger, 2 /* eLoggingSeverity.WARNING */, 60 /* _eInternalMessageId.SetAuthContextFailedAccountName */, \"Setting auth user context failed. \" +\r\n \"User auth/account id should be of type string, and not contain commas, semi-colons, equal signs, spaces, or vertical-bars.\", true);\r\n return;\r\n }\r\n // Create cookie string.\r\n _self[_DYN_AUTHENTICATED_ID /* @min:%2eauthenticatedId */] = authenticatedUserId;\r\n var authCookie = _self[_DYN_AUTHENTICATED_ID /* @min:%2eauthenticatedId */];\r\n if (accountId) {\r\n _self[_DYN_ACCOUNT_ID /* @min:%2eaccountId */] = accountId;\r\n authCookie = [_self[_DYN_AUTHENTICATED_ID /* @min:%2eauthenticatedId */], _self.accountId][_DYN_JOIN /* @min:%2ejoin */](User[_DYN_COOKIE_SEPARATOR /* @min:%2ecookieSeparator */]);\r\n }\r\n if (storeInCookie) {\r\n // Set the cookie. No expiration date because this is a session cookie (expires when browser closed).\r\n // Encoding the cookie to handle unexpected unicode characters.\r\n _cookieManager.set(User[_DYN_AUTH_USER_COOKIE_NAM8 /* @min:%2eauthUserCookieName */], encodeURI(authCookie));\r\n }\r\n };\r\n /**\r\n * Clears the authenticated user id and the account id from the user context.\r\n * @returns {}\r\n */\r\n _self.clearAuthenticatedUserContext = function () {\r\n _self[_DYN_AUTHENTICATED_ID /* @min:%2eauthenticatedId */] = null;\r\n _self[_DYN_ACCOUNT_ID /* @min:%2eaccountId */] = null;\r\n _cookieManager.del(User[_DYN_AUTH_USER_COOKIE_NAM8 /* @min:%2eauthUserCookieName */]);\r\n };\r\n _self[_DYN_UPDATE /* @min:%2eupdate */] = function (userId) {\r\n // Optimizations to avoid setting and processing the cookie when not needed\r\n if (_self.id !== userId || !_self[_DYN_IS_USER_COOKIE_SET /* @min:%2eisUserCookieSet */]) {\r\n var user_id = userId ? userId : _generateNewId();\r\n var user_cookie = _generateNewCookie(user_id);\r\n _setUserCookie(user_cookie[_DYN_JOIN /* @min:%2ejoin */](User[_DYN_COOKIE_SEPARATOR /* @min:%2ecookieSeparator */]));\r\n }\r\n };\r\n });\r\n }\r\n// Removed Stub for User.prototype.setAuthenticatedUserContext.\r\n// Removed Stub for User.prototype.clearAuthenticatedUserContext.\r\n// Removed Stub for User.prototype.update.\r\n User.cookieSeparator = \"|\";\r\n User.userCookieName = \"ai_user\";\r\n User.authUserCookieName = \"ai_authUser\";\r\n return User;\r\n}());\r\nexport { User };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n/**\r\n* TelemetryContext.ts\r\n* @copyright Microsoft 2018\r\n*/\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { CtxTagKeys, Extensions, PageView, dataSanitizeString } from \"@microsoft/applicationinsights-common\";\r\nimport { _InternalLogMessage, getSetValue, hasWindow, isNullOrUndefined, isString, objKeys, setValue } from \"@microsoft/applicationinsights-core-js\";\r\nimport { Application } from \"./Context/Application\";\r\nimport { Device } from \"./Context/Device\";\r\nimport { Internal } from \"./Context/Internal\";\r\nimport { Location } from \"./Context/Location\";\r\nimport { Session, _SessionManager } from \"./Context/Session\";\r\nimport { TelemetryTrace } from \"./Context/TelemetryTrace\";\r\nimport { User } from \"./Context/User\";\r\nimport { _DYN_ACCOUNT_ID, _DYN_APPLY_APPLICATION_CO1, _DYN_APPLY_DEVICE_CONTEXT, _DYN_APPLY_INTERNAL_CONTE5, _DYN_APPLY_LOCATION_CONTE4, _DYN_APPLY_OPERATING_SYST3, _DYN_APPLY_OPERATION_CONT2, _DYN_APPLY_SESSION_CONTEX0, _DYN_APPLY_USER_CONTEXT, _DYN_AUTHENTICATED_ID, _DYN_AUTOMATIC_SESSION, _DYN_GET_SESSION_ID, _DYN_LENGTH, _DYN_SESSION_MANAGER, _DYN_TELEMETRY_TRACE } from \"./__DynamicConstants\";\r\nvar strExt = \"ext\";\r\nvar strTags = \"tags\";\r\nfunction _removeEmpty(target, name) {\r\n if (target && target[name] && objKeys(target[name])[_DYN_LENGTH /* @min:%2elength */] === 0) {\r\n delete target[name];\r\n }\r\n}\r\nvar TelemetryContext = /** @class */ (function () {\r\n function TelemetryContext(core, defaultConfig, previousTraceCtx) {\r\n var _this = this;\r\n var logger = core.logger;\r\n this.appId = function () { return null; };\r\n this[_DYN_GET_SESSION_ID /* @min:%2egetSessionId */] = function () { return null; };\r\n dynamicProto(TelemetryContext, this, function (_self) {\r\n _self.application = new Application();\r\n _self.internal = new Internal(defaultConfig);\r\n if (hasWindow()) {\r\n _self[_DYN_SESSION_MANAGER /* @min:%2esessionManager */] = new _SessionManager(defaultConfig, core);\r\n _self.device = new Device();\r\n _self.location = new Location();\r\n _self.user = new User(defaultConfig, core);\r\n var traceId = void 0;\r\n var parentId = void 0;\r\n var name_1;\r\n if (previousTraceCtx) {\r\n traceId = previousTraceCtx.getTraceId();\r\n parentId = previousTraceCtx.getSpanId();\r\n name_1 = previousTraceCtx.getName();\r\n }\r\n _self[_DYN_TELEMETRY_TRACE /* @min:%2etelemetryTrace */] = new TelemetryTrace(traceId, parentId, name_1, logger);\r\n _self.session = new Session();\r\n }\r\n _self[_DYN_GET_SESSION_ID /* @min:%2egetSessionId */] = function () {\r\n var session = _self.session;\r\n var sesId = null;\r\n // If customer set session info, apply their context; otherwise apply context automatically generated\r\n if (session && isString(session.id)) {\r\n sesId = session.id;\r\n }\r\n else {\r\n // Gets the automatic session if it exists or an empty object\r\n var autoSession = (_self[_DYN_SESSION_MANAGER /* @min:%2esessionManager */] || {})[_DYN_AUTOMATIC_SESSION /* @min:%2eautomaticSession */];\r\n sesId = autoSession && isString(autoSession.id) ? autoSession.id : null;\r\n }\r\n return sesId;\r\n };\r\n _self[_DYN_APPLY_SESSION_CONTEX0 /* @min:%2eapplySessionContext */] = function (evt, itemCtx) {\r\n setValue(getSetValue(evt.ext, Extensions.AppExt), \"sesId\", _self[_DYN_GET_SESSION_ID /* @min:%2egetSessionId */](), isString);\r\n };\r\n _self[_DYN_APPLY_OPERATING_SYST3 /* @min:%2eapplyOperatingSystemContxt */] = function (evt, itemCtx) {\r\n setValue(evt.ext, Extensions.OSExt, _self.os);\r\n };\r\n _self[_DYN_APPLY_APPLICATION_CO1 /* @min:%2eapplyApplicationContext */] = function (evt, itemCtx) {\r\n var application = _self.application;\r\n if (application) {\r\n // evt.ext.app\r\n var tags = getSetValue(evt, strTags);\r\n setValue(tags, CtxTagKeys.applicationVersion, application.ver, isString);\r\n setValue(tags, CtxTagKeys.applicationBuild, application.build, isString);\r\n }\r\n };\r\n _self[_DYN_APPLY_DEVICE_CONTEXT /* @min:%2eapplyDeviceContext */] = function (evt, itemCtx) {\r\n var device = _self.device;\r\n if (device) {\r\n // evt.ext.device\r\n var extDevice = getSetValue(getSetValue(evt, strExt), Extensions.DeviceExt);\r\n setValue(extDevice, \"localId\", device.id, isString);\r\n setValue(extDevice, \"ip\", device.ip, isString);\r\n setValue(extDevice, \"model\", device.model, isString);\r\n setValue(extDevice, \"deviceClass\", device.deviceClass, isString);\r\n }\r\n };\r\n _self[_DYN_APPLY_INTERNAL_CONTE5 /* @min:%2eapplyInternalContext */] = function (evt, itemCtx) {\r\n var internal = _self.internal;\r\n if (internal) {\r\n var tags = getSetValue(evt, strTags);\r\n setValue(tags, CtxTagKeys.internalAgentVersion, internal.agentVersion, isString); // not mapped in CS 4.0\r\n setValue(tags, CtxTagKeys.internalSdkVersion, dataSanitizeString(logger, internal.sdkVersion, 64), isString);\r\n if (evt.baseType === _InternalLogMessage.dataType || evt.baseType === PageView.dataType) {\r\n setValue(tags, CtxTagKeys.internalSnippet, internal.snippetVer, isString);\r\n setValue(tags, CtxTagKeys.internalSdkSrc, internal.sdkSrc, isString);\r\n }\r\n }\r\n };\r\n _self[_DYN_APPLY_LOCATION_CONTE4 /* @min:%2eapplyLocationContext */] = function (evt, itemCtx) {\r\n var location = _this.location;\r\n if (location) {\r\n setValue(getSetValue(evt, strTags, []), CtxTagKeys.locationIp, location.ip, isString);\r\n }\r\n };\r\n _self[_DYN_APPLY_OPERATION_CONT2 /* @min:%2eapplyOperationContext */] = function (evt, itemCtx) {\r\n var telemetryTrace = _self[_DYN_TELEMETRY_TRACE /* @min:%2etelemetryTrace */];\r\n if (telemetryTrace) {\r\n var extTrace = getSetValue(getSetValue(evt, strExt), Extensions.TraceExt, { traceID: undefined, parentID: undefined });\r\n setValue(extTrace, \"traceID\", telemetryTrace.traceID, isString, isNullOrUndefined);\r\n setValue(extTrace, \"name\", telemetryTrace.name, isString, isNullOrUndefined);\r\n setValue(extTrace, \"parentID\", telemetryTrace.parentID, isString, isNullOrUndefined);\r\n }\r\n };\r\n _self.applyWebContext = function (evt, itemCtx) {\r\n var web = _this.web;\r\n if (web) {\r\n setValue(getSetValue(evt, strExt), Extensions.WebExt, web);\r\n }\r\n };\r\n _self[_DYN_APPLY_USER_CONTEXT /* @min:%2eapplyUserContext */] = function (evt, itemCtx) {\r\n var user = _self.user;\r\n if (user) {\r\n var tags = getSetValue(evt, strTags, []);\r\n // stays in tags\r\n setValue(tags, CtxTagKeys.userAccountId, user[_DYN_ACCOUNT_ID /* @min:%2eaccountId */], isString);\r\n // CS 4.0\r\n var extUser = getSetValue(getSetValue(evt, strExt), Extensions.UserExt);\r\n setValue(extUser, \"id\", user.id, isString);\r\n setValue(extUser, \"authId\", user[_DYN_AUTHENTICATED_ID /* @min:%2eauthenticatedId */], isString);\r\n }\r\n };\r\n _self.cleanUp = function (evt, itemCtx) {\r\n var ext = evt.ext;\r\n if (ext) {\r\n _removeEmpty(ext, Extensions.DeviceExt);\r\n _removeEmpty(ext, Extensions.UserExt);\r\n _removeEmpty(ext, Extensions.WebExt);\r\n _removeEmpty(ext, Extensions.OSExt);\r\n _removeEmpty(ext, Extensions.AppExt);\r\n _removeEmpty(ext, Extensions.TraceExt);\r\n }\r\n };\r\n });\r\n }\r\n// Removed Stub for TelemetryContext.prototype.applySessionContext.\r\n// Removed Stub for TelemetryContext.prototype.applyOperatingSystemContxt.\r\n// Removed Stub for TelemetryContext.prototype.applyApplicationContext.\r\n// Removed Stub for TelemetryContext.prototype.applyDeviceContext.\r\n// Removed Stub for TelemetryContext.prototype.applyInternalContext.\r\n// Removed Stub for TelemetryContext.prototype.applyLocationContext.\r\n// Removed Stub for TelemetryContext.prototype.applyOperationContext.\r\n// Removed Stub for TelemetryContext.prototype.applyWebContext.\r\n// Removed Stub for TelemetryContext.prototype.applyUserContext.\r\n// Removed Stub for TelemetryContext.prototype.cleanUp.\r\n // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any\n // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.\n // this will be removed when ES3 support is dropped.\n TelemetryContext.__ieDyn=1;\n\n return TelemetryContext;\r\n}());\r\nexport { TelemetryContext };\r\n","/*\n * Application Insights JavaScript SDK - Properties Plugin, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n/**\r\n* PropertiesPlugin.ts\r\n* @copyright Microsoft 2018\r\n*/\r\nimport { __extendsFn as __extends } from \"@microsoft/applicationinsights-shims\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { BreezeChannelIdentifier, PageView, PropertiesPluginIdentifier, createDistributedTraceContextFromTrace, utlSetStoragePrefix } from \"@microsoft/applicationinsights-common\";\r\nimport { BaseTelemetryPlugin, _InternalLogMessage, _logInternalMessage, createProcessTelemetryContext, getNavigator, getSetValue, isNullOrUndefined, objForEachKey } from \"@microsoft/applicationinsights-core-js\";\r\nimport { TelemetryContext } from \"./TelemetryContext\";\r\nimport { _DYN_ACCOUNT_ID, _DYN_APPLY_APPLICATION_CO1, _DYN_APPLY_DEVICE_CONTEXT, _DYN_APPLY_INTERNAL_CONTE5, _DYN_APPLY_LOCATION_CONTE4, _DYN_APPLY_OPERATING_SYST3, _DYN_APPLY_OPERATION_CONT2, _DYN_APPLY_SESSION_CONTEX0, _DYN_APPLY_USER_CONTEXT, _DYN_COOKIE_DOMAIN, _DYN_GET_NEW_ID, _DYN_GET_SESSION_ID, _DYN_GET_TRACE_CTX, _DYN_ID_LENGTH, _DYN_IS_NEW_USER, _DYN_IS_USER_COOKIE_SET, _DYN_NAME_PREFIX, _DYN_SDK_EXTENSION, _DYN_SESSION_COOKIE_POSTF6, _DYN_SESSION_MANAGER, _DYN_TELEMETRY_TRACE, _DYN_UPDATE, _DYN_USER_COOKIE_POSTFIX } from \"./__DynamicConstants\";\r\nvar PropertiesPlugin = /** @class */ (function (_super) {\r\n __extends(PropertiesPlugin, _super);\r\n function PropertiesPlugin() {\r\n var _this = _super.call(this) || this;\r\n _this.priority = 110;\r\n _this.identifier = PropertiesPluginIdentifier;\r\n var _extensionConfig;\r\n var _distributedTraceCtx;\r\n var _previousTraceCtx;\r\n dynamicProto(PropertiesPlugin, _this, function (_self, _base) {\r\n _initDefaults();\r\n _self.initialize = function (config, core, extensions, pluginChain) {\r\n _base.initialize(config, core, extensions, pluginChain);\r\n _populateDefaults(config);\r\n };\r\n /**\r\n * Add Part A fields to the event\r\n * @param event The event that needs to be processed\r\n */\r\n _self.processTelemetry = function (event, itemCtx) {\r\n if (isNullOrUndefined(event)) {\r\n // TODO(barustum): throw an internal event once we have support for internal logging\r\n }\r\n else {\r\n itemCtx = _self._getTelCtx(itemCtx);\r\n // If the envelope is PageView, reset the internal message count so that we can send internal telemetry for the new page.\r\n if (event.name === PageView.envelopeType) {\r\n itemCtx.diagLog().resetInternalMessageCount();\r\n }\r\n var theContext = (_self.context || {});\r\n if (theContext.session) {\r\n // If customer did not provide custom session id update the session manager\r\n if (typeof _self.context.session.id !== \"string\" && theContext[_DYN_SESSION_MANAGER /* @min:%2esessionManager */]) {\r\n theContext[_DYN_SESSION_MANAGER /* @min:%2esessionManager */][_DYN_UPDATE /* @min:%2eupdate */]();\r\n }\r\n }\r\n var userCtx = theContext.user;\r\n if (userCtx && !userCtx[_DYN_IS_USER_COOKIE_SET /* @min:%2eisUserCookieSet */]) {\r\n userCtx[_DYN_UPDATE /* @min:%2eupdate */](theContext.user.id);\r\n }\r\n _processTelemetryInternal(event, itemCtx);\r\n if (userCtx && userCtx[_DYN_IS_NEW_USER /* @min:%2eisNewUser */]) {\r\n userCtx[_DYN_IS_NEW_USER /* @min:%2eisNewUser */] = false;\r\n var message = new _InternalLogMessage(72 /* _eInternalMessageId.SendBrowserInfoOnUserInit */, ((getNavigator() || {}).userAgent || \"\"));\r\n _logInternalMessage(itemCtx.diagLog(), 1 /* eLoggingSeverity.CRITICAL */, message);\r\n }\r\n _self.processNext(event, itemCtx);\r\n }\r\n };\r\n _self._doTeardown = function (unloadCtx, unloadState) {\r\n var core = (unloadCtx || {}).core();\r\n if (core && core[_DYN_GET_TRACE_CTX /* @min:%2egetTraceCtx */]) {\r\n var traceCtx = core[_DYN_GET_TRACE_CTX /* @min:%2egetTraceCtx */](false);\r\n if (traceCtx === _distributedTraceCtx) {\r\n core.setTraceCtx(_previousTraceCtx);\r\n }\r\n }\r\n _initDefaults();\r\n };\r\n function _initDefaults() {\r\n _extensionConfig = null;\r\n _distributedTraceCtx = null;\r\n _previousTraceCtx = null;\r\n }\r\n function _populateDefaults(config) {\r\n var identifier = _self.identifier;\r\n var core = _self.core;\r\n var ctx = createProcessTelemetryContext(null, config, core);\r\n var defaultConfig = PropertiesPlugin.getDefaultConfig();\r\n _extensionConfig = _extensionConfig || {};\r\n objForEachKey(defaultConfig, function (field, value) {\r\n _extensionConfig[field] = function () { return ctx.getConfig(identifier, field, value()); };\r\n });\r\n if (config.storagePrefix) {\r\n utlSetStoragePrefix(config.storagePrefix);\r\n }\r\n _previousTraceCtx = core[_DYN_GET_TRACE_CTX /* @min:%2egetTraceCtx */](false);\r\n _self.context = new TelemetryContext(core, _extensionConfig, _previousTraceCtx);\r\n _distributedTraceCtx = createDistributedTraceContextFromTrace(_self.context[_DYN_TELEMETRY_TRACE /* @min:%2etelemetryTrace */], _previousTraceCtx);\r\n core.setTraceCtx(_distributedTraceCtx);\r\n _self.context.appId = function () {\r\n var breezeChannel = core.getPlugin(BreezeChannelIdentifier);\r\n return breezeChannel ? breezeChannel.plugin[\"_appId\"] : null;\r\n };\r\n // Test hook to allow accessing the internal values -- explicitly not defined as an available property on the class\r\n _self[\"_extConfig\"] = _extensionConfig;\r\n }\r\n function _processTelemetryInternal(evt, itemCtx) {\r\n // Set Part A fields\r\n getSetValue(evt, \"tags\", []);\r\n getSetValue(evt, \"ext\", {});\r\n var ctx = _self.context;\r\n ctx[_DYN_APPLY_SESSION_CONTEX0 /* @min:%2eapplySessionContext */](evt, itemCtx);\r\n ctx[_DYN_APPLY_APPLICATION_CO1 /* @min:%2eapplyApplicationContext */](evt, itemCtx);\r\n ctx[_DYN_APPLY_DEVICE_CONTEXT /* @min:%2eapplyDeviceContext */](evt, itemCtx);\r\n ctx[_DYN_APPLY_OPERATION_CONT2 /* @min:%2eapplyOperationContext */](evt, itemCtx);\r\n ctx[_DYN_APPLY_USER_CONTEXT /* @min:%2eapplyUserContext */](evt, itemCtx);\r\n ctx[_DYN_APPLY_OPERATING_SYST3 /* @min:%2eapplyOperatingSystemContxt */](evt, itemCtx);\r\n ctx.applyWebContext(evt, itemCtx);\r\n ctx[_DYN_APPLY_LOCATION_CONTE4 /* @min:%2eapplyLocationContext */](evt, itemCtx); // legacy tags\r\n ctx[_DYN_APPLY_INTERNAL_CONTE5 /* @min:%2eapplyInternalContext */](evt, itemCtx); // legacy tags\r\n ctx.cleanUp(evt, itemCtx);\r\n }\r\n });\r\n return _this;\r\n }\r\n PropertiesPlugin.getDefaultConfig = function () {\r\n var _a;\r\n var defaultValue;\r\n var nullValue = null;\r\n var defaultConfig = (_a = {\r\n instrumentationKey: function () { return defaultValue; }\r\n },\r\n _a[_DYN_ACCOUNT_ID /* @min:accountId */] = function () { return nullValue; },\r\n _a.sessionRenewalMs = function () { return 30 * 60 * 1000; },\r\n _a.samplingPercentage = function () { return 100; },\r\n _a.sessionExpirationMs = function () { return 24 * 60 * 60 * 1000; },\r\n _a[_DYN_COOKIE_DOMAIN /* @min:cookieDomain */] = function () { return nullValue; },\r\n _a[_DYN_SDK_EXTENSION /* @min:sdkExtension */] = function () { return nullValue; },\r\n _a.isBrowserLinkTrackingEnabled = function () { return false; },\r\n _a.appId = function () { return nullValue; },\r\n _a[_DYN_GET_SESSION_ID /* @min:getSessionId */] = function () { return nullValue; },\r\n _a[_DYN_NAME_PREFIX /* @min:namePrefix */] = function () { return defaultValue; },\r\n _a[_DYN_SESSION_COOKIE_POSTF6 /* @min:sessionCookiePostfix */] = function () { return defaultValue; },\r\n _a[_DYN_USER_COOKIE_POSTFIX /* @min:userCookiePostfix */] = function () { return defaultValue; },\r\n _a[_DYN_ID_LENGTH /* @min:idLength */] = function () { return 22; },\r\n _a[_DYN_GET_NEW_ID /* @min:getNewId */] = function () { return nullValue; },\r\n _a);\r\n return defaultConfig;\r\n };\r\n// Removed Stub for PropertiesPlugin.prototype.initialize.\r\n// Removed Stub for PropertiesPlugin.prototype.processTelemetry.\r\n return PropertiesPlugin;\r\n}(BaseTelemetryPlugin));\r\nexport default PropertiesPlugin;\r\n","/*\n * Application Insights JavaScript SDK - Web, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Generally you should only put values that are used more than 2 times and then only if not already exposed as a constant (such as SdkCoreNames)\r\n// as when using \"short\" named values from here they will be will be minified smaller than the SdkCoreNames[eSdkCoreNames.xxxx] value.\r\nvar _AUTHENTICATED_USER_CONTEXT = \"AuthenticatedUserContext\";\r\nvar _TRACK = \"track\";\r\nexport var STR_EMPTY = \"\";\r\nexport var STR_SNIPPET = \"snippet\";\r\nexport var STR_GET_COOKIE_MGR = \"getCookieMgr\";\r\nexport var STR_START_TRACK_PAGE = \"startTrackPage\";\r\nexport var STR_STOP_TRACK_PAGE = \"stopTrackPage\";\r\nexport var STR_FLUSH = \"flush\";\r\nexport var STR_START_TRACK_EVENT = \"startTrackEvent\";\r\nexport var STR_STOP_TRACK_EVENT = \"stopTrackEvent\";\r\nexport var STR_ADD_TELEMETRY_INITIALIZER = \"addTelemetryInitializer\";\r\nexport var STR_ADD_TELEMETRY_INITIALIZERS = STR_ADD_TELEMETRY_INITIALIZER + \"s\";\r\nexport var STR_POLL_INTERNAL_LOGS = \"pollInternalLogs\";\r\nexport var STR_GET_PLUGIN = \"getPlugin\";\r\nexport var STR_EVT_NAMESPACE = \"evtNamespace\";\r\nexport var STR_TRACK_EVENT = _TRACK + \"Event\";\r\nexport var STR_TRACK_TRACE = _TRACK + \"Trace\";\r\nexport var STR_TRACK_METRIC = _TRACK + \"Metric\";\r\nexport var STR_TRACK_PAGE_VIEW = _TRACK + \"PageView\";\r\nexport var STR_TRACK_EXCEPTION = _TRACK + \"Exception\";\r\nexport var STR_TRACK_DEPENDENCY_DATA = _TRACK + \"DependencyData\";\r\nexport var STR_SET_AUTHENTICATED_USER_CONTEXT = \"set\" + _AUTHENTICATED_USER_CONTEXT;\r\nexport var STR_CLEAR_AUTHENTICATED_USER_CONTEXT = \"clear\" + _AUTHENTICATED_USER_CONTEXT;\r\n","/*\n * Application Insights JavaScript SDK - Web, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n\"use strict\";\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { AnalyticsPlugin } from \"@microsoft/applicationinsights-analytics-js\";\r\nimport { Sender } from \"@microsoft/applicationinsights-channel-js\";\r\nimport { AnalyticsPluginIdentifier, BreezeChannelIdentifier, ConfigurationManager, ConnectionStringParser, ContextTagKeys, CorrelationIdHelper, CtxTagKeys, DEFAULT_BREEZE_ENDPOINT, DEFAULT_BREEZE_PATH, Data, DataSanitizer, DateTimeUtils, DisabledPropertyName, DistributedTracingModes, Envelope, Event, Exception, Extensions, HttpMethod, Metric, PageView, PageViewPerformance, ProcessLegacy, PropertiesPluginIdentifier, RemoteDependencyData, RequestHeaders, SampleRate, SeverityLevel, TelemetryItemCreator, Trace, UrlHelper, Util, parseConnectionString } from \"@microsoft/applicationinsights-common\";\r\nimport { AppInsightsCore, _throwInternal, addPageHideEventListener, addPageUnloadEventListener, arrForEach, arrIndexOf, createUniqueNamespace, doPerf, hasDocument, hasWindow, isArray, isFunction, isNullOrUndefined, isReactNative, isString, mergeEvtNamespace, objForEachKey, proxyAssign, proxyFunctions, removePageHideEventListener, removePageUnloadEventListener, throwError } from \"@microsoft/applicationinsights-core-js\";\r\nimport { AjaxPlugin as DependenciesPlugin } from \"@microsoft/applicationinsights-dependencies-js\";\r\nimport { PropertiesPlugin } from \"@microsoft/applicationinsights-properties-js\";\r\nimport { STR_ADD_TELEMETRY_INITIALIZER, STR_CLEAR_AUTHENTICATED_USER_CONTEXT, STR_EVT_NAMESPACE, STR_FLUSH, STR_GET_COOKIE_MGR, STR_GET_PLUGIN, STR_POLL_INTERNAL_LOGS, STR_SET_AUTHENTICATED_USER_CONTEXT, STR_SNIPPET, STR_START_TRACK_EVENT, STR_START_TRACK_PAGE, STR_STOP_TRACK_EVENT, STR_STOP_TRACK_PAGE, STR_TRACK_DEPENDENCY_DATA, STR_TRACK_EVENT, STR_TRACK_EXCEPTION, STR_TRACK_METRIC, STR_TRACK_PAGE_VIEW, STR_TRACK_TRACE } from \"./InternalConstants\";\r\nimport { _DYN_ADD_HOUSEKEEPING_BEF20, _DYN_APP_INSIGHTS, _DYN_CONFIG, _DYN_CONNECTION_STRING, _DYN_CONTEXT, _DYN_DIAGNOSTIC_LOG_INTER4, _DYN_DISABLE_FLUSH_ON_BEF11, _DYN_DISABLE_FLUSH_ON_UNL12, _DYN_DISABLE_IKEY_DEPRECA18, _DYN_ENDPOINT_URL, _DYN_GET_TRANSMISSION_CON19, _DYN_INDEX_OF, _DYN_INSTRUMENTATION_KEY, _DYN_LOAD_APP_INSIGHTS, _DYN_ONUNLOAD_FLUSH, _DYN_PUSH, _DYN_QUEUE, _DYN_UPDATE_SNIPPET_DEFIN0, _DYN_VERSION } from \"./__DynamicConstants\";\r\nvar _internalSdkSrc;\r\n// This is an exclude list of properties that should not be updated during initialization\r\n// They include a combination of private and internal property names\r\nvar _ignoreUpdateSnippetProperties = [\r\n STR_SNIPPET, \"dependencies\", \"properties\", \"_snippetVersion\", \"appInsightsNew\", \"getSKUDefaults\"\r\n];\r\n// Re-exposing the Common classes as Telemetry, the list was taken by reviewing the generated code for the build while using\r\n// the previous configuration :-\r\n// import * as Common from \"@microsoft/applicationinsights-common\"\r\n// export const Telemetry = Common;\r\nvar fieldType = {\r\n Default: 0 /* FieldType.Default */,\r\n Required: 1 /* FieldType.Required */,\r\n Array: 2 /* FieldType.Array */,\r\n Hidden: 4 /* FieldType.Hidden */\r\n};\r\n/**\r\n * Telemetry type classes, e.g. PageView, Exception, etc\r\n */\r\nexport var Telemetry = {\r\n __proto__: null,\r\n PropertiesPluginIdentifier: PropertiesPluginIdentifier,\r\n BreezeChannelIdentifier: BreezeChannelIdentifier,\r\n AnalyticsPluginIdentifier: AnalyticsPluginIdentifier,\r\n Util: Util,\r\n CorrelationIdHelper: CorrelationIdHelper,\r\n UrlHelper: UrlHelper,\r\n DateTimeUtils: DateTimeUtils,\r\n ConnectionStringParser: ConnectionStringParser,\r\n FieldType: fieldType,\r\n RequestHeaders: RequestHeaders,\r\n DisabledPropertyName: DisabledPropertyName,\r\n ProcessLegacy: ProcessLegacy,\r\n SampleRate: SampleRate,\r\n HttpMethod: HttpMethod,\r\n DEFAULT_BREEZE_ENDPOINT: DEFAULT_BREEZE_ENDPOINT,\r\n Envelope: Envelope,\r\n Event: Event,\r\n Exception: Exception,\r\n Metric: Metric,\r\n PageView: PageView,\r\n RemoteDependencyData: RemoteDependencyData,\r\n Trace: Trace,\r\n PageViewPerformance: PageViewPerformance,\r\n Data: Data,\r\n SeverityLevel: SeverityLevel,\r\n ConfigurationManager: ConfigurationManager,\r\n ContextTagKeys: ContextTagKeys,\r\n DataSanitizer: DataSanitizer,\r\n TelemetryItemCreator: TelemetryItemCreator,\r\n CtxTagKeys: CtxTagKeys,\r\n Extensions: Extensions,\r\n DistributedTracingModes: DistributedTracingModes\r\n};\r\n/**\r\n * Application Insights API\r\n * @class Initialization\r\n * @implements {IApplicationInsights}\r\n */\r\nvar Initialization = /** @class */ (function () {\r\n function Initialization(snippet) {\r\n var _this = this;\r\n // NOTE!: DON'T set default values here, instead set them in the _initDefaults() function as it is also called during teardown()\r\n var dependencies;\r\n var properties;\r\n var _sender;\r\n var _snippetVersion;\r\n var _evtNamespace;\r\n var _houseKeepingNamespace;\r\n var _core;\r\n dynamicProto(Initialization, this, function (_self) {\r\n _initDefaults();\r\n // initialize the queue and config in case they are undefined\r\n _snippetVersion = \"\" + (snippet.sv || snippet[_DYN_VERSION /* @min:%2eversion */] || \"\");\r\n snippet[_DYN_QUEUE /* @min:%2equeue */] = snippet[_DYN_QUEUE /* @min:%2equeue */] || [];\r\n snippet[_DYN_VERSION /* @min:%2eversion */] = snippet[_DYN_VERSION /* @min:%2eversion */] || 2.0; // Default to new version\r\n var config = snippet[_DYN_CONFIG /* @min:%2econfig */] || {};\r\n if (config[_DYN_CONNECTION_STRING /* @min:%2econnectionString */]) {\r\n var cs = parseConnectionString(config[_DYN_CONNECTION_STRING /* @min:%2econnectionString */]);\r\n var ingest = cs.ingestionendpoint;\r\n config[_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */] = ingest ? (ingest + DEFAULT_BREEZE_PATH) : config[_DYN_ENDPOINT_URL /* @min:%2eendpointUrl */]; // only add /v2/track when from connectionstring\r\n config[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */] = cs.instrumentationkey || config[_DYN_INSTRUMENTATION_KEY /* @min:%2einstrumentationKey */];\r\n }\r\n _self[_DYN_APP_INSIGHTS /* @min:%2eappInsights */] = new AnalyticsPlugin();\r\n properties = new PropertiesPlugin();\r\n dependencies = new DependenciesPlugin();\r\n _sender = new Sender();\r\n _core = new AppInsightsCore();\r\n _self.core = _core;\r\n var isErrMessageDisabled = isNullOrUndefined(config[_DYN_DISABLE_IKEY_DEPRECA18 /* @min:%2edisableIkeyDeprecationMessage */]) ? true : config[_DYN_DISABLE_IKEY_DEPRECA18 /* @min:%2edisableIkeyDeprecationMessage */];\r\n if (!config[_DYN_CONNECTION_STRING /* @min:%2econnectionString */] && !isErrMessageDisabled) {\r\n _throwInternal(_core.logger, 1 /* eLoggingSeverity.CRITICAL */, 106 /* _eInternalMessageId.InstrumentationKeyDeprecation */, \"Instrumentation key support will end soon, see aka.ms/IkeyMigrate\");\r\n }\r\n _self[STR_SNIPPET /* @min:%2esnippet */] = snippet;\r\n _self[_DYN_CONFIG /* @min:%2econfig */] = config;\r\n _getSKUDefaults();\r\n _self[STR_FLUSH /* @min:%2eflush */] = function (async) {\r\n if (async === void 0) { async = true; }\r\n doPerf(_core, function () { return \"AISKU.flush\"; }, function () {\r\n arrForEach(_core[_DYN_GET_TRANSMISSION_CON19 /* @min:%2egetTransmissionControls */](), function (channels) {\r\n arrForEach(channels, function (channel) {\r\n channel[STR_FLUSH /* @min:%2eflush */](async);\r\n });\r\n });\r\n }, null, async);\r\n };\r\n _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */] = function (async) {\r\n if (async === void 0) { async = true; }\r\n arrForEach(_core[_DYN_GET_TRANSMISSION_CON19 /* @min:%2egetTransmissionControls */](), function (channels) {\r\n arrForEach(channels, function (channel) {\r\n if (channel[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */]) {\r\n channel[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */]();\r\n }\r\n else {\r\n channel[STR_FLUSH /* @min:%2eflush */](async);\r\n }\r\n });\r\n });\r\n };\r\n _self[_DYN_LOAD_APP_INSIGHTS /* @min:%2eloadAppInsights */] = function (legacyMode, logger, notificationManager) {\r\n if (legacyMode === void 0) { legacyMode = false; }\r\n function _updateSnippetProperties(snippet) {\r\n if (snippet) {\r\n var snippetVer = \"\";\r\n if (!isNullOrUndefined(_snippetVersion)) {\r\n snippetVer += _snippetVersion;\r\n }\r\n if (legacyMode) {\r\n snippetVer += \".lg\";\r\n }\r\n if (_self[_DYN_CONTEXT /* @min:%2econtext */] && _self[_DYN_CONTEXT /* @min:%2econtext */].internal) {\r\n _self[_DYN_CONTEXT /* @min:%2econtext */].internal.snippetVer = snippetVer || \"-\";\r\n }\r\n // apply updated properties to the global instance (snippet)\r\n objForEachKey(_self, function (field, value) {\r\n if (isString(field) &&\r\n !isFunction(value) &&\r\n field && field[0] !== \"_\" && // Don't copy \"internal\" values\r\n arrIndexOf(_ignoreUpdateSnippetProperties, field) === -1) {\r\n snippet[field] = value;\r\n }\r\n });\r\n }\r\n }\r\n // dont allow additional channels/other extensions for legacy mode; legacy mode is only to allow users to switch with no code changes!\r\n if (legacyMode && _self[_DYN_CONFIG /* @min:%2econfig */].extensions && _self[_DYN_CONFIG /* @min:%2econfig */].extensions.length > 0) {\r\n throwError(\"Extensions not allowed in legacy mode\");\r\n }\r\n doPerf(_self.core, function () { return \"AISKU.loadAppInsights\"; }, function () {\r\n var extensions = [];\r\n extensions[_DYN_PUSH /* @min:%2epush */](_sender);\r\n extensions[_DYN_PUSH /* @min:%2epush */](properties);\r\n extensions[_DYN_PUSH /* @min:%2epush */](dependencies);\r\n extensions[_DYN_PUSH /* @min:%2epush */](_self[_DYN_APP_INSIGHTS /* @min:%2eappInsights */]);\r\n // initialize core\r\n _core.initialize(_self[_DYN_CONFIG /* @min:%2econfig */], extensions, logger, notificationManager);\r\n _self[_DYN_CONTEXT /* @min:%2econtext */] = properties[_DYN_CONTEXT /* @min:%2econtext */];\r\n if (_internalSdkSrc && _self[_DYN_CONTEXT /* @min:%2econtext */]) {\r\n _self[_DYN_CONTEXT /* @min:%2econtext */].internal.sdkSrc = _internalSdkSrc;\r\n }\r\n _updateSnippetProperties(_self[STR_SNIPPET /* @min:%2esnippet */]);\r\n // Empty queue of all api calls logged prior to sdk download\r\n _self.emptyQueue();\r\n _self[STR_POLL_INTERNAL_LOGS /* @min:%2epollInternalLogs */]();\r\n _self[_DYN_ADD_HOUSEKEEPING_BEF20 /* @min:%2eaddHousekeepingBeforeUnload */](_self);\r\n });\r\n return _self;\r\n };\r\n _self[_DYN_UPDATE_SNIPPET_DEFIN0 /* @min:%2eupdateSnippetDefinitions */] = function (snippet) {\r\n // apply full appInsights to the global instance\r\n // Note: This must be called before loadAppInsights is called\r\n proxyAssign(snippet, _self, function (name) {\r\n // Not excluding names prefixed with \"_\" as we need to proxy some functions like _onError\r\n return name && arrIndexOf(_ignoreUpdateSnippetProperties, name) === -1;\r\n });\r\n };\r\n _self.emptyQueue = function () {\r\n // call functions that were queued before the main script was loaded\r\n try {\r\n if (isArray(_self.snippet[_DYN_QUEUE /* @min:%2equeue */])) {\r\n // note: do not check length in the for-loop conditional in case something goes wrong and the stub methods are not overridden.\r\n var length_1 = _self.snippet[_DYN_QUEUE /* @min:%2equeue */].length;\r\n for (var i = 0; i < length_1; i++) {\r\n var call = _self.snippet[_DYN_QUEUE /* @min:%2equeue */][i];\r\n call();\r\n }\r\n _self.snippet[_DYN_QUEUE /* @min:%2equeue */] = undefined;\r\n delete _self.snippet[_DYN_QUEUE /* @min:%2equeue */];\r\n }\r\n }\r\n catch (exception) {\r\n var properties_1 = {};\r\n if (exception && isFunction(exception.toString)) {\r\n properties_1.exception = exception.toString();\r\n }\r\n // need from core\r\n // Microsoft.ApplicationInsights._InternalLogging.throwInternal(\r\n // eLoggingSeverity.WARNING,\r\n // _eInternalMessageId.FailedToSendQueuedTelemetry,\r\n // \"Failed to send queued telemetry\",\r\n // properties);\r\n }\r\n };\r\n _self[_DYN_ADD_HOUSEKEEPING_BEF20 /* @min:%2eaddHousekeepingBeforeUnload */] = function (appInsightsInstance) {\r\n // Add callback to push events when the user navigates away\r\n if (hasWindow() || hasDocument()) {\r\n var performHousekeeping = function () {\r\n // Adds the ability to flush all data before the page unloads.\r\n // Note: This approach tries to push a sync request with all the pending events onbeforeunload.\r\n // Firefox does not respect this.Other browsers DO push out the call with < 100% hit rate.\r\n // Telemetry here will help us analyze how effective this approach is.\r\n // Another approach would be to make this call sync with a acceptable timeout to reduce the\r\n // impact on user experience.\r\n // appInsightsInstance.context._sender.triggerSend();\r\n appInsightsInstance[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */](false);\r\n // Back up the current session to local storage\r\n // This lets us close expired sessions after the cookies themselves expire\r\n if (isFunction(_this.core[STR_GET_PLUGIN /* @min:%2egetPlugin */])) {\r\n var loadedPlugin = _this.core[STR_GET_PLUGIN /* @min:%2egetPlugin */](PropertiesPluginIdentifier);\r\n if (loadedPlugin) {\r\n var propertiesPlugin = loadedPlugin.plugin;\r\n if (propertiesPlugin && propertiesPlugin[_DYN_CONTEXT /* @min:%2econtext */] && propertiesPlugin[_DYN_CONTEXT /* @min:%2econtext */]._sessionManager) {\r\n propertiesPlugin[_DYN_CONTEXT /* @min:%2econtext */]._sessionManager.backup();\r\n }\r\n }\r\n }\r\n };\r\n var added = false;\r\n var excludePageUnloadEvents = appInsightsInstance.appInsights[_DYN_CONFIG /* @min:%2econfig */].disablePageUnloadEvents;\r\n if (!_houseKeepingNamespace) {\r\n _houseKeepingNamespace = mergeEvtNamespace(_evtNamespace, _core[STR_EVT_NAMESPACE /* @min:%2eevtNamespace */] && _core[STR_EVT_NAMESPACE /* @min:%2eevtNamespace */]());\r\n }\r\n if (!appInsightsInstance.appInsights.config[_DYN_DISABLE_FLUSH_ON_BEF11 /* @min:%2edisableFlushOnBeforeUnload */]) {\r\n // Hook the unload event for the document, window and body to ensure that the client events are flushed to the server\r\n // As just hooking the window does not always fire (on chrome) for page navigation's.\r\n if (addPageUnloadEventListener(performHousekeeping, excludePageUnloadEvents, _houseKeepingNamespace)) {\r\n added = true;\r\n }\r\n // We also need to hook the pagehide and visibilitychange events as not all versions of Safari support load/unload events.\r\n if (addPageHideEventListener(performHousekeeping, excludePageUnloadEvents, _houseKeepingNamespace)) {\r\n added = true;\r\n }\r\n // A reactNative app may not have a window and therefore the beforeunload/pagehide events -- so don't\r\n // log the failure in this case\r\n if (!added && !isReactNative()) {\r\n _throwInternal(appInsightsInstance[_DYN_APP_INSIGHTS /* @min:%2eappInsights */].core.logger, 1 /* eLoggingSeverity.CRITICAL */, 19 /* _eInternalMessageId.FailedToAddHandlerForOnBeforeUnload */, \"Could not add handler for beforeunload and pagehide\");\r\n }\r\n }\r\n if (!added && !appInsightsInstance.appInsights.config[_DYN_DISABLE_FLUSH_ON_UNL12 /* @min:%2edisableFlushOnUnload */]) {\r\n // If we didn't add the normal set then attempt to add the pagehide and visibilitychange only\r\n addPageHideEventListener(performHousekeeping, excludePageUnloadEvents, _houseKeepingNamespace);\r\n }\r\n }\r\n };\r\n _self.getSender = function () {\r\n return _sender;\r\n };\r\n _self.unload = function (isAsync, unloadComplete, cbTimeout) {\r\n _self[_DYN_ONUNLOAD_FLUSH /* @min:%2eonunloadFlush */](isAsync);\r\n // Remove any registered event handlers\r\n if (_houseKeepingNamespace) {\r\n removePageUnloadEventListener(null, _houseKeepingNamespace);\r\n removePageHideEventListener(null, _houseKeepingNamespace);\r\n }\r\n _core.unload && _core.unload(isAsync, unloadComplete, cbTimeout);\r\n };\r\n proxyFunctions(_self, _self[_DYN_APP_INSIGHTS /* @min:%2eappInsights */], [\r\n STR_GET_COOKIE_MGR,\r\n STR_TRACK_EVENT,\r\n STR_TRACK_PAGE_VIEW,\r\n \"trackPageViewPerformance\",\r\n STR_TRACK_EXCEPTION,\r\n \"_onerror\",\r\n STR_TRACK_TRACE,\r\n STR_TRACK_METRIC,\r\n STR_START_TRACK_PAGE,\r\n STR_STOP_TRACK_PAGE,\r\n STR_START_TRACK_EVENT,\r\n STR_STOP_TRACK_EVENT\r\n ]);\r\n proxyFunctions(_self, _getCurrentDependencies, [\r\n STR_TRACK_DEPENDENCY_DATA,\r\n \"addDependencyListener\",\r\n \"addDependencyInitializer\"\r\n ]);\r\n proxyFunctions(_self, _core, [\r\n STR_ADD_TELEMETRY_INITIALIZER,\r\n STR_POLL_INTERNAL_LOGS,\r\n \"stopPollingInternalLogs\",\r\n STR_GET_PLUGIN,\r\n \"addPlugin\",\r\n STR_EVT_NAMESPACE,\r\n \"addUnloadCb\",\r\n \"getTraceCtx\"\r\n ]);\r\n proxyFunctions(_self, function () {\r\n var context = properties[_DYN_CONTEXT /* @min:%2econtext */];\r\n return context ? context.user : null;\r\n }, [\r\n STR_SET_AUTHENTICATED_USER_CONTEXT,\r\n STR_CLEAR_AUTHENTICATED_USER_CONTEXT\r\n ]);\r\n function _getSKUDefaults() {\r\n _self.config[_DYN_DIAGNOSTIC_LOG_INTER4 /* @min:%2ediagnosticLogInterval */] =\r\n _self.config[_DYN_DIAGNOSTIC_LOG_INTER4 /* @min:%2ediagnosticLogInterval */] && _self[_DYN_CONFIG /* @min:%2econfig */][_DYN_DIAGNOSTIC_LOG_INTER4 /* @min:%2ediagnosticLogInterval */] > 0 ? _self[_DYN_CONFIG /* @min:%2econfig */][_DYN_DIAGNOSTIC_LOG_INTER4 /* @min:%2ediagnosticLogInterval */] : 10000;\r\n }\r\n // Using a function to support the dynamic adding / removal of plugins, so this will always return the current value\r\n function _getCurrentDependencies() {\r\n return dependencies;\r\n }\r\n function _initDefaults() {\r\n _evtNamespace = createUniqueNamespace(\"AISKU\");\r\n _houseKeepingNamespace = null;\r\n dependencies = null;\r\n properties = null;\r\n _sender = null;\r\n _snippetVersion = null;\r\n }\r\n });\r\n }\r\n // Analytics Plugin\r\n// Removed Stub for Initialization.prototype.getCookieMgr.\r\n// Removed Stub for Initialization.prototype.trackEvent.\r\n// Removed Stub for Initialization.prototype.trackPageView.\r\n// Removed Stub for Initialization.prototype.trackPageViewPerformance.\r\n// Removed Stub for Initialization.prototype.trackException.\r\n// Removed Stub for Initialization.prototype._onerror.\r\n// Removed Stub for Initialization.prototype.trackTrace.\r\n// Removed Stub for Initialization.prototype.trackMetric.\r\n// Removed Stub for Initialization.prototype.startTrackPage.\r\n// Removed Stub for Initialization.prototype.stopTrackPage.\r\n// Removed Stub for Initialization.prototype.startTrackEvent.\r\n// Removed Stub for Initialization.prototype.stopTrackEvent.\r\n// Removed Stub for Initialization.prototype.addTelemetryInitializer.\r\n // Properties Plugin\r\n// Removed Stub for Initialization.prototype.setAuthenticatedUserContext.\r\n// Removed Stub for Initialization.prototype.clearAuthenticatedUserContext.\r\n // Dependencies Plugin\r\n// Removed Stub for Initialization.prototype.trackDependencyData.\r\n // Misc\r\n// Removed Stub for Initialization.prototype.flush.\r\n// Removed Stub for Initialization.prototype.onunloadFlush.\r\n// Removed Stub for Initialization.prototype.loadAppInsights.\r\n// Removed Stub for Initialization.prototype.updateSnippetDefinitions.\r\n// Removed Stub for Initialization.prototype.emptyQueue.\r\n// Removed Stub for Initialization.prototype.pollInternalLogs.\r\n// Removed Stub for Initialization.prototype.stopPollingInternalLogs.\r\n// Removed Stub for Initialization.prototype.addHousekeepingBeforeUnload.\r\n// Removed Stub for Initialization.prototype.getSender.\r\n// Removed Stub for Initialization.prototype.unload.\r\n// Removed Stub for Initialization.prototype.getPlugin.\r\n// Removed Stub for Initialization.prototype.addPlugin.\r\n// Removed Stub for Initialization.prototype.evtNamespace.\r\n// Removed Stub for Initialization.prototype.addUnloadCb.\r\n// Removed Stub for Initialization.prototype.addDependencyListener.\r\n /**\r\n * Add an dependency telemetry initializer callback function to allow populating additional properties or drop the request.\r\n * It is called after the dependency call has completed and any available performance details are available. A dependency\r\n * initializer is similar to the TelemetryInitializer function but it allows you to block the reporting of the dependency\r\n * request so that it doesn't count against the `maxAjaxCallsPerView`.\r\n * @param dependencyInitializer - The Dependency Telemetry Initializer function\r\n * @returns - A IDependencyInitializerHandler to enable the initializer to be removed\r\n */\r\n Initialization.prototype.addDependencyInitializer = function (dependencyInitializer) {\r\n return null;\r\n };\r\n// Removed Stub for Initialization.prototype.getTraceCtx.\r\n return Initialization;\r\n}());\r\nexport { Initialization };\r\n// tslint:disable-next-line\r\n(function () {\r\n var sdkSrc = null;\r\n var isModule = false;\r\n var cdns = [\r\n \"://js.monitor.azure.com/\",\r\n \"://az416426.vo.msecnd.net/\"\r\n ];\r\n try {\r\n // Try and determine whether the sdk is being loaded from the CDN\r\n // currentScript is only valid during initial processing\r\n var scrpt = (document || {}).currentScript;\r\n if (scrpt) {\r\n sdkSrc = scrpt.src;\r\n // } else {\r\n // // We need to update to at least typescript 2.9 for this to work :-(\r\n // // Leaving as a stub for now so after we upgrade this breadcrumb is available\r\n // let meta = import.meta;\r\n // sdkSrc = (meta || {}).url;\r\n // isModule = true;\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n if (sdkSrc) {\r\n try {\r\n var url = sdkSrc.toLowerCase();\r\n if (url) {\r\n var src = \"\";\r\n for (var idx = 0; idx < cdns.length; idx++) {\r\n if (url[_DYN_INDEX_OF /* @min:%2eindexOf */](cdns[idx]) !== -1) {\r\n src = \"cdn\" + (idx + 1);\r\n if (url[_DYN_INDEX_OF /* @min:%2eindexOf */](\"/scripts/\") === -1) {\r\n if (url[_DYN_INDEX_OF /* @min:%2eindexOf */](\"/next/\") !== -1) {\r\n src += \"-next\";\r\n }\r\n else if (url[_DYN_INDEX_OF /* @min:%2eindexOf */](\"/beta/\") !== -1) {\r\n src += \"-beta\";\r\n }\r\n }\r\n _internalSdkSrc = src + (isModule ? \".mod\" : \"\");\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // eslint-disable-next-line no-empty\r\n }\r\n }\r\n})();\r\n","/*\n * Application Insights JavaScript SDK - Web, 2.8.16\n * Copyright (c) Microsoft and contributors. All rights reserved.\n */\n\r\n\r\n// @skip-file-minify\r\n// ##############################################################\r\n// AUTO GENERATED FILE: This file is Auto Generated during build.\r\n// ##############################################################\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n// Note: DON'T Export these const from the package as we are still targeting ES3 this will export a mutable variables that someone could change!!!\r\n// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\nexport var _DYN_UPDATE_SNIPPET_DEFIN0 = \"updateSnippetDefinitions\"; // Count: 4\r\nexport var _DYN_LOAD_APP_INSIGHTS = \"loadAppInsights\"; // Count: 4\r\nexport var _DYN_ENDPOINT_URL = \"endpointUrl\"; // Count: 4\r\nexport var _DYN_MAX_BATCH_SIZE_IN_BY1 = \"maxBatchSizeInBytes\"; // Count: 3\r\nexport var _DYN_MAX_BATCH_INTERVAL = \"maxBatchInterval\"; // Count: 3\r\nexport var _DYN_DISABLE_EXCEPTION_TR2 = \"disableExceptionTracking\"; // Count: 2\r\nexport var _DYN_DISABLE_TELEMETRY = \"disableTelemetry\"; // Count: 2\r\nexport var _DYN_EMIT_LINE_DELIMITED_3 = \"emitLineDelimitedJson\"; // Count: 2\r\nexport var _DYN_DIAGNOSTIC_LOG_INTER4 = \"diagnosticLogInterval\"; // Count: 6\r\nexport var _DYN_AUTO_TRACK_PAGE_VISI5 = \"autoTrackPageVisitTime\"; // Count: 2\r\nexport var _DYN_SAMPLING_PERCENTAGE = \"samplingPercentage\"; // Count: 4\r\nexport var _DYN_DISABLE_AJAX_TRACKIN6 = \"disableAjaxTracking\"; // Count: 2\r\nexport var _DYN_MAX_AJAX_CALLS_PER_V7 = \"maxAjaxCallsPerView\"; // Count: 3\r\nexport var _DYN_IS_BEACON_API_DISABL8 = \"isBeaconApiDisabled\"; // Count: 2\r\nexport var _DYN_DISABLE_CORRELATION_9 = \"disableCorrelationHeaders\"; // Count: 2\r\nexport var _DYN_CORRELATION_HEADER_E10 = \"correlationHeaderExcludedDomains\"; // Count: 2\r\nexport var _DYN_DISABLE_FLUSH_ON_BEF11 = \"disableFlushOnBeforeUnload\"; // Count: 4\r\nexport var _DYN_DISABLE_FLUSH_ON_UNL12 = \"disableFlushOnUnload\"; // Count: 3\r\nexport var _DYN_ENABLE_SESSION_STORA13 = \"enableSessionStorageBuffer\"; // Count: 2\r\nexport var _DYN_IS_COOKIE_USE_DISABL14 = \"isCookieUseDisabled\"; // Count: 2\r\nexport var _DYN_IS_STORAGE_USE_DISAB15 = \"isStorageUseDisabled\"; // Count: 2\r\nexport var _DYN_IS_BROWSER_LINK_TRAC16 = \"isBrowserLinkTrackingEnabled\"; // Count: 2\r\nexport var _DYN_ENABLE_CORS_CORRELAT17 = \"enableCorsCorrelation\"; // Count: 2\r\nexport var _DYN_CONFIG = \"config\"; // Count: 6\r\nexport var _DYN_CONTEXT = \"context\"; // Count: 8\r\nexport var _DYN_PUSH = \"push\"; // Count: 5\r\nexport var _DYN_VERSION = \"version\"; // Count: 6\r\nexport var _DYN_QUEUE = \"queue\"; // Count: 6\r\nexport var _DYN_CONNECTION_STRING = \"connectionString\"; // Count: 3\r\nexport var _DYN_INSTRUMENTATION_KEY = \"instrumentationKey\"; // Count: 2\r\nexport var _DYN_APP_INSIGHTS = \"appInsights\"; // Count: 3\r\nexport var _DYN_DISABLE_IKEY_DEPRECA18 = \"disableIkeyDeprecationMessage\"; // Count: 2\r\nexport var _DYN_GET_TRANSMISSION_CON19 = \"getTransmissionControls\"; // Count: 2\r\nexport var _DYN_ONUNLOAD_FLUSH = \"onunloadFlush\"; // Count: 6\r\nexport var _DYN_ADD_HOUSEKEEPING_BEF20 = \"addHousekeepingBeforeUnload\"; // Count: 2\r\nexport var _DYN_INDEX_OF = \"indexOf\"; // Count: 4\r\n","import { EventEmitter, InjectionToken } from '@angular/core';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { PerfectScrollbarConfigInterface } from 'ngx-perfect-scrollbar';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n\r\nexport class HelpParameters {\r\n\tpublic InitialMessage?: string;\r\n\tpublic ProductId?: number;\r\n\tpublic VersionId?: number;\r\n\tpublic IsContent?: boolean = false;\r\n}\r\n\r\nexport const ROOT_COMPANY_ID = 100000;\r\nexport const CLIENT_ID = 'Portal';\r\nexport const SHOW_HELP: EventEmitter = new EventEmitter();\r\nexport const HIDE_HELP = new EventEmitter();\r\n\r\nexport const LOGOUT_PATH = `${location.protocol}//${location.host}/account/logout`;\r\nexport const FORBIDDEN_PATH = '/account/forbidden';\r\nexport const UNAUTHORIZED_PATH = '/account/unauthorized';\r\nexport const DEFAULT_LOGIN_REDIRECT_PATH = '/';\r\nexport const PASSTHROUGH_URLS = ['/account', '/playback', FORBIDDEN_PATH, LOGOUT_PATH, UNAUTHORIZED_PATH];\r\nexport const AUTH_CONFIG_ID = 'main';\r\n\r\nexport const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {\r\n\tsuppressScrollX: true,\r\n};\r\n\r\nexport const ORIGIN_URL = new InjectionToken('ORIGIN_URL', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => location.origin,\r\n});\r\n\r\n\r\nexport function apiUrl() {\r\n\tconst host = location.hostname.toLowerCase();\r\n\tif (host.endsWith('localhost')) {\r\n\t\treturn 'https://localhost:44301';\r\n\t} else if (host.endsWith('beta.cadlearning.com')) {\r\n\t\treturn 'https://api.beta.cadlearning.com';\r\n\t} else if (host.endsWith('local.cadlearning.com')) {\r\n\t\treturn 'https://api.local.cadlearning.com';\r\n\t} else if (host.endsWith('qa.cadlearning.com')) {\r\n\t\treturn 'https://api.qa.cadlearning.com';\r\n\t} else if (host.endsWith('staging.cadlearning.com')) {\r\n\t\treturn 'https://api.staging.cadlearning.com';\r\n\t} else if (host.endsWith('demo.cadlearning.com')) {\r\n\t\treturn 'https://api.demo.cadlearning.com';\r\n\t} else if (host.endsWith('dev.anhour.io')) {\r\n\t\treturn \"https://dev.anhour.io:44301\";\r\n\t} else if (host.endsWith('beta.anhour.io')) {\r\n\t\treturn \"https://api.beta.anhour.io\";\r\n\t} else if (host.endsWith('qa.anhour.io')) {\r\n\t\treturn \"https://api.qa.anhour.io\";\r\n\t} else if (host.endsWith('staging.anhour.io')) {\r\n\t\treturn \"https://api.staging.anhour.io\";\r\n\t} else if (host.endsWith('demo.anhour.io')) {\r\n\t\treturn \"https://api.demo.anhour.io\";\r\n\t} else if (host.endsWith('anhour.io')) {\r\n\t\treturn \"https://api.anhour.io\";\r\n\t}\r\n\r\n\telse {\r\n\t\treturn 'https://api.cadlearning.com';\r\n\t}\r\n}\r\n\r\nexport const API_URL = new InjectionToken('API_URL', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\treturn apiUrl();\r\n\t},\r\n});\r\n\r\nexport const BLOB_URL = new InjectionToken('BLOB_URL', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: getBlobUrl,\r\n});\r\n\r\nfunction getBlobUrl() {\r\n\tconst host = location.hostname.toLowerCase();\r\n\tif (host.endsWith('localhost') || host.endsWith('beta.cadlearning.com') || host.endsWith('local.cadlearning.com') || host.endsWith('dev.anhour.io') || host.endsWith('beta.anhour.io')) {\r\n\t\treturn 'https://casabeta.blob.core.windows.net';\r\n\t} else if (host.endsWith('qa.cadlearning.com') || host.endsWith('qa.anhour.io')) {\r\n\t\treturn 'https://clqasa.blob.core.windows.net';\r\n\t} else if (host.endsWith('staging.cadlearning.com') || host.endsWith('staging.anhour.io')) {\r\n\t\treturn 'https://clstagingsa.blob.core.windows.net';\r\n\t} else if (host.endsWith('demo.cadlearning.com') || host.endsWith('demo.anhour.io')) {\r\n\t\treturn 'https://cldemosa.blob.core.windows.net';\r\n\t} else {\r\n\t\treturn 'https://cadproduction.blob.core.windows.net';\r\n\t}\r\n}\r\n\r\nexport const SIGNALR_URL = new InjectionToken('SIGNALR_URL', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\tconst host = location.hostname.toLowerCase();\r\n\r\n\t\tif (host.endsWith('localhost') || host.endsWith('beta.cadlearning.com') || host.endsWith('local.cadlearning.com') || host.endsWith('dev.anhour.io') || host.endsWith('beta.anhour.io')) {\r\n\t\t\treturn 'https://cl-sr-beta.service.signalr.net';\r\n\t\t} else if (host.endsWith('qa.cadlearning.com') || host.endsWith('qa.anhour.io')) {\r\n\t\t\treturn 'https://cl-sr-qa.service.signalr.net';\r\n\t\t} else if (host.endsWith('staging.cadlearning.com') || host.endsWith('staging.anhour.io')) {\r\n\t\t\treturn 'https://cl-sr-staging.service.signalr.net';\r\n\t\t} else if (host.endsWith('demo.cadlearning.com') || host.endsWith('demo.anhour.io')) {\r\n\t\t\treturn 'https://cl-sr-demo.service.signalr.net';\r\n\t\t} else {\r\n\t\t\treturn 'https://cl-sr-prod.service.signalr.net';\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport const SITE_URL = new InjectionToken('SITE_URL', {\r\n\tprovidedIn: 'root',\r\n\tfactory: () => {\r\n\t\treturn Sites.includes(location.hostname.toLowerCase()) ? '4d.cadlearning.com' : location.hostname;\r\n\t},\r\n});\r\n\r\nexport const LOGO_URL = new InjectionToken('LOGO_URL', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\tlet site = '4d.cadlearning.com';\r\n\r\n\t\tif (Sites.includes(location.hostname.toLowerCase())) {\r\n\t\t\tsite = '4d.cadlearning.com';\r\n\t\t} else if (AnHourSites.includes(location.hostname.toLowerCase())) {\r\n\t\t\tsite = 'portal.anhour.io';\r\n\t\t} else {\r\n\t\t\tsite = location.hostname;\r\n\t\t}\r\n\r\n\t\treturn `${getBlobUrl()}/portalstatic/${site}.logo.png`;\r\n\t},\r\n});\r\n\r\nexport const LOGO_URL_LIGHT = new InjectionToken('LOGO_URL_LIGHT', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\tlet site = '4d.cadlearning.com';\r\n\r\n\t\tif (Sites.includes(location.hostname.toLowerCase())) {\r\n\t\t\tsite = '4d.cadlearning.com';\r\n\t\t} else if (AnHourSites.includes(location.hostname.toLowerCase())) {\r\n\t\t\tsite = 'portal.anhour.io';\r\n\t\t} else {\r\n\t\t\tsite = location.hostname;\r\n\t\t}\r\n\r\n\t\treturn `${getBlobUrl()}/portalstatic/${site}.logo.light.png`;\r\n\t},\r\n});\r\n\r\nexport const IS_CADLEARNING_SITE = new InjectionToken('IS_CADLEARNING_SITE', {\r\n\tprovidedIn: 'root',\r\n\tfactory: () => {\r\n\t\treturn Sites.includes(location.hostname.toLowerCase());\r\n\t},\r\n});\r\n\r\nexport const IS_ANHOUR_SITE = new InjectionToken('IS_ANHOUR_SITE', {\r\n\tprovidedIn: 'root',\r\n\tfactory: () => {\r\n\t\treturn AnHourSites.includes(location.hostname.toLowerCase());\r\n\t},\r\n});\r\n\r\nexport const IS_IFRAME = new InjectionToken('IS_IFRAME', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\tconst queryString = (location.search || '').toLowerCase();\r\n\t\treturn queryString.includes('isframe=true') || (typeof window !== 'undefined' && window.self !== window.top);\r\n\t},\r\n});\r\n\r\nexport const IS_SCORM = new InjectionToken('IS_SCORM', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () =>\r\n\t\t(location.search || '').toLowerCase().includes('isscorm=true') || (typeof window !== 'undefined' && window.self !== window.top),\r\n});\r\n\r\nexport const IS_APP = new InjectionToken('IS_APP', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\tconst queryString = (location.search || '').toLowerCase();\r\n\t\tconst win = window as any;\r\n\t\treturn (\r\n\t\t\twin.Windows || //Windows Store\r\n\t\t\twin.navigator.standalone === true || //iOS\r\n\t\t\twindow.matchMedia('(display-mode: standalone)').matches || //Chrome based PWA\r\n\t\t\t(win.process && win.process.type) || //Electron\r\n\t\t\tqueryString.includes('isapp=true') || //Forced in URL\r\n\t\t\tlocation.pathname.startsWith('/playback')\r\n\t\t);\r\n\t},\r\n});\r\n\r\nfunction GetCookie(cname: string): string | null {\r\n\tlet name = cname + '=';\r\n\tlet decodedCookie: string = decodeURIComponent(document.cookie);\r\n\tlet ca = decodedCookie.split(';');\r\n\tfor (let i = 0; i < ca.length; i++) {\r\n\t\tlet c = ca[i];\r\n\t\twhile (c.charAt(0) === ' ') {\r\n\t\t\tc = c.substring(1);\r\n\t\t}\r\n\t\tif (c.indexOf(name) === 0) {\r\n\t\t\treturn c.substring(name.length, c.length);\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nexport const THEME_COOKIE = \"cl_theme_cookie\";\r\n\r\nexport const IS_LIGHT_THEME = new InjectionToken('IS_LIGHT_THEME', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\tvar theme = GetCookie(THEME_COOKIE);\r\n\r\n\t\tif (theme == null || theme == 'platform') {\r\n\t\t\t//get based on the platform\r\n\t\t\tconst lightThemeMq = window.matchMedia(\"(prefers-color-scheme: light)\");\r\n\t\t\treturn lightThemeMq.matches;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn theme == \"light\";\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport const IS_DARK_THEME = new InjectionToken('IS_DARK_THEME', {\r\n\tprovidedIn: 'platform',\r\n\tfactory: () => {\r\n\t\tvar theme = GetCookie(THEME_COOKIE);\r\n\r\n\t\tif (theme == null || theme == 'platform') {\r\n\t\t\t//get based on the platform\r\n\t\t\tconst darkThemeMq = window.matchMedia(\"(prefers-color-scheme: dark)\");\r\n\t\t\treturn darkThemeMq.matches;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn theme == \"dark\";\r\n\t\t}\r\n\t},\r\n});\r\n\r\nexport const APP_INSIGHTS = new InjectionToken('APP_INSIGHTS', {\r\n\tprovidedIn: 'root',\r\n\tfactory: () => {\r\n\t\treturn new ApplicationInsights({\r\n\t\t\tconfig: {\r\n\t\t\t\tinstrumentationKey:\r\n\t\t\t\t\tlocation.hostname.toLowerCase() === 'localhost' ||\r\n\t\t\t\t\t\tlocation.hostname.toLowerCase().endsWith('beta.cadlearning.com') ||\r\n\t\t\t\t\t\tlocation.hostname.toLowerCase().endsWith('local.cadlearning.com')\r\n\t\t\t\t\t\t? '2e2b111d-164a-45c4-ab15-089b4754c0dd'\r\n\t\t\t\t\t\t: location.hostname.toLowerCase().endsWith('qa.cadlearning.com')\r\n\t\t\t\t\t\t\t? '3d6e2fab-6c3f-4edf-9513-70b6948ea309'\r\n\t\t\t\t\t\t\t: location.hostname.toLowerCase().endsWith('staging.cadlearning.com')\r\n\t\t\t\t\t\t\t\t? 'ebcf3b19-7c07-4c25-830a-6f995f42bdff'\r\n\t\t\t\t\t\t\t\t: location.hostname.toLowerCase().endsWith('demo.cadlearning.com')\r\n\t\t\t\t\t\t\t\t\t? 'dd64f43a-5620-429a-b2b1-b57c20b10f69'\r\n\t\t\t\t\t\t\t\t\t: 'c2cfe355-930d-4e63-8406-3a13e5858514',\r\n\t\t\t\tautoTrackPageVisitTime: true,\r\n\t\t\t\tautoExceptionInstrumented: true,\r\n\t\t\t\tenableAutoRouteTracking: true,\r\n\t\t\t\tenableDebug: !environment.production,\r\n\t\t\t\tenableRequestHeaderTracking: true,\r\n\t\t\t\tenableCorsCorrelation: false, //Must be false or videos won't play\r\n\t\t\t\tenableDebugExceptions: !environment.production,\r\n\t\t\t\tenableResponseHeaderTracking: true,\r\n\t\t\t\tloggingLevelTelemetry: environment.production ? 1 : 2,\r\n\t\t\t\tloggingLevelConsole: environment.production ? 1 : 2,\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n});\r\n\r\nexport const Sites = [\r\n\t'localhost',\r\n\t'portal.local.cadlearning.com',\r\n\t'portal.beta.cadlearning.com',\r\n\t'portal.qa.cadlearning.com',\r\n\t'portal.staging.cadlearning.com',\r\n\t'portal.demo.cadlearning.com',\r\n\t'portal.cadlearning.com',\r\n\t'4d.cadlearning.com',\r\n];\r\n\r\nexport const AnHourSites = [\r\n\t'dev.anhour.io',\r\n\t'portal.beta.anhour.io',\r\n\t'portal.qa.anhour.io',\r\n\t'portal.staging.anhour.io',\r\n\t'portal.anhour.io'\r\n];\r\n","import { CommonModule, CurrencyPipe } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\r\nimport { DialogModule } from '@progress/kendo-angular-dialog';\r\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\r\nimport { InputsModule } from '@progress/kendo-angular-inputs';\r\nimport { AzureModule } from 'cadlearning.angular';\r\nimport { PreHireInviteComponent } from '../custom/dialogs/prehireinvite.component';\r\nimport { DirectivesModule } from '../directives/directives.module';\r\nimport { PlayListNewComponent } from '../main/playlist/playlistnew.component';\r\nimport { PlayListShareComponent } from '../main/playlist/playlistshare.component';\r\nimport { AddExistingBadgeComponent } from './add-existing-badge.component';\r\nimport { AddExistingLessonComponent } from './add-existing-lesson.component';\r\nimport { AddExistingMedallionComponent } from './add-existing-medallion.component';\r\nimport { EditLessonNoteComponent } from './edit-lesson-note.component';\r\nimport { InviteUserComponent } from './invite-user.component';\r\nimport { NewBadgeComponent } from './new-badge.component';\r\nimport { NewLessonComponent } from './new-lesson.component';\r\nimport { NewMedallionComponent } from './new-medallion.component';\r\nimport { NewPaymentComponent } from './new-payment.component';\r\nimport { NewResourceComponent } from './new-resource.component';\r\nimport { PurchaseEntitlementComponent } from './PurchaseEntitlement/purchase-entitlement.component';\r\nimport { ReportTranslationProblemComponent } from './report-translation-problem.component';\r\nimport { RequestSalesTaxExemptionComponent } from './RequestSalesTaxExemption/RequestSalesTaxExemption.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n NewPaymentComponent,\r\n NewResourceComponent,\r\n PlayListNewComponent,\r\n PlayListShareComponent,\r\n InviteUserComponent,\r\n EditLessonNoteComponent,\r\n PreHireInviteComponent,\r\n ReportTranslationProblemComponent,\r\n PurchaseEntitlementComponent,\r\n RequestSalesTaxExemptionComponent,\r\n NewMedallionComponent,\r\n NewBadgeComponent,\r\n NewLessonComponent,\r\n AddExistingLessonComponent,\r\n AddExistingBadgeComponent,\r\n AddExistingMedallionComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n DialogModule,\r\n DirectivesModule.forRoot(),\r\n DropDownsModule,\r\n DateInputsModule,\r\n InputsModule,\r\n TranslateModule,\r\n AzureModule,\r\n DirectivesModule\r\n ],\r\n exports: [NewPaymentComponent, NewResourceComponent, InviteUserComponent],\r\n providers: [CurrencyPipe]\r\n})\r\nexport class DialogsModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: DialogsModule,\r\n\t\t\tproviders: []\r\n\t\t};\r\n\t}\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { DropzoneDirective } from './dropzone.component';\r\nimport { EmptyItemPlaceholderDirective } from './empty-item-placeholder-directive';\r\n\r\n@NgModule({\r\n declarations: [DropzoneDirective,\r\n EmptyItemPlaceholderDirective],\r\n imports: [],\r\n exports: [DropzoneDirective,\r\n EmptyItemPlaceholderDirective]\r\n})\r\nexport class DirectivesModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: DirectivesModule,\r\n\t\t\tproviders: []\r\n\t\t};\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class CanActivatePartnerSalesGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) {}\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.PartnerAdmin, Roles.PartnerSales);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class CanActivateOrganizationAdminGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) {}\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.OrgAdmin, Roles.UserAdmin);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class CanActivateOrganizationContentCreatorGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) { }\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.OrgContentCreator, Roles.LearningPathAdmin);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class CanActivateOrganizationGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) { }\r\n\r\n\tcanActivate() {\r\n\t\tlet activate = this.userService.User.IsInRole(Roles.CADAdmin, Roles.OrgAdmin, Roles.UserAdmin, Roles.Reporting, Roles.OrgContentCreator, Roles.QuestionApprover, Roles.ScriptApprover, Roles.NarrationApprover, Roles.FinalApprover, Roles.LearningPathAdmin);\r\n\t\treturn activate;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class CanActivateOrganizationReportingGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) {}\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.OrgAdmin, Roles.UserAdmin, Roles.Reporting);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class CanActivatePartnerGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) {}\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.PartnerAdmin);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\n\r\n@Injectable()\r\nexport class CanActivateUserGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) {}\r\n\r\n\tasync canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n\t\tconsole.log(route + '' + state);\r\n\t\tconsole.log('AuthorizationGuard, canActivate');\r\n\r\n\t\tconst isAuthorized = this.userService.User != null;\r\n\r\n\t\tconsole.log('AuthorizationGuard, canActivate isAuthorized: ' + isAuthorized);\r\n\r\n\t\tif (isAuthorized) return true;\r\n\r\n\t\tlet returnUrl = state.url;\r\n\t\tif (returnUrl.indexOf('#') >= 0) returnUrl = returnUrl.substr(0, returnUrl.indexOf('#'));\r\n\r\n\t\tawait this.userService.Login(returnUrl);\r\n\t\treturn false;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { Roles } from 'cadlearning.dto';\r\n\r\n@Injectable()\r\nexport class CanActivateProjectGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) { }\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.OrgAdmin, Roles.UserAdmin);\r\n\t}\r\n}\r\n\r\n@Injectable()\r\nexport class CanActivateBotGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) { }\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.OrgAdmin, Roles.UserAdmin) && this.userService.User.HasBotEscallation;\r\n\t}\r\n}\r\n\r\n@Injectable()\r\nexport class CanActivateAccomplishmentsGuard implements CanActivate {\r\n\tconstructor(private userService: UserService) { }\r\n\r\n\tcanActivate() {\r\n\t\treturn this.userService.User.IsInRole(Roles.CADAdmin, Roles.OrgAdmin, Roles.OrgContentCreator, Roles.UserAdmin, Roles.LearningPathAdmin) && this.userService.User.HasAccomplishments;\r\n\t}\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-TermsOfService',\r\n templateUrl: './TermsOfService.component.html',\r\n styleUrls: ['./TermsOfService.component.scss']\r\n})\r\nexport class TermsOfServiceComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","

Terms of Service

\r\n

\r\n\t4D Technologies, LLC (dba CADLearning) (“4D Technologies”, “we”, “us”, “our(s)”) is an online learning platform where users can access\r\n\ton-demand, customizable learning systems designed to identify and address knowledge gaps and provide in-application support to maximize\r\n\tperformance for users of Autodesk 2D and 3D design, engineering and entertainment software\r\n

\r\n

PLEASE READ THESE TERMS OF SERVICE

\r\n\r\n

\r\n\tTHESE ARE LEGALLY BINDING DOCUMENTS THAT CONTROL YOUR ACCESS TO AND USE OF THE 4D SERVICES (AS DEFINED HEREIN) AND AFFECT YOUR RIGHTS\r\n\tAND OBLIGATIONS.\r\n

\r\n
    \r\n\t
  1. \r\n\t\tACCEPTANCE OF TERMS. By using the 4D Services, you acknowledge and agree to the terms and conditions contained herein. Such\r\n\t\tacknowledgement and agreement is further confirmed by indicating your acceptance as applicable. The 4D Services, including any\r\n\t\tupdates, enhancements, new features, and/or the addition of any new websites, that 4D provides to you are subject to these TOS. We\r\n\t\treserve the right to update these TOS at any time by posting such changes on the website through which you are accessing the 4D\r\n\t\tServices. All such changes will be effective from the date on which they are posted and your continued use of the 4D Services\r\n\t\tthereafter serves as your acceptance of such changes. You should check these TOS from time to time to read what changes have been\r\n\t\tmade.\r\n\t
  2. \r\n\r\n\t
  3. \r\n\t\tDESCRIPTION OF THE 4D SERVICES AND PRODCUTS. Through our websites (located at CADLearning.com or as otherwise hosted by us,\r\n\t\tcollectively the “Website”), we provide you with access to a variety of products, including s and eBooks (the “Products”), as well\r\n\t\tas resources and services, including subscription and non-subscription Websites, any associated subdomains, instructive courses,\r\n\t\tdownload areas, communication forums, product information, Software (as defined herein), Service Materials (as defined herein)\r\n\t\tand/or other related content and services (collectively the “4D Services”).\r\n\t
  4. \r\n\r\n\t
  5. \r\n\t\tPAYING FOR YOUR SUBSCRIPTION. When you sign up for an Individual Membership, you are subscribing to certain 4D Services. You may\r\n\t\tsign up for either one-month or one-year Subscription terms for access to and use of the 4D Services (your “Subscription”). Yearly\r\n\t\tSubscriptions may be paid in full up-front or in monthly installments, monthly subscriptions are paid on a monthly basis (note that\r\n\t\tall student and faculty subscriptions fees are charged in a single yearly installment). The applicable fees and any associated taxes\r\n\t\tfor Subscription will be billed immediately to your credit card or other form of payment upon completion of your Subscription\r\n\t\tpurchase through our Website(s) and then, if applicable, each month thereafter during the term of your Subscription. If applicable,\r\n\t\tyou hereby authorize us to charge your credit card or other form of payment as described in the foregoing. If at any time during\r\n\t\tyour Subscription, your credit card or other method of payment is declined, we may limit your access to the 4D Services and/or\r\n\t\tterminate your Subscription. All fees related to your Subscription are due and payable in U.S Dollars.\r\n\t
  6. \r\n\r\n\t
  7. \r\n\t\tSUBSCRIPTION AUTOMATIC RENEWAL. Unless you provide us with at least thirty (30) days’ notice prior to the expiration of your\r\n\t\tone-month or one-year Subscription term, your Subscription will be automatically renewed for the same duration as the expiring\r\n\t\tSubscription at the then-current rate for your current Subscription level. If the fees we charge change, we will notify you prior to\r\n\t\tcharging you.\r\n\t
  8. \r\n\r\n\t
  9. \r\n\t\tSUBSCRIPTION TERMINATION AND REFUNDS. You may cancel your Subscription at any time by contacting us at (603) 641-3900, for any or no\r\n\t\treason, subject to the notice provisions in Section 4 above. If you choose to cancel your Subscription you will still be responsible\r\n\t\tfor the monthly subscription fee for the month in which you cancel. However, you will not be responsible for any further\r\n\t\tsubscriptions fees unless you re-subscribe to any of the 4D Services. Please note that all student and faculty subscriptions are\r\n\t\tnon-refundable.\r\n\t
  10. \r\n\r\n\t
  11. \r\n\t\t

    \r\n\t\t\t4D Technologies may terminate your Subscription, without notice, effective immediately if you breach any of the terms and\r\n\t\t\tconditions herein. Upon such a termination by 4D Technologies, you will still be responsible for the monthly subscription fee\r\n\t\t\tfor the month in which such termination occurs.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\t4D Technologies may terminate your Subscription, without notice, effective immediately if you breach any of the terms and\r\n\t\t\tconditions herein. Upon such a termination by 4D Technologies, you will still be responsible for the monthly subscription fee\r\n\t\t\tfor the month in which such termination occurs.\r\n\t\t

    \r\n\t
  12. \r\n\r\n\t
  13. \r\n\t\tPRODUCT RETURNS AND REFUNDS. For information about our refund policy for purchases of our Products, please read our\r\n\t\tProduct Refund, Return and Shipping Policy.\r\n\t
  14. \r\n\r\n\t
  15. \r\n\t\t

    \r\n\t\t\tINTELLECTUAL PROPERTY; LIMITED LICENSE. You acknowledge and agree that (excluding your Submissions as defined below) any\r\n\t\t\tProducts made available through our websites, any software (including any mobile applications) that is made available to\r\n\t\t\tdownload from the 4D Services (“Software”) and any sample and actual forms, checklists, business documents, our logo and all\r\n\t\t\tdesigns, text, graphics, pictures, information, data, software and the selection and arrangement thereof (collectively, the\r\n\t\t\t“Service Materials”) are the proprietary property of 4D Technologies and/or its licensors and are protected by US and\r\n\t\t\tInternational copyright, trademark and/or other intellectual property laws.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tYou will be unable to access or use the 4D Services unless you accept all of the terms and conditions of this TOS. Any\r\n\t\t\treproduction or redistribution of the 4D Services not in accordance with these TOS and/or other applicable policies is expressly\r\n\t\t\tprohibited by law, and may result in severe civil and criminal penalties. Violators will be prosecuted to the maximum extent\r\n\t\t\tpossible.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tProvided that you indicate your acceptance of these TOS as applicable, you are granted a limited, non-sublicensable,\r\n\t\t\tnon-transferable, revocable license to access and use the 4D Services. This license is subject to these TOS. Any use of the 4D\r\n\t\t\tServices other than as specifically authorized in these TOS, without our prior written permission, is strictly prohibited and\r\n\t\t\twill terminate the license granted in these TOS. Such unauthorized use may also violate applicable laws including, but not\r\n\t\t\tlimited to, copyright, trademark and/or other intellectual property laws and applicable communications regulations and statutes.\r\n\t\t\tUnless explicitly stated herein, nothing in these TOS will be construed as conferring any license to or transfer of any\r\n\t\t\tintellectual property rights, whether by estoppel, implication or otherwise.\r\n\t\t

    \r\n\t
  16. \r\n\r\n\t
  17. \r\n\t\tProvided that you indicate your acceptance of these TOS as applicable, you are granted a limited, non-sublicensable,\r\n\t\tnon-transferable, revocable license to access and use the 4D Services. This license is subject to these TOS. Any use of the 4D\r\n\t\tServices other than as specifically authorized in these TOS, without our prior written permission, is strictly prohibited and will\r\n\t\tterminate the license granted in these TOS. Such unauthorized use may also violate applicable laws including, but not limited to,\r\n\t\tcopyright, trademark and/or other intellectual property laws and applicable communications regulations and statutes. Unless\r\n\t\texplicitly stated herein, nothing in these TOS will be construed as conferring any license to or transfer of any intellectual\r\n\t\tproperty rights, whether by estoppel, implication or otherwise.\r\n\t
  18. \r\n\r\n\t
  19. \r\n\t\tCONTESTS AND PROMOTIONS. Any contests or promotions (\"Promotions\") accessible through the 4D Services may be governed by its own set\r\n\t\tof official rules, which may include eligibility requirements, such as certain age or geographic area restrictions. By entering or\r\n\t\tparticipating in such Promotions, you will become subject to those official rules. It is your responsibility to read the applicable\r\n\t\trules to determine whether or not your participation, registration or entry will be valid or restricted, and to determine the\r\n\t\tsponsor's requirements of you in connection with the applicable Promotion.\r\n\t
  20. \r\n\t
  21. \r\n\t\tMEMBER ACCOUNT, PASSWORD, AND SECURITY. Certain sections of, or offerings from, the 4D Services may require you to register for a\r\n\t\tmember account. If registration is requested, you agree to provide us with accurate, complete registration information. Your\r\n\t\tregistration must be done using your real name and accurate information. Each registration is for your personal use only, unless\r\n\t\tauthorized in writing by us. Unless previously authorized in writing by us, we do not permit: (i) any other person using the\r\n\t\tregistered sections under your name; or (ii) access through a single name being made available to multiple users on a network. You\r\n\t\tare solely responsible for preventing such unauthorized use.\r\n\t
  22. \r\n\r\n\t
  23. \r\n\t\tU.S. GOVERNMENT USERS. Any Software downloaded from the 4D Services for or on behalf of the United States of America, its agencies,\r\n\t\tand/or instrumentalities (“U.S. Government”), is provided with Restricted Rights. Use, duplication, or disclosure by the U.S.\r\n\t\tGovernment is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software\r\n\t\tclause at DFARS 252.227-7013 or subparagraphs (c)(1) and (2) of the Commercial Computer Software – Restricted Rights at 48 CFR\r\n\t\t52.227-19, as applicable. Manufacturer is 4D Technologies, LLC, 360 Route 101, Bldg. #2, Bedford, New Hampshire 03110.\r\n\t
  24. \r\n\r\n\t
  25. \r\n\t\tSUBMISSION POLICY. You acknowledge that it is your responsibility to ensure that any items that you may upload via the 4D Services\r\n\t\tincluding without limitation any files, text, schema, data, images or other content (“Submissions”) does not violate the AUP and/or\r\n\t\tany laws, rules, other policies or regulations. We respect your rights and do not wish to censor any of your Submissions. You are\r\n\t\tsolely responsible for your use of the 4D Services and for any Submissions that you post via the 4D Services and you agree to use\r\n\t\tthe 4D Services at your own risk. We are not obligated to but reserve the right at all times to edit, refuse to post or to remove\r\n\t\tany information, materials and/or Submissions, in whole or in part, that in our sole discretion, violate these TOS,the\r\n\t\tAUP or any other applicable policy, law and/or regulation.\r\n\t
  26. \r\n\r\n\t
  27. \r\n\t\tUSE. You agree to use the 4D Services solely: (i) for their intended purpose; (ii) pursuant to these TOS; (iii) pursuant to the\r\n\t\tterms and conditions of the AUP; and (iv) in accordance with all\r\n\t\tapplicable policies, laws and/or regulations.\r\n\t
  28. \r\n\r\n\t
  29. \r\n\t\tPRIVACY POLICY. Please refer to our Privacy Policy\r\n\t\tfor information on how we collect, use and disclose personally identifiable information (“Personal Information”) from our users.\r\n\t
  30. \r\n\r\n\t
  31. \r\n\t\tTHIRD PARTY CONTENT. We may occasionally provide links to third party sites which will navigate you away from our website (each a\r\n\t\t“linked site”). These linked sites are not under our control and we are not responsible for the content of any linked site, any link\r\n\t\tcontained in a linked site or any changes or updates to such linked sites. Furthermore, we are not responsible for webcasting or any\r\n\t\tother form of transmission received from any linked site. We are providing these links to you only as a convenience, and the\r\n\t\tinclusion of any link does not imply endorsement by us of the applicable linked site.\r\n\t
  32. \r\n\r\n\t
  33. \r\n\t\t

    \r\n\t\t\tWARRANTY DISCLAIMER; LIMITATION OF LIABILITY. UNLESS OTHERWISE EXPRESSLY SET FORTH IN WRITING THE PRODUCTS AND 4D SERVICES\r\n\t\t\t(INCLUDING WITHOUT LIMITATION OUR WEBSITE, SERVICES, SOFTWARE, SERVICE MATERIALS AND/OR ANY OTHER CONTENT INCLUDED IN OR\r\n\t\t\tOTHERWISE MADE AVAILABLE TO YOU THROUGH THE 4D SERVICES) ARE PROVIDED TO YOU “AS IS” WITHOUT ANY REPRESENTATIONS OR WARRANTIES\r\n\t\t\tOR CONDITIONS OF ANY KIND. WE DO NOT WARRANT THAT ANY 4D SERVICES ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. WE MAKE NO\r\n\t\t\tREPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE AVAILABILITY, RELIABILITY OR SECURITY OF ANY OF THE PRODUCTS AND/OR 4D\r\n\t\t\tSERVICES. UNLESS OTHERWISE EXPRESSLY SET FORTH IN WRITING, WE DISCLAIM ANY AND ALL OTHER WARRANTIES AND REPRESENTATIONS (EXPRESS\r\n\t\t\tOR IMPLIED, ORAL OR WRITTEN) WITH RESPECT TO THE PRODUCTS AND 4D SERVICES WHETHER ALLEGED TO ARISE BY OPERATION OF LAW, BY\r\n\t\t\tREASON OF CUSTOM OR USAGE IN THE TRADE, BY COURSE OF DEALING OR OTHERWISE INCLUDING: (I) ANY AND ALL WARRANTIES OF\r\n\t\t\tMERCHANTABILITY; (II) ANY AND ALL WARRANTIES OF FITNESS OR SUITABILITY FOR ANY PURPOSE (WHETHER OR NOT KNOWN, HAVE REASON TO\r\n\t\t\tKNOW, HAVE BEEN ADVISED, OR ARE OTHERWISE AWARE OF ANY SUCH PURPOSE); AND (III) ANY AND ALL WARRANTIES OF NONINFRINGEMENT OR\r\n\t\t\tCONDITION OF TITLE.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tTHE PRODUCTS AND 4D SERVICES ARE INTENDED FOR TRAINING PURPOSES ONLY. AS SUCH THE PRODUCTS AND 4D SERVICES ARE NOT\r\n\t\t\tFAULT-TOLERANT AND ARE NOT DESIGNED, MANUFACTURED OR INTENDED FOR USE IN HAZARDOUS APPLICATIONS REQUIRING FAIL-SAFE PERFORMANCE,\r\n\t\t\tSUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR AIRCRAFT COMMUNICATION SYSTEMS, MASS TRANSIT, AIR TRAFFIC\r\n\t\t\tCONTROL, DIRECT LIFE SUPPORT MACHINES, WEAPONS SYSTEMS OR IN ANY OTHER APPLICATION IN WHICH THE FAILURE OF THE COMPONENT SYSTEMS\r\n\t\t\tCOULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE (\"HIGH RISK ACTIVITIES\"). ACCORDINGLY,\r\n\t\t\tWE DISCLAIM ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. YOU AGREE THAT 4D TECHNOLOGIES SHALL NOT BE\r\n\t\t\tLIABLE FOR ANY CLAIMS OR DAMAGES ARISING FROM OR RELATED TO THE USE OF THE PRODUCTS AND/OR 4D SERVICES IN SUCH APPLICATIONS.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tTO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL WE BE LIABLE TO YOU OR ANY THIRD PARTY FOR LOSS OF REVENUE, LOSS OF\r\n\t\t\tPROFITS OR ANY SPECIAL, INDIRECT, INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES OF ANY KIND ARISING OUT OF OR IN CONNECTION\r\n\t\t\tWITH THE PRODUCTS AND/OR 4D SERVICES, YOUR CONDUCT OR THE CONDUCT OF ANY OTHER USERS, INCLUDING, BUT NOT LIMITED TO, BODILY\r\n\t\t\tINJURY, EMOTIONAL DISTRESS, ANY OTHER DAMAGES AS A RESULT OF CONTACT WITH OTHER USERS AND/OR ANY DAMAGES CAUSED BY OR RESULTING\r\n\t\t\tFROM RELIANCE BY USER ON ANY INFORMATION OBTAINED FROM US, VIA THE PRODUCTS AND/OR 4D SERVICES OR THAT MAY RESULT FROM MISTAKES,\r\n\t\t\tOMISSIONS, INTERRUPTIONS, DEFECTS, VIRUSES, DELAYS IN OPERATION OR UNAUTHORIZED ACCESS TO THE PRODUCTS AND/OR 4D SERVICES,\r\n\t\t\tREGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT OR OTHERWISE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF\r\n\t\t\tSUCH DAMAGES OR ARE AWARE OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL OUR TOTAL CUMULATIVE LIABILITY EXCEED THE\r\n\t\t\tAGGREGATE OF THE NET AMOUNTS RECEIVED BY US FROM YOU, IF ANY, FOR THE ACCESS TO AND USE OF THE PRODUCTS AND/OR 4D SERVICES\r\n\t\t\tPROVIDED HEREUNDER IN THE TWELVE (12) MONTH PERIOD IMMEDIATELY PRECEEDING THE EVENT(S) GIVING RISE TO SUCH LIABILITY.\r\n\t\t

    \r\n\t
  34. \r\n\r\n\t
  35. \r\n\t\tINDEMNIFICATION. You agree, at your sole expense, to defend, indemnify and hold 4D Technologies, its officers, directors, managers,\r\n\t\tmembers, employees and agents, licensors, independent contractors, service providers and consultants, and their respective officers,\r\n\t\tdirectors, employees and agents, harmless from and against any and all actual or threatened suits, actions, proceedings, at law or\r\n\t\tin equity, claims, damages, payments, deficiencies, fines, judgments, settlements, liabilities, losses, costs and expenses,\r\n\t\tincluding, but not limited to, reasonable attorney fees, costs, penalties, interest and disbursements caused by, arising out of,\r\n\t\tresulting from, attributable to or in any way incidental to: (i) your use of the Products and/or 4D Services; (ii) your conduct;\r\n\t\t(iii) your violation of these TOS or any other 4D Technologies policy or applicable law and/or regulation; (iv) your violation of\r\n\t\tthe rights of any third party; or (v) any of your Submissions.\r\n\t
  36. \r\n\r\n\t
  37. \r\n\t\tCONFLICT RESOLUTION. You and 4D Technologies (each individually a “Party” and collectively the “Parties”) agree that any dispute\r\n\t\trelating to the Products and/or 4D Services will be resolved solely by the means set forth in this section. In the event that any\r\n\t\tsuch dispute arises, you agree to first contact us directly. The Parties agree to make a good faith effort to resolve the dispute.\r\n\t\tIf the matter remains unresolved for sixty (60) days after your initial contact with us regarding the dispute, the matter will be\r\n\t\tsubmitted to binding arbitration under the rules of the JAMS. Any such arbitration will be conducted in Concord, New Hampshire -\r\n\t\tUSA. The arbitrator(s) involved in settling any such dispute will have authority to grant specific performance and to allocate the\r\n\t\tcosts of arbitration between the Parties as the arbitrator(s) deems equitable. Any such judgments rendered by the arbitrator(s) may\r\n\t\tbe entered in any court having jurisdiction or application may be made to such court for judicial acceptance of any award and an\r\n\t\torder of enforcement, as the case may be.\r\n\t
  38. \r\n\t
  39. \r\n\t\tGOVERNING LAW; VENUE. Any dispute arising under or in connection with the subject matter contemplated herein or related to such\r\n\t\tsubject matter shall be governed by, and construed in accordance with, the substantive laws of the State of New Hampshire - USA,\r\n\t\twithout regard to its conflict of laws principles. You agree that any claim or dispute you may have against 4D Technologies must be\r\n\t\tresolved by a court located in Hillsboro New Hampshire, except as otherwise agreed to or as described in the Conflict Resolution\r\n\t\tparagraph above. You agree to submit to the personal jurisdiction of such courts for the purpose of litigating all such claims or\r\n\t\tdisputes. In addition to any other relief awarded, the prevailing party in any action arising out of your use of or access to the 4D\r\n\t\tServices shall be entitled to its reasonable attorneys’ fees and costs.\r\n\t
  40. \r\n\r\n\t
  41. \r\n\t\tWAIVER. 4D Technologies’ failure to strictly enforce any provision of these TOS and/or any other applicable policy will not\r\n\t\tconstitute a waiver of any such provision.\r\n\t
  42. \r\n\r\n\t
  43. \r\n\t\tENTIRE AGREEMENT. These TOS, any applicable Enterprise Subscription Agreement (as defined below) and any updates thereto, will\r\n\t\tconstitute the entire agreement between you and 4D Technologies concerning the 4D Services and supersedes all prior understandings,\r\n\t\tagreements and documentation relating to such subject matter.\r\n\t
  44. \r\n\r\n\t
  45. \r\n\t\tSEVERABILITY. If any provision of these TOS is or becomes or is deemed invalid, illegal or unenforceable under the applicable laws\r\n\t\tor regulations of any jurisdiction, such provision will be deemed amended to conform to such laws or regulations without materially\r\n\t\taltering the intention of the parties hereto, or it will be stricken and the remainder of these TOS will remain in full force and\r\n\t\teffect.\r\n\t
  46. \r\n\t
  47. \r\n\t\t

    \r\n\t\t\t23. CLAIMS OF COPYRIGHT INFRINGEMENT. If you believe that anything made available via the 4D Services infringes upon any\r\n\t\t\tcopyright which you own or control, you may file a notification of such infringement with our Designated Agent as set forth\r\n\t\t\tbelow.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tFor your complaint to be valid under the DMCA, you must provide the following information when providing notice of the claimed\r\n\t\t\tcopyright infringement:\r\n\t\t

    \r\n\t\t
      \r\n\t\t\t
    1. a. A physical or electronic signature of a person authorized to act on behalf of the copyright owner;
    2. \r\n\t\t\t
    3. b. Identification of the copyrighted work claimed to have been infringed;
    4. \r\n\t\t\t
    5. \r\n\t\t\t\tc. Identification of the material that is claimed to be infringing or to be the subject of the infringing activity and that\r\n\t\t\t\tis to be removed or access to which is to be disabled as well as information reasonably sufficient to permit 4D Technologies\r\n\t\t\t\tto locate the material;\r\n\t\t\t
    6. \r\n\t\t\t
    7. \r\n\t\t\t\td. Information reasonably sufficient to permit the service provider to contact the complaining party, such as an address,\r\n\t\t\t\ttelephone number, and, if available, an electronic mail address;\r\n\t\t\t
    8. \r\n\t\t\t
    9. \r\n\t\t\t\te. A statement that the complaining party has a good faith belief that use of the material in the manner complained of is\r\n\t\t\t\tnot authorized by the copyright owner, its agent, or law; and\r\n\t\t\t
    10. \r\n\t\t\t
    11. \r\n\t\t\t\tf. A statement that the information in the notification is accurate, and under penalty of perjury, that the complaining\r\n\t\t\t\tparty is authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.\r\n\t\t\t
    12. \r\n\t\t
    \r\n\t\t

    \r\n\t\t\tFor more details on the information required for valid notification, see 17 U.S.C. 512(c) (3). You should be aware that, under\r\n\t\t\tthe DCMA, claimants who make misrepresentations concerning copyright infringement may be liable for damages incurred as a result\r\n\t\t\tof the removal or blocking of the material, court costs, and attorneys’ fees.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tIf a notice of copyright infringement has been filed against you, you may file a counter notification with 4D Technologies’\r\n\t\t\tdesignated agent at the address listed below. Such counter notification must contain the following information:\r\n\t\t

    \r\n\t\t
      \r\n\t\t\t
    1. a. A physical or electronic signature;
    2. \r\n\t\t\t
    3. \r\n\t\t\t\tb. Identification of the material that has been removed or to which access has been disabled and the location at which the\r\n\t\t\t\tmaterial appeared before it was removed or access to it was disabled;\r\n\t\t\t
    4. \r\n\t\t\t
    5. \r\n\t\t\t\tc. A statement under penalty of perjury that the Member has a good faith belief that the material was removed or disabled as\r\n\t\t\t\ta result of mistake or misidentification; and\r\n\t\t\t
    6. \r\n\t\t\t
    7. \r\n\t\t\t\td. Your name, address, and telephone number, and a statement that you consent to the jurisdiction of the federal district\r\n\t\t\t\tcourt for the federal district in which you are located, and that you will accept service of process from the complainant.\r\n\t\t\t
    8. \r\n\t\t
    \r\n\t\t

    \r\n\t\t\tIf 4D Technologies receives a valid counter notification, the DMCA provides that the removed material will be restored, or\r\n\t\t\taccess re-enabled.\r\n\t\t

    \r\n\t\t

    Contact for DMCA complaints:

    \r\n\t\t

    \r\n\t\t\tEmail –\r\n\t\t\tregistrar@cadlearning.com\r\n\t\t

    \r\n\t\t

    Phone – (603) 641-3900

    \r\n\t
  48. \r\n\t
  49. \r\n\t\tINCIDENT REPORTING. Report violations of these TOS, spam, or other similar issues or problems at: registrar@cadlearning.com; or by\r\n\t\tmail at 4D Technologies, LLC, 360 Route 101, Building 2, Bedford, New Hampshire 03110.\r\n\t
  50. \r\n\t
  51. \r\n\t\t

    \r\n\t\t\tTRADEMARK AND COPYRIGHT NOTICE. CADLearning® is a registered trademark owned by 4D Technologies. You agree that all 4D\r\n\t\t\tTechnologies trademarks, trade names, service marks and other 4D Technologies logos and brand features, and product and service\r\n\t\t\tnames are trademarks and the property of 4D Technologies (the “4D Marks”). You agree not to display or use in any manner the 4D\r\n\t\t\tMarks without our prior written permission.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tAll other trademarks mentioned in conjunction with the 4D Services (“Third Party Marks”) are owned by their respective owners\r\n\t\t\tand are protected by United States and international law. You agree not to display or use in any manner the Third Party Marks\r\n\t\t\twithout express permission from the respective owner.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tCopyright © 2004 – 2019 4D Technologies, LLC, 360 Route 101, Building 2, Bedford, New Hampshire 03110 U.S.A. All rights\r\n\t\t\treserved.\r\n\t\t

    \r\n\t\t

    \r\n\t\t\tAdobe ® AIR® Copyright © 2007 – 2019. Adobe Systems Incorporated. All rights reserved. Adobe, Adobe AIR, and AIR are either\r\n\t\t\ttrademarks or registered trademarks in the United States and/or other countries.\r\n\t\t

    \r\n\t
  52. \r\n\t
  53. \r\n\t\tENTERPRISE CUSTOMERS. If you are not an individual customer or end user, but are purchasing access to the 4D Services for multiple\r\n\t\temployees, students or customers (collectively, “Students”), then you are required to enter into a separate Enterprise Subscription\r\n\t\tAgreement. Use of the 4D Services by you or any of your Students constitutes a representation that you have entered into an\r\n\t\tappropriate Enterprise Subscription Agreement. Except to the extent that the terms of your Enterprise Subscription Agreement\r\n\t\tconflicts with the provisions of these TOS, these TOS will also apply to your access to the 4D Services under your Enterprise\r\n\t\tSubscription Agreement. With the exception of this Section 16, these TOS and the AUP apply in all cases to your Students.\r\n\t
  54. \r\n
\r\n

THESE TERMS OF USE WERE LAST UPDATED: December 31, 2019

\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { TermsOfServiceComponent } from './TermsOfService.component';\r\n\r\n@NgModule({\r\n\timports: [CommonModule, RouterModule],\r\n\tdeclarations: [TermsOfServiceComponent],\r\n\texports: [TermsOfServiceComponent]\r\n})\r\nexport class TermsOfServiceModule {}\r\n","
\r\n
\r\n

{{'NewPlaylist' | translate}}

\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n {{'PleaseEnterAValidPlaylistNameBetween6And255CharactersLong' | translate}}\r\n
\r\n
\r\n
\r\n \r\n
","import { Component, Injectable, Injector, Input, OnInit } from '@angular/core';\r\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { DialogRef } from '@progress/kendo-angular-dialog';\r\nimport { EditBaseComponent, PlaylistsV1Client } from 'cadlearning.angular';\r\nimport { PlayListWithContentDto } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\ttemplateUrl: './playlistnew.component.html',\r\n\tstyleUrls: ['./playlistnew.component.scss'],\r\n})\r\n@Injectable()\r\nexport class PlayListNewComponent extends EditBaseComponent implements OnInit {\r\n\tpublic Form: UntypedFormGroup = undefined!;\r\n\r\n\t@Input() SaveAutomatically: boolean = true;\r\n\r\n\tconstructor(\r\n\t\tprivate playlistClient: PlaylistsV1Client,\r\n\t\tprivate fb: UntypedFormBuilder,\r\n\t\tprivate modalService: DialogRef,\r\n\t\tpublic injector: Injector\r\n\t) {\r\n\t\tsuper(injector);\r\n\t\tsuper.OverrideTranslationUri('/appmain');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\r\n\t\tthis.Form = this.fb.group({\r\n\t\t\tName: ['', Validators.compose([Validators.required, Validators.minLength(4), Validators.maxLength(255)])],\r\n\t\t});\r\n\r\n\t\tthis.IsLoaded = true;\r\n\t}\r\n\r\n\tpublic async SaveAndClose() {\r\n\t\tif (!this.Form.valid) {\r\n\t\t\tfor (const c in this.Form.controls) this.Form.controls[c].markAsTouched();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tthis.Working = true;\r\n\r\n\t\t\tlet newPlaylist: PlayListWithContentDto = {\r\n\t\t\t\tDescription: undefined,\r\n\t\t\t\tId: 0,\r\n\t\t\t\tName: this.Form.controls.Name.value,\r\n\t\t\t\tOwner: this.User.Name,\r\n\t\t\t\tOwnerId: this.User.Id,\r\n\t\t\t\tTimeStamp: undefined,\r\n\t\t\t\tOwningOrganizationId: undefined,\r\n\t\t\t\tOwningOrganization: undefined,\r\n\t\t\t};\r\n\r\n\t\t\t// Send the share request here.\r\n\t\t\tlet result: PlayListWithContentDto[];\r\n\t\t\tif (this.SaveAutomatically) {\r\n\t\t\t\tresult = await this.playlistClient.Upsert([newPlaylist]);\r\n\t\t\t} else {\r\n\t\t\t\tresult = [newPlaylist];\r\n\t\t\t}\r\n\r\n\t\t\tthis.modalService.close(result[0]);\r\n\t\t} catch (e) {\r\n\t\t\talert(e);\r\n\t\t} finally {\r\n\t\t\tthis.Working = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic Cancel() {\r\n\t\tthis.modalService.close(null);\r\n\t}\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { EnumTranslatePipe } from './enum-translation-pipe.component';\r\nimport { EventCastPipe } from './event-cast.pipe';\r\nimport { FormGroupCastPipe } from './formgroup-cast.pipe';\r\n\r\n@NgModule({\r\n declarations: [EnumTranslatePipe, FormGroupCastPipe, EventCastPipe],\r\n imports: [],\r\n exports: [EnumTranslatePipe, FormGroupCastPipe, EventCastPipe]\r\n})\r\nexport class PipesModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: PipesModule,\r\n\t\t\tproviders: []\r\n\t\t};\r\n\t}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { DirectivesModule } from '@app/directives/directives.module';\r\nimport { OdataComboBoxComponent } from '@app/shared/odatacombobox/odatacombobox.component';\r\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\r\nimport { InputsModule } from '@progress/kendo-angular-inputs';\r\nimport { LayoutModule } from '@progress/kendo-angular-layout';\r\nimport { DropDownFilterComponent } from './filters/DropDownFilter/DropDownFilter.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, InputsModule, DropDownsModule, LayoutModule, DirectivesModule],\r\n declarations: [OdataComboBoxComponent, DropDownFilterComponent],\r\n exports: [OdataComboBoxComponent, DropDownFilterComponent]\r\n})\r\nexport class SharedModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: SharedModule\r\n\t\t};\r\n\t}\r\n}\r\n","export function nameof(key: keyof T, instance?: T): keyof T {\r\n\treturn key;\r\n}\r\n\r\nexport class Guid {\r\n\tstatic newGuid() {\r\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n\t\t\tlet r = (Math.random() * 16) | 0,\r\n\t\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\r\n\t\t\treturn v.toString(16);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport function GetHostUrl(s: string): string {\r\n\tlet host = s.toLowerCase();\r\n\tswitch (host) {\r\n\t\tcase 'portal.beta.cadlearning.com':\r\n\t\tcase 'localhost':\r\n\t\tcase 'portal.local.cadlearning.com':\r\n\t\tcase 'portal.qa.cadlearning.com':\r\n\t\tcase 'portal.staging.cadlearning.com':\r\n\t\tcase 'portal.demo.cadlearning.com':\r\n\t\t\thost = '4d.cadlearning.com';\r\n\t\t\tbreak;\r\n\t\tcase 'dev.anhour.io':\r\n\t\tcase 'portal.beta.anhour.io':\r\n\t\tcase 'localhost':\r\n\t\tcase 'portal.local.anhour.io':\r\n\t\tcase 'portal.qa.anhour.io':\r\n\t\tcase 'portal.staging.anhour.io':\r\n\t\tcase 'portal.demo.anhour.io':\r\n\t\t\thost = 'portal.anhour.io';\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\treturn host;\r\n}\r\n\r\nexport function replaceGuidHyphens(s: any) {\r\n\tif (!s) return undefined;\r\n\treturn s.toString().replace(/-/g, '');\r\n}\r\n\r\nexport function addGuidHyphens(s: string) {\r\n\tif (!s) return undefined;\r\n\treturn [s.substring(0, 8), s.substring(8, 12), s.substring(12, 16), s.substring(16, 20), s.substring(20, 32)].join('-');\r\n}\r\n\r\nexport class ColorConverter {\r\n\tstatic getContrastColor(hex) {\r\n\t\tlet rgb = ColorConverter.hexToRgb(hex)!;\r\n\r\n\t\tlet d = 0;\r\n\r\n\t\t// Counting the perceptive luminance - human eye favors green color...\r\n\t\tlet a = 1 - (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\r\n\r\n\t\tif (a < 0.5) d = 0;\r\n\t\t// bright colors - black font\r\n\t\telse d = 255; // dark colors - white font\r\n\r\n\t\treturn ColorConverter.rgbToHex(d, d, d);\r\n\t}\r\n\r\n\tstatic hexToRgb(hex) {\r\n\t\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\t\treturn result\r\n\t\t\t? {\r\n\t\t\t\t\tr: parseInt(result[1], 16),\r\n\t\t\t\t\tg: parseInt(result[2], 16),\r\n\t\t\t\t\tb: parseInt(result[3], 16),\r\n\t\t\t }\r\n\t\t\t: null;\r\n\t}\r\n\r\n\tstatic rgbToHex(r, g, b) {\r\n\t\treturn '#' + ColorConverter.componentToHex(r) + ColorConverter.componentToHex(g) + ColorConverter.componentToHex(b);\r\n\t}\r\n\r\n\tstatic componentToHex(c) {\r\n\t\tconst hex = c.toString(16);\r\n\t\treturn hex.length === 1 ? '0' + hex : hex;\r\n\t}\r\n}\r\n","export const environment = {\r\n\tproduction: true,\r\n\tsite: null,\r\n\tblobUrl: null,\r\n\tApiUrl: null,\r\n\tLogoUrl: null,\r\n\tUseGoogleAnalytics: null,\r\n\tSignalRUrl: null\r\n};\r\n","/**\n * @license Angular v14.3.0\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵAnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE, sequence, style } from '@angular/animations';\nimport * as i0 from '@angular/core';\nimport { ɵRuntimeError, Injectable } from '@angular/core';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst LINE_START = '\\n - ';\nfunction invalidTimingValue(exp) {\n return new ɵRuntimeError(3000 /* RuntimeErrorCode.INVALID_TIMING_VALUE */, ngDevMode && `The provided timing value \"${exp}\" is invalid.`);\n}\nfunction negativeStepValue() {\n return new ɵRuntimeError(3100 /* RuntimeErrorCode.NEGATIVE_STEP_VALUE */, ngDevMode && 'Duration values below 0 are not allowed for this animation step.');\n}\nfunction negativeDelayValue() {\n return new ɵRuntimeError(3101 /* RuntimeErrorCode.NEGATIVE_DELAY_VALUE */, ngDevMode && 'Delay values below 0 are not allowed for this animation step.');\n}\nfunction invalidStyleParams(varName) {\n return new ɵRuntimeError(3001 /* RuntimeErrorCode.INVALID_STYLE_PARAMS */, ngDevMode &&\n `Unable to resolve the local animation param ${varName} in the given list of values`);\n}\nfunction invalidParamValue(varName) {\n return new ɵRuntimeError(3003 /* RuntimeErrorCode.INVALID_PARAM_VALUE */, ngDevMode && `Please provide a value for the animation param ${varName}`);\n}\nfunction invalidNodeType(nodeType) {\n return new ɵRuntimeError(3004 /* RuntimeErrorCode.INVALID_NODE_TYPE */, ngDevMode && `Unable to resolve animation metadata node #${nodeType}`);\n}\nfunction invalidCssUnitValue(userProvidedProperty, value) {\n return new ɵRuntimeError(3005 /* RuntimeErrorCode.INVALID_CSS_UNIT_VALUE */, ngDevMode && `Please provide a CSS unit value for ${userProvidedProperty}:${value}`);\n}\nfunction invalidTrigger() {\n return new ɵRuntimeError(3006 /* RuntimeErrorCode.INVALID_TRIGGER */, ngDevMode &&\n 'animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\\'@foo\\', [...]))');\n}\nfunction invalidDefinition() {\n return new ɵRuntimeError(3007 /* RuntimeErrorCode.INVALID_DEFINITION */, ngDevMode && 'only state() and transition() definitions can sit inside of a trigger()');\n}\nfunction invalidState(metadataName, missingSubs) {\n return new ɵRuntimeError(3008 /* RuntimeErrorCode.INVALID_STATE */, ngDevMode &&\n `state(\"${metadataName}\", ...) must define default values for all the following style substitutions: ${missingSubs.join(', ')}`);\n}\nfunction invalidStyleValue(value) {\n return new ɵRuntimeError(3002 /* RuntimeErrorCode.INVALID_STYLE_VALUE */, ngDevMode && `The provided style string value ${value} is not allowed.`);\n}\nfunction invalidProperty(prop) {\n return new ɵRuntimeError(3009 /* RuntimeErrorCode.INVALID_PROPERTY */, ngDevMode &&\n `The provided animation property \"${prop}\" is not a supported CSS property for animations`);\n}\nfunction invalidParallelAnimation(prop, firstStart, firstEnd, secondStart, secondEnd) {\n return new ɵRuntimeError(3010 /* RuntimeErrorCode.INVALID_PARALLEL_ANIMATION */, ngDevMode &&\n `The CSS property \"${prop}\" that exists between the times of \"${firstStart}ms\" and \"${firstEnd}ms\" is also being animated in a parallel animation between the times of \"${secondStart}ms\" and \"${secondEnd}ms\"`);\n}\nfunction invalidKeyframes() {\n return new ɵRuntimeError(3011 /* RuntimeErrorCode.INVALID_KEYFRAMES */, ngDevMode && `keyframes() must be placed inside of a call to animate()`);\n}\nfunction invalidOffset() {\n return new ɵRuntimeError(3012 /* RuntimeErrorCode.INVALID_OFFSET */, ngDevMode && `Please ensure that all keyframe offsets are between 0 and 1`);\n}\nfunction keyframeOffsetsOutOfOrder() {\n return new ɵRuntimeError(3200 /* RuntimeErrorCode.KEYFRAME_OFFSETS_OUT_OF_ORDER */, ngDevMode && `Please ensure that all keyframe offsets are in order`);\n}\nfunction keyframesMissingOffsets() {\n return new ɵRuntimeError(3202 /* RuntimeErrorCode.KEYFRAMES_MISSING_OFFSETS */, ngDevMode && `Not all style() steps within the declared keyframes() contain offsets`);\n}\nfunction invalidStagger() {\n return new ɵRuntimeError(3013 /* RuntimeErrorCode.INVALID_STAGGER */, ngDevMode && `stagger() can only be used inside of query()`);\n}\nfunction invalidQuery(selector) {\n return new ɵRuntimeError(3014 /* RuntimeErrorCode.INVALID_QUERY */, ngDevMode &&\n `\\`query(\"${selector}\")\\` returned zero elements. (Use \\`query(\"${selector}\", { optional: true })\\` if you wish to allow this.)`);\n}\nfunction invalidExpression(expr) {\n return new ɵRuntimeError(3015 /* RuntimeErrorCode.INVALID_EXPRESSION */, ngDevMode && `The provided transition expression \"${expr}\" is not supported`);\n}\nfunction invalidTransitionAlias(alias) {\n return new ɵRuntimeError(3016 /* RuntimeErrorCode.INVALID_TRANSITION_ALIAS */, ngDevMode && `The transition alias value \"${alias}\" is not supported`);\n}\nfunction validationFailed(errors) {\n return new ɵRuntimeError(3500 /* RuntimeErrorCode.VALIDATION_FAILED */, ngDevMode && `animation validation failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction buildingFailed(errors) {\n return new ɵRuntimeError(3501 /* RuntimeErrorCode.BUILDING_FAILED */, ngDevMode && `animation building failed:\\n${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerBuildFailed(name, errors) {\n return new ɵRuntimeError(3404 /* RuntimeErrorCode.TRIGGER_BUILD_FAILED */, ngDevMode &&\n `The animation trigger \"${name}\" has failed to build due to the following errors:\\n - ${errors.map(err => err.message).join('\\n - ')}`);\n}\nfunction animationFailed(errors) {\n return new ɵRuntimeError(3502 /* RuntimeErrorCode.ANIMATION_FAILED */, ngDevMode &&\n `Unable to animate due to the following errors:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction registerFailed(errors) {\n return new ɵRuntimeError(3503 /* RuntimeErrorCode.REGISTRATION_FAILED */, ngDevMode &&\n `Unable to build the animation due to the following errors: ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingOrDestroyedAnimation() {\n return new ɵRuntimeError(3300 /* RuntimeErrorCode.MISSING_OR_DESTROYED_ANIMATION */, ngDevMode && 'The requested animation doesn\\'t exist or has already been destroyed');\n}\nfunction createAnimationFailed(errors) {\n return new ɵRuntimeError(3504 /* RuntimeErrorCode.CREATE_ANIMATION_FAILED */, ngDevMode &&\n `Unable to create the animation due to the following errors:${errors.map(err => err.message).join('\\n')}`);\n}\nfunction missingPlayer(id) {\n return new ɵRuntimeError(3301 /* RuntimeErrorCode.MISSING_PLAYER */, ngDevMode && `Unable to find the timeline player referenced by ${id}`);\n}\nfunction missingTrigger(phase, name) {\n return new ɵRuntimeError(3302 /* RuntimeErrorCode.MISSING_TRIGGER */, ngDevMode &&\n `Unable to listen on the animation trigger event \"${phase}\" because the animation trigger \"${name}\" doesn\\'t exist!`);\n}\nfunction missingEvent(name) {\n return new ɵRuntimeError(3303 /* RuntimeErrorCode.MISSING_EVENT */, ngDevMode &&\n `Unable to listen on the animation trigger \"${name}\" because the provided event is undefined!`);\n}\nfunction unsupportedTriggerEvent(phase, name) {\n return new ɵRuntimeError(3400 /* RuntimeErrorCode.UNSUPPORTED_TRIGGER_EVENT */, ngDevMode &&\n `The provided animation trigger event \"${phase}\" for the animation trigger \"${name}\" is not supported!`);\n}\nfunction unregisteredTrigger(name) {\n return new ɵRuntimeError(3401 /* RuntimeErrorCode.UNREGISTERED_TRIGGER */, ngDevMode && `The provided animation trigger \"${name}\" has not been registered!`);\n}\nfunction triggerTransitionsFailed(errors) {\n return new ɵRuntimeError(3402 /* RuntimeErrorCode.TRIGGER_TRANSITIONS_FAILED */, ngDevMode &&\n `Unable to process animations due to the following failed trigger transitions\\n ${errors.map(err => err.message).join('\\n')}`);\n}\nfunction triggerParsingFailed(name, errors) {\n return new ɵRuntimeError(3403 /* RuntimeErrorCode.TRIGGER_PARSING_FAILED */, ngDevMode &&\n `Animation parsing for the ${name} trigger have failed:${LINE_START}${errors.map(err => err.message).join(LINE_START)}`);\n}\nfunction transitionFailed(name, errors) {\n return new ɵRuntimeError(3505 /* RuntimeErrorCode.TRANSITION_FAILED */, ngDevMode && `@${name} has failed due to:\\n ${errors.map(err => err.message).join('\\n- ')}`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Set of all animatable CSS properties\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties\n */\nconst ANIMATABLE_PROP_SET = new Set([\n '-moz-outline-radius',\n '-moz-outline-radius-bottomleft',\n '-moz-outline-radius-bottomright',\n '-moz-outline-radius-topleft',\n '-moz-outline-radius-topright',\n '-ms-grid-columns',\n '-ms-grid-rows',\n '-webkit-line-clamp',\n '-webkit-text-fill-color',\n '-webkit-text-stroke',\n '-webkit-text-stroke-color',\n 'accent-color',\n 'all',\n 'backdrop-filter',\n 'background',\n 'background-color',\n 'background-position',\n 'background-size',\n 'block-size',\n 'border',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-width',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image-outset',\n 'border-image-slice',\n 'border-image-width',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-width',\n 'border-left',\n 'border-left-color',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-width',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-shadow',\n 'caret-color',\n 'clip',\n 'clip-path',\n 'color',\n 'column-count',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-width',\n 'column-width',\n 'columns',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-grow',\n 'flex-shrink',\n 'font',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'grid-column-gap',\n 'grid-gap',\n 'grid-row-gap',\n 'grid-template-columns',\n 'grid-template-rows',\n 'height',\n 'inline-size',\n 'input-security',\n 'inset',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'left',\n 'letter-spacing',\n 'line-clamp',\n 'line-height',\n 'margin',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'mask',\n 'mask-border',\n 'mask-position',\n 'mask-size',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-lines',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-width',\n 'padding',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'perspective',\n 'perspective-origin',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-coordinate',\n 'scroll-snap-destination',\n 'scrollbar-color',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'tab-size',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-indent',\n 'text-shadow',\n 'text-underline-offset',\n 'top',\n 'transform',\n 'transform-origin',\n 'translate',\n 'vertical-align',\n 'visibility',\n 'width',\n 'word-spacing',\n 'z-index',\n 'zoom',\n]);\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction isBrowser() {\n return (typeof window !== 'undefined' && typeof window.document !== 'undefined');\n}\nfunction isNode() {\n // Checking only for `process` isn't enough to identify whether or not we're in a Node\n // environment, because Webpack by default will polyfill the `process`. While we can discern\n // that Webpack polyfilled it by looking at `process.browser`, it's very Webpack-specific and\n // might not be future-proof. Instead we look at the stringified version of `process` which\n // is `[object process]` in Node and `[object Object]` when polyfilled.\n return typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n}\nfunction optimizeGroupPlayer(players) {\n switch (players.length) {\n case 0:\n return new NoopAnimationPlayer();\n case 1:\n return players[0];\n default:\n return new ɵAnimationGroupPlayer(players);\n }\n}\nfunction normalizeKeyframes$1(driver, normalizer, element, keyframes, preStyles = new Map(), postStyles = new Map()) {\n const errors = [];\n const normalizedKeyframes = [];\n let previousOffset = -1;\n let previousKeyframe = null;\n keyframes.forEach(kf => {\n const offset = kf.get('offset');\n const isSameOffset = offset == previousOffset;\n const normalizedKeyframe = (isSameOffset && previousKeyframe) || new Map();\n kf.forEach((val, prop) => {\n let normalizedProp = prop;\n let normalizedValue = val;\n if (prop !== 'offset') {\n normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n switch (normalizedValue) {\n case ɵPRE_STYLE:\n normalizedValue = preStyles.get(prop);\n break;\n case AUTO_STYLE:\n normalizedValue = postStyles.get(prop);\n break;\n default:\n normalizedValue =\n normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n break;\n }\n }\n normalizedKeyframe.set(normalizedProp, normalizedValue);\n });\n if (!isSameOffset) {\n normalizedKeyframes.push(normalizedKeyframe);\n }\n previousKeyframe = normalizedKeyframe;\n previousOffset = offset;\n });\n if (errors.length) {\n throw animationFailed(errors);\n }\n return normalizedKeyframes;\n}\nfunction listenOnPlayer(player, eventName, event, callback) {\n switch (eventName) {\n case 'start':\n player.onStart(() => callback(event && copyAnimationEvent(event, 'start', player)));\n break;\n case 'done':\n player.onDone(() => callback(event && copyAnimationEvent(event, 'done', player)));\n break;\n case 'destroy':\n player.onDestroy(() => callback(event && copyAnimationEvent(event, 'destroy', player)));\n break;\n }\n}\nfunction copyAnimationEvent(e, phaseName, player) {\n const totalTime = player.totalTime;\n const disabled = player.disabled ? true : false;\n const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);\n const data = e['_data'];\n if (data != null) {\n event['_data'] = data;\n }\n return event;\n}\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {\n return { element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled };\n}\nfunction getOrSetDefaultValue(map, key, defaultValue) {\n let value = map.get(key);\n if (!value) {\n map.set(key, value = defaultValue);\n }\n return value;\n}\nfunction parseTimelineCommand(command) {\n const separatorPos = command.indexOf(':');\n const id = command.substring(1, separatorPos);\n const action = command.slice(separatorPos + 1);\n return [id, action];\n}\nlet _contains = (elm1, elm2) => false;\nlet _query = (element, selector, multi) => {\n return [];\n};\nlet _documentElement = null;\nfunction getParentElement(element) {\n const parent = element.parentNode || element.host; // consider host to support shadow DOM\n if (parent === _documentElement) {\n return null;\n }\n return parent;\n}\n// Define utility methods for browsers and platform-server(domino) where Element\n// and utility methods exist.\nconst _isNode = isNode();\nif (_isNode || typeof Element !== 'undefined') {\n if (!isBrowser()) {\n _contains = (elm1, elm2) => elm1.contains(elm2);\n }\n else {\n // Read the document element in an IIFE that's been marked pure to avoid a top-level property\n // read that may prevent tree-shaking.\n _documentElement = /* @__PURE__ */ (() => document.documentElement)();\n _contains = (elm1, elm2) => {\n while (elm2) {\n if (elm2 === elm1) {\n return true;\n }\n elm2 = getParentElement(elm2);\n }\n return false;\n };\n }\n _query = (element, selector, multi) => {\n if (multi) {\n return Array.from(element.querySelectorAll(selector));\n }\n const elem = element.querySelector(selector);\n return elem ? [elem] : [];\n };\n}\nfunction containsVendorPrefix(prop) {\n // Webkit is the only real popular vendor prefix nowadays\n // cc: http://shouldiprefix.com/\n return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\nlet _CACHED_BODY = null;\nlet _IS_WEBKIT = false;\nfunction validateStyleProperty(prop) {\n if (!_CACHED_BODY) {\n _CACHED_BODY = getBodyNode() || {};\n _IS_WEBKIT = _CACHED_BODY.style ? ('WebkitAppearance' in _CACHED_BODY.style) : false;\n }\n let result = true;\n if (_CACHED_BODY.style && !containsVendorPrefix(prop)) {\n result = prop in _CACHED_BODY.style;\n if (!result && _IS_WEBKIT) {\n const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.slice(1);\n result = camelProp in _CACHED_BODY.style;\n }\n }\n return result;\n}\nfunction validateWebAnimatableStyleProperty(prop) {\n return ANIMATABLE_PROP_SET.has(prop);\n}\nfunction getBodyNode() {\n if (typeof document != 'undefined') {\n return document.body;\n }\n return null;\n}\nconst containsElement = _contains;\nconst invokeQuery = _query;\nfunction hypenatePropsKeys(original) {\n const newMap = new Map();\n original.forEach((val, prop) => {\n const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');\n newMap.set(newProp, val);\n });\n return newMap;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @publicApi\n */\nclass NoopAnimationDriver {\n validateStyleProperty(prop) {\n return validateStyleProperty(prop);\n }\n matchesElement(_element, _selector) {\n // This method is deprecated and no longer in use so we return false.\n return false;\n }\n containsElement(elm1, elm2) {\n return containsElement(elm1, elm2);\n }\n getParentElement(element) {\n return getParentElement(element);\n }\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n computeStyle(element, prop, defaultValue) {\n return defaultValue || '';\n }\n animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n return new NoopAnimationPlayer(duration, delay);\n }\n}\nNoopAnimationDriver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nNoopAnimationDriver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationDriver });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationDriver, decorators: [{\n type: Injectable\n }] });\n/**\n * @publicApi\n */\nclass AnimationDriver {\n}\nAnimationDriver.NOOP = ( /* @__PURE__ */new NoopAnimationDriver());\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ONE_SECOND = 1000;\nconst SUBSTITUTION_EXPR_START = '{{';\nconst SUBSTITUTION_EXPR_END = '}}';\nconst ENTER_CLASSNAME = 'ng-enter';\nconst LEAVE_CLASSNAME = 'ng-leave';\nconst NG_TRIGGER_CLASSNAME = 'ng-trigger';\nconst NG_TRIGGER_SELECTOR = '.ng-trigger';\nconst NG_ANIMATING_CLASSNAME = 'ng-animating';\nconst NG_ANIMATING_SELECTOR = '.ng-animating';\nfunction resolveTimingValue(value) {\n if (typeof value == 'number')\n return value;\n const matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n if (!matches || matches.length < 2)\n return 0;\n return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\nfunction _convertTimeValueToMS(value, unit) {\n switch (unit) {\n case 's':\n return value * ONE_SECOND;\n default: // ms or something else\n return value;\n }\n}\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n return timings.hasOwnProperty('duration') ?\n timings :\n parseTimeExpression(timings, errors, allowNegativeValues);\n}\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n const regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n let duration;\n let delay = 0;\n let easing = '';\n if (typeof exp === 'string') {\n const matches = exp.match(regex);\n if (matches === null) {\n errors.push(invalidTimingValue(exp));\n return { duration: 0, delay: 0, easing: '' };\n }\n duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n const delayMatch = matches[3];\n if (delayMatch != null) {\n delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);\n }\n const easingVal = matches[5];\n if (easingVal) {\n easing = easingVal;\n }\n }\n else {\n duration = exp;\n }\n if (!allowNegativeValues) {\n let containsErrors = false;\n let startIndex = errors.length;\n if (duration < 0) {\n errors.push(negativeStepValue());\n containsErrors = true;\n }\n if (delay < 0) {\n errors.push(negativeDelayValue());\n containsErrors = true;\n }\n if (containsErrors) {\n errors.splice(startIndex, 0, invalidTimingValue(exp));\n }\n }\n return { duration, delay, easing };\n}\nfunction copyObj(obj, destination = {}) {\n Object.keys(obj).forEach(prop => {\n destination[prop] = obj[prop];\n });\n return destination;\n}\nfunction convertToMap(obj) {\n const styleMap = new Map();\n Object.keys(obj).forEach(prop => {\n const val = obj[prop];\n styleMap.set(prop, val);\n });\n return styleMap;\n}\nfunction normalizeKeyframes(keyframes) {\n if (!keyframes.length) {\n return [];\n }\n if (keyframes[0] instanceof Map) {\n return keyframes;\n }\n return keyframes.map(kf => convertToMap(kf));\n}\nfunction normalizeStyles(styles) {\n const normalizedStyles = new Map();\n if (Array.isArray(styles)) {\n styles.forEach(data => copyStyles(data, normalizedStyles));\n }\n else {\n copyStyles(styles, normalizedStyles);\n }\n return normalizedStyles;\n}\nfunction copyStyles(styles, destination = new Map(), backfill) {\n if (backfill) {\n for (let [prop, val] of backfill) {\n destination.set(prop, val);\n }\n }\n for (let [prop, val] of styles) {\n destination.set(prop, val);\n }\n return destination;\n}\nfunction getStyleAttributeString(element, key, value) {\n // Return the key-value pair string to be added to the style attribute for the\n // given CSS style key.\n if (value) {\n return key + ':' + value + ';';\n }\n else {\n return '';\n }\n}\nfunction writeStyleAttribute(element) {\n // Read the style property of the element and manually reflect it to the\n // style attribute. This is needed because Domino on platform-server doesn't\n // understand the full set of allowed CSS properties and doesn't reflect some\n // of them automatically.\n let styleAttrValue = '';\n for (let i = 0; i < element.style.length; i++) {\n const key = element.style.item(i);\n styleAttrValue += getStyleAttributeString(element, key, element.style.getPropertyValue(key));\n }\n for (const key in element.style) {\n // Skip internal Domino properties that don't need to be reflected.\n if (!element.style.hasOwnProperty(key) || key.startsWith('_')) {\n continue;\n }\n const dashKey = camelCaseToDashCase(key);\n styleAttrValue += getStyleAttributeString(element, dashKey, element.style[key]);\n }\n element.setAttribute('style', styleAttrValue);\n}\nfunction setStyles(element, styles, formerStyles) {\n if (element['style']) {\n styles.forEach((val, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n if (formerStyles && !formerStyles.has(prop)) {\n formerStyles.set(prop, element.style[camelProp]);\n }\n element.style[camelProp] = val;\n });\n // On the server set the 'style' attribute since it's not automatically reflected.\n if (isNode()) {\n writeStyleAttribute(element);\n }\n }\n}\nfunction eraseStyles(element, styles) {\n if (element['style']) {\n styles.forEach((_, prop) => {\n const camelProp = dashCaseToCamelCase(prop);\n element.style[camelProp] = '';\n });\n // On the server set the 'style' attribute since it's not automatically reflected.\n if (isNode()) {\n writeStyleAttribute(element);\n }\n }\n}\nfunction normalizeAnimationEntry(steps) {\n if (Array.isArray(steps)) {\n if (steps.length == 1)\n return steps[0];\n return sequence(steps);\n }\n return steps;\n}\nfunction validateStyleParams(value, options, errors) {\n const params = options.params || {};\n const matches = extractStyleParams(value);\n if (matches.length) {\n matches.forEach(varName => {\n if (!params.hasOwnProperty(varName)) {\n errors.push(invalidStyleParams(varName));\n }\n });\n }\n}\nconst PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\\\s*(.+?)\\\\s*${SUBSTITUTION_EXPR_END}`, 'g');\nfunction extractStyleParams(value) {\n let params = [];\n if (typeof value === 'string') {\n let match;\n while (match = PARAM_REGEX.exec(value)) {\n params.push(match[1]);\n }\n PARAM_REGEX.lastIndex = 0;\n }\n return params;\n}\nfunction interpolateParams(value, params, errors) {\n const original = value.toString();\n const str = original.replace(PARAM_REGEX, (_, varName) => {\n let localVal = params[varName];\n // this means that the value was never overridden by the data passed in by the user\n if (localVal == null) {\n errors.push(invalidParamValue(varName));\n localVal = '';\n }\n return localVal.toString();\n });\n // we do this to assert that numeric values stay as they are\n return str == original ? value : str;\n}\nfunction iteratorToArray(iterator) {\n const arr = [];\n let item = iterator.next();\n while (!item.done) {\n arr.push(item.value);\n item = iterator.next();\n }\n return arr;\n}\nconst DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nfunction dashCaseToCamelCase(input) {\n return input.replace(DASH_CASE_REGEXP, (...m) => m[1].toUpperCase());\n}\nfunction camelCaseToDashCase(input) {\n return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n return duration === 0 || delay === 0;\n}\nfunction balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {\n if (previousStyles.size && keyframes.length) {\n let startingKeyframe = keyframes[0];\n let missingStyleProps = [];\n previousStyles.forEach((val, prop) => {\n if (!startingKeyframe.has(prop)) {\n missingStyleProps.push(prop);\n }\n startingKeyframe.set(prop, val);\n });\n if (missingStyleProps.length) {\n for (let i = 1; i < keyframes.length; i++) {\n let kf = keyframes[i];\n missingStyleProps.forEach(prop => kf.set(prop, computeStyle(element, prop)));\n }\n }\n }\n return keyframes;\n}\nfunction visitDslNode(visitor, node, context) {\n switch (node.type) {\n case 7 /* AnimationMetadataType.Trigger */:\n return visitor.visitTrigger(node, context);\n case 0 /* AnimationMetadataType.State */:\n return visitor.visitState(node, context);\n case 1 /* AnimationMetadataType.Transition */:\n return visitor.visitTransition(node, context);\n case 2 /* AnimationMetadataType.Sequence */:\n return visitor.visitSequence(node, context);\n case 3 /* AnimationMetadataType.Group */:\n return visitor.visitGroup(node, context);\n case 4 /* AnimationMetadataType.Animate */:\n return visitor.visitAnimate(node, context);\n case 5 /* AnimationMetadataType.Keyframes */:\n return visitor.visitKeyframes(node, context);\n case 6 /* AnimationMetadataType.Style */:\n return visitor.visitStyle(node, context);\n case 8 /* AnimationMetadataType.Reference */:\n return visitor.visitReference(node, context);\n case 9 /* AnimationMetadataType.AnimateChild */:\n return visitor.visitAnimateChild(node, context);\n case 10 /* AnimationMetadataType.AnimateRef */:\n return visitor.visitAnimateRef(node, context);\n case 11 /* AnimationMetadataType.Query */:\n return visitor.visitQuery(node, context);\n case 12 /* AnimationMetadataType.Stagger */:\n return visitor.visitStagger(node, context);\n default:\n throw invalidNodeType(node.type);\n }\n}\nfunction computeStyle(element, prop) {\n return window.getComputedStyle(element)[prop];\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;\nfunction createListOfWarnings(warnings) {\n const LINE_START = '\\n - ';\n return `${LINE_START}${warnings.filter(Boolean).map(warning => warning).join(LINE_START)}`;\n}\nfunction warnValidation(warnings) {\n NG_DEV_MODE && console.warn(`animation validation warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnTriggerBuild(name, warnings) {\n NG_DEV_MODE &&\n console.warn(`The animation trigger \"${name}\" has built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction warnRegister(warnings) {\n NG_DEV_MODE &&\n console.warn(`Animation built with the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction triggerParsingWarnings(name, warnings) {\n NG_DEV_MODE &&\n console.warn(`Animation parsing for the ${name} trigger presents the following warnings:${createListOfWarnings(warnings)}`);\n}\nfunction pushUnrecognizedPropertiesWarning(warnings, props) {\n if (props.length) {\n warnings.push(`The following provided properties are not recognized: ${props.join(', ')}`);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ANY_STATE = '*';\nfunction parseTransitionExpr(transitionValue, errors) {\n const expressions = [];\n if (typeof transitionValue == 'string') {\n transitionValue.split(/\\s*,\\s*/).forEach(str => parseInnerTransitionStr(str, expressions, errors));\n }\n else {\n expressions.push(transitionValue);\n }\n return expressions;\n}\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n if (eventStr[0] == ':') {\n const result = parseAnimationAlias(eventStr, errors);\n if (typeof result == 'function') {\n expressions.push(result);\n return;\n }\n eventStr = result;\n }\n const match = eventStr.match(/^(\\*|[-\\w]+)\\s*()\\s*(\\*|[-\\w]+)$/);\n if (match == null || match.length < 4) {\n errors.push(invalidExpression(eventStr));\n return expressions;\n }\n const fromState = match[1];\n const separator = match[2];\n const toState = match[3];\n expressions.push(makeLambdaFromStates(fromState, toState));\n const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n if (separator[0] == '<' && !isFullAnyStateExpr) {\n expressions.push(makeLambdaFromStates(toState, fromState));\n }\n}\nfunction parseAnimationAlias(alias, errors) {\n switch (alias) {\n case ':enter':\n return 'void => *';\n case ':leave':\n return '* => void';\n case ':increment':\n return (fromState, toState) => parseFloat(toState) > parseFloat(fromState);\n case ':decrement':\n return (fromState, toState) => parseFloat(toState) < parseFloat(fromState);\n default:\n errors.push(invalidTransitionAlias(alias));\n return '* => *';\n }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\nconst TRUE_BOOLEAN_VALUES = new Set(['true', '1']);\nconst FALSE_BOOLEAN_VALUES = new Set(['false', '0']);\nfunction makeLambdaFromStates(lhs, rhs) {\n const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n return (fromState, toState) => {\n let lhsMatch = lhs == ANY_STATE || lhs == fromState;\n let rhsMatch = rhs == ANY_STATE || rhs == toState;\n if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n }\n if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n }\n return lhsMatch && rhsMatch;\n };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst SELF_TOKEN = ':self';\nconst SELF_TOKEN_REGEX = new RegExp(`\\s*${SELF_TOKEN}\\s*,?`, 'g');\n/*\n * [Validation]\n * The visitor code below will traverse the animation AST generated by the animation verb functions\n * (the output is a tree of objects) and attempt to perform a series of validations on the data. The\n * following corner-cases will be validated:\n *\n * 1. Overlap of animations\n * Given that a CSS property cannot be animated in more than one place at the same time, it's\n * important that this behavior is detected and validated. The way in which this occurs is that\n * each time a style property is examined, a string-map containing the property will be updated with\n * the start and end times for when the property is used within an animation step.\n *\n * If there are two or more parallel animations that are currently running (these are invoked by the\n * group()) on the same element then the validator will throw an error. Since the start/end timing\n * values are collected for each property then if the current animation step is animating the same\n * property and its timing values fall anywhere into the window of time that the property is\n * currently being animated within then this is what causes an error.\n *\n * 2. Timing values\n * The validator will validate to see if a timing value of `duration delay easing` or\n * `durationNumber` is valid or not.\n *\n * (note that upon validation the code below will replace the timing data with an object containing\n * {duration,delay,easing}.\n *\n * 3. Offset Validation\n * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().\n * Offsets within keyframes() are considered valid when:\n *\n * - No offsets are used at all\n * - Each style() entry contains an offset value\n * - Each offset is between 0 and 1\n * - Each offset is greater to or equal than the previous one\n *\n * Otherwise an error will be thrown.\n */\nfunction buildAnimationAst(driver, metadata, errors, warnings) {\n return new AnimationAstBuilderVisitor(driver).build(metadata, errors, warnings);\n}\nconst ROOT_SELECTOR = '';\nclass AnimationAstBuilderVisitor {\n constructor(_driver) {\n this._driver = _driver;\n }\n build(metadata, errors, warnings) {\n const context = new AnimationAstBuilderContext(errors);\n this._resetContextStyleTimingState(context);\n const ast = visitDslNode(this, normalizeAnimationEntry(metadata), context);\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (context.unsupportedCSSPropertiesFound.size) {\n pushUnrecognizedPropertiesWarning(warnings, [...context.unsupportedCSSPropertiesFound.keys()]);\n }\n }\n return ast;\n }\n _resetContextStyleTimingState(context) {\n context.currentQuerySelector = ROOT_SELECTOR;\n context.collectedStyles = new Map();\n context.collectedStyles.set(ROOT_SELECTOR, new Map());\n context.currentTime = 0;\n }\n visitTrigger(metadata, context) {\n let queryCount = context.queryCount = 0;\n let depCount = context.depCount = 0;\n const states = [];\n const transitions = [];\n if (metadata.name.charAt(0) == '@') {\n context.errors.push(invalidTrigger());\n }\n metadata.definitions.forEach(def => {\n this._resetContextStyleTimingState(context);\n if (def.type == 0 /* AnimationMetadataType.State */) {\n const stateDef = def;\n const name = stateDef.name;\n name.toString().split(/\\s*,\\s*/).forEach(n => {\n stateDef.name = n;\n states.push(this.visitState(stateDef, context));\n });\n stateDef.name = name;\n }\n else if (def.type == 1 /* AnimationMetadataType.Transition */) {\n const transition = this.visitTransition(def, context);\n queryCount += transition.queryCount;\n depCount += transition.depCount;\n transitions.push(transition);\n }\n else {\n context.errors.push(invalidDefinition());\n }\n });\n return {\n type: 7 /* AnimationMetadataType.Trigger */,\n name: metadata.name,\n states,\n transitions,\n queryCount,\n depCount,\n options: null\n };\n }\n visitState(metadata, context) {\n const styleAst = this.visitStyle(metadata.styles, context);\n const astParams = (metadata.options && metadata.options.params) || null;\n if (styleAst.containsDynamicStyles) {\n const missingSubs = new Set();\n const params = astParams || {};\n styleAst.styles.forEach(style => {\n if (style instanceof Map) {\n style.forEach(value => {\n extractStyleParams(value).forEach(sub => {\n if (!params.hasOwnProperty(sub)) {\n missingSubs.add(sub);\n }\n });\n });\n }\n });\n if (missingSubs.size) {\n const missingSubsArr = iteratorToArray(missingSubs.values());\n context.errors.push(invalidState(metadata.name, missingSubsArr));\n }\n }\n return {\n type: 0 /* AnimationMetadataType.State */,\n name: metadata.name,\n style: styleAst,\n options: astParams ? { params: astParams } : null\n };\n }\n visitTransition(metadata, context) {\n context.queryCount = 0;\n context.depCount = 0;\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n const matchers = parseTransitionExpr(metadata.expr, context.errors);\n return {\n type: 1 /* AnimationMetadataType.Transition */,\n matchers,\n animation,\n queryCount: context.queryCount,\n depCount: context.depCount,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitSequence(metadata, context) {\n return {\n type: 2 /* AnimationMetadataType.Sequence */,\n steps: metadata.steps.map(s => visitDslNode(this, s, context)),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitGroup(metadata, context) {\n const currentTime = context.currentTime;\n let furthestTime = 0;\n const steps = metadata.steps.map(step => {\n context.currentTime = currentTime;\n const innerAst = visitDslNode(this, step, context);\n furthestTime = Math.max(furthestTime, context.currentTime);\n return innerAst;\n });\n context.currentTime = furthestTime;\n return {\n type: 3 /* AnimationMetadataType.Group */,\n steps,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitAnimate(metadata, context) {\n const timingAst = constructTimingAst(metadata.timings, context.errors);\n context.currentAnimateTimings = timingAst;\n let styleAst;\n let styleMetadata = metadata.styles ? metadata.styles : style({});\n if (styleMetadata.type == 5 /* AnimationMetadataType.Keyframes */) {\n styleAst = this.visitKeyframes(styleMetadata, context);\n }\n else {\n let styleMetadata = metadata.styles;\n let isEmpty = false;\n if (!styleMetadata) {\n isEmpty = true;\n const newStyleData = {};\n if (timingAst.easing) {\n newStyleData['easing'] = timingAst.easing;\n }\n styleMetadata = style(newStyleData);\n }\n context.currentTime += timingAst.duration + timingAst.delay;\n const _styleAst = this.visitStyle(styleMetadata, context);\n _styleAst.isEmptyStep = isEmpty;\n styleAst = _styleAst;\n }\n context.currentAnimateTimings = null;\n return {\n type: 4 /* AnimationMetadataType.Animate */,\n timings: timingAst,\n style: styleAst,\n options: null\n };\n }\n visitStyle(metadata, context) {\n const ast = this._makeStyleAst(metadata, context);\n this._validateStyleAst(ast, context);\n return ast;\n }\n _makeStyleAst(metadata, context) {\n const styles = [];\n const metadataStyles = Array.isArray(metadata.styles) ? metadata.styles : [metadata.styles];\n for (let styleTuple of metadataStyles) {\n if (typeof styleTuple === 'string') {\n if (styleTuple === AUTO_STYLE) {\n styles.push(styleTuple);\n }\n else {\n context.errors.push(invalidStyleValue(styleTuple));\n }\n }\n else {\n styles.push(convertToMap(styleTuple));\n }\n }\n let containsDynamicStyles = false;\n let collectedEasing = null;\n styles.forEach(styleData => {\n if (styleData instanceof Map) {\n if (styleData.has('easing')) {\n collectedEasing = styleData.get('easing');\n styleData.delete('easing');\n }\n if (!containsDynamicStyles) {\n for (let value of styleData.values()) {\n if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n containsDynamicStyles = true;\n break;\n }\n }\n }\n }\n });\n return {\n type: 6 /* AnimationMetadataType.Style */,\n styles,\n easing: collectedEasing,\n offset: metadata.offset,\n containsDynamicStyles,\n options: null\n };\n }\n _validateStyleAst(ast, context) {\n const timings = context.currentAnimateTimings;\n let endTime = context.currentTime;\n let startTime = context.currentTime;\n if (timings && startTime > 0) {\n startTime -= timings.duration + timings.delay;\n }\n ast.styles.forEach(tuple => {\n if (typeof tuple === 'string')\n return;\n tuple.forEach((value, prop) => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._driver.validateStyleProperty(prop)) {\n tuple.delete(prop);\n context.unsupportedCSSPropertiesFound.add(prop);\n return;\n }\n }\n // This is guaranteed to have a defined Map at this querySelector location making it\n // safe to add the assertion here. It is set as a default empty map in prior methods.\n const collectedStyles = context.collectedStyles.get(context.currentQuerySelector);\n const collectedEntry = collectedStyles.get(prop);\n let updateCollectedStyle = true;\n if (collectedEntry) {\n if (startTime != endTime && startTime >= collectedEntry.startTime &&\n endTime <= collectedEntry.endTime) {\n context.errors.push(invalidParallelAnimation(prop, collectedEntry.startTime, collectedEntry.endTime, startTime, endTime));\n updateCollectedStyle = false;\n }\n // we always choose the smaller start time value since we\n // want to have a record of the entire animation window where\n // the style property is being animated in between\n startTime = collectedEntry.startTime;\n }\n if (updateCollectedStyle) {\n collectedStyles.set(prop, { startTime, endTime });\n }\n if (context.options) {\n validateStyleParams(value, context.options, context.errors);\n }\n });\n });\n }\n visitKeyframes(metadata, context) {\n const ast = { type: 5 /* AnimationMetadataType.Keyframes */, styles: [], options: null };\n if (!context.currentAnimateTimings) {\n context.errors.push(invalidKeyframes());\n return ast;\n }\n const MAX_KEYFRAME_OFFSET = 1;\n let totalKeyframesWithOffsets = 0;\n const offsets = [];\n let offsetsOutOfOrder = false;\n let keyframesOutOfRange = false;\n let previousOffset = 0;\n const keyframes = metadata.steps.map(styles => {\n const style = this._makeStyleAst(styles, context);\n let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);\n let offset = 0;\n if (offsetVal != null) {\n totalKeyframesWithOffsets++;\n offset = style.offset = offsetVal;\n }\n keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n previousOffset = offset;\n offsets.push(offset);\n return style;\n });\n if (keyframesOutOfRange) {\n context.errors.push(invalidOffset());\n }\n if (offsetsOutOfOrder) {\n context.errors.push(keyframeOffsetsOutOfOrder());\n }\n const length = metadata.steps.length;\n let generatedOffset = 0;\n if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n context.errors.push(keyframesMissingOffsets());\n }\n else if (totalKeyframesWithOffsets == 0) {\n generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n }\n const limit = length - 1;\n const currentTime = context.currentTime;\n const currentAnimateTimings = context.currentAnimateTimings;\n const animateDuration = currentAnimateTimings.duration;\n keyframes.forEach((kf, i) => {\n const offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];\n const durationUpToThisFrame = offset * animateDuration;\n context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n currentAnimateTimings.duration = durationUpToThisFrame;\n this._validateStyleAst(kf, context);\n kf.offset = offset;\n ast.styles.push(kf);\n });\n return ast;\n }\n visitReference(metadata, context) {\n return {\n type: 8 /* AnimationMetadataType.Reference */,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitAnimateChild(metadata, context) {\n context.depCount++;\n return {\n type: 9 /* AnimationMetadataType.AnimateChild */,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitAnimateRef(metadata, context) {\n return {\n type: 10 /* AnimationMetadataType.AnimateRef */,\n animation: this.visitReference(metadata.animation, context),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitQuery(metadata, context) {\n const parentSelector = context.currentQuerySelector;\n const options = (metadata.options || {});\n context.queryCount++;\n context.currentQuery = metadata;\n const [selector, includeSelf] = normalizeSelector(metadata.selector);\n context.currentQuerySelector =\n parentSelector.length ? (parentSelector + ' ' + selector) : selector;\n getOrSetDefaultValue(context.collectedStyles, context.currentQuerySelector, new Map());\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n context.currentQuery = null;\n context.currentQuerySelector = parentSelector;\n return {\n type: 11 /* AnimationMetadataType.Query */,\n selector,\n limit: options.limit || 0,\n optional: !!options.optional,\n includeSelf,\n animation,\n originalSelector: metadata.selector,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n visitStagger(metadata, context) {\n if (!context.currentQuery) {\n context.errors.push(invalidStagger());\n }\n const timings = metadata.timings === 'full' ?\n { duration: 0, delay: 0, easing: 'full' } :\n resolveTiming(metadata.timings, context.errors, true);\n return {\n type: 12 /* AnimationMetadataType.Stagger */,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n timings,\n options: null\n };\n }\n}\nfunction normalizeSelector(selector) {\n const hasAmpersand = selector.split(/\\s*,\\s*/).find(token => token == SELF_TOKEN) ? true : false;\n if (hasAmpersand) {\n selector = selector.replace(SELF_TOKEN_REGEX, '');\n }\n // Note: the :enter and :leave aren't normalized here since those\n // selectors are filled in at runtime during timeline building\n selector = selector.replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n .replace(/@\\w+/g, match => NG_TRIGGER_SELECTOR + '-' + match.slice(1))\n .replace(/:animating/g, NG_ANIMATING_SELECTOR);\n return [selector, hasAmpersand];\n}\nfunction normalizeParams(obj) {\n return obj ? copyObj(obj) : null;\n}\nclass AnimationAstBuilderContext {\n constructor(errors) {\n this.errors = errors;\n this.queryCount = 0;\n this.depCount = 0;\n this.currentTransition = null;\n this.currentQuery = null;\n this.currentQuerySelector = null;\n this.currentAnimateTimings = null;\n this.currentTime = 0;\n this.collectedStyles = new Map();\n this.options = null;\n this.unsupportedCSSPropertiesFound = new Set();\n }\n}\nfunction consumeOffset(styles) {\n if (typeof styles == 'string')\n return null;\n let offset = null;\n if (Array.isArray(styles)) {\n styles.forEach(styleTuple => {\n if (styleTuple instanceof Map && styleTuple.has('offset')) {\n const obj = styleTuple;\n offset = parseFloat(obj.get('offset'));\n obj.delete('offset');\n }\n });\n }\n else if (styles instanceof Map && styles.has('offset')) {\n const obj = styles;\n offset = parseFloat(obj.get('offset'));\n obj.delete('offset');\n }\n return offset;\n}\nfunction constructTimingAst(value, errors) {\n if (value.hasOwnProperty('duration')) {\n return value;\n }\n if (typeof value == 'number') {\n const duration = resolveTiming(value, errors).duration;\n return makeTimingAst(duration, 0, '');\n }\n const strValue = value;\n const isDynamic = strValue.split(/\\s+/).some(v => v.charAt(0) == '{' && v.charAt(1) == '{');\n if (isDynamic) {\n const ast = makeTimingAst(0, 0, '');\n ast.dynamic = true;\n ast.strValue = strValue;\n return ast;\n }\n const timings = resolveTiming(strValue, errors);\n return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\nfunction normalizeAnimationOptions(options) {\n if (options) {\n options = copyObj(options);\n if (options['params']) {\n options['params'] = normalizeParams(options['params']);\n }\n }\n else {\n options = {};\n }\n return options;\n}\nfunction makeTimingAst(duration, delay, easing) {\n return { duration, delay, easing };\n}\n\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {\n return {\n type: 1 /* AnimationTransitionInstructionType.TimelineAnimation */,\n element,\n keyframes,\n preStyleProps,\n postStyleProps,\n duration,\n delay,\n totalTime: duration + delay,\n easing,\n subTimeline\n };\n}\n\nclass ElementInstructionMap {\n constructor() {\n this._map = new Map();\n }\n get(element) {\n return this._map.get(element) || [];\n }\n append(element, instructions) {\n let existingInstructions = this._map.get(element);\n if (!existingInstructions) {\n this._map.set(element, existingInstructions = []);\n }\n existingInstructions.push(...instructions);\n }\n has(element) {\n return this._map.has(element);\n }\n clear() {\n this._map.clear();\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ONE_FRAME_IN_MILLISECONDS = 1;\nconst ENTER_TOKEN = ':enter';\nconst ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nconst LEAVE_TOKEN = ':leave';\nconst LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\n/*\n * The code within this file aims to generate web-animations-compatible keyframes from Angular's\n * animation DSL code.\n *\n * The code below will be converted from:\n *\n * ```\n * sequence([\n * style({ opacity: 0 }),\n * animate(1000, style({ opacity: 0 }))\n * ])\n * ```\n *\n * To:\n * ```\n * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]\n * duration = 1000\n * delay = 0\n * easing = ''\n * ```\n *\n * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a\n * combination of AST traversal and merge-sort-like algorithms are used.\n *\n * [AST Traversal]\n * Each of the animation verbs, when executed, will return an string-map object representing what\n * type of action it is (style, animate, group, etc...) and the data associated with it. This means\n * that when functional composition mix of these functions is evaluated (like in the example above)\n * then it will end up producing a tree of objects representing the animation itself.\n *\n * When this animation object tree is processed by the visitor code below it will visit each of the\n * verb statements within the visitor. And during each visit it will build the context of the\n * animation keyframes by interacting with the `TimelineBuilder`.\n *\n * [TimelineBuilder]\n * This class is responsible for tracking the styles and building a series of keyframe objects for a\n * timeline between a start and end time. The builder starts off with an initial timeline and each\n * time the AST comes across a `group()`, `keyframes()` or a combination of the two within a\n * `sequence()` then it will generate a sub timeline for each step as well as a new one after\n * they are complete.\n *\n * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub\n * timeline was created (based on one of the cases above) then the parent timeline will attempt to\n * merge the styles used within the sub timelines into itself (only with group() this will happen).\n * This happens with a merge operation (much like how the merge works in mergeSort) and it will only\n * copy the most recently used styles from the sub timelines into the parent timeline. This ensures\n * that if the styles are used later on in another phase of the animation then they will be the most\n * up-to-date values.\n *\n * [How Missing Styles Are Updated]\n * Each timeline has a `backFill` property which is responsible for filling in new styles into\n * already processed keyframes if a new style shows up later within the animation sequence.\n *\n * ```\n * sequence([\n * style({ width: 0 }),\n * animate(1000, style({ width: 100 })),\n * animate(1000, style({ width: 200 })),\n * animate(1000, style({ width: 300 }))\n * animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere\n * else\n * ])\n * ```\n *\n * What is happening here is that the `height` value is added later in the sequence, but is missing\n * from all previous animation steps. Therefore when a keyframe is created it would also be missing\n * from all previous keyframes up until where it is first used. For the timeline keyframe generation\n * to properly fill in the style it will place the previous value (the value from the parent\n * timeline) or a default value of `*` into the backFill map. The `copyStyles` method in util.ts\n * handles propagating that backfill map to the styles object.\n *\n * When a sub-timeline is created it will have its own backFill property. This is done so that\n * styles present within the sub-timeline do not accidentally seep into the previous/future timeline\n * keyframes\n *\n * [Validation]\n * The code in this file is not responsible for validation. That functionality happens with within\n * the `AnimationValidatorVisitor` code.\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = new Map(), finalStyles = new Map(), options, subInstructions, errors = []) {\n return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nclass AnimationTimelineBuilderVisitor {\n buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {\n subInstructions = subInstructions || new ElementInstructionMap();\n const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n context.options = options;\n const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n context.currentTimeline.delayNextStep(delay);\n context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n visitDslNode(this, ast, context);\n // this checks to see if an actual animation happened\n const timelines = context.timelines.filter(timeline => timeline.containsAnimation());\n // note: we just want to apply the final styles for the rootElement, so we do not\n // just apply the styles to the last timeline but the last timeline which\n // element is the root one (basically `*`-styles are replaced with the actual\n // state style values only for the root element)\n if (timelines.length && finalStyles.size) {\n let lastRootTimeline;\n for (let i = timelines.length - 1; i >= 0; i--) {\n const timeline = timelines[i];\n if (timeline.element === rootElement) {\n lastRootTimeline = timeline;\n break;\n }\n }\n if (lastRootTimeline && !lastRootTimeline.allowOnlyTimelineStyles()) {\n lastRootTimeline.setStyles([finalStyles], null, context.errors, options);\n }\n }\n return timelines.length ?\n timelines.map(timeline => timeline.buildKeyframes()) :\n [createTimelineInstruction(rootElement, [], [], [], 0, delay, '', false)];\n }\n visitTrigger(ast, context) {\n // these values are not visited in this AST\n }\n visitState(ast, context) {\n // these values are not visited in this AST\n }\n visitTransition(ast, context) {\n // these values are not visited in this AST\n }\n visitAnimateChild(ast, context) {\n const elementInstructions = context.subInstructions.get(context.element);\n if (elementInstructions) {\n const innerContext = context.createSubContext(ast.options);\n const startTime = context.currentTimeline.currentTime;\n const endTime = this._visitSubInstructions(elementInstructions, innerContext, innerContext.options);\n if (startTime != endTime) {\n // we do this on the upper context because we created a sub context for\n // the sub child animations\n context.transformIntoNewTimeline(endTime);\n }\n }\n context.previousNode = ast;\n }\n visitAnimateRef(ast, context) {\n const innerContext = context.createSubContext(ast.options);\n innerContext.transformIntoNewTimeline();\n this._applyAnimationRefDelays([ast.options, ast.animation.options], context, innerContext);\n this.visitReference(ast.animation, innerContext);\n context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n context.previousNode = ast;\n }\n _applyAnimationRefDelays(animationsRefsOptions, context, innerContext) {\n for (const animationRefOptions of animationsRefsOptions) {\n const animationDelay = animationRefOptions?.delay;\n if (animationDelay) {\n const animationDelayValue = typeof animationDelay === 'number' ?\n animationDelay :\n resolveTimingValue(interpolateParams(animationDelay, animationRefOptions?.params ?? {}, context.errors));\n innerContext.delayNextStep(animationDelayValue);\n }\n }\n }\n _visitSubInstructions(instructions, context, options) {\n const startTime = context.currentTimeline.currentTime;\n let furthestTime = startTime;\n // this is a special-case for when a user wants to skip a sub\n // animation from being fired entirely.\n const duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n const delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n if (duration !== 0) {\n instructions.forEach(instruction => {\n const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n furthestTime =\n Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n });\n }\n return furthestTime;\n }\n visitReference(ast, context) {\n context.updateOptions(ast.options, true);\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n }\n visitSequence(ast, context) {\n const subContextCount = context.subContextCount;\n let ctx = context;\n const options = ast.options;\n if (options && (options.params || options.delay)) {\n ctx = context.createSubContext(options);\n ctx.transformIntoNewTimeline();\n if (options.delay != null) {\n if (ctx.previousNode.type == 6 /* AnimationMetadataType.Style */) {\n ctx.currentTimeline.snapshotCurrentStyles();\n ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n const delay = resolveTimingValue(options.delay);\n ctx.delayNextStep(delay);\n }\n }\n if (ast.steps.length) {\n ast.steps.forEach(s => visitDslNode(this, s, ctx));\n // this is here just in case the inner steps only contain or end with a style() call\n ctx.currentTimeline.applyStylesToKeyframe();\n // this means that some animation function within the sequence\n // ended up creating a sub timeline (which means the current\n // timeline cannot overlap with the contents of the sequence)\n if (ctx.subContextCount > subContextCount) {\n ctx.transformIntoNewTimeline();\n }\n }\n context.previousNode = ast;\n }\n visitGroup(ast, context) {\n const innerTimelines = [];\n let furthestTime = context.currentTimeline.currentTime;\n const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n ast.steps.forEach(s => {\n const innerContext = context.createSubContext(ast.options);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n visitDslNode(this, s, innerContext);\n furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n innerTimelines.push(innerContext.currentTimeline);\n });\n // this operation is run after the AST loop because otherwise\n // if the parent timeline's collected styles were updated then\n // it would pass in invalid data into the new-to-be forked items\n innerTimelines.forEach(timeline => context.currentTimeline.mergeTimelineCollectedStyles(timeline));\n context.transformIntoNewTimeline(furthestTime);\n context.previousNode = ast;\n }\n _visitTiming(ast, context) {\n if (ast.dynamic) {\n const strValue = ast.strValue;\n const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;\n return resolveTiming(timingValue, context.errors);\n }\n else {\n return { duration: ast.duration, delay: ast.delay, easing: ast.easing };\n }\n }\n visitAnimate(ast, context) {\n const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n const timeline = context.currentTimeline;\n if (timings.delay) {\n context.incrementTime(timings.delay);\n timeline.snapshotCurrentStyles();\n }\n const style = ast.style;\n if (style.type == 5 /* AnimationMetadataType.Keyframes */) {\n this.visitKeyframes(style, context);\n }\n else {\n context.incrementTime(timings.duration);\n this.visitStyle(style, context);\n timeline.applyStylesToKeyframe();\n }\n context.currentAnimateTimings = null;\n context.previousNode = ast;\n }\n visitStyle(ast, context) {\n const timeline = context.currentTimeline;\n const timings = context.currentAnimateTimings;\n // this is a special case for when a style() call\n // directly follows an animate() call (but not inside of an animate() call)\n if (!timings && timeline.hasCurrentStyleProperties()) {\n timeline.forwardFrame();\n }\n const easing = (timings && timings.easing) || ast.easing;\n if (ast.isEmptyStep) {\n timeline.applyEmptyStep(easing);\n }\n else {\n timeline.setStyles(ast.styles, easing, context.errors, context.options);\n }\n context.previousNode = ast;\n }\n visitKeyframes(ast, context) {\n const currentAnimateTimings = context.currentAnimateTimings;\n const startTime = (context.currentTimeline).duration;\n const duration = currentAnimateTimings.duration;\n const innerContext = context.createSubContext();\n const innerTimeline = innerContext.currentTimeline;\n innerTimeline.easing = currentAnimateTimings.easing;\n ast.styles.forEach(step => {\n const offset = step.offset || 0;\n innerTimeline.forwardTime(offset * duration);\n innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n innerTimeline.applyStylesToKeyframe();\n });\n // this will ensure that the parent timeline gets all the styles from\n // the child even if the new timeline below is not used\n context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n // we do this because the window between this timeline and the sub timeline\n // should ensure that the styles within are exactly the same as they were before\n context.transformIntoNewTimeline(startTime + duration);\n context.previousNode = ast;\n }\n visitQuery(ast, context) {\n // in the event that the first step before this is a style step we need\n // to ensure the styles are applied before the children are animated\n const startTime = context.currentTimeline.currentTime;\n const options = (ast.options || {});\n const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n if (delay &&\n (context.previousNode.type === 6 /* AnimationMetadataType.Style */ ||\n (startTime == 0 && context.currentTimeline.hasCurrentStyleProperties()))) {\n context.currentTimeline.snapshotCurrentStyles();\n context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n let furthestTime = startTime;\n const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n context.currentQueryTotal = elms.length;\n let sameElementTimeline = null;\n elms.forEach((element, i) => {\n context.currentQueryIndex = i;\n const innerContext = context.createSubContext(ast.options, element);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n if (element === context.element) {\n sameElementTimeline = innerContext.currentTimeline;\n }\n visitDslNode(this, ast.animation, innerContext);\n // this is here just incase the inner steps only contain or end\n // with a style() call (which is here to signal that this is a preparatory\n // call to style an element before it is animated again)\n innerContext.currentTimeline.applyStylesToKeyframe();\n const endTime = innerContext.currentTimeline.currentTime;\n furthestTime = Math.max(furthestTime, endTime);\n });\n context.currentQueryIndex = 0;\n context.currentQueryTotal = 0;\n context.transformIntoNewTimeline(furthestTime);\n if (sameElementTimeline) {\n context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n context.currentTimeline.snapshotCurrentStyles();\n }\n context.previousNode = ast;\n }\n visitStagger(ast, context) {\n const parentContext = context.parentContext;\n const tl = context.currentTimeline;\n const timings = ast.timings;\n const duration = Math.abs(timings.duration);\n const maxTime = duration * (context.currentQueryTotal - 1);\n let delay = duration * context.currentQueryIndex;\n let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n switch (staggerTransformer) {\n case 'reverse':\n delay = maxTime - delay;\n break;\n case 'full':\n delay = parentContext.currentStaggerTime;\n break;\n }\n const timeline = context.currentTimeline;\n if (delay) {\n timeline.delayNextStep(delay);\n }\n const startingTime = timeline.currentTime;\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n // time = duration + delay\n // the reason why this computation is so complex is because\n // the inner timeline may either have a delay value or a stretched\n // keyframe depending on if a subtimeline is not used or is used.\n parentContext.currentStaggerTime =\n (tl.currentTime - startingTime) + (tl.startTime - parentContext.currentTimeline.startTime);\n }\n}\nconst DEFAULT_NOOP_PREVIOUS_NODE = {};\nclass AnimationTimelineContext {\n constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n this._driver = _driver;\n this.element = element;\n this.subInstructions = subInstructions;\n this._enterClassName = _enterClassName;\n this._leaveClassName = _leaveClassName;\n this.errors = errors;\n this.timelines = timelines;\n this.parentContext = null;\n this.currentAnimateTimings = null;\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.subContextCount = 0;\n this.options = {};\n this.currentQueryIndex = 0;\n this.currentQueryTotal = 0;\n this.currentStaggerTime = 0;\n this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n timelines.push(this.currentTimeline);\n }\n get params() {\n return this.options.params;\n }\n updateOptions(options, skipIfExists) {\n if (!options)\n return;\n const newOptions = options;\n let optionsToUpdate = this.options;\n // NOTE: this will get patched up when other animation methods support duration overrides\n if (newOptions.duration != null) {\n optionsToUpdate.duration = resolveTimingValue(newOptions.duration);\n }\n if (newOptions.delay != null) {\n optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n }\n const newParams = newOptions.params;\n if (newParams) {\n let paramsToUpdate = optionsToUpdate.params;\n if (!paramsToUpdate) {\n paramsToUpdate = this.options.params = {};\n }\n Object.keys(newParams).forEach(name => {\n if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {\n paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);\n }\n });\n }\n }\n _copyOptions() {\n const options = {};\n if (this.options) {\n const oldParams = this.options.params;\n if (oldParams) {\n const params = options['params'] = {};\n Object.keys(oldParams).forEach(name => {\n params[name] = oldParams[name];\n });\n }\n }\n return options;\n }\n createSubContext(options = null, element, newTime) {\n const target = element || this.element;\n const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n context.previousNode = this.previousNode;\n context.currentAnimateTimings = this.currentAnimateTimings;\n context.options = this._copyOptions();\n context.updateOptions(options);\n context.currentQueryIndex = this.currentQueryIndex;\n context.currentQueryTotal = this.currentQueryTotal;\n context.parentContext = this;\n this.subContextCount++;\n return context;\n }\n transformIntoNewTimeline(newTime) {\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n this.timelines.push(this.currentTimeline);\n return this.currentTimeline;\n }\n appendInstructionToTimeline(instruction, duration, delay) {\n const updatedTimings = {\n duration: duration != null ? duration : instruction.duration,\n delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n easing: ''\n };\n const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n this.timelines.push(builder);\n return updatedTimings;\n }\n incrementTime(time) {\n this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n }\n delayNextStep(delay) {\n // negative delays are not yet supported\n if (delay > 0) {\n this.currentTimeline.delayNextStep(delay);\n }\n }\n invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {\n let results = [];\n if (includeSelf) {\n results.push(this.element);\n }\n if (selector.length > 0) { // only if :self is used then the selector can be empty\n selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n const multi = limit != 1;\n let elements = this._driver.query(this.element, selector, multi);\n if (limit !== 0) {\n elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) :\n elements.slice(0, limit);\n }\n results.push(...elements);\n }\n if (!optional && results.length == 0) {\n errors.push(invalidQuery(originalSelector));\n }\n return results;\n }\n}\nclass TimelineBuilder {\n constructor(_driver, element, startTime, _elementTimelineStylesLookup) {\n this._driver = _driver;\n this.element = element;\n this.startTime = startTime;\n this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n this.duration = 0;\n this._previousKeyframe = new Map();\n this._currentKeyframe = new Map();\n this._keyframes = new Map();\n this._styleSummary = new Map();\n this._localTimelineStyles = new Map();\n this._pendingStyles = new Map();\n this._backFill = new Map();\n this._currentEmptyStepKeyframe = null;\n if (!this._elementTimelineStylesLookup) {\n this._elementTimelineStylesLookup = new Map();\n }\n this._globalTimelineStyles = this._elementTimelineStylesLookup.get(element);\n if (!this._globalTimelineStyles) {\n this._globalTimelineStyles = this._localTimelineStyles;\n this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n }\n this._loadKeyframe();\n }\n containsAnimation() {\n switch (this._keyframes.size) {\n case 0:\n return false;\n case 1:\n return this.hasCurrentStyleProperties();\n default:\n return true;\n }\n }\n hasCurrentStyleProperties() {\n return this._currentKeyframe.size > 0;\n }\n get currentTime() {\n return this.startTime + this.duration;\n }\n delayNextStep(delay) {\n // in the event that a style() step is placed right before a stagger()\n // and that style() step is the very first style() value in the animation\n // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n // properly applies the style() values to work with the stagger...\n const hasPreStyleStep = this._keyframes.size === 1 && this._pendingStyles.size;\n if (this.duration || hasPreStyleStep) {\n this.forwardTime(this.currentTime + delay);\n if (hasPreStyleStep) {\n this.snapshotCurrentStyles();\n }\n }\n else {\n this.startTime += delay;\n }\n }\n fork(element, currentTime) {\n this.applyStylesToKeyframe();\n return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n }\n _loadKeyframe() {\n if (this._currentKeyframe) {\n this._previousKeyframe = this._currentKeyframe;\n }\n this._currentKeyframe = this._keyframes.get(this.duration);\n if (!this._currentKeyframe) {\n this._currentKeyframe = new Map();\n this._keyframes.set(this.duration, this._currentKeyframe);\n }\n }\n forwardFrame() {\n this.duration += ONE_FRAME_IN_MILLISECONDS;\n this._loadKeyframe();\n }\n forwardTime(time) {\n this.applyStylesToKeyframe();\n this.duration = time;\n this._loadKeyframe();\n }\n _updateStyle(prop, value) {\n this._localTimelineStyles.set(prop, value);\n this._globalTimelineStyles.set(prop, value);\n this._styleSummary.set(prop, { time: this.currentTime, value });\n }\n allowOnlyTimelineStyles() {\n return this._currentEmptyStepKeyframe !== this._currentKeyframe;\n }\n applyEmptyStep(easing) {\n if (easing) {\n this._previousKeyframe.set('easing', easing);\n }\n // special case for animate(duration):\n // all missing styles are filled with a `*` value then\n // if any destination styles are filled in later on the same\n // keyframe then they will override the overridden styles\n // We use `_globalTimelineStyles` here because there may be\n // styles in previous keyframes that are not present in this timeline\n for (let [prop, value] of this._globalTimelineStyles) {\n this._backFill.set(prop, value || AUTO_STYLE);\n this._currentKeyframe.set(prop, AUTO_STYLE);\n }\n this._currentEmptyStepKeyframe = this._currentKeyframe;\n }\n setStyles(input, easing, errors, options) {\n if (easing) {\n this._previousKeyframe.set('easing', easing);\n }\n const params = (options && options.params) || {};\n const styles = flattenStyles(input, this._globalTimelineStyles);\n for (let [prop, value] of styles) {\n const val = interpolateParams(value, params, errors);\n this._pendingStyles.set(prop, val);\n if (!this._localTimelineStyles.has(prop)) {\n this._backFill.set(prop, this._globalTimelineStyles.get(prop) ?? AUTO_STYLE);\n }\n this._updateStyle(prop, val);\n }\n }\n applyStylesToKeyframe() {\n if (this._pendingStyles.size == 0)\n return;\n this._pendingStyles.forEach((val, prop) => {\n this._currentKeyframe.set(prop, val);\n });\n this._pendingStyles.clear();\n this._localTimelineStyles.forEach((val, prop) => {\n if (!this._currentKeyframe.has(prop)) {\n this._currentKeyframe.set(prop, val);\n }\n });\n }\n snapshotCurrentStyles() {\n for (let [prop, val] of this._localTimelineStyles) {\n this._pendingStyles.set(prop, val);\n this._updateStyle(prop, val);\n }\n }\n getFinalKeyframe() {\n return this._keyframes.get(this.duration);\n }\n get properties() {\n const properties = [];\n for (let prop in this._currentKeyframe) {\n properties.push(prop);\n }\n return properties;\n }\n mergeTimelineCollectedStyles(timeline) {\n timeline._styleSummary.forEach((details1, prop) => {\n const details0 = this._styleSummary.get(prop);\n if (!details0 || details1.time > details0.time) {\n this._updateStyle(prop, details1.value);\n }\n });\n }\n buildKeyframes() {\n this.applyStylesToKeyframe();\n const preStyleProps = new Set();\n const postStyleProps = new Set();\n const isEmpty = this._keyframes.size === 1 && this.duration === 0;\n let finalKeyframes = [];\n this._keyframes.forEach((keyframe, time) => {\n const finalKeyframe = copyStyles(keyframe, new Map(), this._backFill);\n finalKeyframe.forEach((value, prop) => {\n if (value === ɵPRE_STYLE) {\n preStyleProps.add(prop);\n }\n else if (value === AUTO_STYLE) {\n postStyleProps.add(prop);\n }\n });\n if (!isEmpty) {\n finalKeyframe.set('offset', time / this.duration);\n }\n finalKeyframes.push(finalKeyframe);\n });\n const preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];\n const postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : [];\n // special case for a 0-second animation (which is designed just to place styles onscreen)\n if (isEmpty) {\n const kf0 = finalKeyframes[0];\n const kf1 = new Map(kf0);\n kf0.set('offset', 0);\n kf1.set('offset', 1);\n finalKeyframes = [kf0, kf1];\n }\n return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n }\n}\nclass SubTimelineBuilder extends TimelineBuilder {\n constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {\n super(driver, element, timings.delay);\n this.keyframes = keyframes;\n this.preStyleProps = preStyleProps;\n this.postStyleProps = postStyleProps;\n this._stretchStartingKeyframe = _stretchStartingKeyframe;\n this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };\n }\n containsAnimation() {\n return this.keyframes.length > 1;\n }\n buildKeyframes() {\n let keyframes = this.keyframes;\n let { delay, duration, easing } = this.timings;\n if (this._stretchStartingKeyframe && delay) {\n const newKeyframes = [];\n const totalTime = duration + delay;\n const startingGap = delay / totalTime;\n // the original starting keyframe now starts once the delay is done\n const newFirstKeyframe = copyStyles(keyframes[0]);\n newFirstKeyframe.set('offset', 0);\n newKeyframes.push(newFirstKeyframe);\n const oldFirstKeyframe = copyStyles(keyframes[0]);\n oldFirstKeyframe.set('offset', roundOffset(startingGap));\n newKeyframes.push(oldFirstKeyframe);\n /*\n When the keyframe is stretched then it means that the delay before the animation\n starts is gone. Instead the first keyframe is placed at the start of the animation\n and it is then copied to where it starts when the original delay is over. This basically\n means nothing animates during that delay, but the styles are still rendered. For this\n to work the original offset values that exist in the original keyframes must be \"warped\"\n so that they can take the new keyframe + delay into account.\n \n delay=1000, duration=1000, keyframes = 0 .5 1\n \n turns into\n \n delay=0, duration=2000, keyframes = 0 .33 .66 1\n */\n // offsets between 1 ... n -1 are all warped by the keyframe stretch\n const limit = keyframes.length - 1;\n for (let i = 1; i <= limit; i++) {\n let kf = copyStyles(keyframes[i]);\n const oldOffset = kf.get('offset');\n const timeAtKeyframe = delay + oldOffset * duration;\n kf.set('offset', roundOffset(timeAtKeyframe / totalTime));\n newKeyframes.push(kf);\n }\n // the new starting keyframe should be added at the start\n duration = totalTime;\n delay = 0;\n easing = '';\n keyframes = newKeyframes;\n }\n return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n }\n}\nfunction roundOffset(offset, decimalPoints = 3) {\n const mult = Math.pow(10, decimalPoints - 1);\n return Math.round(offset * mult) / mult;\n}\nfunction flattenStyles(input, allStyles) {\n const styles = new Map();\n let allProperties;\n input.forEach(token => {\n if (token === '*') {\n allProperties = allProperties || allStyles.keys();\n for (let prop of allProperties) {\n styles.set(prop, AUTO_STYLE);\n }\n }\n else {\n copyStyles(token, styles);\n }\n });\n return styles;\n}\n\nclass Animation {\n constructor(_driver, input) {\n this._driver = _driver;\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(_driver, input, errors, warnings);\n if (errors.length) {\n throw validationFailed(errors);\n }\n if (warnings.length) {\n warnValidation(warnings);\n }\n this._animationAst = ast;\n }\n buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {\n const start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) :\n startingStyles;\n const dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) :\n destinationStyles;\n const errors = [];\n subInstructions = subInstructions || new ElementInstructionMap();\n const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n if (errors.length) {\n throw buildingFailed(errors);\n }\n return result;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @publicApi\n */\nclass AnimationStyleNormalizer {\n}\n/**\n * @publicApi\n */\nclass NoopAnimationStyleNormalizer {\n normalizePropertyName(propertyName, errors) {\n return propertyName;\n }\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n return value;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DIMENSIONAL_PROP_SET = new Set([\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'left',\n 'top',\n 'bottom',\n 'right',\n 'fontSize',\n 'outlineWidth',\n 'outlineOffset',\n 'paddingTop',\n 'paddingLeft',\n 'paddingBottom',\n 'paddingRight',\n 'marginTop',\n 'marginLeft',\n 'marginBottom',\n 'marginRight',\n 'borderRadius',\n 'borderWidth',\n 'borderTopWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'textIndent',\n 'perspective'\n]);\nclass WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {\n normalizePropertyName(propertyName, errors) {\n return dashCaseToCamelCase(propertyName);\n }\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n let unit = '';\n const strVal = value.toString().trim();\n if (DIMENSIONAL_PROP_SET.has(normalizedProperty) && value !== 0 && value !== '0') {\n if (typeof value === 'number') {\n unit = 'px';\n }\n else {\n const valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n errors.push(invalidCssUnitValue(userProvidedProperty, value));\n }\n }\n }\n return strVal + unit;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {\n return {\n type: 0 /* AnimationTransitionInstructionType.TransitionAnimation */,\n element,\n triggerName,\n isRemovalTransition,\n fromState,\n fromStyles,\n toState,\n toStyles,\n timelines,\n queriedElements,\n preStyleProps,\n postStyleProps,\n totalTime,\n errors\n };\n}\n\nconst EMPTY_OBJECT = {};\nclass AnimationTransitionFactory {\n constructor(_triggerName, ast, _stateStyles) {\n this._triggerName = _triggerName;\n this.ast = ast;\n this._stateStyles = _stateStyles;\n }\n match(currentState, nextState, element, params) {\n return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);\n }\n buildStyles(stateName, params, errors) {\n let styler = this._stateStyles.get('*');\n if (stateName !== undefined) {\n styler = this._stateStyles.get(stateName?.toString()) || styler;\n }\n return styler ? styler.buildStyles(params, errors) : new Map();\n }\n build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {\n const errors = [];\n const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n const queriedElements = new Set();\n const preStyleMap = new Map();\n const postStyleMap = new Map();\n const isRemoval = nextState === 'void';\n const animationOptions = {\n params: applyParamDefaults(nextAnimationParams, transitionAnimationParams),\n delay: this.ast.options?.delay,\n };\n const timelines = skipAstBuild ?\n [] :\n buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n let totalTime = 0;\n timelines.forEach(tl => {\n totalTime = Math.max(tl.duration + tl.delay, totalTime);\n });\n if (errors.length) {\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);\n }\n timelines.forEach(tl => {\n const elm = tl.element;\n const preProps = getOrSetDefaultValue(preStyleMap, elm, new Set());\n tl.preStyleProps.forEach(prop => preProps.add(prop));\n const postProps = getOrSetDefaultValue(postStyleMap, elm, new Set());\n tl.postStyleProps.forEach(prop => postProps.add(prop));\n if (elm !== element) {\n queriedElements.add(elm);\n }\n });\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n checkNonAnimatableInTimelines(timelines, this._triggerName, driver);\n }\n const queriedElementsList = iteratorToArray(queriedElements.values());\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap, totalTime);\n }\n}\n/**\n * Checks inside a set of timelines if they try to animate a css property which is not considered\n * animatable, in that case it prints a warning on the console.\n * Besides that the function doesn't have any other effect.\n *\n * Note: this check is done here after the timelines are built instead of doing on a lower level so\n * that we can make sure that the warning appears only once per instruction (we can aggregate here\n * all the issues instead of finding them separately).\n *\n * @param timelines The built timelines for the current instruction.\n * @param triggerName The name of the trigger for the current instruction.\n * @param driver Animation driver used to perform the check.\n *\n */\nfunction checkNonAnimatableInTimelines(timelines, triggerName, driver) {\n if (!driver.validateAnimatableStyleProperty) {\n return;\n }\n const invalidNonAnimatableProps = new Set();\n timelines.forEach(({ keyframes }) => {\n const nonAnimatablePropsInitialValues = new Map();\n keyframes.forEach(keyframe => {\n for (const [prop, value] of keyframe.entries()) {\n if (!driver.validateAnimatableStyleProperty(prop)) {\n if (nonAnimatablePropsInitialValues.has(prop) && !invalidNonAnimatableProps.has(prop)) {\n const propInitialValue = nonAnimatablePropsInitialValues.get(prop);\n if (propInitialValue !== value) {\n invalidNonAnimatableProps.add(prop);\n }\n }\n else {\n nonAnimatablePropsInitialValues.set(prop, value);\n }\n }\n }\n });\n });\n if (invalidNonAnimatableProps.size > 0) {\n console.warn(`Warning: The animation trigger \"${triggerName}\" is attempting to animate the following` +\n ' not animatable properties: ' + Array.from(invalidNonAnimatableProps).join(', ') + '\\n' +\n '(to check the list of all animatable properties visit https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties)');\n }\n}\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {\n return matchFns.some(fn => fn(currentState, nextState, element, params));\n}\nfunction applyParamDefaults(userParams, defaults) {\n const result = copyObj(defaults);\n for (const key in userParams) {\n if (userParams.hasOwnProperty(key) && userParams[key] != null) {\n result[key] = userParams[key];\n }\n }\n return result;\n}\nclass AnimationStateStyles {\n constructor(styles, defaultParams, normalizer) {\n this.styles = styles;\n this.defaultParams = defaultParams;\n this.normalizer = normalizer;\n }\n buildStyles(params, errors) {\n const finalStyles = new Map();\n const combinedParams = copyObj(this.defaultParams);\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (value !== null) {\n combinedParams[key] = value;\n }\n });\n this.styles.styles.forEach(value => {\n if (typeof value !== 'string') {\n value.forEach((val, prop) => {\n if (val) {\n val = interpolateParams(val, combinedParams, errors);\n }\n const normalizedProp = this.normalizer.normalizePropertyName(prop, errors);\n val = this.normalizer.normalizeStyleValue(prop, normalizedProp, val, errors);\n finalStyles.set(normalizedProp, val);\n });\n }\n });\n return finalStyles;\n }\n}\n\nfunction buildTrigger(name, ast, normalizer) {\n return new AnimationTrigger(name, ast, normalizer);\n}\nclass AnimationTrigger {\n constructor(name, ast, _normalizer) {\n this.name = name;\n this.ast = ast;\n this._normalizer = _normalizer;\n this.transitionFactories = [];\n this.states = new Map();\n ast.states.forEach(ast => {\n const defaultParams = (ast.options && ast.options.params) || {};\n this.states.set(ast.name, new AnimationStateStyles(ast.style, defaultParams, _normalizer));\n });\n balanceProperties(this.states, 'true', '1');\n balanceProperties(this.states, 'false', '0');\n ast.transitions.forEach(ast => {\n this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states));\n });\n this.fallbackTransition = createFallbackTransition(name, this.states, this._normalizer);\n }\n get containsQueries() {\n return this.ast.queryCount > 0;\n }\n matchTransition(currentState, nextState, element, params) {\n const entry = this.transitionFactories.find(f => f.match(currentState, nextState, element, params));\n return entry || null;\n }\n matchStyles(currentState, params, errors) {\n return this.fallbackTransition.buildStyles(currentState, params, errors);\n }\n}\nfunction createFallbackTransition(triggerName, states, normalizer) {\n const matchers = [(fromState, toState) => true];\n const animation = { type: 2 /* AnimationMetadataType.Sequence */, steps: [], options: null };\n const transition = {\n type: 1 /* AnimationMetadataType.Transition */,\n animation,\n matchers,\n options: null,\n queryCount: 0,\n depCount: 0\n };\n return new AnimationTransitionFactory(triggerName, transition, states);\n}\nfunction balanceProperties(stateMap, key1, key2) {\n if (stateMap.has(key1)) {\n if (!stateMap.has(key2)) {\n stateMap.set(key2, stateMap.get(key1));\n }\n }\n else if (stateMap.has(key2)) {\n stateMap.set(key1, stateMap.get(key2));\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nclass TimelineAnimationEngine {\n constructor(bodyNode, _driver, _normalizer) {\n this.bodyNode = bodyNode;\n this._driver = _driver;\n this._normalizer = _normalizer;\n this._animations = new Map();\n this._playersById = new Map();\n this.players = [];\n }\n register(id, metadata) {\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n if (errors.length) {\n throw registerFailed(errors);\n }\n else {\n if (warnings.length) {\n warnRegister(warnings);\n }\n this._animations.set(id, ast);\n }\n }\n _buildPlayer(i, preStyles, postStyles) {\n const element = i.element;\n const keyframes = normalizeKeyframes$1(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);\n return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);\n }\n create(id, element, options = {}) {\n const errors = [];\n const ast = this._animations.get(id);\n let instructions;\n const autoStylesMap = new Map();\n if (ast) {\n instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, new Map(), new Map(), options, EMPTY_INSTRUCTION_MAP, errors);\n instructions.forEach(inst => {\n const styles = getOrSetDefaultValue(autoStylesMap, inst.element, new Map());\n inst.postStyleProps.forEach(prop => styles.set(prop, null));\n });\n }\n else {\n errors.push(missingOrDestroyedAnimation());\n instructions = [];\n }\n if (errors.length) {\n throw createAnimationFailed(errors);\n }\n autoStylesMap.forEach((styles, element) => {\n styles.forEach((_, prop) => {\n styles.set(prop, this._driver.computeStyle(element, prop, AUTO_STYLE));\n });\n });\n const players = instructions.map(i => {\n const styles = autoStylesMap.get(i.element);\n return this._buildPlayer(i, new Map(), styles);\n });\n const player = optimizeGroupPlayer(players);\n this._playersById.set(id, player);\n player.onDestroy(() => this.destroy(id));\n this.players.push(player);\n return player;\n }\n destroy(id) {\n const player = this._getPlayer(id);\n player.destroy();\n this._playersById.delete(id);\n const index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n }\n _getPlayer(id) {\n const player = this._playersById.get(id);\n if (!player) {\n throw missingPlayer(id);\n }\n return player;\n }\n listen(id, element, eventName, callback) {\n // triggerName, fromState, toState are all ignored for timeline animations\n const baseEvent = makeAnimationEvent(element, '', '', '');\n listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n return () => { };\n }\n command(id, element, command, args) {\n if (command == 'register') {\n this.register(id, args[0]);\n return;\n }\n if (command == 'create') {\n const options = (args[0] || {});\n this.create(id, element, options);\n return;\n }\n const player = this._getPlayer(id);\n switch (command) {\n case 'play':\n player.play();\n break;\n case 'pause':\n player.pause();\n break;\n case 'reset':\n player.reset();\n break;\n case 'restart':\n player.restart();\n break;\n case 'finish':\n player.finish();\n break;\n case 'init':\n player.init();\n break;\n case 'setPosition':\n player.setPosition(parseFloat(args[0]));\n break;\n case 'destroy':\n this.destroy(id);\n break;\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst QUEUED_CLASSNAME = 'ng-animate-queued';\nconst QUEUED_SELECTOR = '.ng-animate-queued';\nconst DISABLED_CLASSNAME = 'ng-animate-disabled';\nconst DISABLED_SELECTOR = '.ng-animate-disabled';\nconst STAR_CLASSNAME = 'ng-star-inserted';\nconst STAR_SELECTOR = '.ng-star-inserted';\nconst EMPTY_PLAYER_ARRAY = [];\nconst NULL_REMOVAL_STATE = {\n namespaceId: '',\n setForRemoval: false,\n setForMove: false,\n hasAnimation: false,\n removedBeforeQueried: false\n};\nconst NULL_REMOVED_QUERIED_STATE = {\n namespaceId: '',\n setForMove: false,\n setForRemoval: false,\n hasAnimation: false,\n removedBeforeQueried: true\n};\nconst REMOVAL_FLAG = '__ng_removed';\nclass StateValue {\n constructor(input, namespaceId = '') {\n this.namespaceId = namespaceId;\n const isObj = input && input.hasOwnProperty('value');\n const value = isObj ? input['value'] : input;\n this.value = normalizeTriggerValue(value);\n if (isObj) {\n const options = copyObj(input);\n delete options['value'];\n this.options = options;\n }\n else {\n this.options = {};\n }\n if (!this.options.params) {\n this.options.params = {};\n }\n }\n get params() {\n return this.options.params;\n }\n absorbOptions(options) {\n const newParams = options.params;\n if (newParams) {\n const oldParams = this.options.params;\n Object.keys(newParams).forEach(prop => {\n if (oldParams[prop] == null) {\n oldParams[prop] = newParams[prop];\n }\n });\n }\n }\n}\nconst VOID_VALUE = 'void';\nconst DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nclass AnimationTransitionNamespace {\n constructor(id, hostElement, _engine) {\n this.id = id;\n this.hostElement = hostElement;\n this._engine = _engine;\n this.players = [];\n this._triggers = new Map();\n this._queue = [];\n this._elementListeners = new Map();\n this._hostClassName = 'ng-tns-' + id;\n addClass(hostElement, this._hostClassName);\n }\n listen(element, name, phase, callback) {\n if (!this._triggers.has(name)) {\n throw missingTrigger(phase, name);\n }\n if (phase == null || phase.length == 0) {\n throw missingEvent(name);\n }\n if (!isTriggerEventValid(phase)) {\n throw unsupportedTriggerEvent(phase, name);\n }\n const listeners = getOrSetDefaultValue(this._elementListeners, element, []);\n const data = { name, phase, callback };\n listeners.push(data);\n const triggersWithStates = getOrSetDefaultValue(this._engine.statesByElement, element, new Map());\n if (!triggersWithStates.has(name)) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n triggersWithStates.set(name, DEFAULT_STATE_VALUE);\n }\n return () => {\n // the event listener is removed AFTER the flush has occurred such\n // that leave animations callbacks can fire (otherwise if the node\n // is removed in between then the listeners would be deregistered)\n this._engine.afterFlush(() => {\n const index = listeners.indexOf(data);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n if (!this._triggers.has(name)) {\n triggersWithStates.delete(name);\n }\n });\n };\n }\n register(name, ast) {\n if (this._triggers.has(name)) {\n // throw\n return false;\n }\n else {\n this._triggers.set(name, ast);\n return true;\n }\n }\n _getTrigger(name) {\n const trigger = this._triggers.get(name);\n if (!trigger) {\n throw unregisteredTrigger(name);\n }\n return trigger;\n }\n trigger(element, triggerName, value, defaultToFallback = true) {\n const trigger = this._getTrigger(triggerName);\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n let triggersWithStates = this._engine.statesByElement.get(element);\n if (!triggersWithStates) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n this._engine.statesByElement.set(element, triggersWithStates = new Map());\n }\n let fromState = triggersWithStates.get(triggerName);\n const toState = new StateValue(value, this.id);\n const isObj = value && value.hasOwnProperty('value');\n if (!isObj && fromState) {\n toState.absorbOptions(fromState.options);\n }\n triggersWithStates.set(triggerName, toState);\n if (!fromState) {\n fromState = DEFAULT_STATE_VALUE;\n }\n const isRemoval = toState.value === VOID_VALUE;\n // normally this isn't reached by here, however, if an object expression\n // is passed in then it may be a new object each time. Comparing the value\n // is important since that will stay the same despite there being a new object.\n // The removal arc here is special cased because the same element is triggered\n // twice in the event that it contains animations on the outer/inner portions\n // of the host container\n if (!isRemoval && fromState.value === toState.value) {\n // this means that despite the value not changing, some inner params\n // have changed which means that the animation final styles need to be applied\n if (!objEquals(fromState.params, toState.params)) {\n const errors = [];\n const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);\n const toStyles = trigger.matchStyles(toState.value, toState.params, errors);\n if (errors.length) {\n this._engine.reportError(errors);\n }\n else {\n this._engine.afterFlush(() => {\n eraseStyles(element, fromStyles);\n setStyles(element, toStyles);\n });\n }\n }\n return;\n }\n const playersOnElement = getOrSetDefaultValue(this._engine.playersByElement, element, []);\n playersOnElement.forEach(player => {\n // only remove the player if it is queued on the EXACT same trigger/namespace\n // we only also deal with queued players here because if the animation has\n // started then we want to keep the player alive until the flush happens\n // (which is where the previousPlayers are passed into the new player)\n if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) {\n player.destroy();\n }\n });\n let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);\n let isFallbackTransition = false;\n if (!transition) {\n if (!defaultToFallback)\n return;\n transition = trigger.fallbackTransition;\n isFallbackTransition = true;\n }\n this._engine.totalQueuedPlayers++;\n this._queue.push({ element, triggerName, transition, fromState, toState, player, isFallbackTransition });\n if (!isFallbackTransition) {\n addClass(element, QUEUED_CLASSNAME);\n player.onStart(() => {\n removeClass(element, QUEUED_CLASSNAME);\n });\n }\n player.onDone(() => {\n let index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n const players = this._engine.playersByElement.get(element);\n if (players) {\n let index = players.indexOf(player);\n if (index >= 0) {\n players.splice(index, 1);\n }\n }\n });\n this.players.push(player);\n playersOnElement.push(player);\n return player;\n }\n deregister(name) {\n this._triggers.delete(name);\n this._engine.statesByElement.forEach(stateMap => stateMap.delete(name));\n this._elementListeners.forEach((listeners, element) => {\n this._elementListeners.set(element, listeners.filter(entry => {\n return entry.name != name;\n }));\n });\n }\n clearElementCache(element) {\n this._engine.statesByElement.delete(element);\n this._elementListeners.delete(element);\n const elementPlayers = this._engine.playersByElement.get(element);\n if (elementPlayers) {\n elementPlayers.forEach(player => player.destroy());\n this._engine.playersByElement.delete(element);\n }\n }\n _signalRemovalForInnerTriggers(rootElement, context) {\n const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);\n // emulate a leave animation for all inner nodes within this node.\n // If there are no animations found for any of the nodes then clear the cache\n // for the element.\n elements.forEach(elm => {\n // this means that an inner remove() operation has already kicked off\n // the animation on this element...\n if (elm[REMOVAL_FLAG])\n return;\n const namespaces = this._engine.fetchNamespacesByElement(elm);\n if (namespaces.size) {\n namespaces.forEach(ns => ns.triggerLeaveAnimation(elm, context, false, true));\n }\n else {\n this.clearElementCache(elm);\n }\n });\n // If the child elements were removed along with the parent, their animations might not\n // have completed. Clear all the elements from the cache so we don't end up with a memory leak.\n this._engine.afterFlushAnimationsDone(() => elements.forEach(elm => this.clearElementCache(elm)));\n }\n triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {\n const triggerStates = this._engine.statesByElement.get(element);\n const previousTriggersValues = new Map();\n if (triggerStates) {\n const players = [];\n triggerStates.forEach((state, triggerName) => {\n previousTriggersValues.set(triggerName, state.value);\n // this check is here in the event that an element is removed\n // twice (both on the host level and the component level)\n if (this._triggers.has(triggerName)) {\n const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n if (player) {\n players.push(player);\n }\n }\n });\n if (players.length) {\n this._engine.markElementAsRemoved(this.id, element, true, context, previousTriggersValues);\n if (destroyAfterComplete) {\n optimizeGroupPlayer(players).onDone(() => this._engine.processLeaveNode(element));\n }\n return true;\n }\n }\n return false;\n }\n prepareLeaveAnimationListeners(element) {\n const listeners = this._elementListeners.get(element);\n const elementStates = this._engine.statesByElement.get(element);\n // if this statement fails then it means that the element was picked up\n // by an earlier flush (or there are no listeners at all to track the leave).\n if (listeners && elementStates) {\n const visitedTriggers = new Set();\n listeners.forEach(listener => {\n const triggerName = listener.name;\n if (visitedTriggers.has(triggerName))\n return;\n visitedTriggers.add(triggerName);\n const trigger = this._triggers.get(triggerName);\n const transition = trigger.fallbackTransition;\n const fromState = elementStates.get(triggerName) || DEFAULT_STATE_VALUE;\n const toState = new StateValue(VOID_VALUE);\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n this._engine.totalQueuedPlayers++;\n this._queue.push({\n element,\n triggerName,\n transition,\n fromState,\n toState,\n player,\n isFallbackTransition: true\n });\n });\n }\n }\n removeNode(element, context) {\n const engine = this._engine;\n if (element.childElementCount) {\n this._signalRemovalForInnerTriggers(element, context);\n }\n // this means that a * => VOID animation was detected and kicked off\n if (this.triggerLeaveAnimation(element, context, true))\n return;\n // find the player that is animating and make sure that the\n // removal is delayed until that player has completed\n let containsPotentialParentTransition = false;\n if (engine.totalAnimations) {\n const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];\n // when this `if statement` does not continue forward it means that\n // a previous animation query has selected the current element and\n // is animating it. In this situation want to continue forwards and\n // allow the element to be queued up for animation later.\n if (currentPlayers && currentPlayers.length) {\n containsPotentialParentTransition = true;\n }\n else {\n let parent = element;\n while (parent = parent.parentNode) {\n const triggers = engine.statesByElement.get(parent);\n if (triggers) {\n containsPotentialParentTransition = true;\n break;\n }\n }\n }\n }\n // at this stage we know that the element will either get removed\n // during flush or will be picked up by a parent query. Either way\n // we need to fire the listeners for this element when it DOES get\n // removed (once the query parent animation is done or after flush)\n this.prepareLeaveAnimationListeners(element);\n // whether or not a parent has an animation we need to delay the deferral of the leave\n // operation until we have more information (which we do after flush() has been called)\n if (containsPotentialParentTransition) {\n engine.markElementAsRemoved(this.id, element, false, context);\n }\n else {\n const removalFlag = element[REMOVAL_FLAG];\n if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {\n // we do this after the flush has occurred such\n // that the callbacks can be fired\n engine.afterFlush(() => this.clearElementCache(element));\n engine.destroyInnerAnimations(element);\n engine._onRemovalComplete(element, context);\n }\n }\n }\n insertNode(element, parent) {\n addClass(element, this._hostClassName);\n }\n drainQueuedTransitions(microtaskId) {\n const instructions = [];\n this._queue.forEach(entry => {\n const player = entry.player;\n if (player.destroyed)\n return;\n const element = entry.element;\n const listeners = this._elementListeners.get(element);\n if (listeners) {\n listeners.forEach((listener) => {\n if (listener.name == entry.triggerName) {\n const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n baseEvent['_data'] = microtaskId;\n listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n }\n });\n }\n if (player.markedForDestroy) {\n this._engine.afterFlush(() => {\n // now we can destroy the element properly since the event listeners have\n // been bound to the player\n player.destroy();\n });\n }\n else {\n instructions.push(entry);\n }\n });\n this._queue = [];\n return instructions.sort((a, b) => {\n // if depCount == 0 them move to front\n // otherwise if a contains b then move back\n const d0 = a.transition.ast.depCount;\n const d1 = b.transition.ast.depCount;\n if (d0 == 0 || d1 == 0) {\n return d0 - d1;\n }\n return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n });\n }\n destroy(context) {\n this.players.forEach(p => p.destroy());\n this._signalRemovalForInnerTriggers(this.hostElement, context);\n }\n elementContainsData(element) {\n let containsData = false;\n if (this._elementListeners.has(element))\n containsData = true;\n containsData =\n (this._queue.find(entry => entry.element === element) ? true : false) || containsData;\n return containsData;\n }\n}\nclass TransitionAnimationEngine {\n constructor(bodyNode, driver, _normalizer) {\n this.bodyNode = bodyNode;\n this.driver = driver;\n this._normalizer = _normalizer;\n this.players = [];\n this.newHostElements = new Map();\n this.playersByElement = new Map();\n this.playersByQueriedElement = new Map();\n this.statesByElement = new Map();\n this.disabledNodes = new Set();\n this.totalAnimations = 0;\n this.totalQueuedPlayers = 0;\n this._namespaceLookup = {};\n this._namespaceList = [];\n this._flushFns = [];\n this._whenQuietFns = [];\n this.namespacesByHostElement = new Map();\n this.collectedEnterElements = [];\n this.collectedLeaveElements = [];\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (element, context) => { };\n }\n /** @internal */\n _onRemovalComplete(element, context) {\n this.onRemovalComplete(element, context);\n }\n get queuedPlayers() {\n const players = [];\n this._namespaceList.forEach(ns => {\n ns.players.forEach(player => {\n if (player.queued) {\n players.push(player);\n }\n });\n });\n return players;\n }\n createNamespace(namespaceId, hostElement) {\n const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n if (this.bodyNode && this.driver.containsElement(this.bodyNode, hostElement)) {\n this._balanceNamespaceList(ns, hostElement);\n }\n else {\n // defer this later until flush during when the host element has\n // been inserted so that we know exactly where to place it in\n // the namespace list\n this.newHostElements.set(hostElement, ns);\n // given that this host element is a part of the animation code, it\n // may or may not be inserted by a parent node that is of an\n // animation renderer type. If this happens then we can still have\n // access to this item when we query for :enter nodes. If the parent\n // is a renderer then the set data-structure will normalize the entry\n this.collectEnterElement(hostElement);\n }\n return this._namespaceLookup[namespaceId] = ns;\n }\n _balanceNamespaceList(ns, hostElement) {\n const namespaceList = this._namespaceList;\n const namespacesByHostElement = this.namespacesByHostElement;\n const limit = namespaceList.length - 1;\n if (limit >= 0) {\n let found = false;\n // Find the closest ancestor with an existing namespace so we can then insert `ns` after it,\n // establishing a top-down ordering of namespaces in `this._namespaceList`.\n let ancestor = this.driver.getParentElement(hostElement);\n while (ancestor) {\n const ancestorNs = namespacesByHostElement.get(ancestor);\n if (ancestorNs) {\n // An animation namespace has been registered for this ancestor, so we insert `ns`\n // right after it to establish top-down ordering of animation namespaces.\n const index = namespaceList.indexOf(ancestorNs);\n namespaceList.splice(index + 1, 0, ns);\n found = true;\n break;\n }\n ancestor = this.driver.getParentElement(ancestor);\n }\n if (!found) {\n // No namespace exists that is an ancestor of `ns`, so `ns` is inserted at the front to\n // ensure that any existing descendants are ordered after `ns`, retaining the desired\n // top-down ordering.\n namespaceList.unshift(ns);\n }\n }\n else {\n namespaceList.push(ns);\n }\n namespacesByHostElement.set(hostElement, ns);\n return ns;\n }\n register(namespaceId, hostElement) {\n let ns = this._namespaceLookup[namespaceId];\n if (!ns) {\n ns = this.createNamespace(namespaceId, hostElement);\n }\n return ns;\n }\n registerTrigger(namespaceId, name, trigger) {\n let ns = this._namespaceLookup[namespaceId];\n if (ns && ns.register(name, trigger)) {\n this.totalAnimations++;\n }\n }\n destroy(namespaceId, context) {\n if (!namespaceId)\n return;\n const ns = this._fetchNamespace(namespaceId);\n this.afterFlush(() => {\n this.namespacesByHostElement.delete(ns.hostElement);\n delete this._namespaceLookup[namespaceId];\n const index = this._namespaceList.indexOf(ns);\n if (index >= 0) {\n this._namespaceList.splice(index, 1);\n }\n });\n this.afterFlushAnimationsDone(() => ns.destroy(context));\n }\n _fetchNamespace(id) {\n return this._namespaceLookup[id];\n }\n fetchNamespacesByElement(element) {\n // normally there should only be one namespace per element, however\n // if @triggers are placed on both the component element and then\n // its host element (within the component code) then there will be\n // two namespaces returned. We use a set here to simply deduplicate\n // the namespaces in case (for the reason described above) there are multiple triggers\n const namespaces = new Set();\n const elementStates = this.statesByElement.get(element);\n if (elementStates) {\n for (let stateValue of elementStates.values()) {\n if (stateValue.namespaceId) {\n const ns = this._fetchNamespace(stateValue.namespaceId);\n if (ns) {\n namespaces.add(ns);\n }\n }\n }\n }\n return namespaces;\n }\n trigger(namespaceId, element, name, value) {\n if (isElementNode(element)) {\n const ns = this._fetchNamespace(namespaceId);\n if (ns) {\n ns.trigger(element, name, value);\n return true;\n }\n }\n return false;\n }\n insertNode(namespaceId, element, parent, insertBefore) {\n if (!isElementNode(element))\n return;\n // special case for when an element is removed and reinserted (move operation)\n // when this occurs we do not want to use the element for deletion later\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n details.setForRemoval = false;\n details.setForMove = true;\n const index = this.collectedLeaveElements.indexOf(element);\n if (index >= 0) {\n this.collectedLeaveElements.splice(index, 1);\n }\n }\n // in the event that the namespaceId is blank then the caller\n // code does not contain any animation code in it, but it is\n // just being called so that the node is marked as being inserted\n if (namespaceId) {\n const ns = this._fetchNamespace(namespaceId);\n // This if-statement is a workaround for router issue #21947.\n // The router sometimes hits a race condition where while a route\n // is being instantiated a new navigation arrives, triggering leave\n // animation of DOM that has not been fully initialized, until this\n // is resolved, we need to handle the scenario when DOM is not in a\n // consistent state during the animation.\n if (ns) {\n ns.insertNode(element, parent);\n }\n }\n // only *directives and host elements are inserted before\n if (insertBefore) {\n this.collectEnterElement(element);\n }\n }\n collectEnterElement(element) {\n this.collectedEnterElements.push(element);\n }\n markElementAsDisabled(element, value) {\n if (value) {\n if (!this.disabledNodes.has(element)) {\n this.disabledNodes.add(element);\n addClass(element, DISABLED_CLASSNAME);\n }\n }\n else if (this.disabledNodes.has(element)) {\n this.disabledNodes.delete(element);\n removeClass(element, DISABLED_CLASSNAME);\n }\n }\n removeNode(namespaceId, element, isHostElement, context) {\n if (isElementNode(element)) {\n const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n if (ns) {\n ns.removeNode(element, context);\n }\n else {\n this.markElementAsRemoved(namespaceId, element, false, context);\n }\n if (isHostElement) {\n const hostNS = this.namespacesByHostElement.get(element);\n if (hostNS && hostNS.id !== namespaceId) {\n hostNS.removeNode(element, context);\n }\n }\n }\n else {\n this._onRemovalComplete(element, context);\n }\n }\n markElementAsRemoved(namespaceId, element, hasAnimation, context, previousTriggersValues) {\n this.collectedLeaveElements.push(element);\n element[REMOVAL_FLAG] = {\n namespaceId,\n setForRemoval: context,\n hasAnimation,\n removedBeforeQueried: false,\n previousTriggersValues\n };\n }\n listen(namespaceId, element, name, phase, callback) {\n if (isElementNode(element)) {\n return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n }\n return () => { };\n }\n _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {\n return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);\n }\n destroyInnerAnimations(containerElement) {\n let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n elements.forEach(element => this.destroyActiveAnimationsForElement(element));\n if (this.playersByQueriedElement.size == 0)\n return;\n elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n elements.forEach(element => this.finishActiveQueriedAnimationOnElement(element));\n }\n destroyActiveAnimationsForElement(element) {\n const players = this.playersByElement.get(element);\n if (players) {\n players.forEach(player => {\n // special case for when an element is set for destruction, but hasn't started.\n // in this situation we want to delay the destruction until the flush occurs\n // so that any event listeners attached to the player are triggered.\n if (player.queued) {\n player.markedForDestroy = true;\n }\n else {\n player.destroy();\n }\n });\n }\n }\n finishActiveQueriedAnimationOnElement(element) {\n const players = this.playersByQueriedElement.get(element);\n if (players) {\n players.forEach(player => player.finish());\n }\n }\n whenRenderingDone() {\n return new Promise(resolve => {\n if (this.players.length) {\n return optimizeGroupPlayer(this.players).onDone(() => resolve());\n }\n else {\n resolve();\n }\n });\n }\n processLeaveNode(element) {\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n // this will prevent it from removing it twice\n element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n if (details.namespaceId) {\n this.destroyInnerAnimations(element);\n const ns = this._fetchNamespace(details.namespaceId);\n if (ns) {\n ns.clearElementCache(element);\n }\n }\n this._onRemovalComplete(element, details.setForRemoval);\n }\n if (element.classList?.contains(DISABLED_CLASSNAME)) {\n this.markElementAsDisabled(element, false);\n }\n this.driver.query(element, DISABLED_SELECTOR, true).forEach(node => {\n this.markElementAsDisabled(node, false);\n });\n }\n flush(microtaskId = -1) {\n let players = [];\n if (this.newHostElements.size) {\n this.newHostElements.forEach((ns, element) => this._balanceNamespaceList(ns, element));\n this.newHostElements.clear();\n }\n if (this.totalAnimations && this.collectedEnterElements.length) {\n for (let i = 0; i < this.collectedEnterElements.length; i++) {\n const elm = this.collectedEnterElements[i];\n addClass(elm, STAR_CLASSNAME);\n }\n }\n if (this._namespaceList.length &&\n (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n const cleanupFns = [];\n try {\n players = this._flushAnimations(cleanupFns, microtaskId);\n }\n finally {\n for (let i = 0; i < cleanupFns.length; i++) {\n cleanupFns[i]();\n }\n }\n }\n else {\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n const element = this.collectedLeaveElements[i];\n this.processLeaveNode(element);\n }\n }\n this.totalQueuedPlayers = 0;\n this.collectedEnterElements.length = 0;\n this.collectedLeaveElements.length = 0;\n this._flushFns.forEach(fn => fn());\n this._flushFns = [];\n if (this._whenQuietFns.length) {\n // we move these over to a variable so that\n // if any new callbacks are registered in another\n // flush they do not populate the existing set\n const quietFns = this._whenQuietFns;\n this._whenQuietFns = [];\n if (players.length) {\n optimizeGroupPlayer(players).onDone(() => {\n quietFns.forEach(fn => fn());\n });\n }\n else {\n quietFns.forEach(fn => fn());\n }\n }\n }\n reportError(errors) {\n throw triggerTransitionsFailed(errors);\n }\n _flushAnimations(cleanupFns, microtaskId) {\n const subTimelines = new ElementInstructionMap();\n const skippedPlayers = [];\n const skippedPlayersMap = new Map();\n const queuedInstructions = [];\n const queriedElements = new Map();\n const allPreStyleElements = new Map();\n const allPostStyleElements = new Map();\n const disabledElementsSet = new Set();\n this.disabledNodes.forEach(node => {\n disabledElementsSet.add(node);\n const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);\n for (let i = 0; i < nodesThatAreDisabled.length; i++) {\n disabledElementsSet.add(nodesThatAreDisabled[i]);\n }\n });\n const bodyNode = this.bodyNode;\n const allTriggerElements = Array.from(this.statesByElement.keys());\n const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n // this must occur before the instructions are built below such that\n // the :enter queries match the elements (since the timeline queries\n // are fired during instruction building).\n const enterNodeMapIds = new Map();\n let i = 0;\n enterNodeMap.forEach((nodes, root) => {\n const className = ENTER_CLASSNAME + i++;\n enterNodeMapIds.set(root, className);\n nodes.forEach(node => addClass(node, className));\n });\n const allLeaveNodes = [];\n const mergedLeaveNodes = new Set();\n const leaveNodesWithoutAnimations = new Set();\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n const element = this.collectedLeaveElements[i];\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval) {\n allLeaveNodes.push(element);\n mergedLeaveNodes.add(element);\n if (details.hasAnimation) {\n this.driver.query(element, STAR_SELECTOR, true).forEach(elm => mergedLeaveNodes.add(elm));\n }\n else {\n leaveNodesWithoutAnimations.add(element);\n }\n }\n }\n const leaveNodeMapIds = new Map();\n const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n leaveNodeMap.forEach((nodes, root) => {\n const className = LEAVE_CLASSNAME + i++;\n leaveNodeMapIds.set(root, className);\n nodes.forEach(node => addClass(node, className));\n });\n cleanupFns.push(() => {\n enterNodeMap.forEach((nodes, root) => {\n const className = enterNodeMapIds.get(root);\n nodes.forEach(node => removeClass(node, className));\n });\n leaveNodeMap.forEach((nodes, root) => {\n const className = leaveNodeMapIds.get(root);\n nodes.forEach(node => removeClass(node, className));\n });\n allLeaveNodes.forEach(element => {\n this.processLeaveNode(element);\n });\n });\n const allPlayers = [];\n const erroneousTransitions = [];\n for (let i = this._namespaceList.length - 1; i >= 0; i--) {\n const ns = this._namespaceList[i];\n ns.drainQueuedTransitions(microtaskId).forEach(entry => {\n const player = entry.player;\n const element = entry.element;\n allPlayers.push(player);\n if (this.collectedEnterElements.length) {\n const details = element[REMOVAL_FLAG];\n // animations for move operations (elements being removed and reinserted,\n // e.g. when the order of an *ngFor list changes) are currently not supported\n if (details && details.setForMove) {\n if (details.previousTriggersValues &&\n details.previousTriggersValues.has(entry.triggerName)) {\n const previousValue = details.previousTriggersValues.get(entry.triggerName);\n // we need to restore the previous trigger value since the element has\n // only been moved and hasn't actually left the DOM\n const triggersWithStates = this.statesByElement.get(entry.element);\n if (triggersWithStates && triggersWithStates.has(entry.triggerName)) {\n const state = triggersWithStates.get(entry.triggerName);\n state.value = previousValue;\n triggersWithStates.set(entry.triggerName, state);\n }\n }\n player.destroy();\n return;\n }\n }\n const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);\n const leaveClassName = leaveNodeMapIds.get(element);\n const enterClassName = enterNodeMapIds.get(element);\n const instruction = this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned);\n if (instruction.errors && instruction.errors.length) {\n erroneousTransitions.push(instruction);\n return;\n }\n // even though the element may not be in the DOM, it may still\n // be added at a later point (due to the mechanics of content\n // projection and/or dynamic component insertion) therefore it's\n // important to still style the element.\n if (nodeIsOrphaned) {\n player.onStart(() => eraseStyles(element, instruction.fromStyles));\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n skippedPlayers.push(player);\n return;\n }\n // if an unmatched transition is queued and ready to go\n // then it SHOULD NOT render an animation and cancel the\n // previously running animations.\n if (entry.isFallbackTransition) {\n player.onStart(() => eraseStyles(element, instruction.fromStyles));\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n skippedPlayers.push(player);\n return;\n }\n // this means that if a parent animation uses this animation as a sub-trigger\n // then it will instruct the timeline builder not to add a player delay, but\n // instead stretch the first keyframe gap until the animation starts. This is\n // important in order to prevent extra initialization styles from being\n // required by the user for the animation.\n const timelines = [];\n instruction.timelines.forEach(tl => {\n tl.stretchStartingKeyframe = true;\n if (!this.disabledNodes.has(tl.element)) {\n timelines.push(tl);\n }\n });\n instruction.timelines = timelines;\n subTimelines.append(element, instruction.timelines);\n const tuple = { instruction, player, element };\n queuedInstructions.push(tuple);\n instruction.queriedElements.forEach(element => getOrSetDefaultValue(queriedElements, element, []).push(player));\n instruction.preStyleProps.forEach((stringMap, element) => {\n if (stringMap.size) {\n let setVal = allPreStyleElements.get(element);\n if (!setVal) {\n allPreStyleElements.set(element, setVal = new Set());\n }\n stringMap.forEach((_, prop) => setVal.add(prop));\n }\n });\n instruction.postStyleProps.forEach((stringMap, element) => {\n let setVal = allPostStyleElements.get(element);\n if (!setVal) {\n allPostStyleElements.set(element, setVal = new Set());\n }\n stringMap.forEach((_, prop) => setVal.add(prop));\n });\n });\n }\n if (erroneousTransitions.length) {\n const errors = [];\n erroneousTransitions.forEach(instruction => {\n errors.push(transitionFailed(instruction.triggerName, instruction.errors));\n });\n allPlayers.forEach(player => player.destroy());\n this.reportError(errors);\n }\n const allPreviousPlayersMap = new Map();\n // this map tells us which element in the DOM tree is contained by\n // which animation. Further down this map will get populated once\n // the players are built and in doing so we can use it to efficiently\n // figure out if a sub player is skipped due to a parent player having priority.\n const animationElementMap = new Map();\n queuedInstructions.forEach(entry => {\n const element = entry.element;\n if (subTimelines.has(element)) {\n animationElementMap.set(element, element);\n this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n }\n });\n skippedPlayers.forEach(player => {\n const element = player.element;\n const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n previousPlayers.forEach(prevPlayer => {\n getOrSetDefaultValue(allPreviousPlayersMap, element, []).push(prevPlayer);\n prevPlayer.destroy();\n });\n });\n // this is a special case for nodes that will be removed either by\n // having their own leave animations or by being queried in a container\n // that will be removed once a parent animation is complete. The idea\n // here is that * styles must be identical to ! styles because of\n // backwards compatibility (* is also filled in by default in many places).\n // Otherwise * styles will return an empty value or \"auto\" since the element\n // passed to getComputedStyle will not be visible (since * === destination)\n const replaceNodes = allLeaveNodes.filter(node => {\n return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n });\n // POST STAGE: fill the * styles\n const postStylesMap = new Map();\n const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);\n allLeaveQueriedNodes.forEach(node => {\n if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n replaceNodes.push(node);\n }\n });\n // PRE STAGE: fill the ! styles\n const preStylesMap = new Map();\n enterNodeMap.forEach((nodes, root) => {\n cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);\n });\n replaceNodes.forEach(node => {\n const post = postStylesMap.get(node);\n const pre = preStylesMap.get(node);\n postStylesMap.set(node, new Map([...Array.from(post?.entries() ?? []), ...Array.from(pre?.entries() ?? [])]));\n });\n const rootPlayers = [];\n const subPlayers = [];\n const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n queuedInstructions.forEach(entry => {\n const { element, player, instruction } = entry;\n // this means that it was never consumed by a parent animation which\n // means that it is independent and therefore should be set for animation\n if (subTimelines.has(element)) {\n if (disabledElementsSet.has(element)) {\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n player.disabled = true;\n player.overrideTotalTime(instruction.totalTime);\n skippedPlayers.push(player);\n return;\n }\n // this will flow up the DOM and query the map to figure out\n // if a parent animation has priority over it. In the situation\n // that a parent is detected then it will cancel the loop. If\n // nothing is detected, or it takes a few hops to find a parent,\n // then it will fill in the missing nodes and signal them as having\n // a detected parent (or a NO_PARENT value via a special constant).\n let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n if (animationElementMap.size > 1) {\n let elm = element;\n const parentsToAdd = [];\n while (elm = elm.parentNode) {\n const detectedParent = animationElementMap.get(elm);\n if (detectedParent) {\n parentWithAnimation = detectedParent;\n break;\n }\n parentsToAdd.push(elm);\n }\n parentsToAdd.forEach(parent => animationElementMap.set(parent, parentWithAnimation));\n }\n const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n player.setRealPlayer(innerPlayer);\n if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n rootPlayers.push(player);\n }\n else {\n const parentPlayers = this.playersByElement.get(parentWithAnimation);\n if (parentPlayers && parentPlayers.length) {\n player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n }\n skippedPlayers.push(player);\n }\n }\n else {\n eraseStyles(element, instruction.fromStyles);\n player.onDestroy(() => setStyles(element, instruction.toStyles));\n // there still might be a ancestor player animating this\n // element therefore we will still add it as a sub player\n // even if its animation may be disabled\n subPlayers.push(player);\n if (disabledElementsSet.has(element)) {\n skippedPlayers.push(player);\n }\n }\n });\n // find all of the sub players' corresponding inner animation players\n subPlayers.forEach(player => {\n // even if no players are found for a sub animation it\n // will still complete itself after the next tick since it's Noop\n const playersForElement = skippedPlayersMap.get(player.element);\n if (playersForElement && playersForElement.length) {\n const innerPlayer = optimizeGroupPlayer(playersForElement);\n player.setRealPlayer(innerPlayer);\n }\n });\n // the reason why we don't actually play the animation is\n // because all that a skipped player is designed to do is to\n // fire the start/done transition callback events\n skippedPlayers.forEach(player => {\n if (player.parentPlayer) {\n player.syncPlayerEvents(player.parentPlayer);\n }\n else {\n player.destroy();\n }\n });\n // run through all of the queued removals and see if they\n // were picked up by a query. If not then perform the removal\n // operation right away unless a parent animation is ongoing.\n for (let i = 0; i < allLeaveNodes.length; i++) {\n const element = allLeaveNodes[i];\n const details = element[REMOVAL_FLAG];\n removeClass(element, LEAVE_CLASSNAME);\n // this means the element has a removal animation that is being\n // taken care of and therefore the inner elements will hang around\n // until that animation is over (or the parent queried animation)\n if (details && details.hasAnimation)\n continue;\n let players = [];\n // if this element is queried or if it contains queried children\n // then we want for the element not to be removed from the page\n // until the queried animations have finished\n if (queriedElements.size) {\n let queriedPlayerResults = queriedElements.get(element);\n if (queriedPlayerResults && queriedPlayerResults.length) {\n players.push(...queriedPlayerResults);\n }\n let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n for (let j = 0; j < queriedInnerElements.length; j++) {\n let queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n if (queriedPlayers && queriedPlayers.length) {\n players.push(...queriedPlayers);\n }\n }\n }\n const activePlayers = players.filter(p => !p.destroyed);\n if (activePlayers.length) {\n removeNodesAfterAnimationDone(this, element, activePlayers);\n }\n else {\n this.processLeaveNode(element);\n }\n }\n // this is required so the cleanup method doesn't remove them\n allLeaveNodes.length = 0;\n rootPlayers.forEach(player => {\n this.players.push(player);\n player.onDone(() => {\n player.destroy();\n const index = this.players.indexOf(player);\n this.players.splice(index, 1);\n });\n player.play();\n });\n return rootPlayers;\n }\n elementContainsData(namespaceId, element) {\n let containsData = false;\n const details = element[REMOVAL_FLAG];\n if (details && details.setForRemoval)\n containsData = true;\n if (this.playersByElement.has(element))\n containsData = true;\n if (this.playersByQueriedElement.has(element))\n containsData = true;\n if (this.statesByElement.has(element))\n containsData = true;\n return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData;\n }\n afterFlush(callback) {\n this._flushFns.push(callback);\n }\n afterFlushAnimationsDone(callback) {\n this._whenQuietFns.push(callback);\n }\n _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n let players = [];\n if (isQueriedElement) {\n const queriedElementPlayers = this.playersByQueriedElement.get(element);\n if (queriedElementPlayers) {\n players = queriedElementPlayers;\n }\n }\n else {\n const elementPlayers = this.playersByElement.get(element);\n if (elementPlayers) {\n const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;\n elementPlayers.forEach(player => {\n if (player.queued)\n return;\n if (!isRemovalAnimation && player.triggerName != triggerName)\n return;\n players.push(player);\n });\n }\n }\n if (namespaceId || triggerName) {\n players = players.filter(player => {\n if (namespaceId && namespaceId != player.namespaceId)\n return false;\n if (triggerName && triggerName != player.triggerName)\n return false;\n return true;\n });\n }\n return players;\n }\n _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {\n const triggerName = instruction.triggerName;\n const rootElement = instruction.element;\n // when a removal animation occurs, ALL previous players are collected\n // and destroyed (even if they are outside of the current namespace)\n const targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n const targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n for (const timelineInstruction of instruction.timelines) {\n const element = timelineInstruction.element;\n const isQueriedElement = element !== rootElement;\n const players = getOrSetDefaultValue(allPreviousPlayersMap, element, []);\n const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n previousPlayers.forEach(player => {\n const realPlayer = player.getRealPlayer();\n if (realPlayer.beforeDestroy) {\n realPlayer.beforeDestroy();\n }\n player.destroy();\n players.push(player);\n });\n }\n // this needs to be done so that the PRE/POST styles can be\n // computed properly without interfering with the previous animation\n eraseStyles(rootElement, instruction.fromStyles);\n }\n _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n const triggerName = instruction.triggerName;\n const rootElement = instruction.element;\n // we first run this so that the previous animation player\n // data can be passed into the successive animation players\n const allQueriedPlayers = [];\n const allConsumedElements = new Set();\n const allSubElements = new Set();\n const allNewPlayers = instruction.timelines.map(timelineInstruction => {\n const element = timelineInstruction.element;\n allConsumedElements.add(element);\n // FIXME (matsko): make sure to-be-removed animations are removed properly\n const details = element[REMOVAL_FLAG];\n if (details && details.removedBeforeQueried)\n return new NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay);\n const isQueriedElement = element !== rootElement;\n const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)\n .map(p => p.getRealPlayer()))\n .filter(p => {\n // the `element` is not apart of the AnimationPlayer definition, but\n // Mock/WebAnimations\n // use the element within their implementation. This will be added in Angular5 to\n // AnimationPlayer\n const pp = p;\n return pp.element ? pp.element === element : false;\n });\n const preStyles = preStylesMap.get(element);\n const postStyles = postStylesMap.get(element);\n const keyframes = normalizeKeyframes$1(this.driver, this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);\n const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n // this means that this particular player belongs to a sub trigger. It is\n // important that we match this player up with the corresponding (@trigger.listener)\n if (timelineInstruction.subTimeline && skippedPlayersMap) {\n allSubElements.add(element);\n }\n if (isQueriedElement) {\n const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n wrappedPlayer.setRealPlayer(player);\n allQueriedPlayers.push(wrappedPlayer);\n }\n return player;\n });\n allQueriedPlayers.forEach(player => {\n getOrSetDefaultValue(this.playersByQueriedElement, player.element, []).push(player);\n player.onDone(() => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player));\n });\n allConsumedElements.forEach(element => addClass(element, NG_ANIMATING_CLASSNAME));\n const player = optimizeGroupPlayer(allNewPlayers);\n player.onDestroy(() => {\n allConsumedElements.forEach(element => removeClass(element, NG_ANIMATING_CLASSNAME));\n setStyles(rootElement, instruction.toStyles);\n });\n // this basically makes all of the callbacks for sub element animations\n // be dependent on the upper players for when they finish\n allSubElements.forEach(element => {\n getOrSetDefaultValue(skippedPlayersMap, element, []).push(player);\n });\n return player;\n }\n _buildPlayer(instruction, keyframes, previousPlayers) {\n if (keyframes.length > 0) {\n return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n }\n // special case for when an empty transition|definition is provided\n // ... there is no point in rendering an empty animation\n return new NoopAnimationPlayer(instruction.duration, instruction.delay);\n }\n}\nclass TransitionAnimationPlayer {\n constructor(namespaceId, triggerName, element) {\n this.namespaceId = namespaceId;\n this.triggerName = triggerName;\n this.element = element;\n this._player = new NoopAnimationPlayer();\n this._containsRealPlayer = false;\n this._queuedCallbacks = new Map();\n this.destroyed = false;\n this.markedForDestroy = false;\n this.disabled = false;\n this.queued = true;\n this.totalTime = 0;\n }\n setRealPlayer(player) {\n if (this._containsRealPlayer)\n return;\n this._player = player;\n this._queuedCallbacks.forEach((callbacks, phase) => {\n callbacks.forEach(callback => listenOnPlayer(player, phase, undefined, callback));\n });\n this._queuedCallbacks.clear();\n this._containsRealPlayer = true;\n this.overrideTotalTime(player.totalTime);\n this.queued = false;\n }\n getRealPlayer() {\n return this._player;\n }\n overrideTotalTime(totalTime) {\n this.totalTime = totalTime;\n }\n syncPlayerEvents(player) {\n const p = this._player;\n if (p.triggerCallback) {\n player.onStart(() => p.triggerCallback('start'));\n }\n player.onDone(() => this.finish());\n player.onDestroy(() => this.destroy());\n }\n _queueEvent(name, callback) {\n getOrSetDefaultValue(this._queuedCallbacks, name, []).push(callback);\n }\n onDone(fn) {\n if (this.queued) {\n this._queueEvent('done', fn);\n }\n this._player.onDone(fn);\n }\n onStart(fn) {\n if (this.queued) {\n this._queueEvent('start', fn);\n }\n this._player.onStart(fn);\n }\n onDestroy(fn) {\n if (this.queued) {\n this._queueEvent('destroy', fn);\n }\n this._player.onDestroy(fn);\n }\n init() {\n this._player.init();\n }\n hasStarted() {\n return this.queued ? false : this._player.hasStarted();\n }\n play() {\n !this.queued && this._player.play();\n }\n pause() {\n !this.queued && this._player.pause();\n }\n restart() {\n !this.queued && this._player.restart();\n }\n finish() {\n this._player.finish();\n }\n destroy() {\n this.destroyed = true;\n this._player.destroy();\n }\n reset() {\n !this.queued && this._player.reset();\n }\n setPosition(p) {\n if (!this.queued) {\n this._player.setPosition(p);\n }\n }\n getPosition() {\n return this.queued ? 0 : this._player.getPosition();\n }\n /** @internal */\n triggerCallback(phaseName) {\n const p = this._player;\n if (p.triggerCallback) {\n p.triggerCallback(phaseName);\n }\n }\n}\nfunction deleteOrUnsetInMap(map, key, value) {\n let currentValues = map.get(key);\n if (currentValues) {\n if (currentValues.length) {\n const index = currentValues.indexOf(value);\n currentValues.splice(index, 1);\n }\n if (currentValues.length == 0) {\n map.delete(key);\n }\n }\n return currentValues;\n}\nfunction normalizeTriggerValue(value) {\n // we use `!= null` here because it's the most simple\n // way to test against a \"falsy\" value without mixing\n // in empty strings or a zero value. DO NOT OPTIMIZE.\n return value != null ? value : null;\n}\nfunction isElementNode(node) {\n return node && node['nodeType'] === 1;\n}\nfunction isTriggerEventValid(eventName) {\n return eventName == 'start' || eventName == 'done';\n}\nfunction cloakElement(element, value) {\n const oldValue = element.style.display;\n element.style.display = value != null ? value : 'none';\n return oldValue;\n}\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n const cloakVals = [];\n elements.forEach(element => cloakVals.push(cloakElement(element)));\n const failedElements = [];\n elementPropsMap.forEach((props, element) => {\n const styles = new Map();\n props.forEach(prop => {\n const value = driver.computeStyle(element, prop, defaultStyle);\n styles.set(prop, value);\n // there is no easy way to detect this because a sub element could be removed\n // by a parent animation element being detached.\n if (!value || value.length == 0) {\n element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n failedElements.push(element);\n }\n });\n valuesMap.set(element, styles);\n });\n // we use a index variable here since Set.forEach(a, i) does not return\n // an index value for the closure (but instead just the value)\n let i = 0;\n elements.forEach(element => cloakElement(element, cloakVals[i++]));\n return failedElements;\n}\n/*\nSince the Angular renderer code will return a collection of inserted\nnodes in all areas of a DOM tree, it's up to this algorithm to figure\nout which nodes are roots for each animation @trigger.\n\nBy placing each inserted node into a Set and traversing upwards, it\nis possible to find the @trigger elements and well any direct *star\ninsertion nodes, if a @trigger root is found then the enter element\nis placed into the Map[@trigger] spot.\n */\nfunction buildRootMap(roots, nodes) {\n const rootMap = new Map();\n roots.forEach(root => rootMap.set(root, []));\n if (nodes.length == 0)\n return rootMap;\n const NULL_NODE = 1;\n const nodeSet = new Set(nodes);\n const localRootMap = new Map();\n function getRoot(node) {\n if (!node)\n return NULL_NODE;\n let root = localRootMap.get(node);\n if (root)\n return root;\n const parent = node.parentNode;\n if (rootMap.has(parent)) { // ngIf inside @trigger\n root = parent;\n }\n else if (nodeSet.has(parent)) { // ngIf inside ngIf\n root = NULL_NODE;\n }\n else { // recurse upwards\n root = getRoot(parent);\n }\n localRootMap.set(node, root);\n return root;\n }\n nodes.forEach(node => {\n const root = getRoot(node);\n if (root !== NULL_NODE) {\n rootMap.get(root).push(node);\n }\n });\n return rootMap;\n}\nfunction addClass(element, className) {\n element.classList?.add(className);\n}\nfunction removeClass(element, className) {\n element.classList?.remove(className);\n}\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n optimizeGroupPlayer(players).onDone(() => engine.processLeaveNode(element));\n}\nfunction flattenGroupPlayers(players) {\n const finalPlayers = [];\n _flattenGroupPlayersRecur(players, finalPlayers);\n return finalPlayers;\n}\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n for (let i = 0; i < players.length; i++) {\n const player = players[i];\n if (player instanceof ɵAnimationGroupPlayer) {\n _flattenGroupPlayersRecur(player.players, finalPlayers);\n }\n else {\n finalPlayers.push(player);\n }\n }\n}\nfunction objEquals(a, b) {\n const k1 = Object.keys(a);\n const k2 = Object.keys(b);\n if (k1.length != k2.length)\n return false;\n for (let i = 0; i < k1.length; i++) {\n const prop = k1[i];\n if (!b.hasOwnProperty(prop) || a[prop] !== b[prop])\n return false;\n }\n return true;\n}\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n const postEntry = allPostStyleElements.get(element);\n if (!postEntry)\n return false;\n let preEntry = allPreStyleElements.get(element);\n if (preEntry) {\n postEntry.forEach(data => preEntry.add(data));\n }\n else {\n allPreStyleElements.set(element, postEntry);\n }\n allPostStyleElements.delete(element);\n return true;\n}\n\nclass AnimationEngine {\n constructor(bodyNode, _driver, _normalizer) {\n this.bodyNode = bodyNode;\n this._driver = _driver;\n this._normalizer = _normalizer;\n this._triggerCache = {};\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (element, context) => { };\n this._transitionEngine = new TransitionAnimationEngine(bodyNode, _driver, _normalizer);\n this._timelineEngine = new TimelineAnimationEngine(bodyNode, _driver, _normalizer);\n this._transitionEngine.onRemovalComplete = (element, context) => this.onRemovalComplete(element, context);\n }\n registerTrigger(componentId, namespaceId, hostElement, name, metadata) {\n const cacheKey = componentId + '-' + name;\n let trigger = this._triggerCache[cacheKey];\n if (!trigger) {\n const errors = [];\n const warnings = [];\n const ast = buildAnimationAst(this._driver, metadata, errors, warnings);\n if (errors.length) {\n throw triggerBuildFailed(name, errors);\n }\n if (warnings.length) {\n warnTriggerBuild(name, warnings);\n }\n trigger = buildTrigger(name, ast, this._normalizer);\n this._triggerCache[cacheKey] = trigger;\n }\n this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n }\n register(namespaceId, hostElement) {\n this._transitionEngine.register(namespaceId, hostElement);\n }\n destroy(namespaceId, context) {\n this._transitionEngine.destroy(namespaceId, context);\n }\n onInsert(namespaceId, element, parent, insertBefore) {\n this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n }\n onRemove(namespaceId, element, context, isHostElement) {\n this._transitionEngine.removeNode(namespaceId, element, isHostElement || false, context);\n }\n disableAnimations(element, disable) {\n this._transitionEngine.markElementAsDisabled(element, disable);\n }\n process(namespaceId, element, property, value) {\n if (property.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(property);\n const args = value;\n this._timelineEngine.command(id, element, action, args);\n }\n else {\n this._transitionEngine.trigger(namespaceId, element, property, value);\n }\n }\n listen(namespaceId, element, eventName, eventPhase, callback) {\n // @@listen\n if (eventName.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(eventName);\n return this._timelineEngine.listen(id, element, action, callback);\n }\n return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n }\n flush(microtaskId = -1) {\n this._transitionEngine.flush(microtaskId);\n }\n get players() {\n return this._transitionEngine.players\n .concat(this._timelineEngine.players);\n }\n whenRenderingDone() {\n return this._transitionEngine.whenRenderingDone();\n }\n}\n\n/**\n * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are\n * detected.\n *\n * In CSS there exist properties that cannot be animated within a keyframe animation\n * (whether it be via CSS keyframes or web-animations) and the animation implementation\n * will ignore them. This function is designed to detect those special cased styles and\n * return a container that will be executed at the start and end of the animation.\n *\n * @returns an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`\n */\nfunction packageNonAnimatableStyles(element, styles) {\n let startStyles = null;\n let endStyles = null;\n if (Array.isArray(styles) && styles.length) {\n startStyles = filterNonAnimatableStyles(styles[0]);\n if (styles.length > 1) {\n endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);\n }\n }\n else if (styles instanceof Map) {\n startStyles = filterNonAnimatableStyles(styles);\n }\n return (startStyles || endStyles) ? new SpecialCasedStyles(element, startStyles, endStyles) :\n null;\n}\n/**\n * Designed to be executed during a keyframe-based animation to apply any special-cased styles.\n *\n * When started (when the `start()` method is run) then the provided `startStyles`\n * will be applied. When finished (when the `finish()` method is called) the\n * `endStyles` will be applied as well any any starting styles. Finally when\n * `destroy()` is called then all styles will be removed.\n */\nclass SpecialCasedStyles {\n constructor(_element, _startStyles, _endStyles) {\n this._element = _element;\n this._startStyles = _startStyles;\n this._endStyles = _endStyles;\n this._state = 0 /* SpecialCasedStylesState.Pending */;\n let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);\n if (!initialStyles) {\n SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = new Map());\n }\n this._initialStyles = initialStyles;\n }\n start() {\n if (this._state < 1 /* SpecialCasedStylesState.Started */) {\n if (this._startStyles) {\n setStyles(this._element, this._startStyles, this._initialStyles);\n }\n this._state = 1 /* SpecialCasedStylesState.Started */;\n }\n }\n finish() {\n this.start();\n if (this._state < 2 /* SpecialCasedStylesState.Finished */) {\n setStyles(this._element, this._initialStyles);\n if (this._endStyles) {\n setStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n this._state = 1 /* SpecialCasedStylesState.Started */;\n }\n }\n destroy() {\n this.finish();\n if (this._state < 3 /* SpecialCasedStylesState.Destroyed */) {\n SpecialCasedStyles.initialStylesByElement.delete(this._element);\n if (this._startStyles) {\n eraseStyles(this._element, this._startStyles);\n this._endStyles = null;\n }\n if (this._endStyles) {\n eraseStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n setStyles(this._element, this._initialStyles);\n this._state = 3 /* SpecialCasedStylesState.Destroyed */;\n }\n }\n}\nSpecialCasedStyles.initialStylesByElement = ( /* @__PURE__ */new WeakMap());\nfunction filterNonAnimatableStyles(styles) {\n let result = null;\n styles.forEach((val, prop) => {\n if (isNonAnimatableStyle(prop)) {\n result = result || new Map();\n result.set(prop, val);\n }\n });\n return result;\n}\nfunction isNonAnimatableStyle(prop) {\n return prop === 'display' || prop === 'position';\n}\n\nclass WebAnimationsPlayer {\n constructor(element, keyframes, options, _specialStyles) {\n this.element = element;\n this.keyframes = keyframes;\n this.options = options;\n this._specialStyles = _specialStyles;\n this._onDoneFns = [];\n this._onStartFns = [];\n this._onDestroyFns = [];\n this._initialized = false;\n this._finished = false;\n this._started = false;\n this._destroyed = false;\n // the following original fns are persistent copies of the _onStartFns and _onDoneFns\n // and are used to reset the fns to their original values upon reset()\n // (since the _onStartFns and _onDoneFns get deleted after they are called)\n this._originalOnDoneFns = [];\n this._originalOnStartFns = [];\n this.time = 0;\n this.parentPlayer = null;\n this.currentSnapshot = new Map();\n this._duration = options['duration'];\n this._delay = options['delay'] || 0;\n this.time = this._duration + this._delay;\n }\n _onFinish() {\n if (!this._finished) {\n this._finished = true;\n this._onDoneFns.forEach(fn => fn());\n this._onDoneFns = [];\n }\n }\n init() {\n this._buildPlayer();\n this._preparePlayerBeforeStart();\n }\n _buildPlayer() {\n if (this._initialized)\n return;\n this._initialized = true;\n const keyframes = this.keyframes;\n this.domPlayer =\n this._triggerWebAnimation(this.element, keyframes, this.options);\n this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : new Map();\n this.domPlayer.addEventListener('finish', () => this._onFinish());\n }\n _preparePlayerBeforeStart() {\n // this is required so that the player doesn't start to animate right away\n if (this._delay) {\n this._resetDomPlayerState();\n }\n else {\n this.domPlayer.pause();\n }\n }\n _convertKeyframesToObject(keyframes) {\n const kfs = [];\n keyframes.forEach(frame => {\n kfs.push(Object.fromEntries(frame));\n });\n return kfs;\n }\n /** @internal */\n _triggerWebAnimation(element, keyframes, options) {\n // jscompiler doesn't seem to know animate is a native property because it's not fully\n // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929]\n return element['animate'](this._convertKeyframesToObject(keyframes), options);\n }\n onStart(fn) {\n this._originalOnStartFns.push(fn);\n this._onStartFns.push(fn);\n }\n onDone(fn) {\n this._originalOnDoneFns.push(fn);\n this._onDoneFns.push(fn);\n }\n onDestroy(fn) {\n this._onDestroyFns.push(fn);\n }\n play() {\n this._buildPlayer();\n if (!this.hasStarted()) {\n this._onStartFns.forEach(fn => fn());\n this._onStartFns = [];\n this._started = true;\n if (this._specialStyles) {\n this._specialStyles.start();\n }\n }\n this.domPlayer.play();\n }\n pause() {\n this.init();\n this.domPlayer.pause();\n }\n finish() {\n this.init();\n if (this._specialStyles) {\n this._specialStyles.finish();\n }\n this._onFinish();\n this.domPlayer.finish();\n }\n reset() {\n this._resetDomPlayerState();\n this._destroyed = false;\n this._finished = false;\n this._started = false;\n this._onStartFns = this._originalOnStartFns;\n this._onDoneFns = this._originalOnDoneFns;\n }\n _resetDomPlayerState() {\n if (this.domPlayer) {\n this.domPlayer.cancel();\n }\n }\n restart() {\n this.reset();\n this.play();\n }\n hasStarted() {\n return this._started;\n }\n destroy() {\n if (!this._destroyed) {\n this._destroyed = true;\n this._resetDomPlayerState();\n this._onFinish();\n if (this._specialStyles) {\n this._specialStyles.destroy();\n }\n this._onDestroyFns.forEach(fn => fn());\n this._onDestroyFns = [];\n }\n }\n setPosition(p) {\n if (this.domPlayer === undefined) {\n this.init();\n }\n this.domPlayer.currentTime = p * this.time;\n }\n getPosition() {\n return this.domPlayer.currentTime / this.time;\n }\n get totalTime() {\n return this._delay + this._duration;\n }\n beforeDestroy() {\n const styles = new Map();\n if (this.hasStarted()) {\n // note: this code is invoked only when the `play` function was called prior to this\n // (thus `hasStarted` returns true), this implies that the code that initializes\n // `_finalKeyframe` has also been executed and the non-null assertion can be safely used here\n const finalKeyframe = this._finalKeyframe;\n finalKeyframe.forEach((val, prop) => {\n if (prop !== 'offset') {\n styles.set(prop, this._finished ? val : computeStyle(this.element, prop));\n }\n });\n }\n this.currentSnapshot = styles;\n }\n /** @internal */\n triggerCallback(phaseName) {\n const methods = phaseName === 'start' ? this._onStartFns : this._onDoneFns;\n methods.forEach(fn => fn());\n methods.length = 0;\n }\n}\n\nclass WebAnimationsDriver {\n validateStyleProperty(prop) {\n // Perform actual validation in dev mode only, in prod mode this check is a noop.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n return validateStyleProperty(prop);\n }\n return true;\n }\n validateAnimatableStyleProperty(prop) {\n // Perform actual validation in dev mode only, in prod mode this check is a noop.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const cssProp = camelCaseToDashCase(prop);\n return validateWebAnimatableStyleProperty(cssProp);\n }\n return true;\n }\n matchesElement(_element, _selector) {\n // This method is deprecated and no longer in use so we return false.\n return false;\n }\n containsElement(elm1, elm2) {\n return containsElement(elm1, elm2);\n }\n getParentElement(element) {\n return getParentElement(element);\n }\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n computeStyle(element, prop, defaultValue) {\n return window.getComputedStyle(element)[prop];\n }\n animate(element, keyframes, duration, delay, easing, previousPlayers = []) {\n const fill = delay == 0 ? 'both' : 'forwards';\n const playerOptions = { duration, delay, fill };\n // we check for this to avoid having a null|undefined value be present\n // for the easing (which results in an error for certain browsers #9752)\n if (easing) {\n playerOptions['easing'] = easing;\n }\n const previousStyles = new Map();\n const previousWebAnimationPlayers = previousPlayers.filter(player => player instanceof WebAnimationsPlayer);\n if (allowPreviousPlayerStylesMerge(duration, delay)) {\n previousWebAnimationPlayers.forEach(player => {\n player.currentSnapshot.forEach((val, prop) => previousStyles.set(prop, val));\n });\n }\n let _keyframes = normalizeKeyframes(keyframes).map(styles => copyStyles(styles));\n _keyframes = balancePreviousStylesIntoKeyframes(element, _keyframes, previousStyles);\n const specialStyles = packageNonAnimatableStyles(element, _keyframes);\n return new WebAnimationsPlayer(element, _keyframes, playerOptions, specialStyles);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, NoopAnimationDriver as ɵNoopAnimationDriver, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, containsElement as ɵcontainsElement, getParentElement as ɵgetParentElement, invokeQuery as ɵinvokeQuery, normalizeKeyframes as ɵnormalizeKeyframes, validateStyleProperty as ɵvalidateStyleProperty };\n","/**\n * @license Angular v14.3.0\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { ViewEncapsulation, Injectable, Inject, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE, NgModule } from '@angular/core';\nexport { ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { ɵDomRendererFactory2, BrowserModule } from '@angular/platform-browser';\nimport { AnimationBuilder, sequence, AnimationFactory } from '@angular/animations';\nimport * as i1 from '@angular/animations/browser';\nimport { ɵAnimationEngine, ɵWebAnimationsStyleNormalizer, ɵAnimationStyleNormalizer, AnimationDriver, ɵWebAnimationsDriver, ɵNoopAnimationDriver } from '@angular/animations/browser';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass BrowserAnimationBuilder extends AnimationBuilder {\n constructor(rootRenderer, doc) {\n super();\n this._nextAnimationId = 0;\n const typeData = { id: '0', encapsulation: ViewEncapsulation.None, styles: [], data: { animation: [] } };\n this._renderer = rootRenderer.createRenderer(doc.body, typeData);\n }\n build(animation) {\n const id = this._nextAnimationId.toString();\n this._nextAnimationId++;\n const entry = Array.isArray(animation) ? sequence(animation) : animation;\n issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n return new BrowserAnimationFactory(id, this._renderer);\n }\n}\nBrowserAnimationBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationBuilder, deps: [{ token: i0.RendererFactory2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });\nBrowserAnimationBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationBuilder });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationBuilder, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; } });\nclass BrowserAnimationFactory extends AnimationFactory {\n constructor(_id, _renderer) {\n super();\n this._id = _id;\n this._renderer = _renderer;\n }\n create(element, options) {\n return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n }\n}\nclass RendererAnimationPlayer {\n constructor(id, element, options, _renderer) {\n this.id = id;\n this.element = element;\n this._renderer = _renderer;\n this.parentPlayer = null;\n this._started = false;\n this.totalTime = 0;\n this._command('create', options);\n }\n _listen(eventName, callback) {\n return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);\n }\n _command(command, ...args) {\n return issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n }\n onDone(fn) {\n this._listen('done', fn);\n }\n onStart(fn) {\n this._listen('start', fn);\n }\n onDestroy(fn) {\n this._listen('destroy', fn);\n }\n init() {\n this._command('init');\n }\n hasStarted() {\n return this._started;\n }\n play() {\n this._command('play');\n this._started = true;\n }\n pause() {\n this._command('pause');\n }\n restart() {\n this._command('restart');\n }\n finish() {\n this._command('finish');\n }\n destroy() {\n this._command('destroy');\n }\n reset() {\n this._command('reset');\n this._started = false;\n }\n setPosition(p) {\n this._command('setPosition', p);\n }\n getPosition() {\n return this._renderer.engine.players[+this.id]?.getPosition() ?? 0;\n }\n}\nfunction issueAnimationCommand(renderer, element, id, command, args) {\n return renderer.setProperty(element, `@@${id}:${command}`, args);\n}\n\nconst ANIMATION_PREFIX = '@';\nconst DISABLE_ANIMATIONS_FLAG = '@.disabled';\nclass AnimationRendererFactory {\n constructor(delegate, engine, _zone) {\n this.delegate = delegate;\n this.engine = engine;\n this._zone = _zone;\n this._currentId = 0;\n this._microtaskId = 1;\n this._animationCallbacksBuffer = [];\n this._rendererCache = new Map();\n this._cdRecurDepth = 0;\n this.promise = Promise.resolve(0);\n engine.onRemovalComplete = (element, delegate) => {\n // Note: if a component element has a leave animation, and a host leave animation,\n // the view engine will call `removeChild` for the parent\n // component renderer as well as for the child component renderer.\n // Therefore, we need to check if we already removed the element.\n const parentNode = delegate?.parentNode(element);\n if (parentNode) {\n delegate.removeChild(parentNode, element);\n }\n };\n }\n createRenderer(hostElement, type) {\n const EMPTY_NAMESPACE_ID = '';\n // cache the delegates to find out which cached delegate can\n // be used by which cached renderer\n const delegate = this.delegate.createRenderer(hostElement, type);\n if (!hostElement || !type || !type.data || !type.data['animation']) {\n let renderer = this._rendererCache.get(delegate);\n if (!renderer) {\n // Ensure that the renderer is removed from the cache on destroy\n // since it may contain references to detached DOM nodes.\n const onRendererDestroy = () => this._rendererCache.delete(delegate);\n renderer =\n new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine, onRendererDestroy);\n // only cache this result when the base renderer is used\n this._rendererCache.set(delegate, renderer);\n }\n return renderer;\n }\n const componentId = type.id;\n const namespaceId = type.id + '-' + this._currentId;\n this._currentId++;\n this.engine.register(namespaceId, hostElement);\n const registerTrigger = (trigger) => {\n if (Array.isArray(trigger)) {\n trigger.forEach(registerTrigger);\n }\n else {\n this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n }\n };\n const animationTriggers = type.data['animation'];\n animationTriggers.forEach(registerTrigger);\n return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n }\n begin() {\n this._cdRecurDepth++;\n if (this.delegate.begin) {\n this.delegate.begin();\n }\n }\n _scheduleCountTask() {\n // always use promise to schedule microtask instead of use Zone\n this.promise.then(() => {\n this._microtaskId++;\n });\n }\n /** @internal */\n scheduleListenerCallback(count, fn, data) {\n if (count >= 0 && count < this._microtaskId) {\n this._zone.run(() => fn(data));\n return;\n }\n if (this._animationCallbacksBuffer.length == 0) {\n Promise.resolve(null).then(() => {\n this._zone.run(() => {\n this._animationCallbacksBuffer.forEach(tuple => {\n const [fn, data] = tuple;\n fn(data);\n });\n this._animationCallbacksBuffer = [];\n });\n });\n }\n this._animationCallbacksBuffer.push([fn, data]);\n }\n end() {\n this._cdRecurDepth--;\n // this is to prevent animations from running twice when an inner\n // component does CD when a parent component instead has inserted it\n if (this._cdRecurDepth == 0) {\n this._zone.runOutsideAngular(() => {\n this._scheduleCountTask();\n this.engine.flush(this._microtaskId);\n });\n }\n if (this.delegate.end) {\n this.delegate.end();\n }\n }\n whenRenderingDone() {\n return this.engine.whenRenderingDone();\n }\n}\nAnimationRendererFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AnimationRendererFactory, deps: [{ token: i0.RendererFactory2 }, { token: i1.ɵAnimationEngine }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nAnimationRendererFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AnimationRendererFactory });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AnimationRendererFactory, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: i1.ɵAnimationEngine }, { type: i0.NgZone }]; } });\nclass BaseAnimationRenderer {\n constructor(namespaceId, delegate, engine, _onDestroy) {\n this.namespaceId = namespaceId;\n this.delegate = delegate;\n this.engine = engine;\n this._onDestroy = _onDestroy;\n this.destroyNode = this.delegate.destroyNode ? (n) => delegate.destroyNode(n) : null;\n }\n get data() {\n return this.delegate.data;\n }\n destroy() {\n this.engine.destroy(this.namespaceId, this.delegate);\n this.delegate.destroy();\n this._onDestroy?.();\n }\n createElement(name, namespace) {\n return this.delegate.createElement(name, namespace);\n }\n createComment(value) {\n return this.delegate.createComment(value);\n }\n createText(value) {\n return this.delegate.createText(value);\n }\n appendChild(parent, newChild) {\n this.delegate.appendChild(parent, newChild);\n this.engine.onInsert(this.namespaceId, newChild, parent, false);\n }\n insertBefore(parent, newChild, refChild, isMove = true) {\n this.delegate.insertBefore(parent, newChild, refChild);\n // If `isMove` true than we should animate this insert.\n this.engine.onInsert(this.namespaceId, newChild, parent, isMove);\n }\n removeChild(parent, oldChild, isHostElement) {\n this.engine.onRemove(this.namespaceId, oldChild, this.delegate, isHostElement);\n }\n selectRootElement(selectorOrNode, preserveContent) {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n parentNode(node) {\n return this.delegate.parentNode(node);\n }\n nextSibling(node) {\n return this.delegate.nextSibling(node);\n }\n setAttribute(el, name, value, namespace) {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n removeAttribute(el, name, namespace) {\n this.delegate.removeAttribute(el, name, namespace);\n }\n addClass(el, name) {\n this.delegate.addClass(el, name);\n }\n removeClass(el, name) {\n this.delegate.removeClass(el, name);\n }\n setStyle(el, style, value, flags) {\n this.delegate.setStyle(el, style, value, flags);\n }\n removeStyle(el, style, flags) {\n this.delegate.removeStyle(el, style, flags);\n }\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n this.disableAnimations(el, !!value);\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n setValue(node, value) {\n this.delegate.setValue(node, value);\n }\n listen(target, eventName, callback) {\n return this.delegate.listen(target, eventName, callback);\n }\n disableAnimations(element, value) {\n this.engine.disableAnimations(element, value);\n }\n}\nclass AnimationRenderer extends BaseAnimationRenderer {\n constructor(factory, namespaceId, delegate, engine, onDestroy) {\n super(namespaceId, delegate, engine, onDestroy);\n this.factory = factory;\n this.namespaceId = namespaceId;\n }\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX) {\n if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n value = value === undefined ? true : !!value;\n this.disableAnimations(el, value);\n }\n else {\n this.engine.process(this.namespaceId, el, name.slice(1), value);\n }\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n listen(target, eventName, callback) {\n if (eventName.charAt(0) == ANIMATION_PREFIX) {\n const element = resolveElementFromTarget(target);\n let name = eventName.slice(1);\n let phase = '';\n // @listener.phase is for trigger animation callbacks\n // @@listener is for animation builder callbacks\n if (name.charAt(0) != ANIMATION_PREFIX) {\n [name, phase] = parseTriggerCallbackName(name);\n }\n return this.engine.listen(this.namespaceId, element, name, phase, event => {\n const countId = event['_data'] || -1;\n this.factory.scheduleListenerCallback(countId, callback, event);\n });\n }\n return this.delegate.listen(target, eventName, callback);\n }\n}\nfunction resolveElementFromTarget(target) {\n switch (target) {\n case 'body':\n return document.body;\n case 'document':\n return document;\n case 'window':\n return window;\n default:\n return target;\n }\n}\nfunction parseTriggerCallbackName(triggerName) {\n const dotIndex = triggerName.indexOf('.');\n const trigger = triggerName.substring(0, dotIndex);\n const phase = triggerName.slice(dotIndex + 1);\n return [trigger, phase];\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass InjectableAnimationEngine extends ɵAnimationEngine {\n // The `ApplicationRef` is injected here explicitly to force the dependency ordering.\n // Since the `ApplicationRef` should be created earlier before the `AnimationEngine`, they\n // both have `ngOnDestroy` hooks and `flush()` must be called after all views are destroyed.\n constructor(doc, driver, normalizer, appRef) {\n super(doc.body, driver, normalizer);\n }\n ngOnDestroy() {\n this.flush();\n }\n}\nInjectableAnimationEngine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: InjectableAnimationEngine, deps: [{ token: DOCUMENT }, { token: i1.AnimationDriver }, { token: i1.ɵAnimationStyleNormalizer }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });\nInjectableAnimationEngine.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: InjectableAnimationEngine });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: InjectableAnimationEngine, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: i1.AnimationDriver }, { type: i1.ɵAnimationStyleNormalizer }, { type: i0.ApplicationRef }]; } });\nfunction instantiateDefaultStyleNormalizer() {\n return new ɵWebAnimationsStyleNormalizer();\n}\nfunction instantiateRendererFactory(renderer, engine, zone) {\n return new AnimationRendererFactory(renderer, engine, zone);\n}\nconst SHARED_ANIMATION_PROVIDERS = [\n { provide: AnimationBuilder, useClass: BrowserAnimationBuilder },\n { provide: ɵAnimationStyleNormalizer, useFactory: instantiateDefaultStyleNormalizer },\n { provide: ɵAnimationEngine, useClass: InjectableAnimationEngine }, {\n provide: RendererFactory2,\n useFactory: instantiateRendererFactory,\n deps: [ɵDomRendererFactory2, ɵAnimationEngine, NgZone]\n }\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n */\nconst BROWSER_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useFactory: () => new ɵWebAnimationsDriver() },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'BrowserAnimations' }, ...SHARED_ANIMATION_PROVIDERS\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n */\nconst BROWSER_NOOP_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useClass: ɵNoopAnimationDriver },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'NoopAnimations' }, ...SHARED_ANIMATION_PROVIDERS\n];\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Exports `BrowserModule` with additional [dependency-injection providers](guide/glossary#provider)\n * for use with animations. See [Animations](guide/animations).\n * @publicApi\n */\nclass BrowserAnimationsModule {\n /**\n * Configures the module based on the specified object.\n *\n * @param config Object used to configure the behavior of the `BrowserAnimationsModule`.\n * @see `BrowserAnimationsModuleConfig`\n *\n * @usageNotes\n * When registering the `BrowserAnimationsModule`, you can use the `withConfig`\n * function as follows:\n * ```\n * @NgModule({\n * imports: [BrowserAnimationsModule.withConfig(config)]\n * })\n * class MyNgModule {}\n * ```\n */\n static withConfig(config) {\n return {\n ngModule: BrowserAnimationsModule,\n providers: config.disableAnimations ? BROWSER_NOOP_ANIMATIONS_PROVIDERS :\n BROWSER_ANIMATIONS_PROVIDERS\n };\n }\n}\nBrowserAnimationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nBrowserAnimationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, exports: [BrowserModule] });\nBrowserAnimationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, providers: BROWSER_ANIMATIONS_PROVIDERS, imports: [BrowserModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BrowserAnimationsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_ANIMATIONS_PROVIDERS,\n }]\n }] });\n/**\n * Returns the set of [dependency-injection providers](guide/glossary#provider)\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimations()\n * ]\n * });\n * ```\n *\n * @publicApi\n * @developerPreview\n */\nfunction provideAnimations() {\n // Return a copy to prevent changes to the original array in case any in-place\n // alterations are performed to the `provideAnimations` call results in app code.\n return [...BROWSER_ANIMATIONS_PROVIDERS];\n}\n/**\n * A null player that must be imported to allow disabling of animations.\n * @publicApi\n */\nclass NoopAnimationsModule {\n}\nNoopAnimationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nNoopAnimationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, exports: [BrowserModule] });\nNoopAnimationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS, imports: [BrowserModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: NoopAnimationsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n }]\n }] });\n/**\n * Returns the set of [dependency-injection providers](guide/glossary#provider)\n * to disable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * @usageNotes\n *\n * The function is useful when you want to bootstrap an application using\n * the `bootstrapApplication` function, but you need to disable animations\n * (for example, when running tests).\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideNoopAnimations()\n * ]\n * });\n * ```\n *\n * @publicApi\n * @developerPreview\n */\nfunction provideNoopAnimations() {\n // Return a copy to prevent changes to the original array in case any in-place\n // alterations are performed to the `provideNoopAnimations` call results in app code.\n return [...BROWSER_NOOP_ANIMATIONS_PROVIDERS];\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserAnimationsModule, NoopAnimationsModule, provideAnimations, provideNoopAnimations, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, BrowserAnimationBuilder as ɵBrowserAnimationBuilder, BrowserAnimationFactory as ɵBrowserAnimationFactory, InjectableAnimationEngine as ɵInjectableAnimationEngine };\n","import { Subject } from '../Subject';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { fromSubscribable } from '../observable/fromSubscribable';\nconst DEFAULT_CONFIG = {\n connector: () => new Subject(),\n};\nexport function connect(selector, config = DEFAULT_CONFIG) {\n const { connector } = config;\n return operate((source, subscriber) => {\n const subject = connector();\n innerFrom(selector(fromSubscribable(subject))).subscribe(subscriber);\n subscriber.add(source.subscribe(subject));\n });\n}\n","import { Observable } from '../Observable';\nexport function fromSubscribable(subscribable) {\n return new Observable((subscriber) => subscribable.subscribe(subscriber));\n}\n","/**\n * @license Angular v14.3.0\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken, NgZone, ApplicationRef, PLATFORM_ID, APP_INITIALIZER, Injector, NgModule } from '@angular/core';\nimport { defer, throwError, fromEvent, of, concat, Subject, NEVER, merge } from 'rxjs';\nimport { map, filter, switchMap, publish, take, tap, delay } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ERR_SW_NOT_SUPPORTED = 'Service workers are disabled or not supported by this browser';\nfunction errorObservable(message) {\n return defer(() => throwError(new Error(message)));\n}\n/**\n * @publicApi\n */\nclass NgswCommChannel {\n constructor(serviceWorker) {\n this.serviceWorker = serviceWorker;\n if (!serviceWorker) {\n this.worker = this.events = this.registration = errorObservable(ERR_SW_NOT_SUPPORTED);\n }\n else {\n const controllerChangeEvents = fromEvent(serviceWorker, 'controllerchange');\n const controllerChanges = controllerChangeEvents.pipe(map(() => serviceWorker.controller));\n const currentController = defer(() => of(serviceWorker.controller));\n const controllerWithChanges = concat(currentController, controllerChanges);\n this.worker = controllerWithChanges.pipe(filter((c) => !!c));\n this.registration = (this.worker.pipe(switchMap(() => serviceWorker.getRegistration())));\n const rawEvents = fromEvent(serviceWorker, 'message');\n const rawEventPayload = rawEvents.pipe(map(event => event.data));\n const eventsUnconnected = rawEventPayload.pipe(filter(event => event && event.type));\n const events = eventsUnconnected.pipe(publish());\n events.connect();\n this.events = events;\n }\n }\n postMessage(action, payload) {\n return this.worker\n .pipe(take(1), tap((sw) => {\n sw.postMessage({\n action,\n ...payload,\n });\n }))\n .toPromise()\n .then(() => undefined);\n }\n postMessageWithOperation(type, payload, operationNonce) {\n const waitForOperationCompleted = this.waitForOperationCompleted(operationNonce);\n const postMessage = this.postMessage(type, payload);\n return Promise.all([postMessage, waitForOperationCompleted]).then(([, result]) => result);\n }\n generateNonce() {\n return Math.round(Math.random() * 10000000);\n }\n eventsOfType(type) {\n let filterFn;\n if (typeof type === 'string') {\n filterFn = (event) => event.type === type;\n }\n else {\n filterFn = (event) => type.includes(event.type);\n }\n return this.events.pipe(filter(filterFn));\n }\n nextEventOfType(type) {\n return this.eventsOfType(type).pipe(take(1));\n }\n waitForOperationCompleted(nonce) {\n return this.eventsOfType('OPERATION_COMPLETED')\n .pipe(filter(event => event.nonce === nonce), take(1), map(event => {\n if (event.result !== undefined) {\n return event.result;\n }\n throw new Error(event.error);\n }))\n .toPromise();\n }\n get isEnabled() {\n return !!this.serviceWorker;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Subscribe and listen to\n * [Web Push\n * Notifications](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices) through\n * Angular Service Worker.\n *\n * @usageNotes\n *\n * You can inject a `SwPush` instance into any component or service\n * as a dependency.\n *\n * \n *\n * To subscribe, call `SwPush.requestSubscription()`, which asks the user for permission.\n * The call returns a `Promise` with a new\n * [`PushSubscription`](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n * instance.\n *\n * \n *\n * A request is rejected if the user denies permission, or if the browser\n * blocks or does not support the Push API or ServiceWorkers.\n * Check `SwPush.isEnabled` to confirm status.\n *\n * Invoke Push Notifications by pushing a message with the following payload.\n *\n * ```ts\n * {\n * \"notification\": {\n * \"actions\": NotificationAction[],\n * \"badge\": USVString,\n * \"body\": DOMString,\n * \"data\": any,\n * \"dir\": \"auto\"|\"ltr\"|\"rtl\",\n * \"icon\": USVString,\n * \"image\": USVString,\n * \"lang\": DOMString,\n * \"renotify\": boolean,\n * \"requireInteraction\": boolean,\n * \"silent\": boolean,\n * \"tag\": DOMString,\n * \"timestamp\": DOMTimeStamp,\n * \"title\": DOMString,\n * \"vibrate\": number[]\n * }\n * }\n * ```\n *\n * Only `title` is required. See `Notification`\n * [instance\n * properties](https://developer.mozilla.org/en-US/docs/Web/API/Notification#Instance_properties).\n *\n * While the subscription is active, Service Worker listens for\n * [PushEvent](https://developer.mozilla.org/en-US/docs/Web/API/PushEvent)\n * occurrences and creates\n * [Notification](https://developer.mozilla.org/en-US/docs/Web/API/Notification)\n * instances in response.\n *\n * Unsubscribe using `SwPush.unsubscribe()`.\n *\n * An application can subscribe to `SwPush.notificationClicks` observable to be notified when a user\n * clicks on a notification. For example:\n *\n * \n *\n * You can read more on handling notification clicks in the [Service worker notifications\n * guide](guide/service-worker-notifications).\n *\n * @see [Push Notifications](https://developers.google.com/web/fundamentals/codelabs/push-notifications/)\n * @see [Angular Push Notifications](https://blog.angular-university.io/angular-push-notifications/)\n * @see [MDN: Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)\n * @see [MDN: Notifications API](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API)\n * @see [MDN: Web Push API Notifications best practices](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices)\n *\n * @publicApi\n */\nclass SwPush {\n constructor(sw) {\n this.sw = sw;\n this.subscriptionChanges = new Subject();\n if (!sw.isEnabled) {\n this.messages = NEVER;\n this.notificationClicks = NEVER;\n this.subscription = NEVER;\n return;\n }\n this.messages = this.sw.eventsOfType('PUSH').pipe(map(message => message.data));\n this.notificationClicks =\n this.sw.eventsOfType('NOTIFICATION_CLICK').pipe(map((message) => message.data));\n this.pushManager = this.sw.registration.pipe(map(registration => registration.pushManager));\n const workerDrivenSubscriptions = this.pushManager.pipe(switchMap(pm => pm.getSubscription()));\n this.subscription = merge(workerDrivenSubscriptions, this.subscriptionChanges);\n }\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n */\n get isEnabled() {\n return this.sw.isEnabled;\n }\n /**\n * Subscribes to Web Push Notifications,\n * after requesting and receiving user permission.\n *\n * @param options An object containing the `serverPublicKey` string.\n * @returns A Promise that resolves to the new subscription object.\n */\n requestSubscription(options) {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const pushOptions = { userVisibleOnly: true };\n let key = this.decodeBase64(options.serverPublicKey.replace(/_/g, '/').replace(/-/g, '+'));\n let applicationServerKey = new Uint8Array(new ArrayBuffer(key.length));\n for (let i = 0; i < key.length; i++) {\n applicationServerKey[i] = key.charCodeAt(i);\n }\n pushOptions.applicationServerKey = applicationServerKey;\n return this.pushManager.pipe(switchMap(pm => pm.subscribe(pushOptions)), take(1))\n .toPromise()\n .then(sub => {\n this.subscriptionChanges.next(sub);\n return sub;\n });\n }\n /**\n * Unsubscribes from Service Worker push notifications.\n *\n * @returns A Promise that is resolved when the operation succeeds, or is rejected if there is no\n * active subscription or the unsubscribe operation fails.\n */\n unsubscribe() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const doUnsubscribe = (sub) => {\n if (sub === null) {\n throw new Error('Not subscribed to push notifications.');\n }\n return sub.unsubscribe().then(success => {\n if (!success) {\n throw new Error('Unsubscribe failed!');\n }\n this.subscriptionChanges.next(null);\n });\n };\n return this.subscription.pipe(take(1), switchMap(doUnsubscribe)).toPromise();\n }\n decodeBase64(input) {\n return atob(input);\n }\n}\nSwPush.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SwPush, deps: [{ token: NgswCommChannel }], target: i0.ɵɵFactoryTarget.Injectable });\nSwPush.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SwPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SwPush, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: NgswCommChannel }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Subscribe to update notifications from the Service Worker, trigger update\n * checks, and forcibly activate updates.\n *\n * @see {@link guide/service-worker-communications Service worker communication guide}\n *\n * @publicApi\n */\nclass SwUpdate {\n constructor(sw) {\n this.sw = sw;\n if (!sw.isEnabled) {\n this.versionUpdates = NEVER;\n this.available = NEVER;\n this.activated = NEVER;\n this.unrecoverable = NEVER;\n return;\n }\n this.versionUpdates = this.sw.eventsOfType([\n 'VERSION_DETECTED',\n 'VERSION_INSTALLATION_FAILED',\n 'VERSION_READY',\n 'NO_NEW_VERSION_DETECTED',\n ]);\n this.available = this.versionUpdates.pipe(filter((evt) => evt.type === 'VERSION_READY'), map(evt => ({\n type: 'UPDATE_AVAILABLE',\n current: evt.currentVersion,\n available: evt.latestVersion,\n })));\n this.activated = this.sw.eventsOfType('UPDATE_ACTIVATED');\n this.unrecoverable = this.sw.eventsOfType('UNRECOVERABLE_STATE');\n }\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n */\n get isEnabled() {\n return this.sw.isEnabled;\n }\n /**\n * Checks for an update and waits until the new version is downloaded from the server and ready\n * for activation.\n *\n * @returns a promise that\n * - resolves to `true` if a new version was found and is ready to be activated.\n * - resolves to `false` if no new version was found\n * - rejects if any error occurs\n */\n checkForUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const nonce = this.sw.generateNonce();\n return this.sw.postMessageWithOperation('CHECK_FOR_UPDATES', { nonce }, nonce);\n }\n /**\n * Updates the current client (i.e. browser tab) to the latest version that is ready for\n * activation.\n *\n * In most cases, you should not use this method and instead should update a client by reloading\n * the page.\n *\n *
\n *\n * Updating a client without reloading can easily result in a broken application due to a version\n * mismatch between the [application shell](guide/glossary#app-shell) and other page resources,\n * such as [lazy-loaded chunks](guide/glossary#lazy-loading), whose filenames may change between\n * versions.\n *\n * Only use this method, if you are certain it is safe for your specific use case.\n *\n *
\n *\n * @returns a promise that\n * - resolves to `true` if an update was activated successfully\n * - resolves to `false` if no update was available (for example, the client was already on the\n * latest version).\n * - rejects if any error occurs\n */\n activateUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const nonce = this.sw.generateNonce();\n return this.sw.postMessageWithOperation('ACTIVATE_UPDATE', { nonce }, nonce);\n }\n}\nSwUpdate.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SwUpdate, deps: [{ token: NgswCommChannel }], target: i0.ɵɵFactoryTarget.Injectable });\nSwUpdate.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SwUpdate });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SwUpdate, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: NgswCommChannel }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Token that can be used to provide options for `ServiceWorkerModule` outside of\n * `ServiceWorkerModule.register()`.\n *\n * You can use this token to define a provider that generates the registration options at runtime,\n * for example via a function call:\n *\n * {@example service-worker/registration-options/module.ts region=\"registration-options\"\n * header=\"app.module.ts\"}\n *\n * @publicApi\n */\nclass SwRegistrationOptions {\n}\nconst SCRIPT = new InjectionToken('NGSW_REGISTER_SCRIPT');\nfunction ngswAppInitializer(injector, script, options, platformId) {\n return () => {\n if (!(isPlatformBrowser(platformId) && ('serviceWorker' in navigator) &&\n options.enabled !== false)) {\n return;\n }\n // Wait for service worker controller changes, and fire an INITIALIZE action when a new SW\n // becomes active. This allows the SW to initialize itself even if there is no application\n // traffic.\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n if (navigator.serviceWorker.controller !== null) {\n navigator.serviceWorker.controller.postMessage({ action: 'INITIALIZE' });\n }\n });\n let readyToRegister$;\n if (typeof options.registrationStrategy === 'function') {\n readyToRegister$ = options.registrationStrategy();\n }\n else {\n const [strategy, ...args] = (options.registrationStrategy || 'registerWhenStable:30000').split(':');\n switch (strategy) {\n case 'registerImmediately':\n readyToRegister$ = of(null);\n break;\n case 'registerWithDelay':\n readyToRegister$ = delayWithTimeout(+args[0] || 0);\n break;\n case 'registerWhenStable':\n readyToRegister$ = !args[0] ? whenStable(injector) :\n merge(whenStable(injector), delayWithTimeout(+args[0]));\n break;\n default:\n // Unknown strategy.\n throw new Error(`Unknown ServiceWorker registration strategy: ${options.registrationStrategy}`);\n }\n }\n // Don't return anything to avoid blocking the application until the SW is registered.\n // Also, run outside the Angular zone to avoid preventing the app from stabilizing (especially\n // given that some registration strategies wait for the app to stabilize).\n // Catch and log the error if SW registration fails to avoid uncaught rejection warning.\n const ngZone = injector.get(NgZone);\n ngZone.runOutsideAngular(() => readyToRegister$.pipe(take(1)).subscribe(() => navigator.serviceWorker.register(script, { scope: options.scope })\n .catch(err => console.error('Service worker registration failed with:', err))));\n };\n}\nfunction delayWithTimeout(timeout) {\n return of(null).pipe(delay(timeout));\n}\nfunction whenStable(injector) {\n const appRef = injector.get(ApplicationRef);\n return appRef.isStable.pipe(filter(stable => stable));\n}\nfunction ngswCommChannelFactory(opts, platformId) {\n return new NgswCommChannel(isPlatformBrowser(platformId) && opts.enabled !== false ? navigator.serviceWorker :\n undefined);\n}\n/**\n * @publicApi\n */\nclass ServiceWorkerModule {\n /**\n * Register the given Angular Service Worker script.\n *\n * If `enabled` is set to `false` in the given options, the module will behave as if service\n * workers are not supported by the browser, and the service worker will not be registered.\n */\n static register(script, opts = {}) {\n return {\n ngModule: ServiceWorkerModule,\n providers: [\n { provide: SCRIPT, useValue: script },\n { provide: SwRegistrationOptions, useValue: opts },\n {\n provide: NgswCommChannel,\n useFactory: ngswCommChannelFactory,\n deps: [SwRegistrationOptions, PLATFORM_ID]\n },\n {\n provide: APP_INITIALIZER,\n useFactory: ngswAppInitializer,\n deps: [Injector, SCRIPT, SwRegistrationOptions, PLATFORM_ID],\n multi: true,\n },\n ],\n };\n }\n}\nServiceWorkerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ServiceWorkerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nServiceWorkerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: ServiceWorkerModule });\nServiceWorkerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ServiceWorkerModule, providers: [SwPush, SwUpdate] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ServiceWorkerModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [SwPush, SwUpdate],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ServiceWorkerModule, SwPush, SwRegistrationOptions, SwUpdate };\n","import { Subject } from '../Subject';\nimport { multicast } from './multicast';\nimport { connect } from './connect';\nexport function publish(selector) {\n return selector ? (source) => connect(selector)(source) : (source) => multicast(new Subject())(source);\n}\n","import { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { isFunction } from '../util/isFunction';\nimport { connect } from './connect';\nexport function multicast(subjectOrSubjectFactory, selector) {\n const subjectFactory = isFunction(subjectOrSubjectFactory) ? subjectOrSubjectFactory : () => subjectOrSubjectFactory;\n if (isFunction(selector)) {\n return connect(selector, {\n connector: subjectFactory,\n });\n }\n return (source) => new ConnectableObservable(source, subjectFactory);\n}\n","class TranslateHttpLoader {\r\n constructor(http, prefix = \"/assets/i18n/\", suffix = \".json\") {\r\n this.http = http;\r\n this.prefix = prefix;\r\n this.suffix = suffix;\r\n }\r\n /**\r\n * Gets the translations from the server\r\n */\r\n getTranslation(lang) {\r\n return this.http.get(`${this.prefix}${lang}${this.suffix}`);\r\n }\r\n}\n\n/**\r\n * Generated bundle index. Do not edit.\r\n */\n\nexport { TranslateHttpLoader };\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { forwardRef, Directive, Input, EventEmitter, ViewContainerRef, Component, ViewChild, HostBinding, TemplateRef, InjectionToken, ApplicationRef, Injectable, Inject, Optional, NgModule } from '@angular/core';\nimport { take } from 'rxjs/operators';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i1$1 from '@angular/animations';\nimport { style, animate } from '@angular/animations';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport * as i4 from '@angular/common';\nimport { CommonModule } from '@angular/common';\n\nclass NotificationSettings {\n constructor() {\n /**\n * Specifies the time in milliseconds after which the\n * Notification will hide\n * ([see example]({% slug hiding_notifications %}#toc-definig-a-delay-before-hiding)).\n * Defaults to `5000`.\n */\n this.hideAfter = 5000;\n /**\n * Defines the position of the Notification\n * ([see example]({% slug positioning_notification %})).\n *\n * The possible values are:\n * * `horizontal: 'left'|'center'|'right'`\n * * `vertical: 'top'|'bottom'`\n */\n this.position = { horizontal: 'right', vertical: 'top' };\n /**\n * Specifies the animation settings of the Notification\n * ([see example]({% slug animations_notification %})).\n *\n * The possible values are:\n * * `duration`—Accepts a number in milliseconds. Defaults to `500ms`.\n * * `type?: 'slide'| (Default) 'fade'`\n */\n this.animation = { type: 'fade', duration: 500 };\n /**\n * Specifies if the Notification will require a user action to hide.\n * If the property is set to `true`, the Notification renders a **Close** button\n * ([see example]({% slug hiding_notifications %}#toc-defining-a-closable-notification)).\n *\n * The possible values are:\n * * (Default) `false`\n * * `true`\n */\n this.closable = false;\n /**\n * Specifies the type of the Notification\n * ([see example]({% slug types_notification %})).\n *\n * The possible values are:\n * * `style: (Default) 'none'|'success'|'error'|'warning'|'info'`\n * * `icon: 'true'|'false'`\n */\n this.type = { style: 'none', icon: true };\n }\n}\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-notification',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1668698763,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nfunction slideAnimation(height, duration) {\n return [\n style({ overflow: 'hidden', height: 0 }),\n animate(`${duration}ms ease-in`, style({ height: `${height}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction slideCloseAnimation(height, duration) {\n return [\n style({ height: `${height}px` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', height: 0 }))\n ];\n}\n/**\n * @hidden\n */\nfunction fadeAnimation(duration) {\n return [\n style({ opacity: 0 }),\n animate(`${duration}ms ease-in`, style({ opacity: 1 }))\n ];\n}\n/**\n * @hidden\n */\nfunction fadeCloseAnimation(duration) {\n return [\n style({ opacity: 1 }),\n animate(`${duration}ms ease-in`, style({ opacity: 0 }))\n ];\n}\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends ComponentMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedMessagesDirective, selector: \"[kendoNotificationLocalizedMessages]\", inputs: { closeTitle: \"closeTitle\" }, providers: [\n {\n provide: ComponentMessages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: ComponentMessages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `[kendoNotificationLocalizedMessages]`\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { closeTitle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n *\n */\nclass NotificationComponent {\n constructor(cdr, element, renderer, builder, localizationService) {\n this.cdr = cdr;\n this.element = element;\n this.renderer = renderer;\n this.builder = builder;\n this.localizationService = localizationService;\n this.close = new EventEmitter();\n this.width = null;\n this.height = null;\n this.defaultHideAfter = 5000;\n this.animationEnd = new EventEmitter();\n this.rtl = false;\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n }\n get containerClass() {\n return true;\n }\n get closeButtonTitle() {\n return this.closeTitle || this.localizationService.get('closeTitle');\n }\n notificationClasses() {\n return `${this.type ? this.typeClass() : ''}\n ${this.closable ? 'k-notification-closable' : ''}`;\n }\n ngOnInit() {\n clearTimeout(this.hideTimeout);\n }\n ngOnDestroy() {\n clearTimeout(this.hideTimeout);\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n ngAfterViewInit() {\n if (!this.closable && !this.animation) {\n this.setHideTimeout();\n }\n if (!this.closable && this.animation) {\n this.animationEnd.pipe(take(1))\n .subscribe(() => this.setHideTimeout());\n }\n if (this.animation) {\n this.animate(this.animation);\n }\n }\n typeClass() {\n return {\n 'none': '',\n 'success': 'k-notification-success',\n 'warning': 'k-notification-warning',\n 'error': 'k-notification-error',\n 'info': 'k-notification-info'\n }[this.type.style];\n }\n typeIconClass() {\n return {\n 'none': '',\n 'success': 'k-i-check-outline',\n 'warning': 'k-i-exclamation-circle',\n 'error': 'k-i-x-outline',\n 'info': 'k-i-info-circle'\n }[this.type.style];\n }\n onCloseClick() {\n clearTimeout(this.hideTimeout);\n this.hide();\n }\n hide(customComponent) {\n const elementHeight = getComputedStyle(this.element.nativeElement).height;\n if (this.animation && elementHeight) {\n this.animate(this.animation, true);\n this.animationEnd.subscribe(() => {\n this.emitClose(customComponent);\n });\n return;\n }\n this.emitClose(customComponent);\n }\n setHideTimeout() {\n const hideAfter = this.hideAfter || this.defaultHideAfter;\n this.hideTimeout = window.setTimeout(() => this.onCloseClick(), hideAfter);\n }\n emitClose(customComponent) {\n if (customComponent) {\n customComponent.destroy();\n }\n this.close.emit();\n }\n play(animation, animatedElement) {\n const factory = this.builder.build(animation);\n const element = this.element.nativeElement;\n this.renderer.addClass(element, 'k-notification-container-animating');\n let player = factory.create(animatedElement);\n player.onDone(() => {\n this.renderer.removeClass(element, 'k-notification-container-animating');\n this.animationEnd.emit();\n if (player) {\n player.destroy();\n player = null;\n }\n });\n player.play();\n }\n animate(animation, onclose) {\n const element = this.element.nativeElement;\n const duration = animation.duration;\n const height = element.offsetHeight;\n const generatedAnimation = animation.type === 'slide' ?\n this.slideAnimation(height, duration, onclose) :\n this.fadeAnimation(duration, onclose);\n this.play(generatedAnimation, element);\n }\n slideAnimation(height, duration, onclose) {\n return onclose ? slideCloseAnimation(height, duration) : slideAnimation(height, duration);\n }\n fadeAnimation(duration, onclose) {\n return onclose ? fadeCloseAnimation(duration) : fadeAnimation(duration);\n }\n}\nNotificationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1$1.AnimationBuilder }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nNotificationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NotificationComponent, selector: \"kendo-notification\", inputs: { templateRef: \"templateRef\", templateString: \"templateString\", width: \"width\", height: \"height\", cssClass: \"cssClass\", hideAfter: \"hideAfter\", closable: \"closable\", type: \"type\", animation: \"animation\" }, host: { properties: { \"attr.dir\": \"this.direction\", \"class.k-notification-container\": \"this.containerClass\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.notification'\n }\n ], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `\n \n \n
\n
\n \n\n
\n \n \n \n {{ templateString }}\n \n \n
\n\n \n
\n
\n `, isInline: true, directives: [{ type: LocalizedMessagesDirective, selector: \"[kendoNotificationLocalizedMessages]\", inputs: [\"closeTitle\"] }, { type: i4.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i4.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i4.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-notification',\n template: `\n \n \n
\n
\n \n\n
\n \n \n \n {{ templateString }}\n \n \n
\n\n \n
\n
\n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.notification'\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1$1.AnimationBuilder }, { type: i1.LocalizationService }]; }, propDecorators: { container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], templateRef: [{\n type: Input\n }], templateString: [{\n type: Input\n }], width: [{\n type: Input\n }], height: [{\n type: Input\n }], cssClass: [{\n type: Input\n }], hideAfter: [{\n type: Input\n }], closable: [{\n type: Input\n }], type: [{\n type: Input\n }], animation: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], containerClass: [{\n type: HostBinding,\n args: ['class.k-notification-container']\n }] } });\n\n/**\n * @hidden\n */\nclass NotificationContainerComponent {\n constructor(element, renderer, resolver) {\n this.element = element;\n this.renderer = renderer;\n this.resolver = resolver;\n this.id = '';\n this.notifications = [];\n }\n ngOnDestroy() {\n this.notifications.forEach((notification) => {\n if (notification.closeClickSubscription) {\n notification.closeClickSubscription.unsubscribe();\n }\n });\n this.notifications = [];\n }\n addNotification(settings) {\n this.position = settings.position;\n this.id = `${this.position.horizontal} ${this.position.vertical}`;\n const factory = this.resolver.resolveComponentFactory(NotificationComponent);\n const notificationRef = this.container.createComponent(factory);\n this.applySettings(notificationRef, settings);\n let customComponent = null;\n if (typeof settings.content === 'function') {\n const customFactory = this.resolver.resolveComponentFactory(settings.content);\n customComponent = notificationRef.instance.container.createComponent(customFactory);\n }\n notificationRef.changeDetectorRef.detectChanges();\n this.notifications.push(notificationRef.instance);\n if (settings.appendTo) {\n this.applyAbsolutePosition(settings.appendTo);\n }\n this.applyPosition();\n this.applyContainerWrap();\n return {\n afterHide: notificationRef.instance.close,\n hide: () => notificationRef.instance.hide(customComponent),\n notification: notificationRef,\n content: customComponent || null\n };\n }\n hide(notificationRef) {\n const instance = notificationRef.instance;\n const index = this.notifications.indexOf(instance);\n this.notifications.splice(index, 1);\n if (instance.closeClickSubscription) {\n instance.closeClickSubscription.unsubscribe();\n }\n instance.templateRef = null;\n instance.templateString = null;\n notificationRef.destroy();\n }\n applyContainerWrap() {\n const value = this.position.horizontal === 'right' ? 'wrap-reverse' : 'wrap';\n this.renderer.setStyle(this.group.nativeElement, 'flex-wrap', value);\n }\n applySettings(notificationRef, settings) {\n const notification = notificationRef.instance;\n const content = settings.content;\n const animation = settings.animation || null;\n notification.closeClickSubscription = notification.close\n .subscribe(() => this.hide(notificationRef));\n if (typeof content === 'string') {\n notification.templateString = content;\n }\n if (content instanceof TemplateRef) {\n notification.templateRef = content;\n }\n notification.animation = animation;\n let type = settings.type;\n if (type && type.style === undefined) {\n type.style = 'none';\n }\n if (type && type.icon === undefined) {\n type.icon = true;\n }\n notification.type = type;\n notification.closeTitle = settings.closeTitle;\n if (settings.cssClass) {\n notification.cssClass = settings.cssClass;\n }\n notification.closable = settings.closable;\n notification.hideAfter = settings.hideAfter;\n notification.width = settings.width;\n notification.height = settings.height;\n }\n applyAbsolutePosition(appendToContainer) {\n const appendTo = appendToContainer.element.nativeElement;\n const el = this.element.nativeElement.children[0];\n if (window.getComputedStyle(appendTo).position === 'static') {\n this.renderer.setStyle(appendTo, 'position', 'relative');\n }\n this.renderer.setStyle(el, 'position', 'absolute');\n }\n applyPosition() {\n const element = this.element.nativeElement.children[0];\n const elementHalfWidth = element.getBoundingClientRect().width / 2;\n const positionStyles = this.setContainerPosition(this.position, elementHalfWidth);\n Object.keys(positionStyles).forEach((cssStyle) => {\n element.style[cssStyle] = positionStyles[cssStyle];\n });\n }\n setContainerPosition(position, offsetMargin) {\n const positionLayout = {\n horizontal: {\n left: { left: 0, alignItems: 'flex-start' },\n right: { right: 0, alignItems: 'flex-start' },\n center: { left: '50%', marginLeft: `${-offsetMargin}px`, alignItems: 'center' }\n },\n vertical: {\n top: { top: 0 },\n bottom: { bottom: 0 }\n }\n };\n const horizontal = positionLayout.horizontal[position.horizontal];\n const vertical = positionLayout.vertical[position.vertical];\n return Object.assign({}, horizontal, vertical);\n }\n}\nNotificationContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationContainerComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component });\nNotificationContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NotificationContainerComponent, selector: \"kendo-notification-container\", inputs: { id: \"id\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"group\", first: true, predicate: [\"group\"], descendants: true, static: true }], ngImport: i0, template: `\n
\n \n
\n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationContainerComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-notification-container',\n template: `\n
\n \n
\n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], group: [{\n type: ViewChild,\n args: ['group', { static: true }]\n }], id: [{\n type: Input\n }] } });\n\n/**\n * Used to inject the Notification container. If not provided, the first root component of\n * the application is used.\n *\n * > The `NOTIFICATION_CONTAINER` can be used only with the [`NotificationService`]({% slug api_notification_notificationservice %}) class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Notification module\n * import { NotificationModule, NOTIFICATION_CONTAINER } from '@progress/kendo-angular-notification';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { ElementRef, NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, NotificationModule], // import Notification module\n * bootstrap: [AppComponent],\n * providers: [{\n * provide: NOTIFICATION_CONTAINER,\n * useFactory: () => {\n * //return the container ElementRef, where the notification will be injected\n * return { nativeElement: document.body } as ElementRef;\n * }\n * }]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n * ```\n */\nconst NOTIFICATION_CONTAINER = new InjectionToken('Notification Container');\n/**\n * A service for opening Notification components dynamically\n * ([see example]({% slug overview_notification %})).\n *\n * @export\n * @class NotificationService\n */\nclass NotificationService {\n /**\n * @hidden\n */\n constructor(resolver, injector, container) {\n this.resolver = resolver;\n this.injector = injector;\n this.container = container;\n this.notificationContainers = [];\n this.position = { horizontal: 'right', vertical: 'top' };\n }\n /**\n * Opens a Notification component. Created Notification are mounted\n * in the DOM directly in the root application component.\n *\n * @param {NotificationSettings} settings - The settings which define the Notification.\n *\n * @returns {NotificationRef} - A reference to the Notification object and the convenience properties.\n */\n show(settings) {\n if (!settings) {\n throw new Error('NotificationSettings settings are required');\n }\n let target = this.findGroupContainer(settings);\n const position = settings.position || this.position;\n const currentId = `${position.horizontal} ${position.vertical}`;\n let container;\n let notificationRef;\n let notificationContainer = this.notificationContainers.find(c => target.nativeElement.contains(c.element.nativeElement) && c.id === currentId);\n if (!notificationContainer) {\n container = this.resolver\n .resolveComponentFactory(NotificationContainerComponent)\n .create(this.injector);\n notificationContainer = container.instance;\n this.appRef.attachView(container.hostView);\n const hostViewElement = container.location.nativeElement;\n let groupContainer = this.findGroupContainer(settings);\n if (!groupContainer) {\n throw new Error(`\n View Container not found! Inject the NOTIFICATION_CONTAINER or define a specific ViewContainerRef via\n the appendTo option. See http://www.telerik.com/kendo-angular-ui/components/notification/api/NOTIFICATION_CONTAINER/\n for more details.\n `);\n }\n groupContainer.nativeElement.appendChild(hostViewElement);\n this.notificationContainers.push(notificationContainer);\n }\n settings.position = position;\n notificationRef = notificationContainer.addNotification(settings);\n return notificationRef;\n }\n get appRef() {\n if (!this.applicationRef) {\n this.applicationRef = this.injector.get(ApplicationRef);\n }\n return this.applicationRef;\n }\n findGroupContainer(settings) {\n let container;\n if (settings.appendTo) {\n container = settings.appendTo.element;\n }\n else if (this.container) {\n container = this.container;\n }\n else {\n const appRoot = this.appRef.components && this.appRef.components[0];\n container = appRoot ? appRoot.location : null;\n }\n return container;\n }\n}\nNotificationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: NOTIFICATION_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nNotificationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ElementRef, decorators: [{\n type: Inject,\n args: [NOTIFICATION_CONTAINER]\n }, {\n type: Optional\n }] }]; } });\n\n/**\n * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])\n * definition for the Notification component.\n *\n * The package exports:\n * - `NotificationService`—The Notification service class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Notification module\n * import { NotificationModule } from '@progress/kendo-angular-notification';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * _@NgModule{{\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, NotificationModule], // import NotificationModule module\n * bootstrap: [AppComponent]\n * }}\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n * ```\n */\nclass NotificationModule {\n}\nNotificationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nNotificationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationModule, declarations: [NotificationComponent, NotificationContainerComponent, LocalizedMessagesDirective], imports: [CommonModule], exports: [NotificationComponent, NotificationContainerComponent] });\nNotificationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationModule, providers: [NotificationService], imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NotificationModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [NotificationComponent, NotificationContainerComponent, LocalizedMessagesDirective],\n entryComponents: [NotificationComponent, NotificationContainerComponent],\n imports: [CommonModule],\n exports: [NotificationComponent, NotificationContainerComponent],\n providers: [NotificationService]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { NOTIFICATION_CONTAINER, NotificationComponent, NotificationContainerComponent, NotificationModule, NotificationService, NotificationSettings };\n\n","
\r\n\t\r\n\t\t\r\n\t\r\n\t
{{'Your Progress' | translate}}
\r\n
\r\n
\r\n\t
    \r\n\t\t
  • \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t{{badge.Name}}\r\n\t\t\t\t\t  {{'Assess' |\r\n\t\t\t\t\t\ttranslate}}\r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
      \r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t\t{{lesson.Name}}\r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
  • \r\n\t
\r\n
","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, EventEmitter, Injector, OnInit, Output } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { BadgesV1Client, BaseComponent, UsersV1Client } from 'cadlearning.angular';\r\nimport { BadgeLearningPathDto } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'yourpath-menu',\r\n\ttemplateUrl: './yourpath.component.html',\r\n\tstyleUrls: ['./yourpath.component.scss'],\r\n\tanimations: [\r\n\t\ttrigger('openClose', [\r\n\t\t\tstate(\r\n\t\t\t\t'open',\r\n\t\t\t\tstyle({\r\n\t\t\t\t\t//opacity: 1\r\n\t\t\t\t\theight: '*',\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t\tstate(\r\n\t\t\t\t'closed',\r\n\t\t\t\tstyle({\r\n\t\t\t\t\t//opacity: 0,\r\n\t\t\t\t\theight: '0px',\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t\ttransition('open => closed', [animate(150)]),\r\n\t\t\ttransition('closed => open', [animate(150)]),\r\n\t\t]),\r\n\t],\r\n})\r\nexport class YourPathComponent extends BaseComponent implements OnInit {\r\n\t@Output() Closed = new EventEmitter();\r\n\tpublic Loaded = false;\r\n\tpublic LearningPath: BadgeLearningPathDto[] = [];\r\n\r\n\tpublic ScrollPosition = 0;\r\n\r\n\tprivate STORAGE_KEY = 'YourPathData';\r\n\r\n\tconstructor(private userClient: UsersV1Client, private badgeClient: BadgesV1Client, private router: Router, public injector: Injector) {\r\n\t\tsuper(injector);\r\n\r\n\t\tsuper.OverrideTranslationUri('/appmain');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\r\n\t\tthis.LearningPath = await this.userClient.YourPath(this.User.Id);\r\n\t\tlet hasExpanded = false;\r\n\r\n\t\tconst oldExpandedBadges: number[] = JSON.parse(sessionStorage.getItem(this.STORAGE_KEY) || '[]');\r\n\r\n\t\tlet expandedBadges: number[] = [];\r\n\t\tthis.LearningPath.forEach((lp) => {\r\n\t\t\tif ((lp.PercentComplete < 100 && !hasExpanded) || oldExpandedBadges.some((b) => b === lp.Id)) {\r\n\t\t\t\thasExpanded = true;\r\n\t\t\t\tlp['Expanded'] = true;\r\n\t\t\t\texpandedBadges.push(lp.Id);\r\n\t\t\t} else {\r\n\t\t\t\tlp['Expanded'] = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tsessionStorage.setItem(this.STORAGE_KEY, JSON.stringify(expandedBadges));\r\n\r\n\t\tthis.Loaded = true;\r\n\r\n\t\tthis.SetPosition();\r\n\t}\r\n\r\n\tprivate SetPosition() {\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (!sessionStorage.getItem('YourPathPosition')) {\r\n\t\t\t\tconst badge = this.LearningPath.find((p) => p.Expanded);\r\n\t\t\t\tif (badge) {\r\n\t\t\t\t\tlet element = document.getElementById(`yourpath-badge-${badge.Id}`);\r\n\t\t\t\t\tif (element)\r\n\t\t\t\t\t\tthis.ScrollPosition = element.offsetTop;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tlet storageElement = sessionStorage.getItem('YourPathPosition');\r\n\t\t\t\tif (storageElement)\r\n\t\t\t\t\tthis.ScrollPosition = parseInt(storageElement);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic LessonClicked() {\r\n\t\tthis.Closed.emit();\r\n\t}\r\n\r\n\tpublic async Assess(badge: BadgeLearningPathDto) {\r\n\t\tconst assessmentId = await this.badgeClient.GetAchievementAssessment(this.User.Id, badge.Id);\r\n\t\tthis.router.navigateByUrl(`/assessments/takeassessment?AssessmentId=${assessmentId}`);\r\n\t}\r\n\r\n\tpublic SideBarScrolled($event: Event) {\r\n\t\tif (!this.Loaded) return;\r\n\r\n\t\tsessionStorage.setItem('YourPathPosition', ($event.srcElement).scrollTop.toString());\r\n\t}\r\n\r\n\tpublic Close($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\t}\r\n\r\n\tpublic ToggleLearningPathExpand(badge: BadgeLearningPathDto) {\r\n\t\tbadge['Expanded'] = !badge['Expanded'];\r\n\r\n\t\tlet expandedBadges: number[] = JSON.parse(sessionStorage.getItem(this.STORAGE_KEY) || '[]');\r\n\r\n\t\tif (!badge['Expanded']) {\r\n\t\t\tif (expandedBadges.some((b) => b === badge.Id)) expandedBadges.slice(expandedBadges.indexOf(badge.Id));\r\n\t\t} else {\r\n\t\t\tif (!expandedBadges.some((b) => b === badge.Id)) expandedBadges.push(badge.Id);\r\n\t\t}\r\n\r\n\t\tsessionStorage.setItem(this.STORAGE_KEY, JSON.stringify(expandedBadges));\r\n\t}\r\n}\r\n","\r\n\t\r\n\r\n
\r\n\t
\r\n\t\t\r\n\t
\r\n\t\r\n
\r\n","import { Component, Inject, Injector, OnInit } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { API_URL, IS_DARK_THEME, IS_LIGHT_THEME } from '@app/constants';\r\nimport { BaseComponent, UsersV1Client } from 'cadlearning.angular';\r\nimport { UserSuggestedProductsDto } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'library',\r\n\ttemplateUrl: './library.component.html',\r\n\tstyleUrls: ['./topmenu.component.scss', './topmenumobile.component.scss'],\r\n})\r\nexport class LibraryComponent extends BaseComponent implements OnInit {\r\n\tpublic SuggestedProducts: UserSuggestedProductsDto[] = [];\r\n\tpublic AllSuggestedProducts: UserSuggestedProductsDto[] = [];\r\n\r\n\tpublic Expanded = false;\r\n\tpublic IsLibraryLoaded = false;\r\n\r\n\tconstructor(\r\n\t\tprivate userClient: UsersV1Client,\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean,\r\n\t\t@Inject(API_URL) private apiUrl: string,\r\n\t\tinjector: Injector\r\n\t) {\r\n\t\tsuper(injector);\r\n\t\tsuper.OverrideTranslationUri('/library/topmenu');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\t\tthis.IsLoaded = true;\r\n\r\n\t\tif (!this.User) {\r\n\t\t\tthis.AllSuggestedProducts = await this.userClient.GetPublicSuggestedProducts();\r\n\t\t} else {\r\n\t\t\tthis.AllSuggestedProducts = await this.userClient.GetSuggestedProducts();\r\n\t\t}\r\n\t\tthis.ReturnSuggestedProducts();\r\n\r\n\t\tthis.IsLibraryLoaded = true;\r\n\t}\r\n\r\n\tpublic GetRssFeedUrl() {\r\n\t\treturn this.apiUrl + '/products/changesfeed?portalUrl=' + encodeURIComponent(window.location.hostname);\r\n\t}\r\n\r\n\tpublic ToggleExpand($event: Event) {\r\n\t\tthis.Expanded = !this.Expanded;\r\n\t\tthis.ReturnSuggestedProducts();\r\n\t\t$event.preventDefault();\r\n\t}\r\n\r\n\tpublic FixProductImageUrl(product: UserSuggestedProductsDto, $event: Event) {\r\n\t\t($event.srcElement).src = '/img/products/product_000001.png';\r\n\t\tproduct['Name'] = product.Product;\r\n\t}\r\n\r\n\tprivate ReturnSuggestedProducts() {\r\n\t\tif (this.Expanded || !this.User || !this.AllSuggestedProducts.some((p) => p.Owned)) {\r\n\t\t\tthis.SuggestedProducts = this.AllSuggestedProducts;\r\n\t\t} else {\r\n\t\t\tthis.SuggestedProducts = this.AllSuggestedProducts.filter((p) => p.Owned);\r\n\t\t}\r\n\t}\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n
    \r\n
  • {{'Manage Subscriptions' | translate}}
  • \r\n
  • {{'Expiring Entitlements' | translate}}
  • \r\n
  • {{'Users' | translate}}
  • \r\n
  • {{'Import Users' | translate}}
  • \r\n\r\n
  • {{'Tokens' | translate}}
  • \r\n
  • \r\n {{'Deals' | translate}}\r\n
  • \r\n
  • \r\n {{'Quotes' | translate}}\r\n
  • \r\n
  • {{'Customers' | translate}}
  • \r\n\r\n
  • {{'Email Templates' | translate}}
  • \r\n
  • {{'Documents' | translate}}
  • \r\n
  • {{'Campaigns' | translate}}
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
0\">\r\n
\r\n
{{'Notifications' | translate}}
\r\n \r\n
\r\n
\r\n
\r\n
","import { Component, Inject, Injector, Input, OnInit } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { IS_DARK_THEME, IS_LIGHT_THEME } from '@app/constants';\r\nimport { BaseComponent } from 'cadlearning.angular';\r\nimport { NotificationDto, Roles } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'partners',\r\n\ttemplateUrl: './partners.component.html',\r\n\tstyleUrls: ['./topmenu.component.scss', './topmenumobile.component.scss'],\r\n})\r\nexport class PartnersComponent extends BaseComponent implements OnInit {\r\n\t@Input() Notifications: NotificationDto[] = [];\r\n\tpublic IsPartnerAdmin = false;\r\n\tpublic IsPartnerSales = false;\r\n\r\n\tconstructor(\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean,\r\n\t\tinjector: Injector\r\n\t) {\r\n\t\tsuper(injector);\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tthis.IsPartnerAdmin = this.User.IsInRole(Roles.CADAdmin, Roles.PartnerAdmin);\r\n\t\tthis.IsPartnerSales = this.User.IsInRole(Roles.CADAdmin, Roles.PartnerSales);\r\n\t}\r\n}\r\n","\r\n\t\r\n\r\n
\r\n\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
{{ 'Custom Courses' | translate }}
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t\r\n\t\t\r\n\t
\r\n
\r\n","import { Component, Inject, Injector, Input, OnInit } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { IS_DARK_THEME, IS_LIGHT_THEME } from '@app/constants';\r\nimport { AssessmentsV1Client, BaseComponent, CoursesV1Client, OrganizationsV1Client } from 'cadlearning.angular';\r\nimport { AssessmentDto, CourseDto, NotificationDto, NotificationMessageTypes, Roles } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'organizations',\r\n\ttemplateUrl: './organizations.component.html',\r\n\tstyleUrls: ['./topmenu.component.scss', './topmenumobile.component.scss'],\r\n})\r\nexport class OrganizationsComponent extends BaseComponent implements OnInit {\r\n\t@Input() Notifications: NotificationDto[] = [];\r\n\tpublic CustomCourses: CourseDto[] = [];\r\n\tpublic CustomAssessments: AssessmentDto[] = [];\r\n\r\n\tpublic IsCustomContentCreator = false;\r\n\tpublic IsReporting = false;\r\n\tpublic IsOrgAdmin = false;\r\n\tpublic IsLearningPathAdmin = false;\r\n\tpublic HasProjects = false;\r\n\r\n\tpublic IsApprover = false;\r\n\r\n\tconstructor(\r\n\t\tprivate organizationClient: OrganizationsV1Client,\r\n\t\tprivate assessmentClient: AssessmentsV1Client,\r\n\t\tprivate courseClient: CoursesV1Client,\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean,\r\n\t\tinjector: Injector\r\n\t) {\r\n\t\tsuper(injector);\r\n\r\n\t\tsuper.OverrideTranslationUri('/account/home');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tthis.IsCustomContentCreator = this.User.IsInRole(Roles.OrgContentCreator);\r\n\t\tthis.IsReporting = this.User.IsInRole(Roles.Reporting);\r\n\t\tthis.IsOrgAdmin = this.User.IsInRole(Roles.OrgAdmin, Roles.UserAdmin);\r\n\t\tthis.IsApprover = this.User.IsInRole(Roles.QuestionApprover, Roles.ScriptApprover, Roles.NarrationApprover, Roles.FinalApprover);\r\n\t\tthis.IsLearningPathAdmin = this.User.IsInRole(Roles.LearningPathAdmin);\r\n\t\tthis.HasProjects = this.User.HasProjectManagement;\r\n\t\tif (this.IsCustomContentCreator) {\r\n\t\t\t[this.CustomCourses, this.CustomAssessments] = await Promise.all([\r\n\t\t\t\tthis.courseClient.ListManagableCustomCourses(undefined, undefined, 'UpdatedOn desc', undefined, 5),\r\n\t\t\t\tthis.assessmentClient.ListManagableCustomAssessments(undefined, undefined, 'UpdatedOn desc', undefined, 5),\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\tif (this.IsOrgAdmin) {\r\n\t\t\tlet requests = await this.organizationClient.ListPermissionRequests();\r\n\r\n\t\t\tif (requests.length > 0) {\r\n\t\t\t\tif (\r\n\t\t\t\t\t!this.Notifications.find((n) => {\r\n\t\t\t\t\t\treturn n.Title === 'You have new permission requests';\r\n\t\t\t\t\t})\r\n\t\t\t\t) {\r\n\t\t\t\t\tthis.Notifications.push({\r\n\t\t\t\t\t\tTitle: 'You have new permission requests',\r\n\t\t\t\t\t\tMessage: 'Click here to view them',\r\n\t\t\t\t\t\tUrl: '/organization/permissions',\r\n\t\t\t\t\t\tMessageType: NotificationMessageTypes.Informational,\r\n\t\t\t\t\t\tImageUrl: undefined,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","\r\n\t\r\n\r\n
\r\n\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{{ 'RecentActivity' | translate }}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t

No Activity, please watch some videos!

\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{{ 'AchievementsTestedOutOf' | translate }}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{{'YouHaventTestedOutOfAnyAchievementsYetTakeSomeAssessmentsAndGetGoing' | translate}}

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{{'Badges' | translate }}

\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t{{Badges.Name}}\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{{'Medallions' | translate }}

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{{'Goals' | translate }}

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
1\"\r\n\t\t\t\t[class.vertical-fill]=\"Notifications.length == 0\">\r\n\t\t\t\t
1\">\r\n\t\t\t\t\t
{{ 'YourOrganizations' | translate }}
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
0\">\r\n\t\t\t\t\t
{{ 'Notifications' | translate }}
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
= 1\">\r\n\t\t\t\t
= 1\">\r\n\t\t\t\t\t
{{ 'YourProjects' | translate }}
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t\r\n\t\t {{ 'LogOut' | translate }}\r\n\t\r\n\t\r\n\t\t\r\n\t\r\n
\r\n","import { Component, Inject, Injector, Input, OnInit } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { IS_DARK_THEME, IS_LIGHT_THEME } from '@app/constants';\r\nimport { BaseComponent, ReportsV1Client, UsersV1Client } from 'cadlearning.angular';\r\nimport {\r\n\tNotificationDto,\r\n\tOrganizationDto,\r\n\tProjectDto,\r\n\tReportAchievementsTestedOutDto,\r\n\tShortLessonWithCoursesDto,\r\n\tUserDto,\r\n} from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'users',\r\n\ttemplateUrl: './users.component.html',\r\n\tstyleUrls: ['./topmenu.component.scss', './topmenumobile.component.scss'],\r\n})\r\nexport class UsersComponent extends BaseComponent implements OnInit {\r\n\t@Input() Notifications: NotificationDto[] = [];\r\n\tpublic RecentActivity: ShortLessonWithCoursesDto[] = [];\r\n\tpublic Organizations: OrganizationDto[] = [];\r\n\tpublic Projects: ProjectDto[] = [];\r\n\tpublic TestedOutOfAchivements: ReportAchievementsTestedOutDto = undefined;\r\n\r\n\tpublic UserDto: UserDto = {\r\n\t\tId: this.User ? this.User.Id : null,\r\n\t\tAvailableForEscallation: false,\r\n\t};\r\n\r\n\tpublic Loading = true;\r\n\r\n\tconstructor(\r\n\t\tprivate userClient: UsersV1Client,\r\n\t\tprivate reportClient: ReportsV1Client,\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean,\r\n\t\tinjector: Injector\r\n\t) {\r\n\t\tsuper(injector);\r\n\t\tsuper.OverrideTranslationUri('/user/topmenu');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\r\n\t\tif (!this.User) return;\r\n\r\n\t\tthis.Loading = false;\r\n\t\tthis.IsLoaded = true;\r\n\r\n\t\t///Itentionally not in with the rest so that there's no delay.\r\n\t\t[this.UserDto, this.Organizations, this.Projects, this.TestedOutOfAchivements] = await Promise.all([\r\n\t\t\tthis.userClient.Get(this.User.Id),\r\n\t\t\tthis.userClient.ListOrganizations(),\r\n\t\t\tthis.userClient.ListProjects(),\r\n\t\t\tthis.reportClient.GetTestedOutAchievements(),\r\n\t\t]);\r\n\r\n\t\tthis.userClient.GetRecentActivity().then((results) => {\r\n\t\t\tthis.RecentActivity = results;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic async Logout($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.UserService.Logout();\r\n\t}\r\n\r\n\tpublic async SelectProject(project?: ProjectDto, $event?: Event) {\r\n\t\tif ($event) $event.preventDefault();\r\n\r\n\t\tawait this.UserService.SetProject(project ? undefined : (project as unknown as ProjectDto).Id); // ????????????\r\n\t}\r\n\r\n\tpublic async SelectOrganization(organization: OrganizationDto, $event: Event) {\r\n\t\t$event.preventDefault();\r\n\r\n\t\tawait this.UserService.SetOrganization(organization.Id);\r\n\t}\r\n\r\n\tpublic async UpdateAvailability() {\r\n\t\tawait this.UserService.UpdateAvailability(this.UserDto.AvailableForEscallation);\r\n\t\tthis.UserService.AuthenticationChanged.emit(this.UserService.User);\r\n\t}\r\n\r\n\tpublic AvailableClicked($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t}\r\n}\r\n","
\r\n\t

{{ 'SharePlaylist' | translate }}

\r\n
\r\n
\r\n\t
\r\n\t\t

{{ 'ExistingAcceptedInvites' | translate }}

\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{{ invitee.User }}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t

{{ 'AddNewInvitee' | translate }}

\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{{ 'PleaseEnterAValidEmailAddress' | translate }}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t\r\n
","import { Component, Injectable, Injector, Input, OnInit } from '@angular/core';\r\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { DialogRef } from '@progress/kendo-angular-dialog';\r\nimport { BaseComponent, IsValidEmail, PlaylistsV1Client } from 'cadlearning.angular';\r\nimport { PlayListUserDto, PlayListWithContentDto } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\ttemplateUrl: './playlistshare.component.html',\r\n\tstyleUrls: ['./playlistshare.component.scss'],\r\n})\r\n@Injectable()\r\nexport class PlayListShareComponent extends BaseComponent implements OnInit {\r\n\t@Input() public PlayList: PlayListWithContentDto = {};\r\n\r\n\tpublic Form: UntypedFormGroup = undefined!;\r\n\tpublic Loading: boolean = true;\r\n\r\n\tpublic Invitees: PlayListUserDto[] = [];\r\n\r\n\tconstructor(\r\n\t\tprivate playlistClient: PlaylistsV1Client,\r\n\t\tprivate fb: UntypedFormBuilder,\r\n\t\tprivate modalService: DialogRef,\r\n\t\tpublic injector: Injector\r\n\t) {\r\n\t\tsuper(injector);\r\n\t\tsuper.OverrideTranslationUri('/appmain');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\r\n\t\tthis.Form = this.fb.group({\r\n\t\t\tEmailAddress: ['', Validators.compose([Validators.required, IsValidEmail])],\r\n\t\t});\r\n\r\n\t\tthis.Invitees = await this.playlistClient.ListPlayListUsers(this.PlayList.Id);\r\n\r\n\t\tthis.Loading = false;\r\n\t}\r\n\r\n\tpublic async RemoveInvitee(invitee: PlayListUserDto) {\r\n\t\tif (invitee.UserId) await this.playlistClient.DeletePlayListUser(invitee);\r\n\r\n\t\tthis.Invitees.splice(this.Invitees.indexOf(invitee), 1);\r\n\t}\r\n\r\n\tpublic AddInvitee() {\r\n\t\tif (!this.Form.valid) {\r\n\t\t\tfor (const c in this.Form.controls) this.Form.controls[c].markAsTouched();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.Invitees.push({\r\n\t\t\tPlayListId: this.PlayList.Id,\r\n\t\t\tUser: this.Form.controls.EmailAddress.value,\r\n\t\t\tUserId: undefined,\r\n\t\t});\r\n\r\n\t\tthis.Form.controls.EmailAddress.setValue('');\r\n\t\tthis.Form.controls.EmailAddress.markAsUntouched();\r\n\t}\r\n\r\n\tpublic async SaveAndClose() {\r\n\t\t// Send the share request here.\r\n\t\tconst emailAddresses = (this.Invitees.filter((i) => !i.UserId).map((i) => i.User) as string[] | undefined) ?? [];\r\n\r\n\t\tif (emailAddresses.length > 0)\r\n\t\t\tawait this.playlistClient.InviteEmailAddressesToPlayList({\r\n\t\t\t\tEmailAddresses: emailAddresses,\r\n\t\t\t\tPlayListId: this.PlayList.Id,\r\n\t\t\t\tSiteUrl: window.location.hostname,\r\n\t\t\t});\r\n\r\n\t\tthis.modalService.close(null);\r\n\t}\r\n\r\n\tpublic Cancel() {\r\n\t\tthis.modalService.close(null);\r\n\t}\r\n}\r\n","
\r\n\t\r\n\t\t\r\n\t\r\n\t
{{'Playlists' | translate}}
\r\n
\r\n
\r\n\t\r\n\t\t {{'NewPlaylist' | translate}}\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{{playList.Name}}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t   \r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n
\r\n","import { AfterViewInit, Component, EventEmitter, Inject, Injectable, Injector, OnInit, Output } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { IS_DARK_THEME, IS_LIGHT_THEME } from '@app/constants';\r\nimport { DragEndEvent } from '@progress/kendo-angular-charts';\r\nimport { DialogService } from '@progress/kendo-angular-dialog';\r\nimport { BaseComponent, ConfirmService, PlaylistsV1Client } from 'cadlearning.angular';\r\nimport { PlayListContentDto, PlayListWithContentDto } from 'cadlearning.dto';\r\nimport { PlayListNewComponent } from './playlistnew.component';\r\nimport { PlayListShareComponent } from './playlistshare.component';\r\n\r\n@Component({\r\n\tselector: 'play-list-menu',\r\n\ttemplateUrl: './playlist.component.html',\r\n\tstyleUrls: ['./playlist.component.scss'],\r\n})\r\n@Injectable()\r\nexport class PlayListMenuComponent extends BaseComponent implements OnInit, AfterViewInit {\r\n\t@Output() Closed = new EventEmitter();\r\n\r\n\tpublic PlayLists: PlayListWithContentDto[] = [];\r\n\tpublic SelectedPlayListId?: string = undefined;\r\n\tpublic ScrollPosition = 0;\r\n\r\n\tconstructor(\r\n\t\tprivate playListClient: PlaylistsV1Client,\r\n\t\tprivate confirmService: ConfirmService,\r\n\t\tprivate router: Router,\r\n\t\tprivate modalService: DialogService,\r\n\t\tpublic injector: Injector,\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean\r\n\t) {\r\n\t\tsuper(injector);\r\n\t\tsuper.OverrideTranslationUri('/appmain');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\r\n\t\tif (this.User) {\r\n\t\t\tthis.SelectedPlayListId = localStorage.getItem('SelectedPlayListId') ?? undefined;\r\n\t\t\tthis.PlayLists = await this.playListClient.ListPlaylistByUser();\r\n\t\t\tthis.SelectedPlayListId =\r\n\t\t\t\tthis.SelectedPlayListId || (this.PlayLists.length > 0 ? 'PlayList' + this.PlayLists[0].Id : undefined);\r\n\t\t}\r\n\t}\r\n\r\n\tngAfterViewInit() {\r\n\t\tsetTimeout(() => {\r\n\t\t\tlet storageItem = localStorage.getItem('PlayListPosition') ?? '0';\r\n\t\t\tthis.ScrollPosition = parseInt(storageItem);\r\n\t\t}, 1000);\r\n\t}\r\n\r\n\tpublic Close($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\t}\r\n\r\n\tpublic OpenLesson() {\r\n\t\tthis.Closed.emit();\r\n\t}\r\n\r\n\tpublic PlayListChange($event: any[]) {\r\n\t\tlet panel: string = $event.find((f) => {\r\n\t\t\treturn f.expanded;\r\n\t\t}).id;\r\n\t\twindow.localStorage.setItem('SelectedPlayListId', panel.substr(0, 8));\r\n\t}\r\n\r\n\tpublic async NewPlayList($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\r\n\t\t// Show the new playlist screen\r\n\t\tconst modal = this.modalService.open({\r\n\t\t\tcontent: PlayListNewComponent,\r\n\t\t});\r\n\r\n\t\ttry {\r\n\t\t\tawait modal.result.toPromise();\r\n\t\t} catch (error) {}\r\n\t}\r\n\r\n\tpublic DeletingLesson: boolean = false;\r\n\tpublic async DeleteLesson(playList: PlayListWithContentDto, item: PlayListContentDto, $event) {\r\n\t\t$event.preventDefault();\r\n\r\n\t\tif (!playList.Contents) playList.Contents = [];\r\n\r\n\t\tplayList.Contents.splice(playList.Contents.indexOf(item), 1);\r\n\t\tplayList.Contents = playList.Contents.slice(0);\r\n\r\n\t\t//ondragend calls upsert\r\n\t\tthis.SavePlaylist(playList);\r\n\t}\r\n\r\n\tpublic SaveRunning: boolean = false;\r\n\tpublic async SavePlaylist(playList: PlayListWithContentDto) {\r\n\t\tif (this.DragEndRunning || this.SaveRunning) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.SavePlaylist(playList);\r\n\t\t\t}, 200);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.SaveRunning = true;\r\n\r\n\t\ttry {\r\n\t\t\tawait this.playListClient.Upsert([playList]);\r\n\t\t\tawait this.playListClient.UpsertWithContent(playList);\r\n\t\t} finally {\r\n\t\t\tthis.SaveRunning = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async Delete(playList: PlayListWithContentDto, $event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tawait this.playListClient.DeleteByIds(playList.Id);\r\n\t\tthis.PlayLists.splice(this.PlayLists.indexOf(playList), 1);\r\n\t}\r\n\r\n\tpublic async Share(playList: PlayListWithContentDto, $event: Event) {\r\n\t\t$event.preventDefault();\r\n\r\n\t\tconst dialog = this.modalService.open({\r\n\t\t\tcontent: PlayListShareComponent,\r\n\t\t});\r\n\t\tdialog.content.instance.PlayList = playList;\r\n\t\tawait dialog.result;\r\n\t}\r\n\r\n\tpublic Assessment(playList: PlayListWithContentDto, $event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\r\n\t\tthis.router.navigate(['/assessments/takeassessment'], {\r\n\t\t\tqueryParams: { PlayListId: playList.Id },\r\n\t\t});\r\n\t}\r\n\r\n\tpublic SideBarScrolled($event: Event) {\r\n\t\tlocalStorage.setItem('PlayListPosition', ($event.srcElement).scrollTop.toString());\r\n\t}\r\n\r\n\tpublic DragEndRunning: boolean = false;\r\n\tpublic async onDragEnd(playList: PlayListWithContentDto, e: DragEndEvent) {\r\n\t\tif (!playList.Contents) playList.Contents = [];\r\n\r\n\t\tthis.DragEndRunning = true;\r\n\r\n\t\ttry {\r\n\t\t\tfor (let i = 0; i < playList.Contents.length; ++i) {\r\n\t\t\t\tplayList.Contents[i].Order = i;\r\n\t\t\t}\r\n\r\n\t\t\tawait this.playListClient.Upsert([playList]);\r\n\t\t\tawait this.playListClient.UpsertWithContent(playList);\r\n\t\t} finally {\r\n\t\t\tthis.DragEndRunning = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async RenamePlaylist(playList: PlayListWithContentDto, e: Event) {\r\n\t\te.preventDefault();\r\n\r\n\t\tlet newName = await this.confirmService.prompt('Rename Playlist', 'Name', playList.Name, true, 255);\r\n\r\n\t\tif (!newName) return;\r\n\r\n\t\tplayList.Name = newName;\r\n\r\n\t\tawait this.playListClient.Upsert([playList]);\r\n\t}\r\n}\r\n","
\r\n\t
\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t
{{ 'Content' | translate }}
\r\n\t
\r\n\t
\r\n\t\t\r\n\t\t\t {{ 'NewCourse' | translate }}\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t {{ course.Name }}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
{{ dataItem.Name }}
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n
","import { Component, EventEmitter, Injectable, Injector, OnInit, Output, ViewEncapsulation } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { BaseComponent, ConfirmService, CoursesV1Client, ResourcesV1Client } from 'cadlearning.angular';\r\nimport {\r\n\tContentItemDto,\r\n\tContentItemTypes,\r\n\tCourseDto,\r\n\tCourseStructureForEditingWithChildrenDto,\r\n\tResourceDto,\r\n\tResourceTypes,\r\n\tRoles\r\n} from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'content-list-menu',\r\n\ttemplateUrl: './customcontent.component.html',\r\n\tstyleUrls: ['./customcontent.component.scss'],\r\n\tencapsulation: ViewEncapsulation.None,\r\n})\r\n@Injectable()\r\nexport class CustomContentMenuComponent extends BaseComponent implements OnInit {\r\n\t@Output() Closed = new EventEmitter();\r\n\r\n\tpublic CourseStructureMap = new Map();\r\n\r\n\tpublic CustomCourses: CourseDto[] = [];\r\n\r\n\tprivate ResourcesDownloaded: number[] = [];\r\n\r\n\tconstructor(\r\n\t\tprivate courseClient: CoursesV1Client,\r\n\t\tprivate resourceClient: ResourcesV1Client,\r\n\t\tprivate confirm: ConfirmService,\r\n\t\tinjector: Injector\r\n\t) {\r\n\t\t/* App Component handles retrieving translations */ super(injector);\r\n\t\tsuper.OverrideTranslationUri('/appmain');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\r\n\t\tif (!this.User.IsInRole(Roles.OrgContentCreator)) return;\r\n\r\n\t\tthis.CustomCourses = await this.courseClient.ListCustomCourses();\r\n\r\n\t\tthis.IsLoaded = true;\r\n\t}\r\n\r\n\tpublic async PanelStateChange($event: any[]) {\r\n\t\tconst expanded = $event.find((e) => e.expanded);\r\n\t\tif (!expanded) return;\r\n\r\n\t\tconst courseId = parseInt(expanded.id.replace('CustomCourses', ''));\r\n\r\n\t\tif (this.CourseStructureMap.has(courseId)) return;\r\n\r\n\t\tconst structure = await this.courseClient.GetStructureForEditing(courseId);\r\n\r\n\t\tthis.CourseStructureMap.set(courseId, structure);\r\n\t}\r\n\r\n\tpublic Close($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\t}\r\n\r\n\tpublic async DownloadStructureResource(item: ContentItemDto, $event: Event) {\r\n\t\tconst resource = await this.resourceClient.Get(item.ItemId);\r\n\r\n\t\tif (item.ResourceType !== ResourceTypes.Link) {\r\n\t\t\tif (!this.ResourcesDownloaded.some((r) => r === item.ItemId)) {\r\n\t\t\t\t$event.preventDefault();\r\n\t\t\t\tawait this.DownloadResource(resource, $event);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst target: any = $event.target;\r\n\t\t\ttarget.href = resource.Uri;\r\n\t\t\ttarget.removeAttribute('(click)');\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async DownloadResource(resource: ResourceDto, $event: Event) {\r\n\t\tconst result = await this.resourceClient.RequestResourceAccessToken(resource.Id, false);\r\n\t\tconst target: any = $event.target;\r\n\r\n\t\ttarget.href = resource.Uri + result;\r\n\t\ttarget.removeAttribute('(click)');\r\n\t\ttarget.download = resource.Uri + result;\r\n\r\n\t\tthis.ResourcesDownloaded.push(resource.Id);\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\ttarget.click();\r\n\t\t}, 100);\r\n\t}\r\n\r\n\tpublic async SaveCourseStructure(courseId: number, structure: CourseStructureForEditingWithChildrenDto[]) {\r\n\t\tlet rOrder = 1;\r\n\t\tstructure.forEach((r) => {\r\n\t\t\tr.Order = rOrder;\r\n\r\n\t\t\tif (r.ChildItems) {\r\n\t\t\t\tlet ciOrder = r.ChildItems.length - 1;\r\n\r\n\t\t\t\tfor (let j = r.ChildItems.length - 1; j >= 0; j--) {\r\n\t\t\t\t\tconst ci = r.ChildItems[j];\r\n\t\t\t\t\tif (ci.ItemType === -1) {\r\n\t\t\t\t\t\tr.ChildItems.splice(j, 1);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tci.Order = ciOrder;\r\n\t\t\t\t\t\tciOrder--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\trOrder++;\r\n\t\t});\r\n\r\n\t\ttry {\r\n\t\t\tawait this.courseClient.UpdateCustomCourseStructure({\r\n\t\t\t\tCourseId: courseId,\r\n\t\t\t\tStructure: structure,\r\n\t\t\t});\r\n\t\t} catch (e: any) {\r\n\t\t\tthis.confirm.alert(e, 'Error');\r\n\t\t}\r\n\t}\r\n\r\n\tpublic IsExpanded(node: CourseStructureForEditingWithChildrenDto) {\r\n\t\treturn node.ChildItems && node.Expanded;\r\n\t}\r\n\r\n\tpublic ToggleExpand(item: any) {\r\n\t\tif (item.item.dataItem.ItemType == ContentItemTypes.Topic) item.item.dataItem.Expanded = !item.item.dataItem.Expanded;\r\n\t}\r\n\r\n\tpublic HandleExpand(node: any) {\r\n\t\tnode.dataItem.Expanded = true;\r\n\t}\r\n\r\n\tpublic HandleCollapse(node: any) {\r\n\t\tnode.dataItem.Expanded = false;\r\n\t}\r\n\r\n\tpublic HasChildren(node: CourseStructureForEditingWithChildrenDto) {\r\n\t\tdebugger;\r\n\t}\r\n\r\n\tpublic IsRootElement(node: CourseStructureForEditingWithChildrenDto, courseId: number) {\r\n\t\treturn !node.ParentId || node.ParentId === courseId;\r\n\t}\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
{{'Plugin' | translate}}
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n {{'DownloadThePluginForSelectAutodeskProductsHere' | translate}}.\r\n {{'YoullReceiveLiveSuggestionsOfContentBasedOnYourContextualUsage' | translate}}\r\n

\r\n \r\n
\r\n
\r\n
\r\n \r\n
","import { Component, EventEmitter, Injectable, Injector, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { BaseComponent } from 'cadlearning.angular';\r\nimport { CommandNotificationDto } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'plugin-list-menu',\r\n\ttemplateUrl: './plugin.component.html',\r\n\tstyleUrls: ['./plugin.component.scss'],\r\n\tencapsulation: ViewEncapsulation.None,\r\n})\r\n@Injectable()\r\nexport class PluginMenuComponent extends BaseComponent implements OnInit {\r\n\t@Output() Closed = new EventEmitter();\r\n\r\n\t@Input() Notifications: CommandNotificationDto[] = [];\r\n\t@Input() IsWindow: boolean = false;\r\n\r\n\tconstructor(injector: Injector) {\r\n\t\tsuper(injector);\r\n\t\tsuper.OverrideTranslationUri('/user/plugin');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait this.TranslatePage();\r\n\t\tthis.IsLoaded = true;\r\n\t}\r\n\r\n\tpublic Close($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\t}\r\n\r\n\tpublic Detach($event: Event) {\r\n\t\tthis.Closed.emit();\r\n\t}\r\n}\r\n","import { isPlatformServer } from '@angular/common';\r\nimport { EventEmitter, Injectable, ModuleWithProviders, NgModule, PLATFORM_ID } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { QExpertEscallationResponseDto, QMessageDto, QMessageTypes, QParticipantTypes } from 'cadlearning.dto';\r\nimport { SignalRService } from '../../SignalR/SignalRService';\r\n\r\n@Injectable()\r\nexport class ChatService {\r\n\tpublic QBroadcast = new EventEmitter();\r\n\tpublic QExpertBroadcast = new EventEmitter();\r\n\r\n\tprivate defaultMessage?: QMessageDto = undefined;\r\n\r\n\tpublic QMessages: QMessageDto[] = [];\r\n\tpublic QExpertMessages: QMessageDto[] = [];\r\n\r\n\tconstructor(private userService: UserService, private signalr: SignalRService, private router: Router) {\r\n\t\tconst self = this;\r\n\r\n\t\tif (isPlatformServer(PLATFORM_ID)) return;\r\n\r\n\t\tthis.signalr.QBroadcast.subscribe((message: QMessageDto) => {\r\n\t\t\tif (message.Type === QMessageTypes.Restart) this.ClearQConversation();\r\n\r\n\t\t\tif (!self.QMessages.some((m) => m.Id === message.Id)) {\r\n\t\t\t\tself.QMessages.push(message);\r\n\t\t\t\tself.QBroadcast.emit(message);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.signalr.QExpertBroadcast.subscribe((message: QMessageDto) => {\r\n\t\t\tif (!self.QExpertMessages.some((m) => m.Id === message.Id)) {\r\n\t\t\t\tself.QExpertMessages.push(message);\r\n\t\t\t\tself.QExpertBroadcast.emit(message);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.signalr.QExpertCompleteBroadcast.subscribe((conversationId) => {\r\n\t\t\tself.ClearExpertConversation();\r\n\t\t\tself.router.navigateByUrl('/expert/makequestion/' + conversationId);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic SetDefaultMessage(message: QMessageDto) {\r\n\t\tif (\r\n\t\t\tmessage &&\r\n\t\t\t(!this.QMessages.length ||\r\n\t\t\t\t(this.QMessages.length === 1 && this.defaultMessage && this.QMessages[0].Message === this.defaultMessage.Message))\r\n\t\t) {\r\n\t\t\tthis.QMessages.push(message);\r\n\t\t}\r\n\r\n\t\tthis.defaultMessage = message;\r\n\t}\r\n\r\n\tpublic ClearQConversation() {\r\n\t\tif (this.defaultMessage) {\r\n\t\t\tthis.QMessages = [this.defaultMessage];\r\n\t\t} else {\r\n\t\t\tthis.QMessages = [];\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ClearExpertConversation() {\r\n\t\tthis.QExpertMessages = [];\r\n\t}\r\n\r\n\tpublic ButtonResponse(message: QMessageDto) {\r\n\t\tthis.SendMessage(message);\r\n\t}\r\n\r\n\tpublic RespondToEscallationRequest(message: QExpertEscallationResponseDto) {\r\n\t\tthis.QExpertMessages.push({\r\n\t\t\tConversationId: message.ConversationId,\r\n\t\t\tDateTime: new Date(),\r\n\t\t\tId: undefined!,\r\n\t\t\tFromParticipant: {\r\n\t\t\t\tAccessToken: undefined!,\r\n\t\t\t\tActive: message.Accepted,\r\n\t\t\t\tName: this.userService.User.Name,\r\n\t\t\t\tType: QParticipantTypes.Expert,\r\n\t\t\t\tUserId: this.userService.User.Id,\r\n\t\t\t},\r\n\t\t\tInResponseToMessageId: undefined,\r\n\t\t\tisHTML: false,\r\n\t\t\tMessage: message.Accepted ? 'Yes' : 'No',\r\n\t\t\tTimeStamp: undefined,\r\n\t\t\tToParticipants: [],\r\n\t\t\tType: QMessageTypes.EscallationExpertRequest,\r\n\t\t\tVerificationToken: message.VerificationToken,\r\n\t\t\tButtonOnly: false,\r\n\t\t\tButtons: undefined,\r\n\t\t\tLessons: undefined,\r\n\t\t});\r\n\r\n\t\tthis.signalr.RespondToEscallationRequest(message);\r\n\t}\r\n\r\n\tpublic SendMessage(message: QMessageDto) {\r\n\t\tif (!message.FromParticipant)\r\n\t\t\treturn;\r\n\r\n\t\t//Add the message to the queue\r\n\t\tif (message.FromParticipant.Type === QParticipantTypes.User) {\r\n\t\t\tthis.QMessages.push(message);\r\n\t\t\tthis.QBroadcast.emit(message);\r\n\t\t} else {\r\n\t\t\tthis.QExpertMessages.push(message);\r\n\t\t\tthis.QExpertBroadcast.emit(message);\r\n\t\t}\r\n\t\tthis.signalr.SendMessage(message);\r\n\t}\r\n\r\n\tpublic ConversationId() {\r\n\t\tlet message = this.QMessages.find((m) => m.ConversationId != null);\r\n\t\tif (message != null) return message.ConversationId;\r\n\r\n\t\tmessage = this.QExpertMessages.find((m) => m.ConversationId != null);\r\n\t\tif (message != null) return message.ConversationId;\r\n\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: []\r\n})\r\nexport class ChatModule {\r\n\tstatic forRoot(): ModuleWithProviders {\r\n\t\treturn {\r\n\t\t\tngModule: ChatModule,\r\n\t\t\tproviders: [ChatService],\r\n\t\t};\r\n\t}\r\n}\r\n","
\r\n\t
0\r\n\t\t\" #chatHistory>\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t{{ message.DateTime | date: \"shortTime\" }} -\r\n\t\t\t\t{{\r\n\t\t\t\tmessage.FromParticipant ? message.FromParticipant.Name : \"Q\"\r\n\t\t\t\t}}\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t
0\r\n\t\t\">\r\n\t\t
    \r\n\t\t\t
  • \r\n\t\t\t\t\r\n\t\t\t
  • \r\n\t\t
\r\n\t
\r\n\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n
","import { Component, ElementRef, Injectable, Injector, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { GetHostUrl } from '@app/utilities';\r\nimport { BaseComponent } from 'cadlearning.angular';\r\nimport { QButtonActionTypes, QMessageButtonDto, QMessageDto, QMessageTypes, QParticipantTypes } from 'cadlearning.dto';\r\nimport { ChatService } from './chat.service';\r\n\r\n@Component({\r\n\tselector: 'chat',\r\n\ttemplateUrl: './chat.component.html',\r\n\tstyleUrls: ['./chat.component.scss'],\r\n})\r\n@Injectable()\r\nexport class ChatComponent extends BaseComponent implements OnInit {\r\n\t@Input()\r\n\tpublic Expert: boolean = false;\r\n\t@Input()\r\n\tpublic InitialMessage?: string = undefined;\r\n\r\n\t@Input()\r\n\tpublic ProductId?: number = undefined;\r\n\r\n\t@Input()\r\n\tpublic VersionId?: number = undefined;\r\n\r\n\t@Input()\r\n\tpublic IsContent?: boolean = undefined;\r\n\r\n\tpublic Message?: string = undefined;\r\n\r\n\tpublic CurrentMessage?: QMessageDto = undefined;\r\n\r\n\t@ViewChild('chatHistory', { static: true }) private history: ElementRef = undefined!;\r\n\r\n\tconstructor(public Chat: ChatService, injector: Injector) {\r\n\t\tsuper(injector);\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tthis.Chat.QBroadcast.subscribe((message) => {\r\n\t\t\tif (message.FromParticipant == null || message.FromParticipant.UserId !== this.User.Id) this.CurrentMessage = message;\r\n\t\t\tthis.scrollToBottom();\r\n\t\t});\r\n\r\n\t\tif (!this.Expert) {\r\n\t\t\tvar host = GetHostUrl(location.hostname);\r\n\t\t\tvar siteName = 'CADLearning';\r\n\t\t\tif (host.endsWith('anhour.io')) {\r\n\t\t\t\tsiteName = 'AnHour';\r\n\t\t\t} else {\r\n\t\t\t\tsiteName = 'CADLearning';\r\n\t\t\t}\r\n\r\n\t\t\tlet qmessage = {\r\n\t\t\t\tButtonOnly: false,\r\n\t\t\t\tButtons: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tType: QButtonActionTypes.Response,\r\n\t\t\t\t\t\tText: siteName + ' Support',\r\n\t\t\t\t\t\tValue: 'Support',\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tType: QButtonActionTypes.Response,\r\n\t\t\t\t\t\tText: 'Product Specific',\r\n\t\t\t\t\t\tValue: 'Product Specific',\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t\tConcepts: undefined,\r\n\t\t\t\tDateTime: new Date(),\r\n\t\t\t\tConversationId: undefined,\r\n\t\t\t\tEntities: undefined,\r\n\t\t\t\tFromParticipant: undefined,\r\n\t\t\t\tId: undefined!,\r\n\t\t\t\tInResponseToMessageId: undefined,\r\n\t\t\t\tInitialProductId: this.ProductId,\r\n\t\t\t\tInitialVersionId: this.VersionId,\r\n\t\t\t\tIntent: undefined,\r\n\t\t\t\tIntentScore: undefined,\r\n\t\t\t\tLessons: undefined,\r\n\t\t\t\tMessage:\r\n\t\t\t\t\tthis.InitialMessage ||\r\n\t\t\t\t\t(this.User\r\n\t\t\t\t\t\t? `Hi, I’m ${siteName} Help 👋 You’ve got questions – I've got answers! 😉

Do you need ${siteName} Support for help with things like updating your email, or do you have a question that’s Product Specific?”`\r\n\t\t\t\t\t\t: `Welcome to ${siteName} Assist. Please use the message box below to ask any support related question you might have. For more advanced assistance, please login.`),\r\n\t\t\t\tTimeStamp: undefined,\r\n\t\t\t\tToParticipants: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tAccessToken: undefined!,\r\n\t\t\t\t\t\tActive: true,\r\n\t\t\t\t\t\tName: this.User ? this.User.Name : 'Unlogged in User',\r\n\t\t\t\t\t\tType: QParticipantTypes.User,\r\n\t\t\t\t\t\tUserId: this.User ? this.User.Id : undefined,\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t\tType: QMessageTypes.Message,\r\n\t\t\t\tisHTML: false,\r\n\t\t\t\tVerificationToken: undefined,\r\n\t\t\t} as QMessageDto;\r\n\r\n\t\t\tthis.CurrentMessage = qmessage;\r\n\t\t\tthis.Chat.SetDefaultMessage(qmessage);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ButtonClick(response: QMessageButtonDto, $event: Event) {\r\n\t\t$event.preventDefault();\r\n\r\n\t\tif (!this.CurrentMessage) return;\r\n\r\n\t\tif (this.CurrentMessage.Type === QMessageTypes.EscallationExpertRequest) {\r\n\t\t\tconst accepted = (response.Value ?? '').toLowerCase().includes('yes');\r\n\t\t\tthis.Chat.RespondToEscallationRequest({\r\n\t\t\t\tAccepted: accepted,\r\n\t\t\t\tConversationId: this.Chat.ConversationId() ?? undefined!,\r\n\t\t\t\tUserId: this.User.Id,\r\n\t\t\t\tVerificationToken: this.CurrentMessage.VerificationToken ?? undefined!,\r\n\t\t\t});\r\n\t\t} else if (response.Type === QButtonActionTypes.OpenUrl) {\r\n\t\t\twindow.open(response.Value, '_blank');\r\n\t\t} else {\r\n\t\t\tconst message: QMessageDto = {\r\n\t\t\t\tButtonOnly: false,\r\n\t\t\t\tConversationId: this.CurrentMessage.ConversationId,\r\n\t\t\t\tDateTime: new Date(),\r\n\t\t\t\tMessage: response.Value,\r\n\t\t\t\tType:\r\n\t\t\t\t\tresponse.Type === QButtonActionTypes.Success\r\n\t\t\t\t\t\t? QMessageTypes.Success\r\n\t\t\t\t\t\t: response.Type === QButtonActionTypes.Fail\r\n\t\t\t\t\t\t? QMessageTypes.Fail\r\n\t\t\t\t\t\t: QMessageTypes.Response,\r\n\t\t\t\tInResponseToMessageId: this.CurrentMessage.Id,\r\n\t\t\t\tToParticipants: [],\r\n\t\t\t\tFromParticipant: {\r\n\t\t\t\t\tUserId: this.User ? this.User.Id : undefined,\r\n\t\t\t\t\tActive: true,\r\n\t\t\t\t\tType: this.Expert ? QParticipantTypes.Expert : QParticipantTypes.User,\r\n\t\t\t\t\tName: this.User ? this.User.Name : 'Unlogged in User',\r\n\t\t\t\t\tAccessToken: this.UserService.GetAccessToken(),\r\n\t\t\t\t},\r\n\t\t\t\tisHTML: false,\r\n\t\t\t\tId: undefined!,\r\n\t\t\t};\r\n\t\t\tthis.Chat.ButtonResponse(message);\r\n\t\t}\r\n\t\tthis.CurrentMessage = undefined;\r\n\t}\r\n\r\n\tpublic SendMessage($event: Event) {\r\n\t\t$event.preventDefault();\r\n\r\n\t\tif (!this.Message) return;\r\n\r\n\t\tthis.CurrentMessage = undefined;\r\n\r\n\t\tif (this.Expert) {\r\n\t\t\tthis.Chat.SendMessage({\r\n\t\t\t\tId: undefined!,\r\n\t\t\t\tisHTML: false,\r\n\t\t\t\tConversationId: this.Chat.ConversationId()!,\r\n\t\t\t\tInResponseToMessageId: this.Chat.QMessages.length > 0 ? this.Chat.QMessages[this.Chat.QMessages.length - 1].Id : undefined,\r\n\t\t\t\tMessage: this.Message,\r\n\t\t\t\tFromParticipant: {\r\n\t\t\t\t\tAccessToken: this.User ? this.UserService.GetAccessToken() : null,\r\n\t\t\t\t\tActive: true,\r\n\t\t\t\t\tName: this.User ? this.User.Name : 'Unlogged in User',\r\n\t\t\t\t\tType: QParticipantTypes.Expert,\r\n\t\t\t\t\tUserId: this.User ? this.User.Id : undefined,\r\n\t\t\t\t},\r\n\t\t\t\tInitialProductId: this.ProductId,\r\n\t\t\t\tInitialVersionId: this.VersionId,\r\n\t\t\t\tToParticipants: undefined,\r\n\t\t\t\tVerificationToken: undefined,\r\n\t\t\t\tType: QMessageTypes.Message,\r\n\t\t\t\tDateTime: new Date(),\r\n\t\t\t\tTimeStamp: undefined,\r\n\t\t\t\tButtonOnly: false,\r\n\t\t\t\tButtons: undefined,\r\n\t\t\t\tLessons: undefined,\r\n\t\t\t\tIsContent: this.IsContent,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (this.Chat.QMessages.some((m) => m.Type === QMessageTypes.Success || m.Type === QMessageTypes.Fail))\r\n\t\t\t\tthis.Chat.ClearQConversation();\r\n\r\n\t\t\tthis.Chat.SendMessage({\r\n\t\t\t\tId: undefined!,\r\n\t\t\t\tisHTML: false,\r\n\t\t\t\tConversationId: this.Chat.ConversationId()!,\r\n\t\t\t\tInResponseToMessageId: undefined,\r\n\t\t\t\tMessage: this.Message,\r\n\t\t\t\tFromParticipant: {\r\n\t\t\t\t\tAccessToken: this.User ? this.UserService.GetAccessToken() : undefined,\r\n\t\t\t\t\tActive: true,\r\n\t\t\t\t\tName: this.User ? this.User.Name : 'Unlogged in User',\r\n\t\t\t\t\tType: QParticipantTypes.User,\r\n\t\t\t\t\tUserId: this.User ? this.User.Id : undefined,\r\n\t\t\t\t\tOrganizationId: this.User?.OrganizationId,\r\n\t\t\t\t},\r\n\t\t\t\tToParticipants: undefined,\r\n\t\t\t\tVerificationToken: undefined,\r\n\t\t\t\tType: !this.Chat.QMessages.some((m) => m.Type === QMessageTypes.InitialRequest)\r\n\t\t\t\t\t? QMessageTypes.InitialRequest\r\n\t\t\t\t\t: QMessageTypes.Message,\r\n\t\t\t\tDateTime: new Date(),\r\n\t\t\t\tTimeStamp: undefined,\r\n\t\t\t\tButtonOnly: false,\r\n\t\t\t\tButtons: undefined,\r\n\t\t\t\tLessons: undefined,\r\n\t\t\t\tInitialProductId: this.ProductId,\r\n\t\t\t\tInitialVersionId: this.VersionId,\r\n\t\t\t\tIsContent: this.IsContent,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.Message = undefined;\r\n\t}\r\n\r\n\tprivate scrollToBottom() {\r\n\t\ttry {\r\n\t\t\tlet self = this;\r\n\t\t\twindow.setTimeout(() => {\r\n\t\t\t\tself.history.nativeElement.scrollTop = self.history.nativeElement.scrollHeight;\r\n\t\t\t}, 300);\r\n\t\t} catch (err) {}\r\n\t}\r\n}\r\n","import { Component, EventEmitter, Injectable, Injector, Input, OnInit, Output } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { BaseComponent } from 'cadlearning.angular';\r\n\r\n@Component({\r\n\tselector: 'q-menu',\r\n\ttemplateUrl: './q.component.html',\r\n\tstyleUrls: ['./q.component.scss'],\r\n})\r\n@Injectable()\r\nexport class QMenuComponent extends BaseComponent implements OnInit {\r\n\t@Output() Closed = new EventEmitter();\r\n\t@Input() InitialMessage?: string = undefined;\r\n\t@Input()\r\n\tpublic ProductId?: number = undefined;\r\n\r\n\t@Input()\r\n\tpublic VersionId?: number = undefined;\r\n\r\n\t@Input()\r\n\tpublic IsContent?: boolean = undefined;\r\n\r\n\tconstructor(injector: Injector) {\r\n\t\tsuper(injector);\r\n\t\tsuper.OverrideTranslationUri('/appmain');\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tawait super.TranslatePage();\r\n\t}\r\n\r\n\tpublic Close($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\t}\r\n}\r\n","
\r\n\t\r\n\t\t\r\n\t\r\n\t
{{'Q - Expert Help' | translate}}
\r\n
\r\n
\r\n\t\r\n\t\r\n
","import { Component, Injectable, EventEmitter, Output, AfterViewInit } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'expert-menu',\r\n\ttemplateUrl: './expert.component.html',\r\n\tstyleUrls: ['./expert.component.scss']\r\n})\r\n@Injectable()\r\nexport class ExpertMenuComponent implements AfterViewInit {\r\n\t@Output() Closed = new EventEmitter();\r\n\r\n\tconstructor() { }\r\n\r\n\tasync ngAfterViewInit() {\r\n\t}\r\n\r\n\r\n\tpublic Close($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.Closed.emit();\r\n\t}\r\n}\r\n","
\r\n\t\r\n\t\t\r\n\t\r\n\t
Expert Assistance
\r\n
\r\n
\r\n\t\r\n
","\r\n\t\r\n\r\n
\r\n\t\r\n
\r\n
\r\n\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
    \r\n\t\t\t\t\t
  • \r\n\t\t\t\t\t\tProjects\r\n\t\t\t\t\t
  • \r\n\t\t\t\t\t
  • \r\n\t\t\t\t\t\tRole Templates\r\n\t\t\t\t\t
  • \r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
= 1\">\r\n\t\t\t\t
= 1\">\r\n\t\t\t\t\t
Your Projects
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n
","import { Component, Inject, Injector, OnInit } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { IS_DARK_THEME, IS_LIGHT_THEME } from '@app/constants';\r\nimport { BaseComponent, ProjectsV1Client } from 'cadlearning.angular';\r\nimport { ProjectDto, Roles } from 'cadlearning.dto';\r\n\r\n@Component({\r\n\tselector: 'projects',\r\n\ttemplateUrl: './projects.component.html',\r\n\tstyleUrls: ['./topmenu.component.scss', './topmenumobile.component.scss', 'projects.component.scss'],\r\n})\r\nexport class ProjectsComponent extends BaseComponent implements OnInit {\r\n\tpublic IsOrgAdmin = false;\r\n\r\n\tpublic Projects: ProjectDto[] = [];\r\n\r\n\tconstructor(\r\n\t\tpublic projectClient: ProjectsV1Client,\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean,\r\n\t\tinjector: Injector\r\n\t) {\r\n\t\tsuper(injector);\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tthis.IsOrgAdmin = this.User.IsInRole(Roles.OrgAdmin, Roles.UserAdmin);\r\n\r\n\t\t[this.Projects] = await Promise.all([this.projectClient.List('Id,Name')]);\r\n\r\n\t\tthis.IsLoaded = true;\r\n\t}\r\n\r\n\tpublic async SelectProject(project: ProjectDto, $event: Event) {\r\n\t\t$event.preventDefault();\r\n\r\n\t\tawait this.UserService.SetProject(project?.Id);\r\n\t}\r\n}\r\n","\r\n\t\r\n\r\n
\r\n\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
 Activity
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
 Achievements
\r\n\t\t\t\t
\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tRole Summary by Employee\r\n\t\t\t\t\t\t\tCurrent status of all roles assigned to your Employees\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tGoal Summary By Employee\r\n\t\t\t\t\t\t\tCurrent status of all goals per Employee\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tAssessment Report Card\r\n\t\t\t\t\t\t\tReport on detailed scoring including question by question results for your employees by\r\n\t\t\t\t\t\t\t\tAssessment.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tAssessment Summary\r\n\t\t\t\t\t\t\tAnalyse the spread of scores summarized by assessment taken by your users.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tAssessment History\r\n\t\t\t\t\t\t\tA grid of employees with their historical results by the assessment selected to see\r\n\t\t\t\t\t\t\t\tprogress\r\n\t\t\t\t\t\t\t\tover time.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tDownload\r\n\t\t\t\t\t\t\t\tAssessment Data\r\n\t\t\t\t\t\t\tAllows you to download your organization's assessment data in Excel or CSV\r\n\t\t\t\t\t\t\t\tformat.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tDownload Role Data\r\n\t\t\t\t\t\t\tAllows you to download your organization's role data in Excel or CSV\r\n\t\t\t\t\t\t\t\tformat.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tDownload Goal Data\r\n\t\t\t\t\t\t\tAllows you to download your organization's goal data in Excel or CSV\r\n\t\t\t\t\t\t\t\tformat.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
 Employees
\r\n\t\t\t\t
\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tActivity\r\n\t\t\t\t\t\t\tMost active\r\n\t\t\t\t\t\t\t\temployees by your organization\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tGroup\r\n\t\t\t\t\t\t\t\tActivity\r\n\t\t\t\t\t\t\tActivity by group\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tGroup\r\n\t\t\t\t\t\t\t\tActivity by Product\r\n\t\t\t\t\t\t\tActivity by group and product\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tGoal Summary By Employee\r\n\t\t\t\t\t\t\tCurrent status of all goals per Employee\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tEmployees Assigned to Roles\r\n\t\t\t\t\t\t\tLists Assigned Roles and the Employees with status associated with them.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tEmployees Assigned to Goals\r\n\t\t\t\t\t\t\tLists Assigned Goals and the Employees with status associated with them.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tAssessment Report Card\r\n\t\t\t\t\t\t\tReport on detailed scoring including question by question results for your employees by\r\n\t\t\t\t\t\t\t\tAssessment.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tEmployees By Group\r\n\t\t\t\t\t\t\tEmployees listed by group\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tEmployees By Division\r\n\t\t\t\t\t\t\tEmployees listed by division\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tEmployees By Location\r\n\t\t\t\t\t\t\tEmployees listed by location\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\tDownload\r\n\t\t\t\t\t\t\t\tEmployee Data\r\n\t\t\t\t\t\t\tAllows you to download your organization's employee data in Excel or CSV\r\n\t\t\t\t\t\t\t\tformat.\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
Custom Reports
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
Reporting Tips and\r\n\t\t\t\t\tTricks
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n
","import { Component, Inject, Injector, OnInit } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { IS_DARK_THEME, IS_LIGHT_THEME } from '@app/constants';\r\nimport { BaseComponent, OrganizationsV1Client, UsersV1Client } from 'cadlearning.angular';\r\n\r\n@Component({\r\n\tselector: 'reports',\r\n\ttemplateUrl: './reports.component.html',\r\n\tstyleUrls: ['./topmenu.component.scss', './topmenumobile.component.scss', 'reports.component.scss'],\r\n})\r\nexport class ReportsComponent extends BaseComponent implements OnInit {\r\n\tpublic HasProjects: boolean = false;\r\n\tpublic IsPartner: boolean = false;\r\n\r\n\r\n\tconstructor(\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean,\r\n\t\tinjector: Injector,\r\n\t\tprivate orgClient: OrganizationsV1Client,\r\n\t\tprivate userClient: UsersV1Client\r\n\t) {\r\n\t\tsuper(injector);\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tthis.HasProjects = this.User.HasProjectManagement;\r\n\t\tthis.IsPartner = await this.orgClient.IsPartnerOrganization(this.User.OrganizationId);\r\n\r\n\t}\r\n}\r\n","
\r\n\t\r\n
\r\n
\r\n\t{{ 'Your Progress' | translate }}\r\n\t{{ 'Help' | translate }}\r\n\t{{ 'Playlists' | translate }}\r\n\t{{ 'Assist' | translate }}\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\r\n\r\n\t\r\n\t\r\n\t\r\n\t\r\n\r\n
\r\n\t
\r\n\t\tThis website uses cookies. Please see our\r\n\t\tterms of service and\r\n\t\tprivacy policy for more details.   \r\n\t\t\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n
\r\n\r\n\t\r\n\r\n","import { isPlatformServer, Location } from '@angular/common';\r\nimport { AfterContentChecked, Component, Inject, Injector, NgZone, OnDestroy, OnInit, PLATFORM_ID, ViewEncapsulation } from '@angular/core';\r\nimport { UntypedFormBuilder, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport {\r\n\tDEFAULT_LOGIN_REDIRECT_PATH,\r\n\tHelpParameters,\r\n\tHIDE_HELP,\r\n\tIS_APP,\r\n\tIS_DARK_THEME,\r\n\tIS_IFRAME,\r\n\tIS_LIGHT_THEME,\r\n\tLOGO_URL,\r\n\tLOGO_URL_LIGHT,\r\n\tROOT_COMPANY_ID,\r\n\tSHOW_HELP,\r\n} from '@app/constants';\r\nimport { GetHostUrl } from '@app/utilities';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BaseComponent, ConfirmService, OrganizationsV1Client, SearchV1Client, User, UsersV1Client } from 'cadlearning.angular';\r\nimport {\r\n\tCommandNotificationDto,\r\n\tGetLanguages,\r\n\tKeyValuePair,\r\n\tNotificationDto,\r\n\tNotificationMessageTypes,\r\n\tQMessageDto,\r\n\tQMessageTypes,\r\n\tQuickSearchResultDto,\r\n\tRoles,\r\n} from 'cadlearning.dto';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, filter, switchMap } from 'rxjs/operators';\r\nimport { SignalRService } from '../SignalR/SignalRService';\r\n\r\nexport enum NotificationAreas {\r\n\tUser = 0,\r\n\tOrganization = 1,\r\n\tPartner = 2,\r\n\tPlugin = 3,\r\n\tQ = 4,\r\n\tExpert = 5,\r\n}\r\n\r\n@Component({\r\n\tselector: 'app-root',\r\n\ttemplateUrl: './app.component.html',\r\n\tstyleUrls: ['./app.component.scss', './appmobile.component.scss', './appprint.component.scss'],\r\n\tencapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppComponent extends BaseComponent implements OnInit, OnDestroy, AfterContentChecked {\r\n\tpublic UserNotifications: NotificationDto[] = [];\r\n\tpublic OrganizationNotifications: NotificationDto[] = [];\r\n\tpublic PartnerNotifications: NotificationDto[] = [];\r\n\tpublic PluginNotifications: NotificationDto[] = [];\r\n\tpublic PluginCommandNotifications: CommandNotificationDto[] = [];\r\n\r\n\tpublic WindowWidth: number;\r\n\r\n\tpublic SelectedLanguage = 'EN';\r\n\tpublic Languages: KeyValuePair[] = [\r\n\t\t{\r\n\t\t\ttext: 'English',\r\n\t\t\tvalue: 'EN',\r\n\t\t},\r\n\t];\r\n\tpublic ShowLanguage = false;\r\n\r\n\tpublic IsContentCreator = false;\r\n\tpublic ShowPlayList = false;\r\n\tpublic ShowCustomCourses = false;\r\n\tpublic ShowYourPath = false;\r\n\tpublic ShowPluginMenu = false;\r\n\tpublic ShowQMenu = false;\r\n\tpublic HelpParameters: HelpParameters = {};\r\n\tpublic ShowQTab = false;\r\n\tpublic ShowExpertMenu = false;\r\n\tpublic ShowPluginWindow = false;\r\n\tpublic ShowYourPathMenu = false;\r\n\tpublic ShowReportsMenu = false;\r\n\tpublic ShowProjectsMenu = false;\r\n\tpublic HasProjects: boolean = false;\r\n\r\n\tpublic ShowCookieConsent = false;\r\n\r\n\tpublic AvailableForEscallation = false;\r\n\r\n\tpublic ShowQuickSearch = false;\r\n\tpublic SearchResults: QuickSearchResultDto[] = [];\r\n\tpublic MenusVisible: boolean[] = Array(99).fill(false);\r\n\tpublic SearchForm = this.fb.group({\r\n\t\tSearchPhrase: ['', Validators.required],\r\n\t});\r\n\tpublic Year: number = new Date().getFullYear();\r\n\r\n\tpublic ShowMenu = false;\r\n\r\n\tprivate subQuickSearch?: Subscription = null;\r\n\r\n\tprivate AcceptedCookie = null;\r\n\r\n\tpublic IsCADSupport = false;\r\n\tpublic IsPreHire = false;\r\n\r\n\tpublic WhichSite = 'www.cadlearning.com';\r\n\r\n\tpublic IsPartnerOrg: boolean = false;\r\n\r\n\tpublic TrueLogoUrl: string = undefined!;\r\n\r\n\tpublic IsLoaded = false;\r\n\r\n\tconstructor(\r\n\t\tprivate router: Router,\r\n\t\tpublic translate: TranslateService,\r\n\t\tprivate fb: UntypedFormBuilder,\r\n\t\tprivate zone: NgZone,\r\n\t\tprivate confirm: ConfirmService,\r\n\t\tprivate signalr: SignalRService,\r\n\t\tprivate userClient: UsersV1Client,\r\n\t\tprivate orgClient: OrganizationsV1Client,\r\n\t\tprivate searchClient: SearchV1Client,\r\n\t\tprivate location: Location,\r\n\t\tpublic injector: Injector,\r\n\t\t@Inject(IS_IFRAME) public IsIFrame: boolean,\r\n\t\t@Inject(IS_APP) public IsApp: boolean,\r\n\t\t@Inject(IS_DARK_THEME) public IsDark: boolean,\r\n\t\t@Inject(IS_LIGHT_THEME) public IsLight: boolean,\r\n\t\t@Inject(LOGO_URL) public LogoUrl: string,\r\n\t\t@Inject(LOGO_URL_LIGHT) public LogoUrlLight: string\r\n\t) {\r\n\t\tsuper(injector);\r\n\r\n\t\tsuper.OverrideTranslationUri('/appmain');\r\n\r\n\t\t// this language will be used as a fallback when a translation isn't found in the current language\r\n\t\ttranslate.setDefaultLang('EN');\r\n\r\n\t\t// the lang to use, if the lang isn't available, it will use the current loader to get them\r\n\r\n\t\tthis.SelectedLanguage = this.User?.LanguageCode ?? localStorage?.getItem('SelectedLanguage') ?? 'EN';\r\n\t\ttranslate.use(this.SelectedLanguage);\r\n\r\n\t\tSHOW_HELP.subscribe((helpParameters) => {\r\n\t\t\tthis.zone.run(() => {\r\n\t\t\t\tthis.ShowQMenu = true;\r\n\t\t\t\tthis.HelpParameters = helpParameters;\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tHIDE_HELP.subscribe(() => {\r\n\t\t\tthis.zone.run(() => {\r\n\t\t\t\tthis.ShowQMenu = false;\r\n\t\t\t\tthis.HelpParameters.InitialMessage = undefined;\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.location.onUrlChange(() => {\r\n\t\t\tthis.ShowQTab = this.location.path(false).toLowerCase().indexOf('/account') >= 0;\r\n\t\t});\r\n\r\n\t\tthis.ShowQTab = this.location.path(false).toLowerCase().indexOf('/account') >= 0;\r\n\r\n\t\tif (!isPlatformServer(PLATFORM_ID) && typeof window !== 'undefined') {\r\n\t\t\tthis.WindowWidth = window.document.body.scrollWidth;\r\n\t\t\twindow.onresize = () => {\r\n\t\t\t\tthis.zone.run(() => {\r\n\t\t\t\t\tthis.WindowWidth = window.document.body.scrollWidth;\r\n\t\t\t\t\tif (this.WindowWidth >= 1200) this.ShowMenu = false;\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\twindow.onclick = (e) => {\r\n\t\t\t\tthis.zone.run(() => {\r\n\t\t\t\t\tconst el: any = e.target;\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!e.defaultPrevented &&\r\n\t\t\t\t\t\t!this.IsClassPresent(el, 'side-bar-content') &&\r\n\t\t\t\t\t\t!this.IsClassPresent(el, 'side-menu-button') &&\r\n\t\t\t\t\t\t!this.IsClassPresent(el, 'k-dialog-content') &&\r\n\t\t\t\t\t\t!this.IsClassPresent(el, 'btn-help')\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tthis.ShowCustomCourses = false;\r\n\t\t\t\t\t\tthis.ShowPlayList = false;\r\n\t\t\t\t\t\tthis.ShowPluginMenu = false;\r\n\t\t\t\t\t\tthis.ShowExpertMenu = false;\r\n\t\t\t\t\t\tthis.ShowQMenu = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (e.defaultPrevented && (!this.IsClassPresent(el, 'top-menu') || this.IsClassPresent(el, 'no-close'))) return;\r\n\t\t\t\t\tthis.ShowQuickSearch = false;\r\n\t\t\t\t\tfor (let j = 0; j <= 99; j++) {\r\n\t\t\t\t\t\tthis.MenusVisible[j] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.subQuickSearch = this.SearchForm.controls.SearchPhrase.valueChanges\r\n\t\t\t.pipe(\r\n\t\t\t\tfilter((searchText) => {\r\n\t\t\t\t\t//This is done here to hide immediately if none of this is valid anymore\r\n\t\t\t\t\tif (searchText && searchText.length > 2) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.ShowQuickSearch = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tdebounceTime(400),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\tswitchMap((searchText: string) => this.searchClient.QuickSearch(searchText, this.SelectedLanguage))\r\n\t\t\t)\r\n\t\t\t.subscribe((results: QuickSearchResultDto[]) => {\r\n\t\t\t\tthis.SearchResults = results;\r\n\t\t\t\tthis.ShowQuickSearch = results && results.length > 0;\r\n\t\t\t});\r\n\r\n\t\tthis.ShowProjectsMenu = false;\r\n\r\n\t\t//Auto update notification\r\n\t\tif ('serviceWorker' in navigator) {\r\n\t\t\tnavigator.serviceWorker.ready.then((reg) => {\r\n\t\t\t\treg.addEventListener('updatefound', () => {\r\n\t\t\t\t\t// An updated service worker has appeared in reg.installing!\r\n\t\t\t\t\tconst newWorker = reg.installing;\r\n\r\n\t\t\t\t\tnewWorker.addEventListener('statechange', () => {\r\n\t\t\t\t\t\t// Has service worker state changed?\r\n\t\t\t\t\t\tswitch (newWorker.state) {\r\n\t\t\t\t\t\t\tcase 'installed':\r\n\t\t\t\t\t\t\t\t// There is a new service worker available, show the notification\r\n\t\t\t\t\t\t\t\tif (navigator.serviceWorker.controller) {\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tvar header = document.getElementsByTagName('header')[0];\r\n\r\n\t\tif (this.IsLight) {\r\n\t\t\theader.classList.add('cl-light-theme');\r\n\t\t} else {\r\n\t\t\theader.classList.add('cl-dark-theme');\r\n\t\t}\r\n\r\n\t\tvar host = GetHostUrl(window.location.hostname);\r\n\r\n\t\tif (host.indexOf('anhour.io') >= 0) {\r\n\t\t\tthis.WhichSite = 'www.anhour.io';\r\n\t\t} else {\r\n\t\t\tthis.WhichSite = 'www.cadlearning.com';\r\n\t\t}\r\n\r\n\t\tthis.UserService.AuthenticationChanged.subscribe((user: User) => {\r\n\t\t\tthis.authChanged(user);\r\n\t\t});\r\n\t\tif (this.UserService.IsAuthenticationReady) this.authChanged(this.UserService.User);\r\n\t}\r\n\r\n\tasync ngAfterContentChecked() {\r\n\t\tthis.IsContentCreator = this.User && this.User.IsInRole(Roles.OrgContentCreator, Roles.CADAdmin);\r\n\t\tthis.SelectedLanguage = this.User?.LanguageCode ?? localStorage?.getItem('SelectedLanguage') ?? 'EN';\r\n\r\n\t\tif (this.AcceptedCookie === null) {\r\n\t\t\tthis.ShowCookieConsent = true;\r\n\t\t} else {\r\n\t\t\tthis.AcceptedCookie = JSON.parse(this.UserService.GetCookie('cl_acceptedcookie'));\r\n\r\n\t\t\tif (!this.AcceptedCookie.accepted) {\r\n\t\t\t\tthis.ShowCookieConsent = true;\r\n\t\t\t} else {\r\n\t\t\t\tthis.ShowCookieConsent = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.SetLanguageList();\r\n\t\t//this.translate.use(this.SelectedLanguage);\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tif (this.subQuickSearch) this.subQuickSearch.unsubscribe();\r\n\t}\r\n\r\n\tprivate async authChanged(user?: User) {\r\n\t\ttry {\r\n\t\t\tthis.SelectedLanguage = this.User?.LanguageCode ?? localStorage.getItem('SelectedLanguage') ?? 'EN';\r\n\r\n\t\t\tthis.SetLanguageList();\r\n\r\n\t\t\tthis.UserService.CommandNotifications = this.PluginCommandNotifications;\r\n\r\n\t\t\tthis.ShowProjectsMenu = false;\r\n\t\t\tif (this.User) {\r\n\t\t\t\t//check if logged in\r\n\t\t\t\tthis.translate.use(this.User.LanguageCode);\r\n\r\n\t\t\t\tthis.IsPreHire = this.User.IsInRole(Roles.PreHire);\r\n\r\n\t\t\t\tconst userInfo = await this.userClient.Get(this.User.Id);\r\n\t\t\t\tthis.AvailableForEscallation = userInfo.AvailableForEscallation;\r\n\r\n\t\t\t\tthis.ShowProjectsMenu =\r\n\t\t\t\t\tthis.User.IsInRole(Roles.CADAdmin) ||\r\n\t\t\t\t\t(this.User.OrganizationId !== ROOT_COMPANY_ID && this.User.IsInRole(Roles.OrgAdmin)); //if is a partner, do NOT show the menu\r\n\r\n\t\t\t\tthis.ShowReportsMenu = this.User.IsInRole(Roles.Reporting);\r\n\r\n\t\t\t\tthis.IsPartnerOrg = await this.orgClient.IsPartnerOrganization(this.User.OrganizationId);\r\n\t\t\t\tthis.IsCADSupport = this.User && this.User.IsInRole(Roles.CADAdmin, Roles.CADSupport, Roles.CADSupportManager);\r\n\t\t\t} else {\r\n\t\t\t\tthis.IsPreHire = false;\r\n\t\t\t\tthis.AvailableForEscallation = false;\r\n\t\t\t\tthis.IsPartnerOrg = false;\r\n\t\t\t\tthis.IsCADSupport = false;\r\n\t\t\t}\r\n\r\n\t\t\tthis.AcceptedCookie = this.UserService.GetCookie('cl_acceptedcookie');\r\n\t\t\tif (this.AcceptedCookie === null && !this.IsApp) {\r\n\t\t\t\tthis.ShowCookieConsent = true;\r\n\t\t\t} else {\r\n\t\t\t\tif ((!this.AcceptedCookie || !this.AcceptedCookie.accepted) && !this.IsApp) {\r\n\t\t\t\t\tthis.ShowCookieConsent = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.ShowCookieConsent = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.User?.OrganizationGroupLogo) this.LogoUrl = this.User.OrganizationGroupLogo;\r\n\r\n\t\t\tthis.setupNotifications();\r\n\t\t} finally {\r\n\t\t\tthis.IsLoaded = true;\r\n\r\n\t\t\tawait this.TranslatePage();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic Login() {\r\n\t\tlet redirectUrl = DEFAULT_LOGIN_REDIRECT_PATH;\r\n\t\tif (this.location.path().indexOf('/lesson/') > -1) {\r\n\t\t\tredirectUrl = this.location.path(true);\r\n\t\t} else if (this.location.path().indexOf('/product/') > -1) {\r\n\t\t\tredirectUrl = this.location.path(true);\r\n\t\t}\r\n\t\tthis.UserService.Login(redirectUrl);\r\n\t}\r\n\r\n\tpublic Logout() {\r\n\t\tthis.UserService.Logout();\r\n\t}\r\n\r\n\tpublic async SelectLanguage(language?: KeyValuePair) {\r\n\t\tthis.zone.run(() => {\r\n\t\t\tfor (let j = 0; j <= 99; j++) {\r\n\t\t\t\tthis.MenusVisible[j] = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.User) {\r\n\t\t\tawait this.UserService.SetLanguage(language.value);\r\n\t\t} else {\r\n\t\t\tlocalStorage.setItem('SelectedLanguage', language.value);\r\n\t\t\tlocation.reload();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic SearchClicked($event: Event) {\r\n\t\t$event.preventDefault();\r\n\r\n\t\tthis.zone.run(() => {\r\n\t\t\tfor (let j = 0; j <= 99; j++) {\r\n\t\t\t\tthis.MenusVisible[j] = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.ShowQuickSearch = this.SearchForm.controls.SearchPhrase.value && this.SearchForm.controls.SearchPhrase.value.length > 2;\r\n\t}\r\n\tpublic SearchFocused() {\r\n\t\tthis.zone.run(() => {\r\n\t\t\tfor (let j = 0; j <= 99; j++) {\r\n\t\t\t\tthis.MenusVisible[j] = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.ShowQuickSearch = this.SearchForm.controls.SearchPhrase.value && this.SearchForm.controls.SearchPhrase.value.length > 2;\r\n\t}\r\n\r\n\tpublic ToggleMenuVisible(position: number, $event: Event) {\r\n\t\tthis.ShowMenu = false;\r\n\t\tfor (let j = 0; j <= 99; j++) {\r\n\t\t\tif (j !== position) {\r\n\t\t\t\tthis.MenusVisible[j] = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.MenusVisible[j] = !this.MenusVisible[j];\r\n\t\t\t}\r\n\t\t}\r\n\t\t$event.preventDefault();\r\n\t}\r\n\r\n\tpublic FirstName() {\r\n\t\tif (!this.User) return null;\r\n\r\n\t\treturn this.User.FirstName;\r\n\t}\r\n\r\n\tpublic async Search(event: Event) {\r\n\t\tif (this.subQuickSearch) this.subQuickSearch.unsubscribe();\r\n\r\n\t\tif (!this.SearchForm.controls.SearchPhrase.value) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tawait this.confirm.alert('Please enter search criteria first.');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.ShowQuickSearch = false;\r\n\r\n\t\tthis.router.navigate(['./search/' + encodeURIComponent(this.SearchForm.controls.SearchPhrase.value)]);\r\n\t\tthis.SearchForm.controls.SearchPhrase.setValue('');\r\n\t}\r\n\r\n\tpublic TogglePlayList($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.ShowPlayList = !this.ShowPlayList;\r\n\t}\r\n\r\n\tpublic ToggleQ($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.ShowQMenu = !this.ShowQMenu;\r\n\t}\r\n\r\n\tpublic ToggleExpert($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.ShowExpertMenu = !this.ShowExpertMenu;\r\n\t}\r\n\r\n\tpublic ToggleCustomCourses($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.ShowCustomCourses = !this.ShowCustomCourses;\r\n\t}\r\n\r\n\tpublic ToggleYourPath($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.ShowYourPath = !this.ShowYourPath;\r\n\t}\r\n\r\n\tpublic TogglePluginMenu($event: Event) {\r\n\t\t$event.preventDefault();\r\n\t\tthis.ShowPluginMenu = !this.ShowPluginMenu;\r\n\t}\r\n\r\n\tpublic ClosePlayList() {\r\n\t\tthis.ShowPlayList = false;\r\n\t}\r\n\r\n\tpublic CloseCustomContent() {\r\n\t\tthis.ShowCustomCourses = false;\r\n\t}\r\n\r\n\tpublic ClosePluginMenu(detach: boolean) {\r\n\t\tthis.ShowPluginMenu = false;\r\n\t\tthis.ShowPluginWindow = detach;\r\n\t}\r\n\r\n\tpublic CloseYourPathMenu() {\r\n\t\tthis.ShowYourPath = false;\r\n\t}\r\n\r\n\tpublic CloseQMenu() {\r\n\t\tthis.ShowQMenu = false;\r\n\t}\r\n\r\n\tpublic CloseExpertMenu() {\r\n\t\tthis.ShowExpertMenu = false;\r\n\t}\r\n\r\n\tpublic ClosePluginWindow() {\r\n\t\tthis.ShowPluginWindow = false;\r\n\t}\r\n\r\n\tpublic CloseCookieConsent() {\r\n\t\tthis.ShowCookieConsent = false;\r\n\t\tthis.AcceptedCookie = {\r\n\t\t\taccepted: true,\r\n\t\t\tdate: new Date(),\r\n\t\t};\r\n\r\n\t\tthis.UserService.SetCookie('cl_acceptedcookie', JSON.stringify(this.AcceptedCookie), 30);\r\n\t}\r\n\r\n\tpublic GetNavDisplay() {\r\n\t\tif (typeof window === 'undefined' || window.document.body.scrollWidth >= 1200) {\r\n\t\t\treturn 'flex !important';\r\n\t\t} else {\r\n\t\t\tif (this.ShowMenu) {\r\n\t\t\t\treturn 'block';\r\n\t\t\t} else {\r\n\t\t\t\treturn 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic ToggleDisplay() {\r\n\t\tthis.ShowMenu = !this.ShowMenu;\r\n\t}\r\n\r\n\tprivate SetLanguageList() {\r\n\t\tswitch (location.hostname.toLowerCase()) {\r\n\t\t\tcase 'demoportal.cadlearning.com':\r\n\t\t\tcase 'localhost':\r\n\t\t\t\tthis.Languages = GetLanguages();\r\n\t\t\t\tthis.ShowLanguage = true;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tif (this.User == null || this.User.HasLanguages == null) {\r\n\t\t\t\t\tthis.ShowLanguage = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst langs = GetLanguages();\r\n\t\t\t\tthis.Languages = langs.filter((l) => this.User.HasLanguages.some((ol) => ol.toLowerCase() === l.value.toLowerCase()));\r\n\t\t\t\tthis.ShowLanguage = this.Languages.some((l) => l.value !== 'EN');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate IsClassPresent(el: HTMLElement, className: string) {\r\n\t\tif (!el || el.className === null || el.className === undefined || el.className instanceof SVGAnimatedString) return false;\r\n\r\n\t\tconst classes = el.className.toLowerCase().split(' ');\r\n\t\tif (classes.indexOf(className.toLowerCase()) >= 0) return true;\r\n\r\n\t\tif (el.parentElement == null) return false;\r\n\r\n\t\treturn this.IsClassPresent(el.parentElement, className);\r\n\t}\r\n\r\n\tprivate subscriptions: Subscription[] = [];\r\n\r\n\tprivate initNotifications() {\r\n\t\tthis.signalr.CloseConnections();\r\n\t\tthis.subscriptions\r\n\t\t\t.filter((s) => s !== null)\r\n\t\t\t.forEach((s) => {\r\n\t\t\t\ts.unsubscribe();\r\n\t\t\t\ts = null;\r\n\t\t\t});\r\n\t\tthis.subscriptions = [];\r\n\r\n\t\tconst self = this;\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.signalr.SystemBroadcast.subscribe(async (next: NotificationDto) => {\r\n\t\t\t\tawait self.notify(next, NotificationAreas.User);\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.signalr.OrganizationBroadcast.subscribe(async (next: NotificationDto) => {\r\n\t\t\t\tawait self.notify(next, NotificationAreas.Organization);\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.signalr.PartnerBroadcast.subscribe(async (next: NotificationDto) => {\r\n\t\t\t\tawait self.notify(next, NotificationAreas.Partner);\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.signalr.UserBroadcast.subscribe(async (next: NotificationDto) => {\r\n\t\t\t\tawait self.notify(next, NotificationAreas.User);\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.signalr.PluginBroadcast.subscribe(async (next: any) => {\r\n\t\t\t\tif (next.Title) {\r\n\t\t\t\t\tawait self.notify(next, NotificationAreas.Plugin);\r\n\t\t\t\t} else if (next.Lessons) {\r\n\t\t\t\t\tawait self.notifyPlugin(next);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.signalr.QBroadcast.subscribe(async (next: QMessageDto) => {\r\n\t\t\t\tif (!document.hasFocus()) {\r\n\t\t\t\t\t//Check if the q tab is open. If it is, pass to the q tab, if not, notify\r\n\t\t\t\t\tawait self.notify(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tImageUrl: null,\r\n\t\t\t\t\t\t\tMessage: this.html2text(next.Message),\r\n\t\t\t\t\t\t\tMessageType: NotificationMessageTypes.Informational,\r\n\t\t\t\t\t\t\tTitle: 'Message Received',\r\n\t\t\t\t\t\t\tUrl: null,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tNotificationAreas.Q\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.signalr.QExpertBroadcast.subscribe((message: QMessageDto) => {\r\n\t\t\t\tif (message.Type === QMessageTypes.EscallationExpertRequest || !document.hasFocus()) {\r\n\t\t\t\t\t//Check if the expert tab is open. If it is, pass to the expert tab, if not, notify\r\n\t\t\t\t\tself.notify(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tImageUrl: null,\r\n\t\t\t\t\t\t\tMessage: this.html2text(message.Message),\r\n\t\t\t\t\t\t\tMessageType: NotificationMessageTypes.Informational,\r\n\t\t\t\t\t\t\tTitle: 'Message Received',\r\n\t\t\t\t\t\t\tUrl: null,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tNotificationAreas.Expert\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.signalr.StartConnection();\r\n\t}\r\n\r\n\tprivate disconnectNotifications() {\r\n\t\tthis.signalr.CloseConnections();\r\n\t}\r\n\r\n\tprivate async notifyPlugin(message: CommandNotificationDto) {\r\n\t\tif (message) {\r\n\t\t\tthis.PluginCommandNotifications.splice(0, this.PluginCommandNotifications.length);\r\n\t\t\tthis.PluginCommandNotifications.unshift(message);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate html2text(html) {\r\n\t\tlet d = document.createElement('div');\r\n\t\td.innerHTML = html;\r\n\t\treturn d.textContent || d.innerText || '';\r\n\t}\r\n\r\n\tprivate async notify(message: NotificationDto, area: NotificationAreas, timeout?: number) {\r\n\t\tif (typeof Notification === 'undefined' || (Notification).permission === 'denied') {\r\n\t\t\t// alert(message.Message);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ((Notification).permission !== 'granted') {\r\n\t\t\ttry {\r\n\t\t\t\tawait Notification.requestPermission();\r\n\t\t\t} catch (err) {\r\n\t\t\t\talert(message.Message);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst self = this;\r\n\r\n\t\tconst notification = new Notification(message.Title, {\r\n\t\t\tbody: message.Message,\r\n\t\t\tlang: 'en',\r\n\t\t\ttag: message.Url ? message.Url.replace('www.cadlearning.com', location.host) : location.host,\r\n\t\t\ticon: message.ImageUrl\r\n\t\t\t\t? message.ImageUrl\r\n\t\t\t\t: message.MessageType === NotificationMessageTypes.Informational\r\n\t\t\t\t? '/img/information.png'\r\n\t\t\t\t: message.MessageType === NotificationMessageTypes.Error\r\n\t\t\t\t? '/img/error.png'\r\n\t\t\t\t: message.MessageType === NotificationMessageTypes.Warning\r\n\t\t\t\t? '/img/warning.png'\r\n\t\t\t\t: null, // Add the other variations here\r\n\t\t});\r\n\r\n\t\t// Add the notification to the right area here based on the area\r\n\t\tswitch (area) {\r\n\t\t\tcase NotificationAreas.Organization:\r\n\t\t\t\tif (!this.IsNotificationDuplicate(this.OrganizationNotifications, message)) this.OrganizationNotifications.unshift(message);\r\n\t\t\t\tbreak;\r\n\t\t\tcase NotificationAreas.Partner:\r\n\t\t\t\tif (!this.IsNotificationDuplicate(this.PartnerNotifications, message)) this.PartnerNotifications.unshift(message);\r\n\t\t\t\tbreak;\r\n\t\t\tcase NotificationAreas.Plugin:\r\n\t\t\t\tif (!this.IsNotificationDuplicate(this.PluginNotifications, message)) this.PluginNotifications.unshift(message);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tif (!this.IsNotificationDuplicate(this.UserNotifications, message)) this.UserNotifications.unshift(message);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (message.Url) {\r\n\t\t\tnotification.onclick = () => {\r\n\t\t\t\tlet url = message.Url;\r\n\t\t\t\turl = url.replace('https://', '');\r\n\t\t\t\tif (url.indexOf('/') > 0) url = url.substr(url.indexOf('/'));\r\n\t\t\t\t// Redirect here because they've clicked the url\r\n\t\t\t\tself.router.navigateByUrl(url);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (timeout) setTimeout(notification.close.bind(notification), timeout);\r\n\t}\r\n\r\n\tprivate IsNotificationDuplicate(notifications: NotificationDto[], message: NotificationDto) {\r\n\t\tconst dupe = notifications.some((m) => {\r\n\t\t\treturn (\r\n\t\t\t\tm.ImageUrl === message.ImageUrl &&\r\n\t\t\t\tm.Message === message.Message &&\r\n\t\t\t\tm.MessageType === message.MessageType &&\r\n\t\t\t\tm.Title === message.Title &&\r\n\t\t\t\tm.Url === message.Url\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn dupe;\r\n\t}\r\n\r\n\tprivate setupNotifications() {\r\n\t\ttry {\r\n\t\t\tthis.disconnectNotifications();\r\n\t\t\tthis.initNotifications();\r\n\t\t\tif (this.User) {\r\n\t\t\t\tthis.userClient.CheckForNotifications();\r\n\t\t\t\tthis.UserService.CommandNotifications = this.PluginCommandNotifications;\r\n\t\t\t} else {\r\n\t\t\t\tthis.UserService.CommandNotifications = null;\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error(e);\r\n\t\t}\r\n\t}\r\n}\r\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { APP_INITIALIZER, NgModule } from '@angular/core';\r\nimport {\r\n\tapiUrl,\r\n\tAUTH_CONFIG_ID,\r\n\tCLIENT_ID,\r\n\tDEFAULT_LOGIN_REDIRECT_PATH,\r\n\tFORBIDDEN_PATH,\r\n\tLOGOUT_PATH,\r\n\tUNAUTHORIZED_PATH\r\n} from '@app/constants';\r\nimport { AbstractSecurityStorage, AuthInterceptor, AuthModule, EventTypes, LogLevel, PublicEventsService } from 'angular-auth-oidc-client';\r\nimport { BaseUserService, DefaultLocalStorage } from 'cadlearning.angular';\r\nimport { first } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { UserService } from './user.service';\r\n\r\n@NgModule({\r\n\timports: [\r\n\t\tAuthModule.forRoot({\r\n\t\t\tconfig: {\r\n\t\t\t\tauthority: apiUrl(),\r\n\t\t\t\tconfigId: AUTH_CONFIG_ID,\r\n\t\t\t\tredirectUrl: window.location.origin,\r\n\t\t\t\tpostLogoutRedirectUri: LOGOUT_PATH,\r\n\t\t\t\tpostLoginRoute: DEFAULT_LOGIN_REDIRECT_PATH,\r\n\t\t\t\tclientId: CLIENT_ID,\r\n\t\t\t\tscope: 'openid profile email offline_access',\r\n\t\t\t\tresponseType: 'code',\r\n\t\t\t\tsilentRenew: true,\r\n\t\t\t\tuseRefreshToken: true,\r\n\t\t\t\tsecureRoutes: [apiUrl()],\r\n\t\t\t\tlogLevel: environment.production ? LogLevel.Error : LogLevel.Debug,\r\n\t\t\t\tautoUserInfo: false,\r\n\t\t\t\tforbiddenRoute: FORBIDDEN_PATH,\r\n\t\t\t\tautoCleanStateAfterAuthentication: true,\r\n\t\t\t\tignoreNonceAfterRefresh: true,\r\n\t\t\t\ttriggerAuthorizationResultEvent: true,\r\n\t\t\t\tmaxIdTokenIatOffsetAllowedInSeconds: 600,\r\n\t\t\t\tunauthorizedRoute: UNAUTHORIZED_PATH,\r\n\t\t\t\trenewTimeBeforeTokenExpiresInSeconds: 20,\r\n\t\t\t\tngswBypass: true,\r\n\t\t\t\trenewUserInfoAfterTokenRenew: true,\r\n\t\t\t},\r\n\t\t}),\r\n\t],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: BaseUserService,\r\n\t\t\tuseExisting: UserService,\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: HTTP_INTERCEPTORS,\r\n\t\t\tuseClass: AuthInterceptor,\r\n\t\t\tmulti: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: AbstractSecurityStorage,\r\n\t\t\tuseClass: DefaultLocalStorage,\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: APP_INITIALIZER,\r\n\t\t\tuseFactory: (userService: UserService) => () => AuthConfigModule.Setup(userService),\r\n\t\t\tdeps: [UserService],\r\n\t\t\tmulti: true,\r\n\t\t},\r\n\t],\r\n\texports: [AuthModule],\r\n})\r\nexport class AuthConfigModule {\r\n\tconstructor(private eventService: PublicEventsService, userService: UserService) {\r\n\t\tthis.eventService\r\n\t\t\t.registerForEvents()\r\n\t\t\t.pipe(first((notification) => notification.type === EventTypes.ConfigLoaded))\r\n\t\t\t.subscribe((config) => {\r\n\t\t\t\tconsole.log('ConfigLoaded', config);\r\n\t\t\t});\r\n\r\n\t\t// this.eventService\r\n\t\t// \t.registerForEvents()\r\n\t\t// \t.pipe(first((notification) => notification.type === EventTypes.TokenExpired))\r\n\t\t// \t.subscribe((config) => {\r\n\t\t// \t\tconsole.log('Token Expired', config);\r\n\t\t// \t});\r\n\r\n\t\t// this.eventService\r\n\t\t// \t.registerForEvents()\r\n\t\t// \t.pipe(first((notification) => notification.type === EventTypes.SilentRenewStarted))\r\n\t\t// \t.subscribe((config) => {\r\n\t\t// \t\tconsole.log('Silent Renew Started', config);\r\n\t\t// \t});\r\n\t}\r\n\r\n\tstatic Setup(userService: UserService) {\r\n\t\tuserService.Init();\r\n\t}\r\n}\r\n","import { Component, Injectable, Injector, OnInit } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { DEFAULT_LOGIN_REDIRECT_PATH } from '@app/constants';\r\nimport { BaseComponent } from 'cadlearning.angular';\r\n\r\n@Component({\r\n\tselector: 'accept-terms',\r\n\ttemplateUrl: './acceptterms.component.html',\r\n\tstyleUrls: ['./acceptterms.component.scss'],\r\n})\r\n@Injectable()\r\nexport class AcceptTermsComponent extends BaseComponent implements OnInit {\r\n\tpublic Accepting: boolean = false;\r\n\tpublic ReturnUrl: string = null;\r\n\r\n\tconstructor(private titleService: Title, private metaService: Meta, private router: Router, injector: Injector) {\r\n\t\tsuper(injector);\r\n\t}\r\n\r\n\tasync ngOnInit() {\r\n\t\tthis.titleService.setTitle('CADLearning - Accept Terms of Service');\r\n\t\tthis.metaService.updateTag({ name: 'description', content: '' });\r\n\t\tthis.metaService.updateTag({ name: 'keywords', content: '' });\r\n\t}\r\n\r\n\tpublic async Accept() {\r\n\t\tthis.Accepting = true;\r\n\r\n\t\tthis.ReturnUrl = this.Route.snapshot.queryParams.rurl;\r\n\t\ttry {\r\n\t\t\tawait this.UserService.AcceptTerms();\r\n\r\n\t\t\tif (!this.ReturnUrl) {\r\n\t\t\t\tthis.router.navigate([DEFAULT_LOGIN_REDIRECT_PATH]);\r\n\t\t\t} else {\r\n\t\t\t\tthis.Route.snapshot.queryParams.rurl = null;\r\n\t\t\t\tthis.router.navigateByUrl(decodeURIComponent(this.ReturnUrl));\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tthis.Accepting = false;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async close(status) {\r\n\t\tif (status === 'accept') {\r\n\t\t\tawait this.Accept();\r\n\t\t}\r\n\t}\r\n}\r\n","\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\r\nimport { AcceptTermsComponent } from '@app/account/acceptterms/acceptterms.component';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { DialogCloseResult, DialogService } from '@progress/kendo-angular-dialog';\r\nimport { UsersV1Client } from 'cadlearning.angular';\r\n\r\n@Injectable()\r\nexport class AcceptTermsGuard implements CanActivate {\r\n\tconstructor(private router: Router, private dialogService: DialogService, private userService: UserService, private userClient: UsersV1Client) { }\r\n\r\n\tpublic async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n\t\tconsole.log(route + '' + state);\r\n\t\tconsole.log('AuthorizationGuard, canActivate');\r\n\r\n\t\tconst isAuthorized = this.userService.User != null;\r\n\r\n\t\tconsole.log('AuthorizationGuard, canActivate isAuthorized: ' + isAuthorized);\r\n\r\n\t\tif (!isAuthorized) return true;\r\n\r\n\t\t//console.log('Has Accepted Terms', this.userService.User.HasAcceptedTerms);\r\n\t\t//let isAccepted = await this.userClient.HasAcceptedTerms();\r\n\t\t//console.log('Has Accepted Terms 2', isAccepted);\r\n\t\tif (this.userService.User.HasAcceptedTerms)\r\n\t\t\t//if (isAccepted.AcceptedTerms)\r\n\t\t\t//This should be all inclusive and return true if any of the criteria are not met.\r\n\t\t\treturn true;\r\n\r\n\t\tconst width = Math.min(920, window.innerWidth - 100);\r\n\t\tconst height = Math.min(600, window.innerHeight - 100);\r\n\r\n\t\tconst windowRef = this.dialogService.open({\r\n\t\t\ttitle: 'Accept Terms of Service',\r\n\t\t\tcontent: AcceptTermsComponent,\r\n\t\t\twidth: width,\r\n\t\t\theight: height,\r\n\t\t\tactions: [{ text: 'Accept', primary: true }, { text: 'Reject' }],\r\n\t\t\tminWidth: width,\r\n\t\t});\r\n\r\n\t\tlet promise = new Promise((resolve, reject) => {\r\n\t\t\twindowRef.result.subscribe(async (result: any) => {\r\n\t\t\t\tif (result instanceof DialogCloseResult || result.text !== 'Accept') {\r\n\t\t\t\t\tawait this.userService.Logout();\r\n\t\t\t\t\tthis.router.navigateByUrl('/');\r\n\t\t\t\t\tresolve(false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tawait this.userService.AcceptTerms();\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn promise;\r\n\t}\r\n}\r\n","import { Location } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ErrorHandler, Inject, Injectable, Injector } from '@angular/core';\r\nimport { UserService } from '@app/authentication/user.service';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { ConfirmService, IProblemDetails } from 'cadlearning.angular';\r\nimport { APP_INSIGHTS } from '../constants';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n\tdeps: [Location, ConfirmService, APP_INSIGHTS, Injector],\r\n})\r\nexport class ErrorHandlerService implements ErrorHandler {\r\n\tconstructor(\r\n\t\tprivate confirm: ConfirmService,\r\n\t\t@Inject(APP_INSIGHTS) private appInsights: ApplicationInsights,\r\n\t\tprivate injector: Injector\r\n\t) { }\r\n\r\n\tpublic async handleError(error: any) {\r\n\t\tif (error instanceof Error) {\r\n\t\t\tconst detail = error as Error;\r\n\t\t\treturn this.handleProblemDetails({\r\n\t\t\t\tdetail: detail.stack,\r\n\t\t\t\ttitle: detail.message,\r\n\t\t\t\tinstance: detail.name,\r\n\t\t\t\ttype: 'Error',\r\n\t\t\t\tstatus: -1,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (error instanceof HttpErrorResponse) {\r\n\t\t\tif (error.status === 401) return this.forceRelogin();\r\n\r\n\t\t\tlet detail: IProblemDetails;\r\n\t\t\tif (error.error instanceof ErrorEvent) {\r\n\t\t\t\tdetail = {\r\n\t\t\t\t\tdetail: error.error.message,\r\n\t\t\t\t\tinstance: error.url,\r\n\t\t\t\t\tstatus: error.status,\r\n\t\t\t\t\ttitle: error.statusText,\r\n\t\t\t\t\ttype: error.type.toString(),\r\n\t\t\t\t};\r\n\t\t\t} else if (error.error instanceof ProgressEvent) {\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\tdetail = {\r\n\t\t\t\t\tdetail: error.message,\r\n\t\t\t\t\tinstance: error.url,\r\n\t\t\t\t\tstatus: error.status,\r\n\t\t\t\t\ttitle: error.statusText,\r\n\t\t\t\t\ttype: error.type.toString(),\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn this.handleProblemDetails(detail);\r\n\t\t}\r\n\r\n\t\tif ('status' in error && 'title' in error) {\r\n\t\t\tconst detail = error as IProblemDetails;\r\n\t\t\treturn this.handleProblemDetails(detail);\r\n\t\t}\r\n\r\n\t\tif ('error' in error && 'description' in error) {\r\n\t\t\tconst openIdError = error as IOpenIdConnectError;\r\n\r\n\t\t\tif (openIdError.error.includes('Authorization has been denied for this request.')) return this.forceRelogin();\r\n\r\n\t\t\tconst detail = {\r\n\t\t\t\ttitle: openIdError.error,\r\n\t\t\t\tdetail: openIdError.description,\r\n\t\t\t\tinstance: openIdError.uri,\r\n\t\t\t\ttype: 'Open Id Connect Error',\r\n\t\t\t\tstatus: 400,\r\n\t\t\t} as IProblemDetails;\r\n\r\n\t\t\treturn this.handleProblemDetails(detail);\r\n\t\t}\r\n\r\n\t\tconst details = {\r\n\t\t\ttitle: 'Unknown Error',\r\n\t\t\tdetail: error,\r\n\t\t} as IProblemDetails;\r\n\r\n\t\treturn this.handleProblemDetails(details);\r\n\t}\r\n\r\n\tpublic async handleProblemDetails(details: IProblemDetails) {\r\n\t\ttry {\r\n\t\t\tconst error =\r\n\t\t\t\t`Title: ${details.title}\\nStatus:${details.status}\\nDetails: ${details.detail}\\nInstance: ${details.instance}\\nType:${details.type}` ||\r\n\t\t\t\t'Unknown Application Error';\r\n\t\t\tthis.appInsights.trackException({\r\n\t\t\t\texception: new Error(error),\r\n\t\t\t});\r\n\r\n\t\t\tconsole.error(error);\r\n\r\n\t\t\tif (typeof window !== 'undefined') return this.confirm.alert(details.detail ?? details.title, details.title);\r\n\t\t} catch {\r\n\t\t\talert(details.detail ?? details.title);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate forceRelogin() {\r\n\t\tif (!this.injector) return;\r\n\t\treturn this.injector.get(UserService).Login(window.location.pathname + window.location.search);\r\n\t}\r\n}\r\n\r\ninterface IOpenIdConnectError {\r\n\terror: string;\r\n\tdescription: string | null;\r\n\turi: string | null;\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { TranslateLoader } from '@ngx-translate/core';\r\nimport { of } from 'rxjs';\r\n\r\n@Component({\r\n\ttemplate: ''\r\n})\r\nexport class WebApiTranslationLoaderComponent implements TranslateLoader {\r\n\tconstructor() { }\r\n\tpublic getTranslation(lang: string, prefix: string = 'translations/'): any {\r\n\t\t/* This is actually just a dummy so the default http loader isn't trying to make requests to the /assets folder */\r\n\t\treturn of({});\r\n\t}\r\n}\r\n","declare var ga: any;\r\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\r\nimport { ErrorHandler, Inject, NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { BrowserModule, Title } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ServiceWorkerModule } from '@angular/service-worker';\r\nimport { SharedModule } from '@app/shared/shared.module';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\r\n// i18n support\r\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\r\nimport { ChartModule } from '@progress/kendo-angular-charts';\r\nimport { DialogModule, WindowModule } from '@progress/kendo-angular-dialog';\r\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\r\nimport { InputsModule } from '@progress/kendo-angular-inputs';\r\nimport { LayoutModule } from '@progress/kendo-angular-layout';\r\nimport { NotificationModule } from '@progress/kendo-angular-notification';\r\nimport { PopupModule } from '@progress/kendo-angular-popup';\r\nimport { SortableModule } from '@progress/kendo-angular-sortable';\r\nimport { TreeViewModule } from '@progress/kendo-angular-treeview';\r\nimport {\r\n\tAssessmentsV1Client,\r\n\tAzureModule,\r\n\tBadgesV1Client,\r\n\tBlogArticlesV1Client,\r\n\tBlogsV1Client,\r\n\tCampaignDripsV1Client,\r\n\tCampaignsV1Client,\r\n\tCLIENT_CONFIG,\r\n\tConfirmModule,\r\n\tCoursesV1Client,\r\n\tDisciplinesV1Client,\r\n\tDocumentsV1Client,\r\n\tDomainsV1Client,\r\n\tEntitlementsV1Client,\r\n\tIClientService,\r\n\tIndustriesV1Client,\r\n\tInventoryV1Client,\r\n\tInvoicesV1Client,\r\n\tLessonsV1Client,\r\n\tMedallionsV1Client,\r\n\tOfflineV1Client,\r\n\tOrganizationsV1Client,\r\n\tPaymentMethodsV1Client,\r\n\tPaymentProvidersV1Client,\r\n\tPlaylistsV1Client,\r\n\tPreferencesV1Client,\r\n\tPriceListRevisionsV1Client,\r\n\tPriceListsV1Client,\r\n\tProductCategoriesV1Client,\r\n\tProductsV1Client,\r\n\tProjectsV1Client,\r\n\tPublicVideosV1Client,\r\n\tQuestionsV1Client,\r\n\tReportsV1Client,\r\n\tResourcesV1Client,\r\n\tSalesTaxesV1Client,\r\n\tSearchV1Client,\r\n\tShippingMethodsV1Client,\r\n\tSupportV1Client,\r\n\tSystemV1Client,\r\n\tTokensV1Client,\r\n\tTopicsV1Client,\r\n\tUsersV1Client,\r\n\tWorkflowsV1Client\r\n} from 'cadlearning.angular';\r\nimport 'hammerjs';\r\nimport { PerfectScrollbarModule, PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { environment } from '../environments/environment';\r\nimport { AcceptTermsComponent } from './account/acceptterms/acceptterms.component';\r\nimport { AppComponent } from './app/app.component';\r\nimport { AuthConfigModule } from './authentication/auth-config.module';\r\nimport { API_URL, APP_INSIGHTS, CLIENT_ID, DEFAULT_PERFECT_SCROLLBAR_CONFIG } from './constants';\r\nimport { DialogsModule } from './dialogs/dialogs.module';\r\nimport { DirectivesModule } from './directives/directives.module';\r\nimport { AcceptTermsGuard } from './guards/AcceptTermsGuard';\r\nimport { CanActivatePartnerSalesGuard } from './guards/CanActivatePartnerSalesGuard';\r\nimport { CanActivateOrganizationAdminGuard } from './guards/CanActiviateOrganizationAdminGuard';\r\nimport { CanActivateOrganizationContentCreatorGuard } from './guards/CanActiviateOrganizationContentCreatorGuard';\r\nimport { CanActivateOrganizationGuard } from './guards/CanActiviateOrganizationGuard';\r\nimport { CanActivateOrganizationReportingGuard } from './guards/CanActiviateOrganizationReportingGuard';\r\nimport { CanActivatePartnerGuard } from './guards/CanActiviatePartnerGuard';\r\nimport { CanActivateUserGuard } from './guards/CanActiviateUserGuard';\r\nimport { CanActivateBotGuard, CanActivateProjectGuard } from './guards/OrganizationFeatureGuards';\r\nimport { BurnDownComponent } from './home/dialogs/burndown.component';\r\nimport { TermsOfServiceModule } from './legal/TermsOfService/TermsOfService.module';\r\nimport { ChatComponent } from './main/chat/chat.component';\r\nimport { ChatModule, ChatService } from './main/chat/chat.service';\r\nimport { CustomContentMenuComponent } from './main/custom/customcontent.component';\r\nimport { ExpertMenuComponent } from './main/expert/expert.component';\r\nimport { PlayListMenuComponent } from './main/playlist/playlist.component';\r\nimport { PluginMenuComponent } from './main/plugin/plugin.component';\r\nimport { QMenuComponent } from './main/q/q.component';\r\nimport { LibraryComponent } from './main/topmenu/library.component';\r\nimport { OrganizationsComponent } from './main/topmenu/organizations.component';\r\nimport { PartnersComponent } from './main/topmenu/partners.component';\r\nimport { ProjectsComponent } from './main/topmenu/projects.component';\r\nimport { ReportsComponent } from './main/topmenu/reports.component';\r\nimport { UsersComponent } from './main/topmenu/users.component';\r\nimport { YourPathComponent } from './main/yourpath/yourpath.component';\r\n//Pipes\r\nimport { PipesModule } from './pipes/pipes.module';\r\nimport { SchedulerComponent } from './reports/scheduler/scheduler.component';\r\nimport { ErrorHandlerService } from './Services/ErrorHandler.service';\r\nimport { SignalRModule, SignalRService } from './SignalR/SignalRService';\r\nimport { WebApiTranslationLoaderComponent } from './WebApiTranslationLoader.component';\r\n\r\n@NgModule({\r\n\tdeclarations: [\r\n\t\tYourPathComponent,\r\n\t\tAppComponent,\r\n\t\tLibraryComponent,\r\n\t\tPartnersComponent,\r\n\t\tOrganizationsComponent,\r\n\t\tUsersComponent,\r\n\t\tPlayListMenuComponent,\r\n\t\tCustomContentMenuComponent,\r\n\t\tPluginMenuComponent,\r\n\t\tQMenuComponent,\r\n\t\tExpertMenuComponent,\r\n\t\tChatComponent,\r\n\t\tWebApiTranslationLoaderComponent,\r\n\t\tProjectsComponent,\r\n\t\tAcceptTermsComponent,\r\n\t\tBurnDownComponent,\r\n\t\tSchedulerComponent,\r\n\t\tReportsComponent,\r\n\t],\r\n\timports: [\r\n\t\tBrowserModule,\r\n\t\tBrowserAnimationsModule,\r\n\t\tHttpClientModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tDialogModule,\r\n\t\tWindowModule,\r\n\t\tChartModule,\r\n\t\tConfirmModule.forRoot(),\r\n\t\tServiceWorkerModule.register('/ngsw-worker.js', {\r\n\t\t\tenabled: environment.production,\r\n\t\t}),\r\n\t\tSharedModule.forRoot(),\r\n\t\tNgbDropdownModule,\r\n\t\tAzureModule.forRoot(),\r\n\t\tDirectivesModule.forRoot(),\r\n\t\tPipesModule.forRoot(),\r\n\t\tDialogsModule.forRoot(),\r\n\t\tSortableModule,\r\n\t\tDropDownsModule,\r\n\t\tLayoutModule,\r\n\t\tButtonsModule,\r\n\t\tInputsModule,\r\n\t\tPopupModule,\r\n\t\tNotificationModule,\r\n\t\tTreeViewModule,\r\n\t\tSignalRModule.forRoot(),\r\n\t\tChatModule.forRoot(),\r\n\t\tQuillModule.forRoot(),\r\n\t\tPerfectScrollbarModule,\r\n\t\tTermsOfServiceModule,\r\n\t\t// i18n support\r\n\t\tTranslateModule.forRoot({\r\n\t\t\tloader: {\r\n\t\t\t\tprovide: TranslateLoader,\r\n\t\t\t\tuseClass: WebApiTranslationLoaderComponent,\r\n\t\t\t},\r\n\t\t}),\r\n\t\tAuthConfigModule,\r\n\t\tRouterModule.forRoot(\r\n\t\t\t[\r\n\t\t\t\t{ path: 'free30daytrial', redirectTo: '/account/trial' },\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'downloads',\r\n\t\t\t\t\tloadChildren: () => import('./downloads/downloads.module').then((m) => m.DownloadsModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'contact',\r\n\t\t\t\t\tloadChildren: () => import('./contact/contact.module').then((m) => m.ContactModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'legal',\r\n\t\t\t\t\tloadChildren: () => import('./legal/legal.module').then((m) => m.LegalModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'product',\r\n\t\t\t\t\tloadChildren: () => import('./product/product.module').then((m) => m.ProductModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'lesson',\r\n\t\t\t\t\tloadChildren: () => import('./lesson/lesson.module').then((m) => m.LessonModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'playback',\r\n\t\t\t\t\tloadChildren: () => import('./playback/playback.module').then((m) => m.PlaybackModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'search',\r\n\t\t\t\t\tloadChildren: () => import('./search/search.module').then((m) => m.SearchModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'account',\r\n\t\t\t\t\tloadChildren: () => import('./account/account.module').then((m) => m.AccountModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'user',\r\n\t\t\t\t\tloadChildren: () => import('./user/user.module').then((m) => m.UserModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard, CanActivateUserGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'organization',\r\n\t\t\t\t\tloadChildren: () => import('./organization/organization.module').then((m) => m.OrganizationModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard, CanActivateOrganizationGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'custom',\r\n\t\t\t\t\tloadChildren: () => import('./custom/custom.module').then((m) => m.CustomContentModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard, CanActivateOrganizationContentCreatorGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'partner',\r\n\t\t\t\t\tloadChildren: () => import('./partner/partner.module').then((m) => m.PartnerModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard, CanActivatePartnerSalesGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'reports',\r\n\t\t\t\t\tloadChildren: () => import('./reports/reports.module').then((m) => m.ReportsModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard, CanActivateOrganizationGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'assessments',\r\n\t\t\t\t\tloadChildren: () => import('./assessments/assessments.module').then((m) => m.AssessmentsModule),\r\n\t\t\t\t\tcanActivate: [CanActivateUserGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'support',\r\n\t\t\t\t\tloadChildren: () => import('./support/support.module').then((m) => m.SupportModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'about',\r\n\t\t\t\t\tloadChildren: () => import('./about/about.module').then((m) => m.AboutModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'projects',\r\n\t\t\t\t\tloadChildren: () => import('./projects/projects.module').then((m) => m.ProjectsModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard, CanActivateProjectGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'expert',\r\n\t\t\t\t\tloadChildren: () => import('./expert/expert.module').then((m) => m.ExpertModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'goals',\r\n\t\t\t\t\tloadChildren: () => import('./goals/goals.module').then((m) => m.GoalsModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'workflow',\r\n\t\t\t\t\tloadChildren: () => import('./workflow/workflow.module').then((m) => m.WorkflowModule),\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: '',\r\n\t\t\t\t\tpathMatch: 'full',\r\n\t\t\t\t\tloadChildren: () => import('./home/accounthome.module').then((m) => m.AccountHomeModule),\r\n\t\t\t\t\tcanActivate: [AcceptTermsGuard, CanActivateUserGuard],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'subscribe',\r\n\t\t\t\t\tredirectTo: 'account',\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tpath: 'eventtrial',\r\n\t\t\t\t\tredirectTo: '/account/trial?sku=CL-TRIAL-30DAY&partnerId=100982&orgid=100982&referralCode=1',\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\tanchorScrolling: 'enabled',\r\n\t\t\t\tonSameUrlNavigation: 'reload',\r\n\t\t\t\tscrollPositionRestoration: 'enabled',\r\n\t\t\t\tinitialNavigation: 'disabled',\r\n\t\t\t\tenableTracing: !environment.production,\r\n\t\t\t\trelativeLinkResolution: 'legacy',\r\n\t\t\t}\r\n\t\t),\r\n\t\tNotificationModule,\r\n\t],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: CLIENT_CONFIG,\r\n\t\t\tuseFactory: AppModule.GetClientConfig,\r\n\t\t\tdeps: [API_URL, ErrorHandlerService],\r\n\t\t\tmulti: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: PERFECT_SCROLLBAR_CONFIG,\r\n\t\t\tuseValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG,\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: ErrorHandler,\r\n\t\t\tuseExisting: ErrorHandlerService,\r\n\t\t},\r\n\t\tCanActivateOrganizationContentCreatorGuard,\r\n\t\tCanActivateOrganizationGuard,\r\n\t\tCanActivateOrganizationAdminGuard,\r\n\t\tCanActivateOrganizationReportingGuard,\r\n\t\tCanActivatePartnerGuard,\r\n\t\tCanActivatePartnerSalesGuard,\r\n\t\tCanActivateUserGuard,\r\n\t\tCanActivateBotGuard,\r\n\t\tCanActivateProjectGuard,\r\n\t\tAcceptTermsGuard,\r\n\t\tTranslateModule,\r\n\t\tChatService,\r\n\t\tSignalRService,\r\n\t\tAssessmentsV1Client,\r\n\t\tBadgesV1Client,\r\n\t\tBlogArticlesV1Client,\r\n\t\tBlogsV1Client,\r\n\t\tCampaignDripsV1Client,\r\n\t\tCampaignsV1Client,\r\n\t\tCoursesV1Client,\r\n\t\tDisciplinesV1Client,\r\n\t\tDocumentsV1Client,\r\n\t\tDomainsV1Client,\r\n\t\tEntitlementsV1Client,\r\n\t\tIndustriesV1Client,\r\n\t\tInventoryV1Client,\r\n\t\tInvoicesV1Client,\r\n\t\tLessonsV1Client,\r\n\t\tMedallionsV1Client,\r\n\t\tOfflineV1Client,\r\n\t\tOrganizationsV1Client,\r\n\t\tPaymentMethodsV1Client,\r\n\t\tPaymentProvidersV1Client,\r\n\t\tPlaylistsV1Client,\r\n\t\tPriceListRevisionsV1Client,\r\n\t\tPriceListsV1Client,\r\n\t\tProductCategoriesV1Client,\r\n\t\tProductsV1Client,\r\n\t\tProjectsV1Client,\r\n\t\tPublicVideosV1Client,\r\n\t\tPreferencesV1Client,\r\n\t\tQuestionsV1Client,\r\n\t\tReportsV1Client,\r\n\t\tResourcesV1Client,\r\n\t\tSalesTaxesV1Client,\r\n\t\tSearchV1Client,\r\n\t\tShippingMethodsV1Client,\r\n\t\tSupportV1Client,\r\n\t\tSystemV1Client,\r\n\t\tTokensV1Client,\r\n\t\tTopicsV1Client,\r\n\t\tUsersV1Client,\r\n\t\tWorkflowsV1Client,\r\n\t\tTitle,\r\n\t],\r\n\tbootstrap: [AppComponent],\r\n})\r\nexport class AppModule {\r\n\tconstructor(@Inject(APP_INSIGHTS) appInsights: ApplicationInsights) {\r\n\t\tappInsights.loadAppInsights();\r\n\t}\r\n\r\n\tstatic GetClientConfig(apiUrl: string, errorService: ErrorHandlerService): IClientService {\r\n\t\tconst result = {\r\n\t\t\tClientId: CLIENT_ID,\r\n\t\t\tServiceUrl: apiUrl,\r\n\t\t\tErrorService: errorService,\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tstatic CreateTranslateLoader(http: HttpClient, baseHref: string) {\r\n\t\t// Temporary Azure hack\r\n\t\tif (baseHref === null && typeof window !== 'undefined') baseHref = window.location.origin;\r\n\r\n\t\t// i18n files are in `wwwroot/assets/`\r\n\t\treturn new TranslateHttpLoader(http, `${baseHref}/assets/i18n/`, '.json');\r\n\t}\r\n}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { environment } from './environments/environment';\r\nimport { AppModule } from './app/app.module';\r\n\r\n//Lazy loading compatibility\r\n(window).browser = null;\r\n\r\nif (environment.production) enableProdMode();\r\n\r\nplatformBrowserDynamic()\r\n\t.bootstrapModule(AppModule)\r\n\t.catch(err => console.log(err));\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Directive, Optional, Input, Output, HostBinding, HostListener, isDevMode, Component, ContentChildren, NgModule, InjectionToken, Inject, forwardRef, ElementRef, ViewContainerRef, ContentChild, ViewChild } from '@angular/core';\nimport * as i8 from '@progress/kendo-angular-common';\nimport { isDocumentAvailable, Keys, isChanged, hasObservers, guid, EventsModule } from '@progress/kendo-angular-common';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { Subject, Subscription, fromEvent, merge } from 'rxjs';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { detectDesktopBrowser, detectMobileOS } from '@progress/kendo-common';\nimport * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i3 from '@progress/kendo-angular-popup';\nimport { PopupModule } from '@progress/kendo-angular-popup';\nimport { filter, take } from 'rxjs/operators';\nimport * as i4 from '@angular/animations';\nimport { sequence, query, style, stagger, animate } from '@angular/animations';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-buttons',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1650440722,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nconst resolvedPromise = Promise.resolve(null);\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst tick = (f) => (resolvedPromise.then(f));\n/**\n * @hidden\n */\nfunction isDocumentNode(container) {\n return container.nodeType === 9;\n}\n/**\n * @hidden\n */\nfunction closest(element, selector) {\n if (element.closest) {\n return element.closest(selector);\n }\n const matches = Element.prototype.matches ?\n (el, sel) => el.matches(sel)\n : (el, sel) => el.msMatchesSelector(sel);\n let node = element;\n while (node && !isDocumentNode(node)) {\n if (matches(node, selector)) {\n return node;\n }\n node = node.parentNode;\n }\n}\n/**\n * @hidden\n */\nconst replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\\{\\\\s*${name}\\\\s*\\}`, 'g'), value);\n/**\n * @hidden\n */\nconst SIZES = {\n small: 'sm',\n medium: 'md',\n large: 'lg'\n};\nconst ROUNDNESS = {\n small: 'sm',\n medium: 'md',\n large: 'lg',\n full: 'full'\n};\n/**\n * @hidden\n *\n * Returns the styling classes to be added and removed\n */\nconst getStylingClasses = (componentType, stylingOption, previousValue, newValue) => {\n switch (stylingOption) {\n case 'size':\n return {\n toRemove: `k-${componentType}-${SIZES[previousValue]}`,\n toAdd: newValue !== 'none' ? `k-${componentType}-${SIZES[newValue]}` : ''\n };\n case 'rounded':\n return {\n toRemove: `k-rounded-${ROUNDNESS[previousValue]}`,\n toAdd: newValue !== 'none' ? `k-rounded-${ROUNDNESS[newValue]}` : ''\n };\n case 'fillMode':\n return {\n toRemove: `k-${componentType}-${previousValue}`,\n toAdd: newValue !== 'none' ? `k-${componentType}-${newValue}` : ''\n };\n default:\n break;\n }\n};\n/**\n * @hidden\n *\n * Returns the themeColor classes to be added and removed\n */\nconst getThemeColorClasses = (componentType, prevFillMode, fillMode, previousValue, newValue) => {\n return {\n toRemove: `k-${componentType}-${prevFillMode}-${previousValue}`,\n toAdd: newValue !== 'none' ? `k-${componentType}-${fillMode}-${newValue}` : ''\n };\n};\n/**\n * @hidden\n *\n * Returns true if the used browser is Firefox.\n */\nconst isFirefox = (userAgent) => {\n const desktopBrowser = detectDesktopBrowser(userAgent);\n const mobileOS = detectMobileOS(userAgent);\n return (desktopBrowser && desktopBrowser.mozilla) || (mobileOS && mobileOS.browser === 'firefox');\n};\n\n/**\n * @hidden\n */\nclass KendoButtonService {\n constructor() {\n this.buttonClicked = new Subject();\n this.buttonClicked$ = this.buttonClicked.asObservable();\n }\n click(button) {\n this.buttonClicked.next(button);\n }\n}\nKendoButtonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: KendoButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nKendoButtonService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: KendoButtonService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: KendoButtonService, decorators: [{\n type: Injectable\n }] });\n\nconst SPAN_TAG_NAME = 'SPAN';\nconst DEFAULT_ROUNDED$2 = 'medium';\nconst DEFAULT_SIZE$1 = 'medium';\nconst DEFAULT_THEME_COLOR$1 = 'base';\nconst DEFAULT_FILL_MODE$2 = 'solid';\n/**\n * Represents the Kendo UI Button component for Angular.\n */\nclass ButtonDirective {\n constructor(element, renderer, service, localization, ngZone) {\n this.service = service;\n this.ngZone = ngZone;\n /**\n * Provides visual styling that indicates if the Button is active.\n * By default, `toggleable` is set to `false`.\n */\n this.toggleable = false;\n /**\n * @hidden\n */\n this.role = 'button';\n /**\n * Fires each time the selected state of a toggleable button is changed.\n *\n * The event argument is the new selected state (boolean).\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks the button.\n */\n this.click = new EventEmitter();\n this.isDisabled = false;\n this.isIcon = false;\n this.isIconClass = false;\n this._size = DEFAULT_SIZE$1;\n this._rounded = DEFAULT_ROUNDED$2;\n this._fillMode = DEFAULT_FILL_MODE$2;\n this._themeColor = DEFAULT_THEME_COLOR$1;\n this._focused = false;\n this.subs = new Subscription();\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subs.add(localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));\n this.element = element.nativeElement;\n this.renderer = renderer;\n }\n /**\n * Backwards-compatible alias\n *\n * @hidden\n */\n get togglable() {\n return this.toggleable;\n }\n /**\n * @hidden\n */\n set togglable(value) {\n this.toggleable = value;\n }\n /**\n * Sets the selected state of the Button.\n */\n get selected() {\n return this._selected || false;\n }\n set selected(value) {\n this._selected = value;\n }\n /**\n * @hidden\n */\n set tabIndex(index) {\n this.element.tabIndex = index;\n }\n get tabIndex() {\n return this.element.tabIndex;\n }\n /**\n * Defines the name for an existing icon in a Kendo UI theme.\n * The icon is rendered inside the Button by a `span.k-icon` element.\n */\n set icon(icon) {\n if (icon) {\n this.iconSetter(icon, () => {\n this.isIcon = true;\n const classes = 'k-button-icon k-icon k-i-' + icon;\n this.addIcon(classes);\n });\n }\n else {\n this.isIcon = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a CSS class—or multiple classes separated by spaces—\n * which are applied to a `span` element inside the Button. Allows the usage of custom icons.\n */\n set iconClass(iconClassName) {\n if (iconClassName) {\n this.iconSetter(iconClassName, () => {\n this.isIconClass = true;\n const classes = 'k-button-icon ' + iconClassName;\n this.addIcon(classes);\n });\n }\n else {\n this.isIconClass = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a URL which is used for an `img` element inside the Button.\n * The URL can be relative or absolute. If relative, it is evaluated with relation to the web page URL.\n */\n set imageUrl(imageUrl) {\n if (imageUrl) {\n this.iconSetter(imageUrl, this.addImgIcon.bind(this));\n }\n else {\n this.removeImageNode();\n }\n }\n /**\n * If set to `true`, it disables the Button.\n */\n set disabled(disabled) {\n //Required, because in FF focused buttons are not blurred on disabled\n if (disabled && isDocumentAvailable() && isFirefox(navigator.userAgent)) {\n this.blur();\n }\n this.isDisabled = disabled;\n this.renderer.setProperty(this.element, 'disabled', disabled);\n }\n get disabled() {\n return this.isDisabled;\n }\n /**\n * The size property specifies the padding of the Button\n * ([see example]({% slug appearance_button %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$1;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the Button\n * ([see example]({% slug appearance_button %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$2;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the Button\n * ([see example]({% slug appearance_button %}#toc-fillMode)).\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `clear`\n * * `link`\n * * `none`\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$2;\n this.handleClasses(newFillMode, 'fillMode');\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * The Button allows you to specify predefined theme colors.\n * The theme color will be applied as a background and border color while also amending the text color accordingly\n * ([see example]({% slug appearance_button %}#toc-themeColor)).\n *\n * The possible values are:\n * * `base` (default)\n * * `primary`\n * * `secondary`\n * * `tertiary`\n * * `info`\n * * `success`\n * * `warning`\n * * `error`\n * * `dark`\n * * `light`\n * * `inverse`\n * * `none`\n */\n set themeColor(themeColor) {\n const newThemeColor = themeColor ? themeColor : DEFAULT_THEME_COLOR$1;\n this.handleThemeColor(newThemeColor);\n this._themeColor = newThemeColor;\n }\n get themeColor() {\n return this._themeColor;\n }\n set isFocused(isFocused) {\n this.toggleClass('k-focus', isFocused);\n this._focused = isFocused;\n }\n get isFocused() {\n return this._focused;\n }\n get classButton() {\n return true;\n }\n get isToggleable() {\n return this.toggleable;\n }\n get roleSetter() {\n return this.role;\n }\n get classDisabled() {\n return this.isDisabled;\n }\n get classActive() {\n return this.selected;\n }\n get getDirection() {\n return this.direction;\n }\n /**\n * @hidden\n */\n onFocus() {\n this.isFocused = true;\n }\n /**\n * @hidden\n */\n onBlur() {\n this.isFocused = false;\n }\n /**\n * @hidden\n */\n set primary(value) {\n this.themeColor = value ? 'primary' : 'base';\n }\n /**\n * @hidden\n */\n set look(value) {\n switch (value) {\n case 'default':\n this.fillMode = 'solid';\n break;\n default:\n this.fillMode = value;\n break;\n }\n }\n ngOnInit() {\n const isSpan = this.element.tagName === SPAN_TAG_NAME;\n this.addTextSpan();\n if (!this.element.hasAttribute('role') && this.togglable) {\n this.toggleAriaPressed(this.toggleable);\n }\n if (this.role) {\n this.setAttribute('role', this.role);\n }\n this.ngZone.runOutsideAngular(() => {\n this.subs.add(this.renderer.listen(this.element, 'click', this._onButtonClick.bind(this)));\n this.subs.add(this.renderer.listen(this.element, 'keydown', (event) => {\n const isSpaceOrEnter = event.keyCode === Keys.Space || event.keyCode === Keys.Enter;\n if (isSpan && isSpaceOrEnter) {\n this.click.emit(event);\n this._onButtonClick();\n }\n }));\n });\n }\n ngOnChanges(change) {\n if (isChanged('togglable', change) || isChanged('toggleable', change)) {\n this.toggleAriaPressed(this.toggleable);\n }\n }\n ngAfterViewInit() {\n const stylingOptions = ['size', 'rounded', 'fillMode'];\n stylingOptions.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n ngAfterViewChecked() {\n this.setIconTextClasses();\n }\n ngOnDestroy() {\n this.imageNode = null;\n this.iconNode = null;\n this.iconSpanNode = null;\n this.renderer = null;\n this.subs.unsubscribe();\n clearTimeout(this.deferTimeout);\n }\n /**\n * Focuses the Button component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.focus();\n this.isFocused = true;\n }\n }\n /**\n * Blurs the Button component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.blur();\n this.isFocused = false;\n }\n }\n /**\n * @hidden\n */\n setAttribute(attribute, value) {\n this.renderer.setAttribute(this.element, attribute, value);\n }\n /**\n * @hidden\n */\n removeAttribute(attribute) {\n this.renderer.removeAttribute(this.element, attribute);\n }\n /**\n * @hidden\n *\n * Internal setter that triggers selectedChange\n */\n setSelected(value) {\n const changed = this.selected !== value;\n this.selected = value;\n this.setAttribute('aria-pressed', this.selected.toString());\n this.toggleClass('k-selected', this.selected);\n if (changed && hasObservers(this.selectedChange)) {\n this.ngZone.run(() => {\n this.selectedChange.emit(value);\n });\n }\n }\n toggleAriaPressed(shouldSet) {\n if (!isDocumentAvailable()) {\n return;\n }\n if (shouldSet) {\n this.setAttribute('aria-pressed', this.selected.toString());\n }\n else {\n this.removeAttribute('aria-pressed');\n }\n }\n hasText() {\n return isDocumentAvailable() && this.element.textContent.trim().length > 0;\n }\n addImgIcon(imageUrl) {\n let renderer = this.renderer;\n if (!this.iconSpanNode) {\n this.iconSpanNode = renderer.createElement('span');\n renderer.setProperty(this.iconSpanNode, 'className', 'k-button-icon k-icon');\n }\n if (this.imageNode) {\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n }\n else if (isDocumentAvailable()) {\n this.imageNode = renderer.createElement('img');\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n renderer.setProperty(this.imageNode, 'className', 'k-image');\n renderer.setAttribute(this.imageNode, 'role', 'presentation');\n }\n this.iconSpanNode.appendChild(this.imageNode);\n this.prependChild(this.iconSpanNode);\n }\n addIcon(classNames) {\n let renderer = this.renderer;\n if (this.iconNode) {\n renderer.setProperty(this.iconNode, 'className', classNames);\n }\n else if (isDocumentAvailable()) {\n this.iconNode = renderer.createElement('span');\n renderer.setProperty(this.iconNode, 'className', classNames);\n renderer.setAttribute(this.iconNode, 'role', 'presentation');\n this.prependChild(this.iconNode);\n }\n }\n addTextSpan() {\n if (isDocumentAvailable() && this.hasText()) {\n const span = this.renderer.createElement('span');\n this.renderer.addClass(span, 'k-button-text');\n const buttonContentNodes = Array.from(this.element.childNodes);\n buttonContentNodes.forEach(node => this.renderer.appendChild(span, node));\n this.renderer.appendChild(this.element, span);\n }\n }\n prependChild(node) {\n this.defer(() => {\n if (this.renderer && node !== this.element.firstChild) {\n this.renderer.insertBefore(this.element, node, this.element.firstChild);\n }\n });\n }\n defer(callback) {\n this.ngZone.runOutsideAngular(() => {\n this.deferTimeout = setTimeout(callback, 0);\n });\n }\n iconSetter(icon, insertIcon) {\n if (icon) {\n insertIcon(icon);\n }\n this.setIconTextClasses();\n }\n removeImageNode() {\n if (this.imageNode && this.renderer.parentNode(this.imageNode)) {\n this.renderer.removeChild(this.element, this.imageNode);\n this.renderer.removeChild(this.element, this.iconSpanNode);\n this.imageNode = null;\n this.iconSpanNode = null;\n }\n }\n removeIconNode() {\n if (this.iconNode && this.renderer.parentNode(this.iconNode)) {\n this.renderer.removeChild(this.element, this.iconNode);\n this.iconNode = null;\n }\n if (this.iconSpanNode) {\n this.renderer.removeChild(this.element, this.iconSpanNode);\n this.iconSpanNode = null;\n }\n }\n updateIconNode() {\n if (!this.isIcon && !this.isIconClass) {\n this.removeIconNode();\n }\n }\n setIconTextClasses() {\n const hasIcon = this.isIcon || this.isIconClass || this.imageNode;\n this.toggleClass('k-icon-button', hasIcon && !this.hasText());\n }\n toggleClass(className, add) {\n if (add) {\n this.renderer.addClass(this.element, className);\n }\n else {\n this.renderer.removeClass(this.element, className);\n }\n }\n _onButtonClick() {\n if (!this.disabled && this.service) {\n this.ngZone.run(() => {\n this.service.click(this);\n });\n }\n if (this.togglable && !this.service) {\n this.setSelected(!this.selected);\n }\n }\n handleClasses(value, input) {\n const elem = this.element;\n const classes = getStylingClasses('button', input, this[input], value);\n if (input === 'fillMode') {\n this.handleThemeColor(this.themeColor, this[input], value);\n }\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n handleThemeColor(value, prevFillMode, fillMode) {\n const elem = this.element;\n const removeFillMode = prevFillMode ? prevFillMode : this.fillMode;\n const addFillMode = fillMode ? fillMode : this.fillMode;\n const themeColorClass = getThemeColorClasses('button', removeFillMode, addFillMode, this.themeColor, value);\n this.renderer.removeClass(elem, themeColorClass.toRemove);\n if (addFillMode !== 'none' && fillMode !== 'none') {\n if (themeColorClass.toAdd) {\n this.renderer.addClass(elem, themeColorClass.toAdd);\n }\n }\n }\n}\nButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: KendoButtonService, optional: true }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ButtonDirective, selector: \"button[kendoButton], span[kendoButton]\", inputs: { toggleable: \"toggleable\", togglable: \"togglable\", selected: \"selected\", tabIndex: \"tabIndex\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", disabled: \"disabled\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", themeColor: \"themeColor\", role: \"role\", primary: \"primary\", look: \"look\" }, outputs: { selectedChange: \"selectedChange\", click: \"click\" }, host: { listeners: { \"focus\": \"onFocus()\", \"blur\": \"onBlur()\" }, properties: { \"class.k-button\": \"this.classButton\", \"class.k-toggle-button\": \"this.isToggleable\", \"attr.role\": \"this.roleSetter\", \"attr.aria-disabled\": \"this.classDisabled\", \"class.k-disabled\": \"this.classDisabled\", \"class.k-selected\": \"this.classActive\", \"attr.dir\": \"this.getDirection\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ], exportAs: [\"kendoButton\"], usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'kendoButton',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoButton], span[kendoButton]' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: KendoButtonService, decorators: [{\n type: Optional\n }] }, { type: i1.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { toggleable: [{\n type: Input\n }], togglable: [{\n type: Input\n }], selected: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], disabled: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], themeColor: [{\n type: Input\n }], role: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], click: [{\n type: Output\n }], classButton: [{\n type: HostBinding,\n args: ['class.k-button']\n }], isToggleable: [{\n type: HostBinding,\n args: ['class.k-toggle-button']\n }], roleSetter: [{\n type: HostBinding,\n args: ['attr.role']\n }], classDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], classActive: [{\n type: HostBinding,\n args: ['class.k-selected']\n }], getDirection: [{\n type: HostBinding,\n args: ['attr.dir']\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst tabindex = 'tabindex';\n/**\n * Represents the Kendo UI ButtonGroup component for Angular.\n */\nclass ButtonGroupComponent {\n constructor(service, localization, element) {\n this.service = service;\n this.element = element;\n /**\n * By default, the selection mode of the ButtonGroup is set to `multiple`.\n */\n this.selection = 'multiple';\n /**\n * Fires every time keyboard navigation occurs.\n */\n this.navigate = new EventEmitter();\n this._tabIndex = 0;\n this.currentTabIndex = 0;\n this.subs = new Subscription();\n validatePackage(packageMetadata);\n this.subs.add(localization.changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr'));\n }\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabIndex(value) {\n this._tabIndex = value;\n this.currentTabIndex = value;\n }\n get tabIndex() {\n return this._tabIndex;\n }\n get wrapperClass() {\n return true;\n }\n get disabledClass() {\n return this.disabled;\n }\n get stretchedClass() {\n return !!this.width;\n }\n get getRole() {\n return this.isSelectionSingle() ? 'radiogroup' : 'group';\n }\n get dir() {\n return this.direction;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get wrapperWidth() {\n return this.width;\n }\n get wrapperTabIndex() {\n return this.disabled ? undefined : this.currentTabIndex;\n }\n /**\n * @hidden\n */\n keydown(event) {\n if (!this.disabled) {\n this.navigateFocus(event);\n }\n }\n /**\n * @hidden\n */\n onFocus() {\n this.currentTabIndex = -1;\n const focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const index = focusedIndex === -1 ? 0 : focusedIndex;\n this.focus(this.buttons.filter((_current, i) => {\n return i === index;\n }));\n }\n /**\n * @hidden\n */\n focusout(event) {\n if (event.relatedTarget && event.relatedTarget.parentNode !== this.element.nativeElement) {\n this.defocus(this.buttons.toArray());\n this.currentTabIndex = this.tabIndex;\n }\n }\n ngOnInit() {\n this.subs.add(this.service.buttonClicked$.subscribe((button) => {\n let newSelectionValue;\n if (this.isSelectionSingle()) {\n newSelectionValue = true;\n this.deactivate(this.buttons.filter(current => current !== button));\n }\n else {\n this.defocus(this.buttons.toArray());\n newSelectionValue = !button.selected;\n }\n if (button.togglable) {\n button.setSelected(newSelectionValue);\n }\n button.setAttribute(tabindex, '0');\n }));\n }\n ngOnChanges(change) {\n if (isChanged('disabled', change)) {\n this.buttons.forEach((button) => {\n if (isPresent(this.disabled)) {\n button.disabled = this.disabled;\n }\n });\n }\n }\n ngAfterContentInit() {\n this.buttons.forEach((button) => {\n if (button.selected) {\n button.setAttribute(tabindex, '0');\n }\n else {\n button.setAttribute(tabindex, '-1');\n }\n });\n }\n ngAfterViewChecked() {\n if (this.buttons.length) {\n this.buttons.first.renderer.addClass(this.buttons.first.element, 'k-group-start');\n this.buttons.last.renderer.addClass(this.buttons.last.element, 'k-group-end');\n }\n }\n ngOnDestroy() {\n this.subs.unsubscribe();\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n navigateFocus(event) {\n let focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const firstIndex = 0;\n const lastIndex = this.buttons.length - 1;\n const eventArgs = new PreventableEvent();\n if (event.keyCode === Keys.ArrowRight && focusedIndex < lastIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex + 1;\n }));\n }\n }\n if (event.keyCode === Keys.ArrowLeft && focusedIndex > firstIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex - 1;\n }));\n }\n }\n }\n deactivate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(false);\n button.setAttribute(tabindex, '-1');\n });\n }\n activate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(true);\n button.setAttribute(tabindex, '0');\n button.focus();\n });\n }\n defocus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, '-1');\n });\n }\n focus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, '0');\n button.focus();\n });\n }\n verifySettings() {\n if (isDevMode()) {\n if (this.isSelectionSingle() && this.buttons.filter(button => button.selected).length > 1) {\n throw new Error('Having multiple selected buttons with single selection mode is not supported');\n }\n }\n }\n isSelectionSingle() {\n return this.selection === 'single';\n }\n}\nButtonGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonGroupComponent, deps: [{ token: KendoButtonService }, { token: i1.LocalizationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ButtonGroupComponent, selector: \"kendo-buttongroup\", inputs: { disabled: \"disabled\", selection: \"selection\", width: \"width\", tabIndex: \"tabIndex\" }, outputs: { navigate: \"navigate\" }, host: { listeners: { \"keydown\": \"keydown($event)\", \"focus\": \"onFocus()\", \"focusout\": \"focusout($event)\" }, properties: { \"class.k-button-group\": \"this.wrapperClass\", \"class.k-disabled\": \"this.disabledClass\", \"class.k-button-group-stretched\": \"this.stretchedClass\", \"attr.role\": \"this.getRole\", \"attr.dir\": \"this.dir\", \"attr.aria-disabled\": \"this.ariaDisabled\", \"style.width\": \"this.wrapperWidth\", \"attr.tabindex\": \"this.wrapperTabIndex\" } }, providers: [\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ], queries: [{ propertyName: \"buttons\", predicate: ButtonDirective }], exportAs: [\"kendoButtonGroup\"], usesOnChanges: true, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonGroupComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoButtonGroup',\n providers: [\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ],\n selector: 'kendo-buttongroup',\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: KendoButtonService }, { type: i1.LocalizationService }, { type: i0.ElementRef }]; }, propDecorators: { disabled: [{\n type: Input,\n args: ['disabled']\n }], selection: [{\n type: Input,\n args: ['selection']\n }], width: [{\n type: Input,\n args: ['width']\n }], tabIndex: [{\n type: Input\n }], navigate: [{\n type: Output\n }], buttons: [{\n type: ContentChildren,\n args: [ButtonDirective]\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-button-group']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], stretchedClass: [{\n type: HostBinding,\n args: ['class.k-button-group-stretched']\n }], getRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], wrapperWidth: [{\n type: HostBinding,\n args: ['style.width']\n }], wrapperTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], focusout: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }] } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Button directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Button module\n * import { ButtonModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonModule], // import Button module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ButtonModule {\n}\nButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonModule, declarations: [ButtonDirective], exports: [ButtonDirective] });\nButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ButtonDirective],\n exports: [ButtonDirective]\n }]\n }] });\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ButtonGroupComponent`—The ButtonGroupComponent component class.\n */\nclass ButtonGroupModule {\n}\nButtonGroupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nButtonGroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonGroupModule, declarations: [ButtonGroupComponent], imports: [CommonModule, ButtonModule], exports: [ButtonGroupComponent] });\nButtonGroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonGroupModule, imports: [[CommonModule, ButtonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonGroupModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [ButtonGroupComponent],\n exports: [ButtonGroupComponent],\n imports: [CommonModule, ButtonModule]\n }]\n }] });\n\n/**\n * @hidden\n */\nclass FocusService {\n constructor() {\n this.onFocus = new EventEmitter();\n }\n isFocused(index) {\n return index === this.focused;\n }\n focus(index) {\n if (this.isFocused(index)) {\n return;\n }\n this.focused = index;\n this.onFocus.emit(index);\n }\n resetFocus() {\n this.focused = -1;\n }\n get focused() {\n return this.focusedIndex;\n }\n set focused(index) {\n this.focusedIndex = index;\n this.onFocus.emit(index);\n }\n}\nFocusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FocusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nFocusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FocusService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FocusService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass FocusableDirective {\n constructor(focusService, elementRef, renderer) {\n this.focusService = focusService;\n this.renderer = renderer;\n this.subs = new Subscription();\n this.element = elementRef.nativeElement;\n this.subscribeEvents();\n }\n ngOnInit() {\n if (this.index === this.focusService.focused) {\n this.renderer.addClass(this.element, 'k-focus');\n }\n else {\n this.renderer.removeClass(this.element, 'k-focus');\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.subs.unsubscribe();\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.subs.add(this.focusService.onFocus.subscribe((index) => {\n if (this.index === index) {\n this.renderer.addClass(this.element, 'k-focus');\n this.element.focus();\n }\n else {\n this.renderer.removeClass(this.element, 'k-focus');\n }\n }));\n }\n}\nFocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FocusableDirective, deps: [{ token: FocusService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nFocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FocusableDirective, selector: \"[kendoButtonFocusable]\", inputs: { index: \"index\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FocusableDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoButtonFocusable]'\n }]\n }], ctorParameters: function () { return [{ type: FocusService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { index: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n}\nTemplateContextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplateContextDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nTemplateContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TemplateContextDirective, selector: \"[templateContext]\", inputs: { templateContext: \"templateContext\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplateContextDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[templateContext]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { templateContext: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass ListComponent {\n constructor() {\n this.onItemClick = new EventEmitter();\n this.onItemBlur = new EventEmitter();\n this.sizeClass = '';\n validatePackage(packageMetadata);\n }\n set size(size) {\n if (size) {\n this.sizeClass = `k-menu-group-${SIZES[size]}`;\n }\n else {\n this.sizeClass = '';\n }\n }\n getText(dataItem) {\n if (dataItem) {\n return this.textField ? dataItem[this.textField] : dataItem.text || dataItem;\n }\n return undefined;\n }\n getIconClasses(dataItem) {\n const icon = dataItem.icon ? 'k-icon k-i-' + dataItem.icon : undefined;\n const classes = {};\n classes[icon || dataItem.iconClass] = true;\n return classes;\n }\n onClick(index) {\n this.onItemClick.emit(index);\n }\n onBlur() {\n this.onItemBlur.emit();\n }\n}\nListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ListComponent, selector: \"kendo-button-list\", inputs: { data: \"data\", textField: \"textField\", itemTemplate: \"itemTemplate\", size: \"size\" }, outputs: { onItemClick: \"onItemClick\", onItemBlur: \"onItemBlur\" }, ngImport: i0, template: `\n
    \n
  • \n \n \n \n \n \n \n \n \n \n \n {{ getText(dataItem) }}\n \n \n \n
  • \n
\n `, isInline: true, directives: [{ type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: FocusableDirective, selector: \"[kendoButtonFocusable]\", inputs: [\"index\"] }, { type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-button-list',\n template: `\n
    \n
  • \n \n \n \n \n \n \n \n \n \n \n {{ getText(dataItem) }}\n \n \n \n
  • \n
\n `\n }]\n }], ctorParameters: function () { return []; }, propDecorators: { data: [{\n type: Input\n }], textField: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], onItemClick: [{\n type: Output\n }], onItemBlur: [{\n type: Output\n }], size: [{\n type: Input\n }] } });\n\n/**\n * Used for rendering the list item content.\n *\n * To define the item template, nest a `` tag with the `kendoItemTemplate` directive inside the component tag.\n *\n * For the DropDownButton, use the `kendoDropDownButtonItemTemplate` directive.\n * For the SplitButton, use the `kendoSplitButtonItemTemplate` directive.\n *\n * The template context is set to the current component. To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [{\n * text: 'item1',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }, {\n * text: 'item2',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }]\n * }\n * ```\n *\n * For more examples, refer to the article on the [DropDownList templates]({% slug overview_ddl %}#templates).\n */\nclass ButtonItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nButtonItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonItemTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nButtonItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ButtonItemTemplateDirective, selector: \"[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst EXPORTED_DIRECTIVES = [\n ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective\n];\n/**\n * @hidden\n */\nclass ListModule {\n}\nListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListModule, declarations: [ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective], imports: [CommonModule], exports: [ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective] });\nListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [EXPORTED_DIRECTIVES],\n exports: [EXPORTED_DIRECTIVES],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * @hidden\n */\nvar KeyEvents;\n(function (KeyEvents) {\n KeyEvents[KeyEvents[\"keydown\"] = 0] = \"keydown\";\n KeyEvents[KeyEvents[\"keypress\"] = 1] = \"keypress\";\n KeyEvents[KeyEvents[\"keyup\"] = 2] = \"keyup\";\n})(KeyEvents || (KeyEvents = {}));\n\n/**\n * @hidden\n */\nvar NavigationAction;\n(function (NavigationAction) {\n // eslint-disable-next-line id-denylist\n NavigationAction[NavigationAction[\"Undefined\"] = 0] = \"Undefined\";\n NavigationAction[NavigationAction[\"Open\"] = 1] = \"Open\";\n NavigationAction[NavigationAction[\"Close\"] = 2] = \"Close\";\n NavigationAction[NavigationAction[\"Enter\"] = 3] = \"Enter\";\n NavigationAction[NavigationAction[\"EnterPress\"] = 4] = \"EnterPress\";\n NavigationAction[NavigationAction[\"EnterUp\"] = 5] = \"EnterUp\";\n NavigationAction[NavigationAction[\"Tab\"] = 6] = \"Tab\";\n NavigationAction[NavigationAction[\"Esc\"] = 7] = \"Esc\";\n NavigationAction[NavigationAction[\"Navigate\"] = 8] = \"Navigate\";\n})(NavigationAction || (NavigationAction = {}));\n\n/**\n * @hidden\n */\nconst NAVIGATION_CONFIG = new InjectionToken('navigation.config');\n\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(config) {\n this.navigate = new EventEmitter();\n this.open = new EventEmitter();\n this.close = new EventEmitter();\n this.enter = new EventEmitter();\n this.enterpress = new EventEmitter();\n this.enterup = new EventEmitter();\n this.tab = new EventEmitter();\n this.esc = new EventEmitter();\n this.useLeftRightArrows = config.useLeftRightArrows;\n }\n process(args) {\n const keyCode = args.keyCode;\n const keyEvent = args.keyEvent;\n let index;\n let action = NavigationAction.Undefined;\n if (keyEvent === KeyEvents.keypress) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterPress;\n }\n }\n else if (keyEvent === KeyEvents.keyup) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterUp;\n }\n }\n else {\n if (args.altKey && keyCode === Keys.ArrowDown) {\n action = NavigationAction.Open;\n }\n else if (args.altKey && keyCode === Keys.ArrowUp) {\n action = NavigationAction.Close;\n }\n else if (this.isEnter(keyCode)) {\n action = NavigationAction.Enter;\n }\n else if (keyCode === Keys.Escape) {\n action = NavigationAction.Esc;\n }\n else if (keyCode === Keys.Tab) {\n action = NavigationAction.Tab;\n }\n else if (keyCode === Keys.ArrowUp || (this.useLeftRightArrows && keyCode === Keys.ArrowLeft)) {\n const step = args.flipNavigation ? 1 : -1;\n const start = args.flipNavigation ? args.min : args.max;\n const end = args.flipNavigation ? args.max : args.min;\n index = this.next({\n current: args.current,\n start: start,\n end: end,\n step: step\n });\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.ArrowDown || (this.useLeftRightArrows && keyCode === Keys.ArrowRight)) {\n const step = args.flipNavigation ? -1 : 1;\n const start = args.flipNavigation ? args.max : args.min;\n const end = args.flipNavigation ? args.min : args.max;\n index = this.next({\n current: args.current,\n start: start,\n end: end,\n step: step\n });\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.Home) {\n index = args.min;\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.End) {\n index = args.max;\n action = NavigationAction.Navigate;\n }\n }\n if (action !== NavigationAction.Undefined) {\n this[NavigationAction[action].toLowerCase()].emit(index);\n }\n return action;\n }\n isEnter(keyCode) {\n return keyCode === Keys.Enter || keyCode === Keys.Space;\n }\n next(args) {\n if (!isPresent(args.current)) {\n return args.start;\n }\n else {\n return args.current !== args.end ? args.current + args.step : args.end;\n }\n }\n}\nNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, deps: [{ token: NAVIGATION_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });\nNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [NAVIGATION_CONFIG]\n }] }]; } });\n\n/**\n * @hidden\n */\nclass ListButton {\n constructor(focusService, navigationService, wrapperRef, _zone, localization, cdr) {\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapperRef = wrapperRef;\n this._zone = _zone;\n this.cdr = cdr;\n this._open = false;\n this._disabled = false;\n this._active = false;\n this._popupSettings = { animate: true, popupClass: '' };\n this.listId = guid();\n this._isFocused = false;\n this.subs = new Subscription();\n validatePackage(packageMetadata);\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapper = wrapperRef.nativeElement;\n this.subs.add(localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));\n this.subscribeEvents();\n }\n get popupClasses() {\n const popupClasses = ['k-menu-popup'];\n if (this._popupSettings.popupClass) {\n popupClasses.push(this._popupSettings.popupClass);\n }\n return popupClasses.join(' ');\n }\n get openState() {\n return this._open;\n }\n set openState(open) {\n this._open = open;\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n if (this._disabled) {\n return;\n }\n this.openState = !this.openState;\n if (!this.openState) {\n this.focusService.focus(-1);\n }\n }\n /**\n * @hidden\n */\n onItemClick(index) {\n this.emitItemClickHandler(index);\n setTimeout(() => this.focusWrapper(), 1);\n }\n ngOnDestroy() {\n this.openState = false;\n clearTimeout(this.focusFirstTimeout);\n clearTimeout(this.blurTimeout);\n this.subs.unsubscribe();\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.subscribeListItemFocusEvent();\n this.subscribeComponentBlurredEvent();\n this.subscribeNavigationEvents();\n }\n subscribeListItemFocusEvent() {\n this.subs.add(this.focusService.onFocus.subscribe(() => {\n this._isFocused = true;\n }));\n }\n subscribeComponentBlurredEvent() {\n this._zone.runOutsideAngular(() => {\n this.subs.add(this.navigationService.tab.pipe(filter(() => this._isFocused)).subscribe(this.handleTab.bind(this)));\n this.subs.add(fromEvent(document, 'click')\n .pipe(filter((event) => !this.wrapperContains(event.target)), filter(() => this._isFocused))\n .subscribe(() => this._zone.run(() => this.blurWrapper())));\n });\n }\n subscribeNavigationEvents() {\n this.subs.add(this.navigationService.navigate.subscribe(this.focusService.focus.bind(this.focusService)));\n this.subs.add(this.navigationService.enterup.subscribe(() => {\n this.enterHandler();\n this.focusWrapper();\n }));\n this.subs.add(this.navigationService.open.subscribe(() => {\n if (!this._open) {\n this.togglePopupVisibility();\n this.focusFirstItem();\n }\n else {\n this.focusWrapper();\n }\n }));\n this.subs.add(merge(this.navigationService.close, this.navigationService.esc).subscribe(() => this.focusWrapper()));\n }\n enterHandler() { } // eslint-disable-line\n /**\n * @hidden\n */\n keyDownHandler(event) {\n this.keyHandler(event);\n }\n /**\n * @hidden\n */\n keyPressHandler(event) {\n this.keyHandler(event, KeyEvents.keypress);\n }\n /**\n * @hidden\n */\n keyUpHandler(event) {\n this.keyHandler(event, KeyEvents.keyup);\n }\n /**\n * @hidden\n */\n keyHandler(event, keyEvent) {\n if (this._disabled) {\n return;\n }\n let focused = this.focusService.focused || 0;\n const eventData = event;\n const action = this.navigationService.process({\n altKey: eventData.altKey,\n current: focused,\n keyCode: eventData.keyCode,\n keyEvent: keyEvent,\n max: this._data ? this._data.length - 1 : 0,\n min: 0\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab &&\n (action !== NavigationAction.Enter || (action === NavigationAction.Enter && this._open))) {\n if (event.keyCode === Keys.Space && action === NavigationAction.EnterUp) {\n this._open = false;\n }\n else {\n eventData.preventDefault();\n }\n }\n }\n emitItemClickHandler(index) {\n const dataItem = this._data[index];\n if (this._itemClick) {\n this._itemClick.emit(dataItem);\n }\n if (dataItem && dataItem.click && !dataItem.disabled) {\n dataItem.click(dataItem);\n }\n }\n focusFirstItem() {\n if (this._data && isPresent(this._data[0])) {\n this.focusFirstTimeout = setTimeout(() => this.focusService.focus(0), 1);\n }\n }\n focusWrapper() {\n if (this._open) {\n this.togglePopupVisibility();\n this.focusButton();\n }\n }\n wrapperContains(element) {\n return this.wrapper === element || this.wrapper.contains(element);\n }\n blurWrapper(emit = true) {\n if (this._open) {\n this.togglePopupVisibility();\n }\n this._isFocused = false;\n if (emit) {\n this._blur.emit();\n this.cdr.markForCheck();\n }\n }\n focusButton() {\n if (this.button) {\n this.button.nativeElement.focus();\n }\n }\n handleTab() {\n this.focusButton();\n this.blurWrapper(false);\n }\n}\nListButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListButton, deps: [{ token: FocusService }, { token: NavigationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nListButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ListButton, selector: \"ng-component\", ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListButton, decorators: [{\n type: Component,\n args: [{\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: FocusService }, { type: NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }]; } });\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: Messages, selector: \"kendo-splitbutton-messages-base\", inputs: { splitButtonLabel: \"splitButtonLabel\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-splitbutton-messages-base'\n }]\n }], propDecorators: { splitButtonLabel: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedSplitButtonMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedSplitButtonMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedSplitButtonMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedSplitButtonMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedSplitButtonMessagesDirective, selector: \"[kendoSplitButtonLocalizedMessages]\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSplitButtonMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedSplitButtonMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSplitButtonMessagesDirective)\n }\n ],\n selector: '[kendoSplitButtonLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst NAVIGATION_SETTINGS$2 = {\n useLeftRightArrows: true\n};\nconst NAVIGATION_SETTINGS_PROVIDER$2 = {\n provide: NAVIGATION_CONFIG,\n useValue: NAVIGATION_SETTINGS$2\n};\nconst DEFAULT_ROUNDED$1 = 'medium';\nconst DEFAULT_FILL_MODE$1 = 'solid';\n/**\n * Represents the Kendo UI SplitButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * Paste\n * `\n * })\n *\n * class AppComponent {\n * public data: Array = [{\n * text: 'Keep Text Only',\n * icon: 'paste-plain-text',\n * click: () => { console.log('Keep Text Only click handler'); }\n * }, {\n * text: 'Paste as HTML',\n * icon: 'paste-as-html'\n * }, {\n * text: 'Paste Markdown',\n * icon: 'paste-markdown'\n * }, {\n * text: 'Set Default Paste'\n * }];\n *\n * public onSplitButtonClick(dataItem: any): void {\n * console.log('Paste');\n * }\n *\n * public onSplitButtonItemClick(dataItem: any): void {\n * if (dataItem) {\n * console.log(dataItem.text);\n * }\n * }\n * }\n * ```\n */\nclass SplitButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr, renderer) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n this.localization = localization;\n this.renderer = renderer;\n /**\n * Sets the text of the SplitButton.\n */\n this.text = '';\n /**\n * Defines an icon to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.icon = '';\n /**\n * Defines an icon with a custom CSS class to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.iconClass = '';\n /**\n * Defines the type attribute of the main button\n */\n this.type = 'button';\n /**\n * Defines the location of an image to be displayed next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.imageUrl = '';\n /**\n * The size property specifies the padding of the SplitButton\n * ([see example]({% slug api_buttons_splitbuttoncomponent %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n this.size = 'medium';\n /**\n * The SplitButton allows you to specify predefined theme colors.\n * The theme color will be applied as a background and border color while also amending the text color accordingly\n * ([see example]({% slug api_buttons_splitbuttoncomponent %}#toc-themeColor)).\n *\n * The possible values are:\n * * `base` —Applies coloring based on the `base` theme color. (default)\n * * `primary` —Applies coloring based on the `primary` theme color.\n * * `secondary`—Applies coloring based on the `secondary` theme color.\n * * `tertiary`— Applies coloring based on the `tertiary` theme color.\n * * `info`—Applies coloring based on the `info` theme color.\n * * `success`— Applies coloring based on the `success` theme color.\n * * `warning`— Applies coloring based on the `warning` theme color.\n * * `error`— Applies coloring based on the `error` theme color.\n * * `dark`— Applies coloring based on the `dark` theme color.\n * * `light`— Applies coloring based on the `light` theme color.\n * * `inverse`— Applies coloring based on the `inverse` theme color.\n * * `none`— Removes the built in theme color.\n */\n this.themeColor = 'base';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Specifies the name of the [font icon]({% slug icons %}#toc-list-of-font-icons) that will\n * be rendered for the button which opens the popup.\n */\n this.arrowButtonIcon = 'arrow-s';\n /**\n * Fires each time the user clicks the main button.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonClick(): void {\n * console.log('SplitButton click');\n * }\n * }\n * ```\n *\n */\n this.buttonClick = new EventEmitter();\n /**\n * Fires each time the user clicks on the drop-down list. The event data contains the data item bound to the clicked list item.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonItemClick(dataItem?: string): void {\n * if (dataItem) {\n * console.log(dataItem);\n * }\n * }\n * }\n * ```\n *\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the SplitButton gets focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the SplitButton gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.activeArrow = false;\n this.listId = guid();\n this.buttonText = '';\n this.lockFocus = false;\n this._rounded = DEFAULT_ROUNDED$1;\n this._fillMode = DEFAULT_FILL_MODE$1;\n this.popupSubs = new Subscription();\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * The rounded property specifies the border radius of the SplitButton\n * ([see example]({% slug api_buttons_splitbuttoncomponent %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$1;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the SplitButton\n * ([see example]({% slug api_buttons_splitbuttoncomponent %}#toc-fillMode)).\n *\n * The available values are:\n * * `solid` (default)\n * * `flat`\n * * `outline`\n * * `link`\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$1;\n this._fillMode = fillMode === 'clear' ? 'flat' : newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * When set to `true`, disables a SplitButton item\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n set disabled(value) {\n if (this.isOpen) {\n this.toggle(false);\n }\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Configures the popup of the SplitButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the data of the SplitButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n if (!this._data) {\n this.data = [];\n }\n return this._data;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? -1 : this.tabIndex;\n }\n set isFocused(value) {\n this._isFocused = value;\n }\n get isFocused() {\n return this._isFocused && !this._disabled;\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get ariaLabel() {\n const localizationMsg = this.localization.get('splitButtonLabel') || '';\n return replaceMessagePlaceholder(localizationMsg, 'buttonText', this.buttonText);\n }\n /**\n * @hidden\n */\n onButtonFocus() {\n if (!this.isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n onArrowButtonClick() {\n this.lockFocus = true;\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n toggleButtonActiveState(enable) {\n this._active = enable;\n }\n /**\n * @hidden\n */\n toggleArrowButtonActiveState(enable) {\n this.activeArrow = enable;\n }\n /**\n * @hidden\n */\n onButtonClick() {\n this.lockFocus = true;\n this.buttonClick.emit();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen && !this.lockFocus) {\n this.blurWrapper();\n }\n this.lockFocus = false;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this._active = false;\n if (event.keyCode !== Keys.Space) {\n this.keyUpHandler(event);\n }\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.updateButtonText();\n this.handleClasses(this.rounded, 'rounded');\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('text')) {\n this.updateButtonText();\n }\n if (isChanged(\"popupSettings\", changes) && isPresent(this.popupRef)) {\n const popup = this.popupRef.popup.instance;\n const newSettings = changes.popupSettings.currentValue;\n popup.popupClass = newSettings.popupClass;\n popup.animate = newSettings.animate;\n popup.popupAlign = this.popupAlign;\n }\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n super.togglePopupVisibility();\n if (isDocumentAvailable() && this.lockFocus) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return (this.wrapper === element || this.wrapper.contains(element) || (this.popupRef && this.popupRef.popupElement.contains(element)));\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the SplitButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the SplitButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => this._toggle(open === undefined ? !this._open : open));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n enterHandler() {\n if (this.disabled) {\n return;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n else {\n this.buttonClick.emit();\n }\n }\n updateButtonText() {\n if (isDocumentAvailable()) {\n let innerText = this.wrapper.innerText\n .split('\\n')\n .join('')\n .trim();\n //setTimout is needed because of `Expression has changed after it was checked.` error;\n setTimeout(() => (this.buttonText = innerText), 0);\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.containerRef : appendTo;\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupSubs.add(this.popupRef.popupAnchorViewportLeave.subscribe(() => (this.openState = false)));\n this.popupSubs.add(this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this)));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupSubs.unsubscribe();\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n handleClasses(value, input) {\n const elem = this.wrapperRef.nativeElement;\n const classes = getStylingClasses('button', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n}\nSplitButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonComponent, deps: [{ token: FocusService }, { token: NavigationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i3.PopupService }, { token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nSplitButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SplitButtonComponent, selector: \"kendo-splitbutton\", inputs: { text: \"text\", icon: \"icon\", iconClass: \"iconClass\", type: \"type\", imageUrl: \"imageUrl\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", themeColor: \"themeColor\", disabled: \"disabled\", popupSettings: \"popupSettings\", tabIndex: \"tabIndex\", textField: \"textField\", data: \"data\", buttonClass: \"buttonClass\", arrowButtonClass: \"arrowButtonClass\", arrowButtonIcon: \"arrowButtonIcon\" }, outputs: { buttonClick: \"buttonClick\", itemClick: \"itemClick\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, host: { listeners: { \"keydown\": \"keydown($event)\", \"keypress\": \"keypress($event)\", \"keyup\": \"keyup($event)\" }, properties: { \"class.k-focus\": \"this.isFocused\", \"class.k-split-button\": \"this.widgetClasses\", \"class.k-button-group\": \"this.widgetClasses\", \"attr.dir\": \"this.dir\" } }, providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$2,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ], queries: [{ propertyName: \"itemTemplate\", first: true, predicate: ButtonItemTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"button\", first: true, predicate: [\"button\"], descendants: true, static: true }, { propertyName: \"arrowButton\", first: true, predicate: [\"arrowButton\"], descendants: true, read: ElementRef, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"containerRef\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }], exportAs: [\"kendoSplitButton\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n {{ text }}\n \n \n \n \n \n \n \n \n `, isInline: true, components: [{ type: ListComponent, selector: \"kendo-button-list\", inputs: [\"data\", \"textField\", \"itemTemplate\", \"size\"], outputs: [\"onItemClick\", \"onItemBlur\"] }], directives: [{ type: LocalizedSplitButtonMessagesDirective, selector: \"[kendoSplitButtonLocalizedMessages]\" }, { type: ButtonDirective, selector: \"button[kendoButton], span[kendoButton]\", inputs: [\"toggleable\", \"togglable\", \"selected\", \"tabIndex\", \"icon\", \"iconClass\", \"imageUrl\", \"disabled\", \"size\", \"rounded\", \"fillMode\", \"themeColor\", \"role\", \"primary\", \"look\"], outputs: [\"selectedChange\", \"click\"], exportAs: [\"kendoButton\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$2,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ],\n selector: 'kendo-splitbutton',\n template: `\n \n \n \n \n {{ text }}\n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: FocusService }, { type: NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i3.PopupService }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { text: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], type: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], themeColor: [{\n type: Input\n }], disabled: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], textField: [{\n type: Input\n }], data: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], arrowButtonClass: [{\n type: Input\n }], arrowButtonIcon: [{\n type: Input\n }], buttonClick: [{\n type: Output\n }], itemClick: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective, { static: false }]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], arrowButton: [{\n type: ViewChild,\n args: ['arrowButton', { static: true, read: ElementRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], containerRef: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], isFocused: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-split-button']\n }, {\n type: HostBinding,\n args: ['class.k-button-group']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }] } });\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_buttons %}).\n */\nclass SplitButtonCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nSplitButtonCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nSplitButtonCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SplitButtonCustomMessagesComponent, selector: \"kendo-splitbutton-messages\", providers: [{\n provide: Messages,\n useExisting: forwardRef(() => SplitButtonCustomMessagesComponent)\n }], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [{\n provide: Messages,\n useExisting: forwardRef(() => SplitButtonCustomMessagesComponent)\n }],\n selector: 'kendo-splitbutton-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `SplitButtonComponent`—The SplitButtonComponent component class.\n */\nclass SplitButtonModule {\n}\nSplitButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSplitButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonModule, declarations: [SplitButtonComponent, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent], imports: [CommonModule, PopupModule, ButtonModule, ListModule], exports: [SplitButtonComponent, ListModule, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent] });\nSplitButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonModule, imports: [[CommonModule, PopupModule, ButtonModule, ListModule], ListModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitButtonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SplitButtonComponent, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent],\n exports: [SplitButtonComponent, ListModule, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent],\n imports: [CommonModule, PopupModule, ButtonModule, ListModule]\n }]\n }] });\n\nconst NAVIGATION_SETTINGS$1 = {\n useLeftRightArrows: true\n};\nconst NAVIGATION_SETTINGS_PROVIDER$1 = {\n provide: NAVIGATION_CONFIG,\n useValue: NAVIGATION_SETTINGS$1\n};\nconst DEFAULT_FILL_MODE = 'solid';\n/**\n * Represents the Kendo UI DropDownButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * User Settings\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = [{\n * text: 'My Profile'\n * }, {\n * text: 'Friend Requests'\n * }, {\n * text: 'Account Settings'\n * }, {\n * text: 'Support'\n * }, {\n * text: 'Log Out'\n * }];\n * }\n * ```\n */\nclass DropDownButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n /**\n * Defines the name of an existing icon in a Kendo UI theme.\n */\n this.icon = '';\n /**\n * Defines the list of CSS classes which are used for styling the Button with custom icons.\n */\n this.iconClass = '';\n /**\n * Defines a URL for styling the button with a custom image.\n */\n this.imageUrl = '';\n /**\n * The size property specifies the padding of the DropDownButton\n * ([see example]({% slug api_buttons_dropdownbuttoncomponent %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n this.size = 'medium';\n /**\n * The rounded property specifies the border radius of the DropDownButton\n * ([see example]({% slug api_buttons_dropdownbuttoncomponent %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n */\n this.rounded = 'medium';\n /**\n * The DropDownButton allows you to specify predefined theme colors.\n * The theme color will be applied as a background and border color while also amending the text color accordingly\n * ([see example]({% slug api_buttons_dropdownbuttoncomponent %}#toc-themeColor)).\n *\n * The possible values are:\n * * `base` —Applies coloring based on the `base` theme color. (default)\n * * `primary` —Applies coloring based on the `primary` theme color.\n * * `secondary`—Applies coloring based on the `secondary` theme color.\n * * `tertiary`— Applies coloring based on the `tertiary` theme color.\n * * `info`—Applies coloring based on the `info` theme color.\n * * `success`— Applies coloring based on the `success` theme color.\n * * `warning`— Applies coloring based on the `warning` theme color.\n * * `error`— Applies coloring based on the `error` theme color.\n * * `dark`— Applies coloring based on the `dark` theme color.\n * * `light`— Applies coloring based on the `light` theme color.\n * * `inverse`— Applies coloring based on the `inverse` theme color.\n * * `none` —Removes the default CSS class (no class would be rendered).\n */\n this.themeColor = 'base';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Fires each time the user clicks on a drop-down list item. The event data contains the data item bound to the clicked list item.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the DropDownButton gets focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the DropDownButton gets blurred.\n */\n this.onBlur = new EventEmitter();\n this.listId = guid();\n this._fillMode = DEFAULT_FILL_MODE;\n this.popupSubs = new Subscription();\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * Configures the popup of the DropDownButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the disabled state of the DropDownButton.\n */\n set disabled(value) {\n if (value && this.openState) {\n this.openState = false;\n }\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Sets or gets the data of the DropDownButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n return this._data;\n }\n /**\n * The fillMode property specifies the background and border styles of the DropDownButton\n * ([see example]({% slug api_buttons_dropdownbuttoncomponent %}#toc-fillMode)).\n *\n * The available values are:\n * * `solid` (default)\n * * `flat`\n * * `outline`\n * * `link`\n * * `none`\n */\n set fillMode(fillMode) {\n this._fillMode = fillMode === 'clear' ? 'flat' : fillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? (-1) : this.tabIndex;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get focused() {\n return this._isFocused && !this._disabled;\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this.keyUpHandler(event);\n this._active = false;\n }\n /**\n * @hidden\n */\n mousedown(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = true;\n }\n /**\n * @hidden\n */\n mouseup(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = false;\n }\n /**\n * @hidden\n */\n openPopup() {\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen) {\n this.blurWrapper();\n }\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the DropDownButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnChanges(changes) {\n if (isChanged(\"popupSettings\", changes) && isPresent(this.popupRef)) {\n const popup = this.popupRef.popup.instance;\n const newSettings = changes.popupSettings.currentValue;\n popup.popupClass = newSettings.popupClass;\n popup.animate = newSettings.animate;\n popup.popupAlign = this.popupAlign;\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => (this._toggle((open === undefined) ? !this._open : open)));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (!this._disabled && !this._isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return this.wrapper === element\n || this.wrapper.contains(element)\n || (this.popupRef && this.popupRef.popupElement.contains(element));\n }\n subscribeNavigationEvents() {\n this.subs.add(this.navigationService.navigate\n .subscribe(this.onArrowKeyNavigate.bind(this)));\n this.subs.add(this.navigationService.enterup.subscribe(this.onNavigationEnterUp.bind(this)));\n this.subs.add(this.navigationService.open.subscribe(this.onNavigationOpen.bind(this)));\n this.subs.add(merge(this.navigationService.close, this.navigationService.esc).subscribe(this.onNavigationClose.bind(this)));\n }\n onNavigationEnterUp() {\n if (!this._disabled && !this.openState) {\n this._active = false;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n this.togglePopupVisibility();\n if (!this.openState && isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n onNavigationOpen() {\n if (!this._disabled && !this.openState) {\n this.togglePopupVisibility();\n }\n }\n onNavigationClose() {\n if (this.openState) {\n this.togglePopupVisibility();\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n }\n onArrowKeyNavigate(index) {\n this.focusService.focus(index);\n }\n _toggle(open) {\n if (this._open === open) {\n return;\n }\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupSubs.add(this.popupRef.popupAnchorViewportLeave.subscribe(() => this.openState = false));\n this.popupSubs.add(this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this)));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n this.popupSubs.unsubscribe();\n }\n }\n}\nDropDownButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownButtonComponent, deps: [{ token: FocusService }, { token: NavigationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i3.PopupService }, { token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDropDownButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropDownButtonComponent, selector: \"kendo-dropdownbutton\", inputs: { icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", popupSettings: \"popupSettings\", textField: \"textField\", disabled: \"disabled\", data: \"data\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", themeColor: \"themeColor\", buttonClass: \"buttonClass\", tabIndex: \"tabIndex\" }, outputs: { itemClick: \"itemClick\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\" }, host: { listeners: { \"keydown\": \"keydown($event)\", \"keypress\": \"keypress($event)\", \"keyup\": \"keyup($event)\", \"mousedown\": \"mousedown($event)\", \"mouseup\": \"mouseup($event)\" }, properties: { \"class.k-focus\": \"this.focused\", \"class.k-dropdown-button\": \"this.widgetClasses\", \"attr.dir\": \"this.dir\" } }, providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ], queries: [{ propertyName: \"itemTemplate\", first: true, predicate: ButtonItemTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"button\", first: true, predicate: [\"button\"], descendants: true, static: true }, { propertyName: \"buttonList\", first: true, predicate: [\"buttonList\"], descendants: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }], exportAs: [\"kendoDropDownButton\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n `, isInline: true, components: [{ type: ListComponent, selector: \"kendo-button-list\", inputs: [\"data\", \"textField\", \"itemTemplate\", \"size\"], outputs: [\"onItemClick\", \"onItemBlur\"] }], directives: [{ type: ButtonDirective, selector: \"button[kendoButton], span[kendoButton]\", inputs: [\"toggleable\", \"togglable\", \"selected\", \"tabIndex\", \"icon\", \"iconClass\", \"imageUrl\", \"disabled\", \"size\", \"rounded\", \"fillMode\", \"themeColor\", \"role\", \"primary\", \"look\"], outputs: [\"selectedChange\", \"click\"], exportAs: [\"kendoButton\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownButtonComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ],\n selector: 'kendo-dropdownbutton',\n template: `\n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: FocusService }, { type: NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i3.PopupService }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], textField: [{\n type: Input\n }], disabled: [{\n type: Input\n }], data: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], themeColor: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], itemClick: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], focused: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-dropdown-button']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective, { static: false }]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], buttonList: [{\n type: ViewChild,\n args: ['buttonList', { static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], mousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], mouseup: [{\n type: HostListener,\n args: ['mouseup', ['$event']]\n }] } });\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `DropDownButtonComponent`—The DropDownButtonComponent component class.\n */\nclass DropDownButtonModule {\n}\nDropDownButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDropDownButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownButtonModule, declarations: [DropDownButtonComponent], imports: [CommonModule, PopupModule, ListModule, ButtonModule], exports: [DropDownButtonComponent, ListModule] });\nDropDownButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownButtonModule, imports: [[CommonModule, PopupModule, ListModule, ButtonModule], ListModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownButtonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [DropDownButtonComponent],\n exports: [DropDownButtonComponent, ListModule],\n imports: [CommonModule, PopupModule, ListModule, ButtonModule]\n }]\n }] });\n\n/**\n * Displays a Chip that represents an input, attribute or an action.\n */\nclass ChipComponent {\n constructor(element, renderer, ngZone, localizationService) {\n this.element = element;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.localizationService = localizationService;\n /**\n * Specifies the selected state of the Chip.\n * @default false\n */\n this.selected = false;\n /**\n * Specifies if the Chip will be removable or not.\n * If the property is set to `true`, the Chip renders a remove icon.\n * @default false\n */\n this.removable = false;\n /**\n * If set to `true`, the Chip will be disabled.\n * @default false\n */\n this.disabled = false;\n /**\n * Fires each time the user clicks the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n /**\n * Fires each time the user clicks the content of the Chip.\n */\n this.contentClick = new EventEmitter();\n this.tabIndex = 0;\n this.hostClass = true;\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n this._themeColor = 'base';\n this.focused = false;\n this.subs = new Subscription();\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * The size property specifies the padding of the Chip\n * ([see example]({% slug appearance_chip %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n if (isPresent(size)) {\n this._size = size;\n }\n this.handleClasses(this._size, 'size');\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the Chip\n * ([see example]({% slug appearance_chip %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n */\n set rounded(rounded) {\n if (isPresent(rounded)) {\n this._rounded = rounded;\n }\n this.handleClasses(this._rounded, 'rounded');\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the Chip\n * ([see example]({% slug appearance_chip %}#toc-fillMode)).\n *\n * The possible values are:\n * * `solid` (default)\n * * `outline`\n * * `none`\n */\n set fillMode(fillMode) {\n if (isPresent(fillMode)) {\n this._fillMode = fillMode;\n }\n this.handleClasses(this._fillMode, 'fillMode');\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * The Chip allows you to specify predefined theme colors.\n * The theme color will be applied as a background and border color while also amending the text color accordingly\n * ([see example]({% slug appearance_chip %}#toc-themeColor)).\n *\n * The possible values are:\n * * `base` (default)\n * * `info`\n * * `success`\n * * `warning`\n * * `error`\n * * `none`\n */\n set themeColor(themeColor) {\n if (isPresent(themeColor)) {\n this._themeColor = themeColor;\n }\n this.handleThemeColor(this._themeColor);\n }\n get themeColor() {\n return this._themeColor;\n }\n get ariaChecked() {\n return this.selected;\n }\n get hasIconClass() {\n return this.icon || this.iconClass || this.avatarClass ? true : false;\n }\n get disabledClass() {\n return this.disabled;\n }\n get selectedClass() {\n return this.selected;\n }\n get focusedClass() {\n return this.focused;\n }\n ngOnInit() {\n this.subs.add(this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr'));\n }\n ngOnDestroy() {\n this.subs.unsubscribe();\n }\n ngAfterViewInit() {\n const chip = this.element.nativeElement;\n const stylingOptions = ['size', 'rounded', 'fillMode'];\n stylingOptions.forEach(input => {\n this.handleClasses(this[input], input);\n });\n this.attachElementEventHandlers(chip);\n }\n /**\n * @hidden\n */\n get kendoIconClass() {\n this.verifyIconSettings([this.iconClass, this.avatarClass]);\n return `k-i-${this.icon}`;\n }\n /**\n * @hidden\n */\n get customIconClass() {\n this.verifyIconSettings([this.icon, this.avatarClass]);\n return `${this.iconClass}`;\n }\n /**\n * @hidden\n */\n get chipAvatarClass() {\n this.verifyIconSettings([this.icon, this.iconClass]);\n return `${this.avatarClass}`;\n }\n /**\n * @hidden\n */\n get removeIconClass() {\n if (this.removeIcon) {\n return `${this.removeIcon}`;\n }\n return `k-i-close-circle`;\n }\n /**\n * Focuses the Chip component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.focus();\n }\n }\n /**\n * Blurs the Chip component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.blur();\n }\n }\n /**\n * @hidden\n */\n onRemoveClick(e) {\n if (this.removable) {\n this.remove.emit({ sender: this, originalEvent: e });\n }\n }\n attachElementEventHandlers(chip) {\n this.ngZone.runOutsideAngular(() => {\n this.subs.add(this.renderer.listen(chip, 'focus', () => {\n this.renderer.addClass(chip, 'k-focus');\n }));\n this.subs.add(this.renderer.listen(chip, 'blur', () => {\n this.renderer.removeClass(chip, 'k-focus');\n }));\n this.subs.add(this.renderer.listen(chip, 'click', (e) => {\n const isRemoveClicked = closest(e.target, '.k-chip-remove-action');\n if (!isRemoveClicked) {\n this.ngZone.run(() => {\n this.contentClick.emit({ sender: this, originalEvent: e });\n });\n }\n }));\n });\n }\n /**\n * @hidden\n */\n verifyIconSettings(iconsToCheck) {\n if (isDevMode()) {\n if (iconsToCheck.filter(icon => icon !== null && icon !== undefined).length > 0) {\n this.renderer.removeClass(this.element.nativeElement, 'k-chip-has-icon');\n throw new Error('Invalid configuration: Having multiple icons is not supported. Only a single icon on a chip can be displayed.');\n }\n }\n }\n handleClasses(value, input) {\n const elem = this.element.nativeElement;\n const classes = getStylingClasses('chip', input, this[input], value);\n if (input === 'fillMode') {\n this.handleThemeColor(this.themeColor, this[input], value);\n }\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n handleThemeColor(value, prevFillMode, fillMode) {\n const elem = this.element.nativeElement;\n const removeFillMode = prevFillMode ? prevFillMode : this.fillMode;\n const addFillMode = fillMode ? fillMode : this.fillMode;\n const themeColorClass = getThemeColorClasses('chip', removeFillMode, addFillMode, this.themeColor, value);\n this.renderer.removeClass(elem, themeColorClass.toRemove);\n if (addFillMode !== 'none' && fillMode !== 'none') {\n if (themeColorClass.toAdd) {\n this.renderer.addClass(elem, themeColorClass.toAdd);\n }\n }\n }\n}\nChipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nChipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ChipComponent, selector: \"kendo-chip\", inputs: { label: \"label\", icon: \"icon\", iconClass: \"iconClass\", avatarClass: \"avatarClass\", selected: \"selected\", removable: \"removable\", removeIcon: \"removeIcon\", disabled: \"disabled\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", themeColor: \"themeColor\" }, outputs: { remove: \"remove\", contentClick: \"contentClick\" }, host: { properties: { \"attr.tabindex\": \"this.tabIndex\", \"attr.aria-checked\": \"this.ariaChecked\", \"class.k-chip\": \"this.hostClass\", \"class.k-chip-has-icon\": \"this.hasIconClass\", \"attr.aria-disabled\": \"this.disabledClass\", \"class.k-disabled\": \"this.disabledClass\", \"class.k-selected\": \"this.selectedClass\", \"class.k-focus\": \"this.focusedClass\", \"attr.dir\": \"this.direction\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ], ngImport: i0, template: `\n \n \n\n \n \n\n \n \n \n\n \n \n {{ label }}\n \n \n \n\n \n \n \n \n \n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-chip',\n template: `\n \n \n\n \n \n\n \n \n \n\n \n \n {{ label }}\n \n \n \n\n \n \n \n \n \n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.LocalizationService }]; }, propDecorators: { label: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], avatarClass: [{\n type: Input\n }], selected: [{\n type: Input\n }], removable: [{\n type: Input\n }], removeIcon: [{\n type: Input\n }], disabled: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], themeColor: [{\n type: Input\n }], remove: [{\n type: Output\n }], contentClick: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaChecked: [{\n type: HostBinding,\n args: ['attr.aria-checked']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-chip']\n }], hasIconClass: [{\n type: HostBinding,\n args: ['class.k-chip-has-icon']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], selectedClass: [{\n type: HostBinding,\n args: ['class.k-selected']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }] } });\n\nclass ChipListComponent {\n constructor(localizationService, renderer, element) {\n this.localizationService = localizationService;\n this.renderer = renderer;\n this.element = element;\n this.hostClass = true;\n /**\n * Sets the selection mode of the ChipList.\n *\n * The available values are:\n * * `none` (default)\n * * `single`\n * * `multiple`\n */\n this.selection = 'none';\n /**\n * Fires each time when the ChipList selection is changed.\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks on the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n this.role = 'listbox';\n this._size = 'medium';\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * The size property specifies the gap between the Chips in the ChipList\n * ([see example]({% slug appearance_chiplist %}#toc-size)).\n *\n * The possible values are:\n * * `'small'`\n * * `'medium'` (default)\n * * `'large'`\n * * `none`\n */\n set size(size) {\n const sizeValue = size ? size : 'medium';\n this.handleClasses(sizeValue, 'size');\n this._size = sizeValue;\n }\n get size() {\n return this._size;\n }\n get single() {\n return this.selection === 'single';\n }\n get multiple() {\n return this.selection === 'multiple';\n }\n /**\n * @hidden\n */\n onClick($event) {\n const target = $event.target;\n const isRemoveClicked = closest(target, '.k-chip-remove-action');\n const clickedChip = closest(target, '.k-chip');\n const chip = this.chips.find((chip) => clickedChip === chip.element.nativeElement);\n if (isRemoveClicked && clickedChip) {\n const removeEventArgs = { sender: this, originalEvent: $event, removedChip: chip };\n this.remove.emit(removeEventArgs);\n }\n if (this.selection !== 'none' && clickedChip && !isRemoveClicked) {\n this.setSelection(chip);\n }\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngAfterViewInit() {\n const stylingInputs = ['size'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n ngAfterContentInit() {\n this.chips.forEach((chip) => {\n this.renderer.setAttribute(chip.element.nativeElement, 'role', 'option');\n });\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n selectedChips() {\n return this.chips.reduce((acc, cur, idx) => { return cur.selected ? acc.concat(idx) : acc; }, []);\n }\n /**\n * Updates the selection on click of a Chip. Emits events.\n */\n setSelection(chip) {\n if (this.selection === 'single') {\n this.clearSelection(chip);\n }\n chip.selected = !chip.selected;\n this.selectedChange.emit(this.selectedChips());\n }\n clearSelection(chip) {\n this.chips.forEach((c) => {\n if (chip !== c) {\n c.selected = false;\n }\n });\n }\n handleClasses(value, input) {\n const elem = this.element.nativeElement;\n const classes = getStylingClasses('chip-list', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n}\nChipListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipListComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nChipListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ChipListComponent, selector: \"kendo-chiplist, kendo-chip-list\", inputs: { selection: \"selection\", size: \"size\" }, outputs: { selectedChange: \"selectedChange\", remove: \"remove\" }, host: { listeners: { \"click\": \"onClick($event)\" }, properties: { \"class.k-chip-list\": \"this.hostClass\", \"attr.dir\": \"this.direction\", \"class.k-selection-single\": \"this.single\", \"class.k-selection-multiple\": \"this.multiple\", \"attr.role\": \"this.role\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chiplist'\n }\n ], queries: [{ propertyName: \"chips\", predicate: ChipComponent }], ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipListComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-chiplist, kendo-chip-list',\n template: `\n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chiplist'\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-chip-list']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], selection: [{\n type: Input\n }], size: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], remove: [{\n type: Output\n }], chips: [{\n type: ContentChildren,\n args: [ChipComponent]\n }], single: [{\n type: HostBinding,\n args: ['class.k-selection-single']\n }], multiple: [{\n type: HostBinding,\n args: ['class.k-selection-multiple']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] } });\n\nconst exportedModules$1 = [\n ChipComponent,\n ChipListComponent\n];\nconst declarations$1 = [\n ...exportedModules$1\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Chip and ChipList components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Chip module\n * import { ChipModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ChipModule], // import Chip module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * ```\n */\nclass ChipModule {\n}\nChipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nChipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipModule, declarations: [ChipComponent,\n ChipListComponent], imports: [CommonModule], exports: [ChipComponent,\n ChipListComponent] });\nChipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChipModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$1],\n exports: [exportedModules$1],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * @hidden\n */\nfunction getAnchorAlign(fabAlign, rtl) {\n let align = { horizontal: (rtl ? 'right' : 'left'), vertical: 'bottom' };\n if (fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n }\n if (fabAlign.vertical === 'bottom') {\n align.vertical = 'top';\n }\n if (fabAlign.vertical === 'bottom' && fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n align.vertical = 'top';\n }\n return align;\n}\n/**\n * @hidden\n */\nfunction getPopupAlign(fabAlign, rtl) {\n let align = { horizontal: (rtl ? 'right' : 'left'), vertical: 'top' };\n if (fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n }\n if (fabAlign.vertical === 'bottom') {\n align.vertical = 'bottom';\n }\n if (fabAlign.vertical === 'bottom' && fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n align.vertical = 'bottom';\n }\n return align;\n}\n\n/**\n * @hidden\n */\nfunction openAnimation(animationSettings) {\n const isBottom = animationSettings.align.vertical === 'bottom';\n const duration = animationSettings.duration;\n const gap = animationSettings.gap;\n return sequence([\n query(`.k-fab-item`, [\n style({ opacity: 0, transform: `translateY(${isBottom ? '8px' : '-8px'})` }),\n stagger(gap, [animate(`${duration}ms ease-in`, style({ opacity: '*', transform: 'translateY(0)' }))])\n ], { optional: true })\n ]);\n}\n/**\n * @hidden\n */\nfunction closeAnimation(animationSettings) {\n const isBottom = animationSettings.align.vertical === 'bottom';\n const duration = animationSettings.duration;\n const gap = animationSettings.gap;\n return sequence([\n query(`.k-fab-item`, [\n style({ opacity: '*', transform: 'translateY(0)' }),\n stagger(-gap, [animate(`${duration}ms ease-in`, style({ opacity: 0, transform: `translateY(${isBottom ? '8px' : '-8px'})` }))])\n ], { optional: true })\n ]);\n}\n\n/**\n * Represents a template that defines the content of the whole dial item.\n * To define the template, nest an `` tag\n * with the `kendoDialItemTemplate` directive inside the `` tag\n * ([see example]({% slug templates_floatingactionbutton %}#toc-dial-item-template)).\n */\nclass DialItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDialItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialItemTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDialItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialItemTemplateDirective, selector: \"[kendoDialItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDialItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents a template that defines the content of the FloatingActionButton.\n * To define the template, nest an `` tag\n * with the `kendoFloatingActionButtonTemplate` directive inside the `` tag\n * ([see example]({% slug templates_floatingactionbutton %}#toc-floatingactionbutton-template)).\n */\nclass FloatingActionButtonTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFloatingActionButtonTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nFloatingActionButtonTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FloatingActionButtonTemplateDirective, selector: \"[kendoFloatingActionButtonTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoFloatingActionButtonTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nclass DialItemComponent {\n constructor(element, renderer, localisationService) {\n this.element = element;\n this.renderer = renderer;\n this.localisationService = localisationService;\n this.hostClass = true;\n this.role = 'menuitem';\n }\n get disabledClass() {\n return this.item.disabled;\n }\n get title() {\n const label = this.item.label;\n return label ? label : this.itemTitle;\n }\n get indexAttr() {\n return this.index;\n }\n get iconClasses() {\n const classes = [];\n if (this.item.iconClass) {\n classes.push(`${this.item.iconClass}`);\n }\n if (this.item.icon) {\n classes.push(`k-fab-item-icon k-icon k-i-${this.item.icon}`);\n }\n return classes;\n }\n get itemTitle() {\n const icon = this.item.icon;\n const itemTitle = this.item.itemTitle;\n return (icon && itemTitle) ? itemTitle : icon;\n }\n ngAfterViewInit() {\n const element = this.element.nativeElement;\n const rtl = this.localisationService.rtl;\n const hAlign = this.align.horizontal;\n this.renderer.addClass(element, this.getTextDirectionClass(rtl, hAlign));\n }\n getTextDirectionClass(rtl, hAlign) {\n const dir = rtl ? 'rtl' : 'ltr';\n const align = hAlign === 'end' ? 'end' : 'start';\n const directions = {\n rtl: { end: 'k-text-left', start: 'k-text-right' },\n ltr: { start: 'k-text-left', end: 'k-text-right' }\n };\n return directions[dir][align];\n }\n}\nDialItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialItemComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nDialItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialItemComponent, selector: \"[kendoDialItem]\", inputs: { cssClass: \"cssClass\", cssStyle: \"cssStyle\", isFocused: \"isFocused\", index: \"index\", item: \"item\", dialItemTemplate: \"dialItemTemplate\", align: \"align\" }, host: { properties: { \"class.k-fab-item\": \"this.hostClass\", \"attr.role\": \"this.role\", \"attr.aria-disabled\": \"this.disabledClass\", \"class.k-disabled\": \"this.disabledClass\", \"attr.title\": \"this.title\", \"attr.aria-label\": \"this.title\", \"attr.data-fab-item-index\": \"this.indexAttr\" } }, ngImport: i0, template: `\n \n \n\n \n {{ item.label }}\n \n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialItemComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoDialItem]',\n template: `\n \n \n\n \n {{ item.label }}\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-fab-item']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], title: [{\n type: HostBinding,\n args: ['attr.title']\n }, {\n type: HostBinding,\n args: ['attr.aria-label']\n }], indexAttr: [{\n type: HostBinding,\n args: ['attr.data-fab-item-index']\n }], cssClass: [{\n type: Input\n }], cssStyle: [{\n type: Input\n }], isFocused: [{\n type: Input\n }], index: [{\n type: Input\n }], item: [{\n type: Input\n }], dialItemTemplate: [{\n type: Input\n }], align: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass DialListComponent {\n constructor(focusService, cdr) {\n this.focusService = focusService;\n this.cdr = cdr;\n this.hostClass = true;\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.focusService.onFocus.subscribe(() => this.cdr.detectChanges()));\n }\n get bottomClass() {\n return this.align.vertical === 'top' || this.align.vertical === 'middle';\n }\n get topClass() {\n return this.align.vertical === 'bottom';\n }\n isFocused(index) {\n return this.focusService.isFocused(index);\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n}\nDialListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialListComponent, deps: [{ token: FocusService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDialListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialListComponent, selector: \"[kendoDialList]\", inputs: { dialItems: \"dialItems\", dialItemTemplate: \"dialItemTemplate\", align: \"align\" }, host: { properties: { \"class.k-fab-items\": \"this.hostClass\", \"class.k-fab-items-bottom\": \"this.bottomClass\", \"class.k-fab-items-top\": \"this.topClass\" } }, ngImport: i0, template: `\n \n \n \n \n `, isInline: true, components: [{ type: DialItemComponent, selector: \"[kendoDialItem]\", inputs: [\"cssClass\", \"cssStyle\", \"isFocused\", \"index\", \"item\", \"dialItemTemplate\", \"align\"] }], directives: [{ type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: FocusableDirective, selector: \"[kendoButtonFocusable]\", inputs: [\"index\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialListComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoDialList]',\n template: `\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: FocusService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-fab-items']\n }], bottomClass: [{\n type: HostBinding,\n args: ['class.k-fab-items-bottom']\n }], topClass: [{\n type: HostBinding,\n args: ['class.k-fab-items-top']\n }], dialItems: [{\n type: Input\n }], dialItemTemplate: [{\n type: Input\n }], align: [{\n type: Input\n }] } });\n\nconst NAVIGATION_SETTINGS = {\n useLeftRightArrows: false\n};\nconst NAVIGATION_SETTINGS_PROVIDER = {\n provide: NAVIGATION_CONFIG,\n useValue: NAVIGATION_SETTINGS\n};\nconst SIZE_CLASSES = {\n small: 'k-fab-sm',\n medium: 'k-fab-md',\n large: 'k-fab-lg'\n};\nconst ROUNDED_CLASSES = {\n small: 'k-rounded-sm',\n medium: 'k-rounded-md',\n large: 'k-rounded-lg',\n full: 'k-rounded-full'\n};\nconst FILLMODE_CLASS = 'k-fab-solid';\nconst DEFAULT_DURATION = 180;\nconst DEFAULT_ITEM_GAP = 90;\nconst DEFAULT_OFFSET = '16px';\nconst DEFAULT_ROUNDED = 'full';\nconst DEFAULT_SIZE = 'medium';\nconst DEFAULT_THEME_COLOR = 'primary';\n/**\n *\n * Represents the [Kendo UI FloatingActionButton component for Angular]({% slug overview_floatingactionbutton %}).\n * Used to specify the primary or the most common action in an application.\n *\n */\nclass FloatingActionButtonComponent {\n constructor(renderer, element, focusService, navigationService, ngZone, popupService, builder, localizationService) {\n this.renderer = renderer;\n this.element = element;\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.ngZone = ngZone;\n this.popupService = popupService;\n this.builder = builder;\n this.localizationService = localizationService;\n /**\n * Specifies the positionMode of the FloatingActionButton\n * ([see example]({% slug positioning_floatingactionbutton %}#toc-positionMode)).\n *\n * * The possible values are:\n * * `absolute`—Positions the FloatingActionButton absolutely to its first positioned parent element.\n * * `fixed` (Default)—Positions the FloatingActionButton relative to the viewport. It always stays in the same place even if the page is scrolled.\n */\n this.positionMode = 'fixed';\n /**\n * Specifies the animation settings of the FloatingActionButton dial items.\n * ([see example]({% slug dialitems_floatingactionbutton %}#toc-animation)).\n *\n * The possible values are:\n * * Boolean\n * * (Default) `true`—Applies the default [`DialItemAnimation`]({% slug api_buttons_dialitemanimation %}) settings.\n * * `false`\n * * `DialItemAnimation`\n * * `duration`—Specifies the animation duration in milliseconds for each dial item. Defaults to `180ms`.\n * * `gap`—Specifies the animation duration gap in milliseconds after each dial item is animated. Defaults to `90ms`.\n */\n this.dialItemAnimation = true;\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the FloatingActionButton.\n */\n this.tabIndex = 0;\n /**\n * Specifies the collection of the dial items that will be rendered in the FloatingActionButton popup.\n */\n this.dialItems = [];\n /**\n * Fires each time the FloatingActionButton gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the FloatingActionButton gets focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time a dial item is clicked.\n */\n this.dialItemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed\n * ([more information and example]({% slug overview_floatingactionbutton %}#toc-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open\n * ([more information and example]({% slug overview_floatingactionbutton %}#toc-events)).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.id = `k-${guid()}`;\n this._themeColor = DEFAULT_THEME_COLOR;\n this._size = DEFAULT_SIZE;\n this._rounded = DEFAULT_ROUNDED;\n this._disabled = false;\n this._align = { horizontal: 'end', vertical: 'bottom' };\n this._offset = { x: DEFAULT_OFFSET, y: DEFAULT_OFFSET };\n this.subscriptions = new Subscription();\n this.rtl = false;\n this.animationEnd = new EventEmitter();\n this.initialSetup = true;\n validatePackage(packageMetadata);\n this.subscribeNavigationEvents();\n this.subscriptions.add(this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n }));\n }\n get fixedClass() {\n return this.positionMode === 'fixed';\n }\n get absoluteClass() {\n return this.positionMode === 'absolute';\n }\n /**\n * Specifies the theme color of the FloatingActionButton\n * ([see example]({% slug appearance_floatingactionbutton %}#toc-themeColor)).\n * The theme color will be applied as background color of the component.\n *\n * The possible values are:\n * * `primary` (Default)—Applies coloring based on the `primary` theme color.\n * * `secondary`—Applies coloring based on the `secondary` theme color.\n * * `tertiary`— Applies coloring based on the `tertiary` theme color.\n * * `info`—Applies coloring based on the `info` theme color.\n * * `success`— Applies coloring based on the `success` theme color.\n * * `warning`— Applies coloring based on the `warning` theme color.\n * * `error`— Applies coloring based on the `error` theme color.\n * * `dark`— Applies coloring based on the `dark` theme color.\n * * `light`— Applies coloring based on the `light` theme color.\n * * `inverse`— Applies coloring based on the `inverse` theme color.\n * * `none`— Removes the built in theme color.\n */\n set themeColor(themeColor) {\n const newThemeColor = themeColor ? themeColor : DEFAULT_THEME_COLOR;\n this.handleClasses(newThemeColor, 'themeColor');\n this._themeColor = newThemeColor;\n }\n get themeColor() {\n return this._themeColor;\n }\n /**\n * Specifies the size of the FloatingActionButton\n * ([see example]({% slug appearance_floatingactionbutton %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the FloatingActionButton.\n *\n * The possible values are:\n * * `small`\n * * `medium`\n * * `large`\n * * `full` (default)\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Specifies whether the FloatingActionButton is disabled.\n */\n set disabled(disabled) {\n this._disabled = disabled;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Specifies the horizontal and vertical alignment of the FloatingActionButton\n * ([see example]({% slug positioning_floatingactionbutton %}#toc-align)).\n *\n * The possible values are:\n * * `{ horizontal: 'start'|'center'|'end', vertical: 'top'|'middle'|'bottom' }`\n *\n * The default value is:\n * * `{ horizontal: 'end', vertical: 'bottom' }`\n *\n */\n set align(align) {\n this._align = Object.assign(this._align, align);\n }\n get align() {\n return this._align;\n }\n /**\n * Specifies the horizontal and vertical offset position of the FloatingActionButton\n * ([see example]({% slug positioning_floatingactionbutton %}#toc-offset)).\n *\n * * The default value is:\n * * `{ x: '16px', y: '16px' }`\n */\n set offset(offset) {\n this._offset = Object.assign(this._offset, offset);\n this.offsetStyles();\n }\n get offset() {\n return this._offset;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? (-1) : this.tabIndex;\n }\n ngAfterViewInit() {\n ['size', 'rounded', 'themeColor'].forEach(option => this.handleClasses(this[option], option));\n this.renderer.addClass(this.element.nativeElement, this.alignClass());\n this.offsetStyles();\n this.initialSetup = false;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * Indicates whether the FloatingActionButton is currently open.\n */\n get isOpen() { return isPresent(this.popupRef); }\n /**\n * Focuses the FloatingActionButton.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the FloatingActionButton.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n }\n }\n /**\n * Toggles the visibility of the FloatingActionButton dial items popup.\n *\n * If you use the `toggleDial` method to open or close the dial items,\n * the `open` and `close` events do not fire ([more information and examples]({% slug openstate_floatingactionbutton %}#toc-events)).\n *\n * @param open - The state of dial items popup.\n */\n toggleDial(open) {\n if (this.disabled || !this.hasDialItems) {\n return;\n }\n const shouldOpen = isPresent(open) ? open : !this.isOpen;\n if (this.disabled || shouldOpen === this.isOpen) {\n return;\n }\n if (shouldOpen) {\n setTimeout(() => this.openDial());\n }\n else {\n this.closeDial();\n }\n }\n /**\n * @hidden\n */\n get role() {\n return (this.dialItems && this.dialItems.length) ? 'menubutton' : 'button';\n }\n /**\n * @hidden\n */\n get ariaExpanded() {\n return isPresent(this.isOpen);\n }\n /**\n * @hidden\n */\n get ariaHasPopup() {\n return isPresent(this.isOpen);\n }\n /**\n * @hidden\n */\n get iconClasses() {\n const classes = [];\n if (this.iconClass) {\n classes.push(`${this.iconClass}`);\n }\n if (this.icon) {\n classes.push(`k-fab-icon k-icon k-i-${this.icon}`);\n }\n return classes;\n }\n /**\n * @hidden\n */\n clickHandler() {\n if (this.disabled || !this.hasDialItems) {\n return;\n }\n this.ngZone.run(() => {\n const shouldOpen = !this.isOpen;\n this.toggleDialWithEvents(shouldOpen);\n });\n }\n /**\n * @hidden\n */\n keyDownHandler(event) {\n this.keyHandler(event);\n }\n /**\n * @hidden\n */\n keyHandler(event, keyEvent) {\n if (this.disabled) {\n return;\n }\n const focused = this.focusService.focused || 0;\n const keyCode = event.keyCode;\n const action = this.navigationService.process({\n altKey: event.altKey,\n current: focused,\n keyCode,\n keyEvent: keyEvent,\n max: this.dialItems ? this.dialItems.length - 1 : 0,\n min: 0,\n flipNavigation: this.align.vertical === 'bottom'\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab) {\n event.preventDefault();\n }\n }\n /**\n * @hidden\n */\n onItemClick(event) {\n const item = closest(event.target, '.k-fab-item');\n if (!item) {\n return;\n }\n const index = item.getAttribute('data-fab-item-index');\n this.emitItemClick(index);\n }\n /**\n * @hidden\n */\n focusHandler() {\n if (!this.disabled) {\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n blurHandler() {\n this.onBlur.emit();\n this.toggleDialWithEvents(false);\n }\n handleClasses(inputValue, input) {\n if (isPresent(this.button) && (this[input] !== inputValue || this.initialSetup)) {\n const button = this.button.nativeElement;\n const classesToRemove = {\n themeColor: `${FILLMODE_CLASS}-${this.themeColor}`,\n size: SIZE_CLASSES[this.size],\n rounded: ROUNDED_CLASSES[this.rounded]\n };\n const classesToAdd = {\n themeColor: inputValue !== 'none' ? `${FILLMODE_CLASS}-${inputValue}` : '',\n size: SIZE_CLASSES[inputValue],\n rounded: ROUNDED_CLASSES[inputValue]\n };\n this.renderer.removeClass(button, classesToRemove[input]);\n if (classesToAdd[input]) {\n this.renderer.addClass(button, classesToAdd[input]);\n }\n }\n }\n onEnterPressed() {\n const index = this.focusService.focused;\n this.emitItemClick(index);\n }\n emitItemClick(index) {\n const item = this.dialItems[index];\n if (item && !item.disabled) {\n const clickEventArgs = { item: item, index: index };\n this.dialItemClick.emit(clickEventArgs);\n this.toggleDialWithEvents(false);\n }\n }\n subscribeNavigationEvents() {\n this.subscriptions.add(this.navigationService.navigate.subscribe(this.onArrowKeyNavigate.bind(this)));\n this.subscriptions.add(this.navigationService.enter.subscribe(this.onNavigationEnterPress.bind(this)));\n this.subscriptions.add(merge(this.navigationService.close, this.navigationService.esc).subscribe(this.onNavigationClose.bind(this)));\n }\n onArrowKeyNavigate(index) {\n this.focusService.focus(index);\n }\n onNavigationEnterPress() {\n this.ngZone.run(() => {\n if (this.isOpen) {\n let focusedIndex = this.focusService.focused;\n const focusedItem = this.dialItems[focusedIndex];\n if (focusedItem && focusedItem.disabled) {\n return;\n }\n if (isPresent(focusedIndex) && focusedIndex !== -1) {\n this.onEnterPressed();\n return;\n }\n }\n if (!this.isOpen && isDocumentAvailable()) {\n this.toggleDialWithEvents(true);\n this.button.nativeElement.focus();\n }\n });\n }\n onNavigationClose() {\n if (this.isOpen) {\n this.ngZone.run(() => {\n this.toggleDialWithEvents(false);\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n });\n }\n }\n alignClass() {\n return `k-pos-${this.align.vertical}-${this.align.horizontal}`;\n }\n toggleDialWithEvents(open) {\n if (open === this.isOpen) {\n return;\n }\n const event = new PreventableEvent();\n if (open) {\n this.open.emit(event);\n }\n else {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n if (open) {\n this.openDial();\n }\n else {\n this.closeDial();\n }\n }\n openPopup() {\n if (this.isOpen) {\n return;\n }\n const isIconFab = this.icon && !this.text;\n const rtl = this.rtl;\n const align = this.align;\n this.popupRef = this.popupService.open({\n anchor: this.element.nativeElement,\n animate: false,\n content: this.popupTemplate,\n anchorAlign: getAnchorAlign(align, rtl),\n popupAlign: getPopupAlign(align, rtl),\n popupClass: 'k-fab-popup k-popup-transparent'\n });\n const popupElement = this.popupRef.popupElement;\n this.renderer.setStyle(popupElement, 'box-shadow', 'none');\n if (isIconFab) {\n this.subscriptions.add(this.popupRef.popupOpen.subscribe(() => this.positionPopup()));\n }\n this.ngZone.runOutsideAngular(() => {\n this.popupMouseDownListener = this.renderer.listen(popupElement, 'mousedown', (event) => {\n event.preventDefault();\n });\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.toggleDialWithEvents(false));\n }\n closePopup() {\n if (this.isOpen) {\n if (this.popupMouseDownListener) {\n this.popupMouseDownListener();\n }\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n openDial() {\n this.openPopup();\n this.focusService.focus(0);\n if (this.dialItemAnimation && this.isValidAnimation()) {\n this.playAnimation(true);\n }\n }\n closeDial() {\n if (this.dialItemAnimation && this.isValidAnimation()) {\n this.playAnimation(false);\n this.animationEnd.pipe(take(1)).subscribe(() => this.closePopup());\n }\n else {\n this.closePopup();\n }\n }\n isValidAnimation() {\n const animation = this.dialItemAnimation;\n if (typeof animation !== 'boolean') {\n return animation.duration !== 0;\n }\n return true;\n }\n positionPopup() {\n if (this.dialItemTemplate) {\n return;\n }\n const fab = this.element.nativeElement;\n const fabWidth = fab.getBoundingClientRect().width;\n const popupEl = this.popupRef.popupElement;\n const icon = popupEl.querySelector('.k-fab-item-icon');\n if (!icon) {\n return;\n }\n const iconWidth = icon.getBoundingClientRect().width;\n const left = (fabWidth / 2) - (iconWidth / 2);\n const popupLeft = popupEl.getBoundingClientRect().left;\n const isEndAlign = this.align.horizontal === 'end';\n const leftValue = isEndAlign ? (popupLeft - left) : (left + popupLeft);\n const rtlLeftValue = isEndAlign ? (left + popupLeft) : (popupLeft - left);\n popupEl.style.left = this.rtl ? `${rtlLeftValue}px` : `${leftValue}px`;\n }\n offsetStyles() {\n const hostElement = this.element.nativeElement;\n this.renderer.setStyle(hostElement, this.horizontalPosition, this.horizontalOffset);\n this.renderer.setStyle(hostElement, this.verticalPosition, this.verticalOffset);\n }\n get hasDialItems() {\n return isPresent(this.dialItems) && this.dialItems.length !== 0;\n }\n /**\n * Gets the CSS prop name of the selected vertical position (`top`/`bottom`);\n */\n get verticalPosition() {\n return {\n top: 'top',\n middle: 'top',\n bottom: 'bottom'\n }[this.align.vertical];\n }\n /**\n * Gets the offset according to the selected vertical position.\n */\n get verticalOffset() {\n if (this.align.vertical === 'middle') {\n return this.offset.y === DEFAULT_OFFSET ? '50%' : `calc(50% + ${this.offset.y})`;\n }\n return this.offset.y;\n }\n /**\n * Gets the CSS prop name of the selected horizontal position (`left`/`right`);\n */\n get horizontalPosition() {\n const { horizontal } = this.align;\n return {\n end: this.rtl ? 'left' : 'right',\n center: 'left',\n start: this.rtl ? 'right' : 'left'\n }[horizontal];\n }\n /**\n * Gets the offset according to the selected horizontal position.\n */\n get horizontalOffset() {\n if (this.align.horizontal === 'center') {\n return this.offset.x === DEFAULT_OFFSET ? '50%' : `calc(50% + ${this.offset.x})`;\n }\n return this.offset.x;\n }\n playerFor(element, animation) {\n const factory = this.builder.build(animation);\n return factory.create(element);\n }\n playAnimation(open) {\n const durationSettings = this.durationSettings();\n const animationSettings = {\n duration: durationSettings.duration,\n gap: durationSettings.gap,\n align: this.align\n };\n const animation = open ? openAnimation(animationSettings) : closeAnimation(animationSettings);\n let player = this.playerFor(this.popupRef.popupElement, animation);\n player.play();\n player.onDone(() => {\n if (player) {\n this.animationEnd.emit();\n player.destroy();\n player = null;\n }\n });\n }\n durationSettings() {\n return {\n duration: this.animationDuration(),\n gap: this.animationGap()\n };\n }\n animationGap() {\n const animation = this.dialItemAnimation;\n if (typeof animation !== 'boolean' && isPresent(animation.gap)) {\n return animation.gap;\n }\n return DEFAULT_ITEM_GAP;\n }\n animationDuration() {\n const animation = this.dialItemAnimation;\n if (typeof animation !== 'boolean' && isPresent(animation.duration)) {\n return animation.duration;\n }\n return DEFAULT_DURATION;\n }\n}\nFloatingActionButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: FocusService }, { token: NavigationService }, { token: i0.NgZone }, { token: i3.PopupService }, { token: i4.AnimationBuilder }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nFloatingActionButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FloatingActionButtonComponent, selector: \"kendo-floatingactionbutton\", inputs: { themeColor: \"themeColor\", size: \"size\", rounded: \"rounded\", disabled: \"disabled\", align: \"align\", offset: \"offset\", positionMode: \"positionMode\", icon: \"icon\", iconClass: \"iconClass\", buttonClass: \"buttonClass\", dialClass: \"dialClass\", text: \"text\", dialItemAnimation: \"dialItemAnimation\", tabIndex: \"tabIndex\", dialItems: \"dialItems\" }, outputs: { onBlur: \"blur\", onFocus: \"focus\", dialItemClick: \"dialItemClick\", open: \"open\", close: \"close\" }, host: { properties: { \"class.k-pos-fixed\": \"this.fixedClass\", \"class.k-pos-absolute\": \"this.absoluteClass\", \"attr.dir\": \"this.direction\" } }, providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatingactionbutton'\n }\n ], queries: [{ propertyName: \"dialItemTemplate\", first: true, predicate: DialItemTemplateDirective, descendants: true }, { propertyName: \"fabTemplate\", first: true, predicate: FloatingActionButtonTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"button\", first: true, predicate: [\"button\"], descendants: true, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }], ngImport: i0, template: `\n \n \n \n\n \n \n {{ text }}\n \n \n\n \n \n \n \n `, isInline: true, components: [{ type: DialListComponent, selector: \"[kendoDialList]\", inputs: [\"dialItems\", \"dialItemTemplate\", \"align\"] }], directives: [{ type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i8.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-floatingactionbutton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatingactionbutton'\n }\n ],\n template: `\n \n \n \n\n \n \n {{ text }}\n \n \n\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: FocusService }, { type: NavigationService }, { type: i0.NgZone }, { type: i3.PopupService }, { type: i4.AnimationBuilder }, { type: i1.LocalizationService }]; }, propDecorators: { fixedClass: [{\n type: HostBinding,\n args: ['class.k-pos-fixed']\n }], absoluteClass: [{\n type: HostBinding,\n args: ['class.k-pos-absolute']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], dialItemTemplate: [{\n type: ContentChild,\n args: [DialItemTemplateDirective, { static: false }]\n }], fabTemplate: [{\n type: ContentChild,\n args: [FloatingActionButtonTemplateDirective, { static: false }]\n }], themeColor: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], disabled: [{\n type: Input\n }], align: [{\n type: Input\n }], offset: [{\n type: Input\n }], positionMode: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], dialClass: [{\n type: Input\n }], text: [{\n type: Input\n }], dialItemAnimation: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], dialItems: [{\n type: Input\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], dialItemClick: [{\n type: Output,\n args: ['dialItemClick']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }] } });\n\nconst exportedModules = [\n FloatingActionButtonComponent,\n DialItemTemplateDirective,\n FloatingActionButtonTemplateDirective\n];\nconst declarations = [\n ...exportedModules,\n DialListComponent,\n DialItemComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the FloatingActionButton component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the FloatingActionButton module\n * import { FloatingActionButtonModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, FloatingActionButtonModule], // import FloatingActionButton module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * ```\n */\nclass FloatingActionButtonModule {\n}\nFloatingActionButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nFloatingActionButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonModule, declarations: [FloatingActionButtonComponent,\n DialItemTemplateDirective,\n FloatingActionButtonTemplateDirective, DialListComponent,\n DialItemComponent], imports: [CommonModule, PopupModule, ListModule, EventsModule], exports: [FloatingActionButtonComponent,\n DialItemTemplateDirective,\n FloatingActionButtonTemplateDirective] });\nFloatingActionButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonModule, imports: [[CommonModule, PopupModule, ListModule, EventsModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FloatingActionButtonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules],\n imports: [CommonModule, PopupModule, ListModule, EventsModule]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Buttons components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Buttons module\n * import { ButtonsModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonsModule], // import Buttons module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ButtonsModule {\n}\nButtonsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nButtonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonsModule, exports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule, FloatingActionButtonModule] });\nButtonsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonsModule, imports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule, FloatingActionButtonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ButtonsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule, FloatingActionButtonModule]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ButtonDirective as Button, ButtonDirective, ButtonGroupComponent as ButtonGroup, ButtonGroupComponent, ButtonGroupModule, ButtonItemTemplateDirective, ButtonModule, ButtonsModule, ChipComponent, ChipListComponent, ChipModule, DialItemTemplateDirective, DropDownButtonComponent as DropDownButton, DropDownButtonComponent, DropDownButtonModule, FloatingActionButtonComponent, FloatingActionButtonModule, FloatingActionButtonTemplateDirective, FocusableDirective, ListComponent, ListModule, LocalizedSplitButtonMessagesDirective, PreventableEvent, SplitButtonComponent as SplitButton, SplitButtonComponent, SplitButtonCustomMessagesComponent, SplitButtonModule, TemplateContextDirective };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { isDevMode, Directive, Optional, Injectable, SimpleChange, TemplateRef, Component, ChangeDetectionStrategy, Input, ContentChild, ElementRef, ViewChild, ViewChildren, EventEmitter, Output, ContentChildren, LOCALE_ID, Inject, InjectionToken, NgModule } from '@angular/core';\nimport * as i8 from '@progress/kendo-angular-common';\nimport { isDocumentAvailable, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport * as i4 from '@progress/kendo-angular-l10n';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { DateCategoryAxis, DateValueAxis, DomEventsBuilder as DomEventsBuilder$1, InstanceObserver, chartBaseTheme, Chart, StockChart, Sparkline } from '@progress/kendo-charts';\nimport { exportImage, exportSVG } from '@progress/kendo-drawing';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { auditTime, tap } from 'rxjs/operators';\nimport * as i1 from '@progress/kendo-angular-popup';\nimport { PopupService, POPUP_CONTAINER, PopupModule } from '@progress/kendo-angular-popup';\nimport * as i4$1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i3 from '@progress/kendo-angular-intl';\n\nconst getTouch = (domEvent) => {\n return {\n x: {\n location: domEvent.pageX\n },\n y: {\n location: domEvent.pageY\n }\n };\n};\nconst eventArgs = (e, previousArgs) => {\n const pointers = e.pointers;\n const pointer = pointers[0];\n const xLocation = pointer.pageX;\n const yLocation = pointer.pageY;\n let distance = 0;\n if (pointers.length > 1) {\n const pointer1 = pointers[0];\n const pointer2 = pointers[1];\n distance = Math.sqrt(Math.pow(pointer1.pageX - pointer2.pageX, 2) + Math.pow(pointer1.pageY - pointer2.pageY, 2));\n }\n return {\n distance: distance,\n event: e.srcEvent,\n preventDefault: function () {\n e.preventDefault();\n },\n target: e.target,\n touches: pointers.map(getTouch),\n type: e.type,\n x: {\n delta: previousArgs ? xLocation - previousArgs.x.location : 0,\n initialDelta: e.deltaX,\n location: xLocation,\n startLocation: xLocation - e.deltaX\n },\n y: {\n delta: previousArgs ? yLocation - previousArgs.y.location : 0,\n initialDelta: e.deltaY,\n location: yLocation,\n startLocation: yLocation - e.deltaY\n }\n };\n};\nfunction shouldBindGroup(groupNames, events) {\n for (let idx = 0; idx < groupNames.length; idx++) {\n if (events[groupNames[idx]]) {\n return true;\n }\n }\n return false;\n}\nconst eventGroups = [{\n end: 'panend',\n move: 'panmove',\n start: 'panstart'\n }, {\n gesturechange: 'pinchmove',\n gestureend: 'pinchend',\n gesturestart: 'pinchstart'\n }, {\n press: 'press'\n }, {\n tap: 'tap'\n }];\n/**\n * @hidden\n */\nclass DomEvents {\n constructor(hammerInstance, events) {\n this.hammerInstance = hammerInstance;\n this.eventHandlers = {};\n this.tap = this.tap.bind(this);\n this.press = this.press.bind(this);\n this.panstart = this.panstart.bind(this);\n this.panmove = this.panmove.bind(this);\n this.panend = this.panend.bind(this);\n this.pinchstart = this.pinchstart.bind(this);\n this.pinchmove = this.pinchmove.bind(this);\n this.pinchend = this.pinchend.bind(this);\n if (events) {\n this.bind(events);\n }\n }\n tap(e) {\n this.trigger('tap', e);\n }\n press(e) {\n this.trigger('press', e);\n }\n panstart(e) {\n delete this.previous;\n this.previous = this.trigger('start', e);\n }\n panmove(e) {\n this.previous = this.trigger('move', e);\n }\n panend(e) {\n this.trigger('end', e);\n delete this.previous;\n }\n pinchstart(e) {\n this.trigger('gesturestart', e);\n }\n pinchmove(e) {\n this.trigger('gesturechange', e);\n }\n pinchend(e) {\n this.trigger('gestureend', e);\n }\n trigger(name, e) {\n const args = eventArgs(e, this.previous);\n if (this.eventHandlers[name]) {\n this.eventHandlers[name](args);\n }\n return args;\n }\n bind(events = {}) {\n this.unbind();\n this.eventHandlers = events;\n for (let idx = 0; idx < eventGroups.length; idx++) {\n const eventGroup = eventGroups[idx];\n const groupNames = Object.keys(eventGroup);\n if (shouldBindGroup(groupNames, events)) {\n for (let nameIdx = 0; nameIdx < groupNames.length; nameIdx++) {\n const name = eventGroup[groupNames[nameIdx]];\n this.hammerInstance.on(name, this[name]);\n }\n }\n }\n }\n unbind() {\n if (this.hammerInstance) {\n this.hammerInstance.off();\n }\n this.eventHandlers = {};\n }\n destroy() {\n if (this.hammerInstance) {\n this.hammerInstance.destroy();\n delete this.hammerInstance;\n }\n delete this.eventHandlers;\n }\n toggleDrag(enable) {\n this.toggle('pan', enable);\n }\n toggleZoom(enable) {\n this.toggle('pinch', enable);\n }\n toggle(recognizer, enable) {\n if (this.hammerInstance) {\n const instanceRecognizer = this.hammerInstance.get(recognizer);\n instanceRecognizer.set({\n enable: enable\n });\n }\n }\n}\n\nconst MISSING_HAMMER_MESSAGE = 'Hammerjs is not loaded.' +\n 'Solution: http://www.telerik.com/kendo-angular-ui/components/charts/troubleshooting/#toc-hammerjs-is-not-loaded';\n/**\n * @hidden\n */\nclass DomEventsBuilder {\n static create(element, events) {\n if (typeof window !== 'undefined') {\n const HAMMER = window.Hammer;\n if (!HAMMER) {\n if (isDevMode()) {\n throw new Error(MISSING_HAMMER_MESSAGE);\n }\n return;\n }\n const hammerInstance = new HAMMER(element, {\n recognizers: [\n [HAMMER.Tap],\n [HAMMER.Pan],\n [HAMMER.Pinch],\n [HAMMER.Press, { time: 0 }]\n ]\n });\n return new DomEvents(hammerInstance, events);\n }\n }\n}\n\nconst dateCategoryAxisFormats = DateCategoryAxis.prototype.options.labels.dateFormats;\nconst dateValueAxisFormats = DateValueAxis.prototype.options.labels.dateFormats;\nconst dateFormats = {\n milliseconds: \"HH:mm:ss.SSS\",\n seconds: { time: 'medium' },\n minutes: { time: 'short' },\n hours: { time: 'short' },\n days: { skeleton: 'Md' },\n weeks: { skeleton: 'Md' },\n months: { skeleton: 'yyMMM' },\n years: { skeleton: 'y' }\n};\nObject.assign(dateCategoryAxisFormats, dateFormats);\nObject.assign(dateValueAxisFormats, dateFormats);\nDomEventsBuilder$1.register(DomEventsBuilder);\n\n/**\n * A directive which selects a [template]({{ site.data.urls.angular['templatesyntax'] }})\n * within the `` component for the\n * [Donut center template]({% slug donut_seriestypes_charts %}).\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

22.5%

\n * of which renewables\n *
\n * \n * \n * \n * \n * \n *
\n * `\n * })\n * export class AppComponent {\n * public data: any[] = [{\n * kind: 'Hydroelectric', share: 0.175\n * }, {\n * kind: 'Nuclear', share: 0.238\n * }, {\n * kind: 'Coal', share: 0.118\n * }, {\n * kind: 'Solar', share: 0.052\n * }, {\n * kind: 'Wind', share: 0.225\n * }, {\n * kind: 'Other', share: 0.192\n * }];\n * }\n *\n * ```\n */\nclass DonutCenterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDonutCenterTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DonutCenterTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDonutCenterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DonutCenterTemplateDirective, selector: \"[kendoChartDonutCenterTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DonutCenterTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoChartDonutCenterTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nclass ItemChange {\n constructor(sender, options) {\n this.sender = sender;\n this.options = options;\n }\n}\n/**\n * @hidden\n */\nclass CollectionService {\n constructor() {\n this.source = new Subject();\n this.onItemChange$ = this.source.asObservable();\n }\n notify(change) {\n this.source.next(change);\n }\n}\nCollectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CollectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nCollectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CollectionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CollectionService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\n/**\n * @hidden\n */\nfunction copyChanges(changes, options) {\n for (const propertyName in changes) {\n if (!changes.hasOwnProperty(propertyName)) {\n continue;\n }\n const value = changes[propertyName].currentValue;\n if (value === undefined) {\n delete options[propertyName];\n }\n else {\n options[propertyName] = value;\n }\n }\n}\n\n/**\n * @hidden\n */\nfunction toSimpleChanges(changes) {\n const result = {};\n for (const propertyName in changes) {\n if (!changes.hasOwnProperty(propertyName)) {\n continue;\n }\n result[propertyName] = new SimpleChange(null, changes[propertyName], false);\n }\n return result;\n}\n\n/**\n * @hidden\n */\nconst THROTTLE_MS = 1000 / 60;\n/**\n * @hidden\n */\nclass Change {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n}\n/**\n * @hidden\n */\nclass ConfigurationService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.store = {};\n this.source = new BehaviorSubject({});\n this.initSource();\n }\n initSource() {\n this.onFastChange$ = this.source.asObservable();\n this.onChange$ = this.onFastChange$.pipe(auditTime(THROTTLE_MS));\n }\n push(store) {\n this.store = store;\n this.next();\n }\n notify(change) {\n this.set(change.key, change.value);\n this.next();\n }\n set(field, value) {\n let store = this.store;\n const parts = field.split('.');\n let key = parts.shift();\n while (parts.length > 0) {\n store = store[key] = store[key] || {};\n key = parts.shift();\n }\n store[key] = value;\n }\n next() {\n this.ngZone.runOutsideAngular(() => {\n this.source.next(this.store);\n });\n }\n}\nConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ConfigurationService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ConfigurationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ConfigurationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\n/**\n * @hidden\n */\nclass CollectionItemComponent {\n constructor(configurationService, collectionService) {\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.options = {};\n this.subscription = configurationService.onFastChange$.subscribe(store => {\n this.options = store;\n this.notify();\n });\n }\n ngOnChanges(changes) {\n const store = this.configurationService.store;\n copyChanges(changes, store);\n this.configurationService.push(store);\n }\n /**\n * Updates the component fields with the specified values and refreshes the Chart.\n *\n * Use this method when the configuration values cannot be set through the template.\n *\n * @example\n * ```ts-no-run\n * item.notifyChanges({ visible: true });\n * ```\n *\n * @param changes An object containing the updated input fields.\n */\n notifyChanges(changes) {\n this.ngOnChanges(toSimpleChanges(changes));\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n notify() {\n if (!this.collectionService) {\n return;\n }\n this.collectionService.notify(new ItemChange(this, this.options));\n }\n}\nCollectionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CollectionItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Directive });\nCollectionItemComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CollectionItemComponent, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CollectionItemComponent, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; } });\n\n/**\n * @hidden\n */\nclass SettingsComponent {\n constructor(configKey, configurationService) {\n this.configKey = configKey;\n this.configurationService = configurationService;\n this.store = {};\n if (configKey === undefined) {\n throw new Error('Configuration key not set');\n }\n }\n ngOnDestroy() {\n this.store = undefined;\n this.notify();\n }\n ngOnChanges(changes) {\n copyChanges(changes, this.store);\n this.notify();\n }\n /**\n * Updates the component fields with the specified values and refreshes the Chart.\n *\n * Use this method when the configuration values cannot be set through the template.\n *\n * @example\n * ```ts-no-run\n * item.notifyChanges({ visible: true });\n * ```\n *\n * @param changes An object containing the updated input fields.\n */\n notifyChanges(changes) {\n this.ngOnChanges(toSimpleChanges(changes));\n }\n markAsVisible() {\n this.store.visible = true;\n this.notify();\n }\n notify() {\n this.configurationService.notify(new Change(this.configKey, this.store));\n }\n}\nSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SettingsComponent, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive });\nSettingsComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SettingsComponent, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SettingsComponent, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: undefined }, { type: ConfigurationService }]; } });\n\n/**\n * The configuration options of the Chart series tooltip\n * ([see example]({% slug tooltips_chart_charts %})).\n */\nclass SeriesTooltipComponent extends SettingsComponent {\n constructor(configurationService) {\n super('tooltip', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n get seriesTooltipTemplateRef() {\n return this.seriesTooltipTemplate;\n }\n}\nSeriesTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesTooltipComponent, selector: \"kendo-chart-series-item-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, queries: [{ propertyName: \"seriesTooltipTemplate\", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }], seriesTooltipTemplate: [{\n type: ContentChild,\n args: [TemplateRef, { static: false }]\n }] } });\n\nconst toggle = (flag) => flag === undefined ? false : !flag;\n/**\n * The configuration component for a series item.\n */\nclass SeriesItemComponent extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n /**\n * Toggles the series visibility and updates the parent Chart\n * without animated transitions.\n */\n toggleVisibility() {\n this.options.visible = toggle(this.options.visible);\n this.notify();\n }\n /**\n * Toggles the visibility of a point with the given index.\n * Applicable for the Pie, Donut, and Funnel series.\n *\n * @param pointIndex - The zero-based index of the point to toggle.\n */\n togglePointVisibility(pointIndex) {\n const pv = this.options.pointVisibility = this.options.pointVisibility || {};\n pv[pointIndex] = toggle(pv[pointIndex]);\n this.notify();\n }\n get seriesTooltipTemplateRef() {\n if (this.seriesTooltip) {\n return this.seriesTooltip.seriesTooltipTemplateRef;\n }\n }\n}\nSeriesItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesItemComponent, selector: \"kendo-chart-series-item\", inputs: { aggregate: \"aggregate\", autoFit: \"autoFit\", axis: \"axis\", border: \"border\", categoryAxis: \"categoryAxis\", categoryField: \"categoryField\", closeField: \"closeField\", color: \"color\", colorField: \"colorField\", connectors: \"connectors\", currentField: \"currentField\", dashType: \"dashType\", data: \"data\", downColor: \"downColor\", downColorField: \"downColorField\", dynamicHeight: \"dynamicHeight\", dynamicSlope: \"dynamicSlope\", errorHighField: \"errorHighField\", errorLowField: \"errorLowField\", explodeField: \"explodeField\", field: \"field\", fromField: \"fromField\", gap: \"gap\", highField: \"highField\", holeSize: \"holeSize\", line: \"line\", lowField: \"lowField\", lowerField: \"lowerField\", margin: \"margin\", maxSize: \"maxSize\", mean: \"mean\", meanField: \"meanField\", median: \"median\", medianField: \"medianField\", minSize: \"minSize\", missingValues: \"missingValues\", name: \"name\", neckRatio: \"neckRatio\", negativeColor: \"negativeColor\", negativeValues: \"negativeValues\", noteTextField: \"noteTextField\", opacity: \"opacity\", openField: \"openField\", outliersField: \"outliersField\", overlay: \"overlay\", padding: \"padding\", q1Field: \"q1Field\", q3Field: \"q3Field\", segmentSpacing: \"segmentSpacing\", size: \"size\", sizeField: \"sizeField\", spacing: \"spacing\", stack: \"stack\", startAngle: \"startAngle\", style: \"style\", summaryField: \"summaryField\", target: \"target\", toField: \"toField\", type: \"type\", upperField: \"upperField\", visible: \"visible\", visibleInLegend: \"visibleInLegend\", visibleInLegendField: \"visibleInLegendField\", visual: \"visual\", width: \"width\", whiskers: \"whiskers\", xAxis: \"xAxis\", xErrorHighField: \"xErrorHighField\", xErrorLowField: \"xErrorLowField\", xField: \"xField\", yAxis: \"yAxis\", yErrorHighField: \"yErrorHighField\", yErrorLowField: \"yErrorLowField\", yField: \"yField\", zIndex: \"zIndex\", errorBars: \"errorBars\", extremes: \"extremes\", highlight: \"highlight\", labels: \"labels\", markers: \"markers\", notes: \"notes\", outliers: \"outliers\", tooltip: \"tooltip\" }, providers: [ConfigurationService], queries: [{ propertyName: \"seriesTooltip\", first: true, predicate: SeriesTooltipComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-series-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { aggregate: [{\n type: Input\n }], autoFit: [{\n type: Input\n }], axis: [{\n type: Input\n }], border: [{\n type: Input\n }], categoryAxis: [{\n type: Input\n }], categoryField: [{\n type: Input\n }], closeField: [{\n type: Input\n }], color: [{\n type: Input\n }], colorField: [{\n type: Input\n }], connectors: [{\n type: Input\n }], currentField: [{\n type: Input\n }], dashType: [{\n type: Input\n }], data: [{\n type: Input\n }], downColor: [{\n type: Input\n }], downColorField: [{\n type: Input\n }], dynamicHeight: [{\n type: Input\n }], dynamicSlope: [{\n type: Input\n }], errorHighField: [{\n type: Input\n }], errorLowField: [{\n type: Input\n }], explodeField: [{\n type: Input\n }], field: [{\n type: Input\n }], fromField: [{\n type: Input\n }], gap: [{\n type: Input\n }], highField: [{\n type: Input\n }], holeSize: [{\n type: Input\n }], line: [{\n type: Input\n }], lowField: [{\n type: Input\n }], lowerField: [{\n type: Input\n }], margin: [{\n type: Input\n }], maxSize: [{\n type: Input\n }], mean: [{\n type: Input\n }], meanField: [{\n type: Input\n }], median: [{\n type: Input\n }], medianField: [{\n type: Input\n }], minSize: [{\n type: Input\n }], missingValues: [{\n type: Input\n }], name: [{\n type: Input\n }], neckRatio: [{\n type: Input\n }], negativeColor: [{\n type: Input\n }], negativeValues: [{\n type: Input\n }], noteTextField: [{\n type: Input\n }], opacity: [{\n type: Input\n }], openField: [{\n type: Input\n }], outliersField: [{\n type: Input\n }], overlay: [{\n type: Input\n }], padding: [{\n type: Input\n }], q1Field: [{\n type: Input\n }], q3Field: [{\n type: Input\n }], segmentSpacing: [{\n type: Input\n }], size: [{\n type: Input\n }], sizeField: [{\n type: Input\n }], spacing: [{\n type: Input\n }], stack: [{\n type: Input\n }], startAngle: [{\n type: Input\n }], style: [{\n type: Input\n }], summaryField: [{\n type: Input\n }], target: [{\n type: Input\n }], toField: [{\n type: Input\n }], type: [{\n type: Input\n }], upperField: [{\n type: Input\n }], visible: [{\n type: Input\n }], visibleInLegend: [{\n type: Input\n }], visibleInLegendField: [{\n type: Input\n }], visual: [{\n type: Input\n }], width: [{\n type: Input\n }], whiskers: [{\n type: Input\n }], xAxis: [{\n type: Input\n }], xErrorHighField: [{\n type: Input\n }], xErrorLowField: [{\n type: Input\n }], xField: [{\n type: Input\n }], yAxis: [{\n type: Input\n }], yErrorHighField: [{\n type: Input\n }], yErrorLowField: [{\n type: Input\n }], yField: [{\n type: Input\n }], zIndex: [{\n type: Input\n }], errorBars: [{\n type: Input\n }], extremes: [{\n type: Input\n }], highlight: [{\n type: Input\n }], labels: [{\n type: Input\n }], markers: [{\n type: Input\n }], notes: [{\n type: Input\n }], outliers: [{\n type: Input\n }], tooltip: [{\n type: Input\n }], seriesTooltip: [{\n type: ContentChild,\n args: [SeriesTooltipComponent, { static: false }]\n }] } });\n\nconst POSITION_MODE = 'absolute';\nconst COLLISION = { horizontal: \"fit\", vertical: \"fit\" };\n/**\n * @hidden\n */\nclass BaseTooltip {\n constructor(popupService, localizationService) {\n this.popupService = popupService;\n this.localizationService = localizationService;\n this.style = {};\n this.popupRef = null;\n }\n get active() {\n return this.popupRef !== null;\n }\n show(e) {\n const align = e.anchor.align;\n const offset = this.position(e.anchor.point);\n this.style = e.style;\n if (!this.popupRef) {\n this.popupRef = this.popupService.open(Object.assign({\n offset: offset,\n popupAlign: align,\n animate: this.animate,\n content: this.templateRef,\n collision: COLLISION,\n positionMode: POSITION_MODE\n }, this.popupSettings));\n if (this.localizationService.rtl) {\n this.popupRef.popupElement.setAttribute('dir', 'rtl');\n }\n this.onInit();\n }\n else {\n const popup = this.popupRef.popup.instance;\n popup.offset = offset;\n popup.popupAlign = align;\n }\n }\n hide() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n onInit() {\n }\n ngOnDestroy() {\n this.hide();\n }\n position(offset) {\n if (!this.popupSettings || !this.popupSettings.appendTo) {\n return offset;\n }\n const appendTo = this.popupSettings.appendTo.element.nativeElement;\n const bbox = appendTo.getBoundingClientRect();\n const { scrollLeft, scrollTop } = this.scrollOffset(appendTo);\n return {\n left: offset.left - bbox.left - scrollLeft,\n top: offset.top - bbox.top - scrollTop\n };\n }\n scrollOffset(element) {\n if (!element) {\n return null;\n }\n let scrollLeft = element.scrollLeft;\n let scrollTop = element.scrollTop;\n let parent = element.parentElement;\n while (parent) {\n scrollLeft += parent.scrollLeft;\n scrollTop += parent.scrollTop;\n parent = parent.parentElement;\n }\n return { scrollLeft, scrollTop };\n }\n}\nBaseTooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BaseTooltip, deps: [{ token: i1.PopupService }, { token: i4.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nBaseTooltip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: BaseTooltip, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BaseTooltip, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i1.PopupService }, { type: i4.LocalizationService }]; } });\n\n/**\n * @hidden\n */\nfunction bodyFactory() {\n if (isDocumentAvailable()) {\n return new ElementRef(document.body);\n }\n}\n\n/**\n * @hidden\n */\nclass CrosshairTooltipComponent extends BaseTooltip {\n constructor(popupService, localizationService) {\n super(popupService, localizationService);\n this.animate = false;\n }\n show(e) {\n super.show(e);\n this.value = e.value;\n this.popupRef.popup.changeDetectorRef.detectChanges();\n }\n}\nCrosshairTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CrosshairTooltipComponent, deps: [{ token: i1.PopupService }, { token: i4.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nCrosshairTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CrosshairTooltipComponent, selector: \"kendo-chart-crosshair-tooltip\", inputs: { key: \"key\", popupSettings: \"popupSettings\" }, providers: [PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: bodyFactory\n }], viewQueries: [{ propertyName: \"templateRef\", first: true, predicate: [\"content\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `\n \n
\n {{ value }}\n
\n
\n `, isInline: true, directives: [{ type: i4$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CrosshairTooltipComponent, decorators: [{\n type: Component,\n args: [{\n providers: [PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: bodyFactory\n }],\n selector: 'kendo-chart-crosshair-tooltip',\n template: `\n \n
\n {{ value }}\n
\n
\n `\n }]\n }], ctorParameters: function () { return [{ type: i1.PopupService }, { type: i4.LocalizationService }]; }, propDecorators: { templateRef: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], key: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }] } });\n\nconst AXES = [\"categoryAxis\", \"valueAxis\", \"xAxis\", \"yAxis\"];\n/**\n * @hidden\n */\nclass CrosshairTooltipsContainerComponent {\n constructor() {\n this.tooltipKeys = [];\n this.tooltipsMap = {};\n }\n show(e) {\n const tooltipComponents = this.crossahirTooltipComponents.toArray();\n const axisName = e.axisName;\n const axisIndex = e.axisIndex;\n for (let idx = 0; idx < tooltipComponents.length; idx++) {\n if (tooltipComponents[idx].key === axisName + axisIndex) {\n tooltipComponents[idx].show(e);\n break;\n }\n }\n }\n hide() {\n const tooltipComponents = this.crossahirTooltipComponents.toArray();\n for (let idx = 0; idx < tooltipComponents.length; idx++) {\n tooltipComponents[idx].hide();\n }\n }\n get active() {\n return this.tooltipKeys.length > 0;\n }\n createCrosshairTooltips(options) {\n const newMap = this.mapTooltips(options);\n const map = this.tooltipsMap;\n for (let key in map) {\n if (!newMap[key]) {\n this.removeTooltip(key);\n delete map[key];\n }\n }\n for (let key in newMap) {\n if (!map[key]) {\n map[key] = newMap[key];\n this.tooltipKeys.push(key);\n }\n }\n }\n removeTooltip(key) {\n const keys = this.tooltipKeys;\n for (let idx = 0; idx < keys.length; idx++) {\n if (keys[idx] === key) {\n keys.splice(idx, 1);\n break;\n }\n }\n }\n mapTooltips(options) {\n const map = {};\n for (let idx = 0; idx < AXES.length; idx++) {\n const tooltips = this.axesCrosshairTooltipOptions(options, AXES[idx]);\n for (let tooltipIdx = 0; tooltipIdx < tooltips.length; tooltipIdx++) {\n const tooltip = tooltips[tooltipIdx];\n map[tooltip.name + tooltip.index] = tooltip;\n }\n }\n return map;\n }\n axesCrosshairTooltipOptions(options, name) {\n const result = [];\n if (options[name]) {\n const axes = [].concat(options[name]);\n for (let idx = 0; idx < axes.length; idx++) {\n const tooltip = (axes[idx].crosshair || {}).tooltip;\n if (tooltip && tooltip.visible) {\n result.push({\n index: idx,\n name: name\n });\n }\n }\n }\n return result;\n }\n}\nCrosshairTooltipsContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CrosshairTooltipsContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCrosshairTooltipsContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CrosshairTooltipsContainerComponent, selector: \"kendo-chart-crosshair-tooltips-container\", inputs: { popupSettings: \"popupSettings\" }, viewQueries: [{ propertyName: \"crossahirTooltipComponents\", predicate: CrosshairTooltipComponent, descendants: true }], ngImport: i0, template: `\n \n \n `, isInline: true, components: [{ type: CrosshairTooltipComponent, selector: \"kendo-chart-crosshair-tooltip\", inputs: [\"key\", \"popupSettings\"] }], directives: [{ type: i4$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CrosshairTooltipsContainerComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-chart-crosshair-tooltips-container',\n template: `\n \n \n `\n }]\n }], propDecorators: { popupSettings: [{\n type: Input\n }], crossahirTooltipComponents: [{\n type: ViewChildren,\n args: [CrosshairTooltipComponent]\n }] } });\n\n/**\n * A directive that selects a [template]({{ site.data.urls.angular['templatesyntax'] }})\n * within the `` component for the\n * [series tooltip]({% slug tooltips_chart_charts %}#toc-series-tooltip).\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Value is {{value}}\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nclass SeriesTooltipTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nSeriesTooltipTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesTooltipTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nSeriesTooltipTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesTooltipTemplateDirective, selector: \"[kendoChartSeriesTooltipTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesTooltipTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoChartSeriesTooltipTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * A directive that selects a [template]({{ site.data.urls.angular['templatesyntax'] }})\n * within the `` component for the\n * [shared series tooltip]({% slug tooltips_chart_charts %}#toc-shared-tooltip).\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n *
{{ category }}
\n *
\n * {{ point.series.name }} : {{ point.value }}\n *
\n *
\n *
\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
\n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nclass SharedTooltipTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nSharedTooltipTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedTooltipTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nSharedTooltipTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SharedTooltipTemplateDirective, selector: \"[kendoChartSharedTooltipTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedTooltipTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoChartSharedTooltipTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * The point that is passed to the tooltip template.\n */\nclass TooltipTemplatePoint {\n /**\n * @hidden\n */\n constructor(point, format, template) {\n this.value = point.value;\n this.category = point.category;\n this.categoryIndex = point.categoryIx;\n this.series = point.series;\n this.dataItem = point.dataItem;\n this.percentage = point.percentage;\n this.runningTotal = point.runningTotal;\n this.total = point.total;\n this.low = point.low;\n this.high = point.high;\n this.xLow = point.xLow;\n this.xHigh = point.xHigh;\n this.yLow = point.yLow;\n this.yHigh = point.yHigh;\n this.template = template;\n this.point = point;\n this.format = format;\n }\n /**\n * @hidden\n */\n get formattedValue() {\n return this.format ? this.point.formatValue(this.format) : String(this.value);\n }\n}\n\n/**\n * @hidden\n */\nfunction hasParent(element, parent) {\n let current = element;\n while (current && current !== parent) {\n current = current.parentNode;\n }\n return current ? true : false;\n}\n\n/**\n * @hidden\n */\nclass TooltipTemplateService {\n setTemplate(template) {\n this.template = template;\n }\n getTemplate(seriesIndex) {\n if (this.seriesTemplates && this.seriesTemplates[seriesIndex]) {\n return this.seriesTemplates[seriesIndex];\n }\n return this.template;\n }\n setSeriesTemplates(seriesTemplates) {\n this.seriesTemplates = seriesTemplates;\n }\n setSharedTemplate(sharedTemplate) {\n this.sharedTemplate = sharedTemplate;\n }\n getSharedTemplate() {\n return this.sharedTemplate;\n }\n}\nTooltipTemplateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TooltipTemplateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nTooltipTemplateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TooltipTemplateService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TooltipTemplateService, decorators: [{\n type: Injectable\n }] });\n\nconst SHARED_TOOLTIP_CLASS = 'k-chart-shared-tooltip';\nconst TOOLTIP_CLASS = \"k-chart-tooltip\";\n/**\n * @hidden\n */\nclass TooltipPopupComponent extends BaseTooltip {\n constructor(popupService, templateService, localizationService, ngZone) {\n super(popupService, localizationService);\n this.popupService = popupService;\n this.templateService = templateService;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.seriesTooltipContext = {};\n this.seriesSharedTooltipContext = {};\n this.animate = true;\n this.wrapperClass = 'k-chart-tooltip-wrapper';\n this.leave = new EventEmitter();\n this.popupClasses = {};\n }\n show(e) {\n this.shared = e.shared;\n this.popupClasses = Object.assign({\n [SHARED_TOOLTIP_CLASS]: e.shared,\n [TOOLTIP_CLASS]: true,\n [e.className]: !!e.className\n }, this.classNames);\n if (!e.shared) {\n this.seriesTooltipContext = new TooltipTemplatePoint(e.point, e.format);\n this.seriesTooltipTemplateRef = this.pointTemplateRef(e.point);\n }\n else {\n this.seriesSharedTooltipTemplateRef = this.templateService.getSharedTemplate()\n || this.defaultSharedTooltipTemplate.templateRef;\n this.seriesSharedTooltipContext = this.sharedTemplateContext(e);\n }\n super.show(e);\n }\n containsElement(element) {\n if (this.popupRef) {\n return hasParent(element, this.popupRef.popupElement);\n }\n }\n sharedTemplateContext(e) {\n const points = e.points;\n const nameColumn = points.filter((point) => typeof point.series.name !== 'undefined').length > 0;\n const colorMarker = e.series.length > 1;\n let colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\n return {\n category: e.category,\n categoryText: e.categoryText,\n colorMarker: colorMarker,\n colspan: colspan,\n nameColumn: nameColumn,\n points: this.wrapPoints(e.points, e.format)\n };\n }\n pointTemplateRef(point) {\n return this.templateService.getTemplate(point.series.index) || this.defaultSeriesTooltipTemplate.templateRef;\n }\n wrapPoints(points, format) {\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n const template = this.pointTemplateRef(point);\n const pointFormat = ((point.options || {}).tooltip || {}).format || format;\n result.push(new TooltipTemplatePoint(point, pointFormat, template));\n }\n return result;\n }\n onInit() {\n this.ngZone.runOutsideAngular(() => {\n this.mouseleaveSubscription = this.popupRef.popupElement.addEventListener('mouseleave', (args) => {\n this.leave.emit(args);\n });\n });\n this.popupRef.popupElement.className += ` ${this.wrapperClass}`;\n }\n hide() {\n if (this.mouseleaveSubscription) {\n this.mouseleaveSubscription();\n this.mouseleaveSubscription = null;\n }\n super.hide();\n }\n}\nTooltipPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TooltipPopupComponent, deps: [{ token: i1.PopupService }, { token: TooltipTemplateService }, { token: i4.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nTooltipPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TooltipPopupComponent, selector: \"kendo-chart-tooltip-popup\", inputs: { animate: \"animate\", classNames: \"classNames\", popupSettings: \"popupSettings\", wrapperClass: \"wrapperClass\" }, outputs: { leave: \"leave\" }, providers: [PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: bodyFactory\n }], viewQueries: [{ propertyName: \"defaultSeriesTooltipTemplate\", first: true, predicate: SeriesTooltipTemplateDirective, descendants: true }, { propertyName: \"defaultSharedTooltipTemplate\", first: true, predicate: SharedTooltipTemplateDirective, descendants: true }, { propertyName: \"templateRef\", first: true, predicate: [\"content\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `\n \n
\n \n \n \n \n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n
{{ categoryText }}
\n {{ point.series.name }}\n  \n \n \n \n
\n
\n `, isInline: true, directives: [{ type: i4$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i4$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i4$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i4$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: SeriesTooltipTemplateDirective, selector: \"[kendoChartSeriesTooltipTemplate]\" }, { type: SharedTooltipTemplateDirective, selector: \"[kendoChartSharedTooltipTemplate]\" }, { type: i4$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TooltipPopupComponent, decorators: [{\n type: Component,\n args: [{\n providers: [PopupService, {\n provide: POPUP_CONTAINER,\n useFactory: bodyFactory\n }],\n selector: 'kendo-chart-tooltip-popup',\n template: `\n \n
\n \n \n \n \n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n
{{ categoryText }}
\n {{ point.series.name }}\n  \n \n \n \n
\n
\n `\n }]\n }], ctorParameters: function () { return [{ type: i1.PopupService }, { type: TooltipTemplateService }, { type: i4.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { defaultSeriesTooltipTemplate: [{\n type: ViewChild,\n args: [SeriesTooltipTemplateDirective, { static: false }]\n }], defaultSharedTooltipTemplate: [{\n type: ViewChild,\n args: [SharedTooltipTemplateDirective, { static: false }]\n }], templateRef: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], animate: [{\n type: Input\n }], classNames: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], wrapperClass: [{\n type: Input\n }], leave: [{\n type: Output\n }] } });\n\n/**\n * @hidden\n */\nclass ChartInstanceObserver extends InstanceObserver {\n constructor(instance) {\n super(instance);\n this.handlerMap = {\n hideTooltip: 'onHideTooltip',\n legendItemClick: 'onLegendItemClick',\n render: 'onRender',\n showTooltip: 'onShowTooltip',\n init: 'onInit'\n };\n }\n}\n\n/**\n * @hidden\n */\nclass BaseEvent {\n /**\n * @hidden\n */\n constructor(sender) {\n this.sender = sender;\n }\n}\nBaseEvent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BaseEvent, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive });\nBaseEvent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: BaseEvent, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BaseEvent, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: undefined }]; } });\n\n/**\n * Arguments for the `axisLabelClick` event.\n */\nclass AxisLabelClickEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.dataItem = e.dataItem;\n this.index = e.index;\n this.text = e.text;\n this.value = e.value;\n }\n}\n\n/**\n * @hidden\n */\nclass PreventableEvent extends BaseEvent {\n constructor() {\n super(...arguments);\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\nPreventableEvent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PreventableEvent, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nPreventableEvent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PreventableEvent, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PreventableEvent, decorators: [{\n type: Directive\n }] });\n\n/**\n * Arguments for the `drag` event.\n */\nclass DragEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `dragEnd` event.\n */\nclass DragEndEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `dragStart` event.\n */\nclass DragStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * @hidden\n */\nclass LegendEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.series = e.series;\n this.seriesIndex = e.seriesIndex;\n this.pointIndex = e.pointIndex;\n this.text = e.text;\n }\n}\n\n/**\n * Arguments for the `legendItemHover` event.\n */\nclass LegendItemHoverEvent extends LegendEvent {\n /**\n * If called, the series highlight is not shown as a result of hovering over the legend item.\n */\n preventDefault() {\n super.preventDefault();\n }\n}\n\n/* eslint-disable no-empty */\n/**\n * Arguments for the `legendItemLeave` event.\n */\nclass LegendItemLeaveEvent extends LegendEvent {\n /**\n * @hidden\n */\n preventDefault() {\n }\n /**\n * @hidden\n */\n isDefaultPrevented() {\n return false;\n }\n}\n\n/**\n * @hidden\n */\nclass NoteEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.dataItem = e.dataItem;\n this.series = e.series;\n this.value = e.value;\n this.visual = e.visual;\n }\n}\n\n/**\n * Arguments for the `noteClick` event.\n */\nclass NoteClickEvent extends NoteEvent {\n}\n\n/**\n * Arguments for the `noteHover` event.\n */\nclass NoteHoverEvent extends NoteEvent {\n}\n\n/**\n * Arguments for the `noteLeave` event.\n */\nclass NoteLeaveEvent extends NoteEvent {\n}\n\n/**\n * Arguments for the `paneRender` event.\n */\nclass PaneRenderEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(args, sender) {\n super(sender);\n Object.assign(this, args);\n }\n}\n\n/**\n * Arguments for the `plotAreaClick` event.\n */\nclass PlotAreaClickEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.originalEvent = e.originalEvent;\n this.value = e.value;\n this.x = e.x;\n this.y = e.y;\n }\n}\n\n/**\n * Arguments for the `plotAreaHover` event.\n */\nclass PlotAreaHoverEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.originalEvent = e.originalEvent;\n this.value = e.value;\n this.x = e.x;\n this.y = e.y;\n }\n}\n\nclass PlotAreaLeaveEvent extends BaseEvent {\n}\n\n/**\n * Arguments for the `render` event.\n */\nclass RenderEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(_e, sender) {\n super(sender);\n }\n}\n\n/**\n * Arguments for the `select` event.\n */\nclass SelectEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n/**\n * Arguments for the `selectEnd` event.\n */\nclass SelectEndEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n/**\n * Arguments for the `selectStart` event.\n */\nclass SelectStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axis = e.axis;\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n/**\n * Arguments for the `seriesClick` event.\n */\nclass SeriesClickEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.dataItem = e.dataItem;\n this.originalEvent = e.originalEvent;\n this.percentage = e.percentage;\n this.point = e.point;\n this.series = e.series;\n this.stackValue = e.stackValue;\n this.value = e.value;\n }\n}\n\n/**\n * @hidden\n */\nclass SeriesEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.category = e.category;\n this.dataItem = e.dataItem;\n this.originalEvent = e.originalEvent;\n this.percentage = e.percentage;\n this.point = e.point;\n this.series = e.series;\n this.stackValue = e.stackValue;\n this.value = e.value;\n }\n}\n\n/**\n * Arguments for the `seriesHover` event.\n */\nclass SeriesHoverEvent extends SeriesEvent {\n}\n\n/**\n * Arguments for the `seriesOver` event.\n */\nclass SeriesOverEvent extends SeriesEvent {\n}\n\n/**\n * Arguments for the `seriesLeave` event.\n */\nclass SeriesLeaveEvent extends SeriesEvent {\n}\n\n/**\n * Arguments for the `zoom` event.\n */\nclass ZoomEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.delta = e.delta;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `zoomEnd` event.\n */\nclass ZoomEndEvent extends BaseEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\n/**\n * Arguments for the `zoomStart` event.\n */\nclass ZoomStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(e, sender) {\n super(sender);\n this.axisRanges = e.axisRanges;\n this.originalEvent = e.originalEvent;\n }\n}\n\nconst EVENT_MAP$1 = {\n axisLabelClick: AxisLabelClickEvent,\n drag: DragEvent,\n dragEnd: DragEndEvent,\n dragStart: DragStartEvent,\n legendItemHover: LegendItemHoverEvent,\n legendItemLeave: LegendItemLeaveEvent,\n noteClick: NoteClickEvent,\n noteHover: NoteHoverEvent,\n noteLeave: NoteLeaveEvent,\n paneRender: PaneRenderEvent,\n plotAreaClick: PlotAreaClickEvent,\n plotAreaHover: PlotAreaHoverEvent,\n plotAreaLeave: PlotAreaLeaveEvent,\n render: RenderEvent,\n select: SelectEvent,\n selectEnd: SelectEndEvent,\n selectStart: SelectStartEvent,\n seriesClick: SeriesClickEvent,\n seriesHover: SeriesHoverEvent,\n seriesOver: SeriesOverEvent,\n seriesLeave: SeriesLeaveEvent,\n zoom: ZoomEvent,\n zoomEnd: ZoomEndEvent,\n zoomStart: ZoomStartEvent\n};\n/**\n * @hidden\n */\nclass InstanceEventService {\n create(name, args, sender) {\n if (EVENT_MAP$1[name]) {\n return new EVENT_MAP$1[name](args, sender);\n }\n }\n}\n\n/**\n * Arguments for the `legendItemClick` event.\n */\nclass LegendItemClickEvent extends LegendEvent {\n /**\n * If called, the series visibility is not toggled as a result of clicking the legend item.\n */\n preventDefault() {\n super.preventDefault();\n }\n}\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-charts',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1657258836,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * Fallback theme in case the Theme Service fails\n * to read the variables from the main theme.\n *\n * @hidden\n */\nconst chartDefaultTheme = () => Object.assign({}, chartBaseTheme(), {\n axisDefaults: {\n crosshair: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n labels: {\n color: 'rgb(101, 101, 101)',\n font: '12px serif'\n },\n line: {\n color: 'rgba(0, 0, 0, 0.08)'\n },\n majorGridLines: {\n color: 'rgba(0, 0, 0, 0.08)'\n },\n minorGridLines: {\n color: 'rgba(0, 0, 0, 0.04)'\n },\n notes: {\n icon: {\n background: 'rgba(0, 0, 0, 0.5)',\n border: {\n color: 'rgba(0, 0, 0, 0.5)'\n }\n },\n line: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n label: {\n font: '14px serif'\n }\n },\n title: {\n color: 'rgb(101, 101, 101)',\n font: '14px serif'\n }\n },\n chartArea: {\n background: 'rgb(255, 255, 255)'\n },\n legend: {\n inactiveItems: {\n labels: {\n color: 'rgba(102, 102, 102, 0.5)'\n },\n markers: {\n color: 'rgba(102, 102, 102, 0.5)'\n }\n },\n labels: {\n color: 'rgb(101, 101, 101)',\n font: '14px serif'\n }\n },\n seriesDefaults: {\n boxPlot: {\n downColor: 'rgba(0, 0, 0, 0.08)',\n mean: {\n color: 'rgb(246, 246, 246)'\n },\n median: {\n color: 'rgb(246, 246, 246)'\n },\n whiskers: {\n color: 'rgb(255, 99, 88)'\n }\n },\n bullet: {\n target: {\n color: 'rgb(101, 101, 101)'\n }\n },\n candlestick: {\n downColor: 'rgb(101, 101, 101)',\n line: {\n color: 'rgb(101, 101, 101)'\n }\n },\n errorBars: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n horizontalWaterfall: {\n line: {\n color: 'rgba(0, 0, 0, 0.08)'\n }\n },\n icon: {\n border: {\n color: 'rgba(0, 0, 0, 0.08)'\n }\n },\n labels: {\n background: 'rgb(255, 255, 255)',\n color: 'rgb(101, 101, 101)',\n opacity: 0.8,\n font: '12px serif'\n },\n notes: {\n icon: {\n background: 'rgba(0, 0, 0, 0.5)',\n border: {\n color: 'rgba(0, 0, 0, 0.5)'\n }\n },\n line: {\n color: 'rgba(0, 0, 0, 0.5)'\n },\n label: {\n font: '14px serif'\n }\n },\n overlay: {\n gradient: \"none\"\n },\n verticalBoxPlot: {\n downColor: 'rgba(0, 0, 0, 0.08)',\n mean: {\n color: 'rgb(246, 246, 246)'\n },\n median: {\n color: 'rgb(246, 246, 246)'\n },\n whiskers: {\n color: 'rgb(255, 99, 88)'\n }\n },\n verticalBullet: {\n target: {\n color: 'rgb(101, 101, 101)'\n }\n },\n waterfall: {\n line: {\n color: 'rgba(0, 0, 0, 0.08)'\n }\n },\n area: {\n opacity: 0.8\n }\n },\n title: {\n color: 'rgb(101, 101, 101)',\n font: '16px serif'\n },\n seriesColors: [\n 'rgb(255, 99, 88)',\n 'rgb(255, 210, 70)',\n 'rgb(120, 210, 55)',\n 'rgb(40, 180, 200)',\n 'rgb(45, 115, 245)',\n 'rgb(170, 70, 190)'\n ]\n});\n\nconst font = (style) => `${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\nconst computedBackgroundColor = (element) => window.getComputedStyle(element).backgroundColor;\nconst letterPos = (letter) => letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);\nconst seriesPos = (name) => {\n const alpha = name.match(/series-([a-z])$/);\n if (alpha !== null) {\n return letterPos(alpha[1]);\n }\n const num = name.split('--series-')[1];\n return parseInt(num, 10) - 1;\n};\nconst SERIES_COLORS = 30;\nconst seriesTemplate = () => {\n let template = `\n
\n
\n
\n
\n
\n
\n `;\n for (let i = 0; i < SERIES_COLORS; i++) {\n template += `\n
`;\n }\n return template;\n};\nconst template = () => `\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n\n
\n
\n ${seriesTemplate()}\n
\n`;\n/**\n * @hidden\n */\nclass ThemeService extends ConfigurationService {\n constructor(ngZone) {\n super(ngZone);\n this.loaded = false;\n }\n loadTheme() {\n if (this.loaded || !isDocumentAvailable()) {\n return;\n }\n if (!this.readTheme()) {\n this.readDefaultTheme();\n }\n this.loaded = true;\n this.next();\n }\n readTheme() {\n this.createElement();\n const available = this.queryColor('accent') !==\n this.queryColor('accent-contrast');\n try {\n if (available) {\n this.push(chartBaseTheme());\n this.setColors();\n this.setFonts();\n this.setSeriesColors();\n }\n }\n finally {\n this.destroyElement();\n }\n return available;\n }\n readDefaultTheme() {\n this.push(chartDefaultTheme());\n }\n createElement() {\n const container = this.element = document.createElement('div');\n container.style.display = 'none';\n container.innerHTML = template();\n document.body.appendChild(container);\n }\n destroyElement() {\n if (this.element) {\n document.body.removeChild(this.element);\n this.element = undefined;\n }\n }\n setStyle(key, value) {\n this.set(key, value);\n }\n setColors() {\n this.mapColor('axisDefaults.crosshair.color', 'chart-crosshair-background');\n this.mapColor('axisDefaults.labels.color', 'normal-text-color');\n this.mapColor('axisDefaults.line.color', 'chart-major-lines');\n this.mapColor('axisDefaults.majorGridLines.color', 'chart-major-lines');\n this.mapColor('axisDefaults.minorGridLines.color', 'chart-minor-lines');\n this.mapColor('axisDefaults.notes.icon.background', 'chart-notes-background');\n this.mapColor('axisDefaults.notes.icon.border.color', 'chart-notes-border');\n this.mapColor('axisDefaults.notes.line.color', 'chart-notes-lines');\n this.mapColor('axisDefaults.title.color', 'normal-text-color');\n this.mapColor('chartArea.background', 'background');\n this.mapColor('legend.inactiveItems.labels.color', 'chart-inactive');\n this.mapColor('legend.inactiveItems.markers.color', 'chart-inactive');\n this.mapColor('legend.labels.color', 'normal-text-color');\n this.mapColor('seriesDefaults.boxPlot.downColor', 'chart-major-lines');\n this.mapColor('seriesDefaults.boxPlot.mean.color', 'base');\n this.mapColor('seriesDefaults.boxPlot.median.color', 'base');\n this.mapColor('seriesDefaults.boxPlot.whiskers.color', 'accent');\n this.mapColor('seriesDefaults.bullet.target.color', 'normal-text-color');\n this.mapColor('seriesDefaults.candlestick.downColor', 'normal-text-color');\n this.mapColor('seriesDefaults.candlestick.line.color', 'normal-text-color');\n this.mapColor('seriesDefaults.errorBars.color', 'chart-error-bars-background');\n this.mapColor('seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');\n this.mapColor('seriesDefaults.icon.border.color', 'chart-major-lines');\n this.mapColor('seriesDefaults.labels.background', 'background');\n this.mapColor('seriesDefaults.labels.color', 'normal-text-color');\n this.mapColor('seriesDefaults.notes.icon.background', 'chart-notes-background');\n this.mapColor('seriesDefaults.notes.icon.border.color', 'chart-notes-border');\n this.mapColor('seriesDefaults.notes.line.color', 'chart-notes-lines');\n this.mapColor('seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');\n this.mapColor('seriesDefaults.verticalBoxPlot.mean.color', 'base');\n this.mapColor('seriesDefaults.verticalBoxPlot.median.color', 'base');\n this.mapColor('seriesDefaults.verticalBoxPlot.whiskers.color', 'accent');\n this.mapColor('seriesDefaults.verticalBullet.target.color', 'normal-text-color');\n this.mapColor('seriesDefaults.waterfall.line.color', 'chart-major-lines');\n this.mapColor('title.color', 'normal-text-color');\n const opacity = parseFloat(this.queryStyle('chart-area-opacity').opacity);\n if (!isNaN(opacity)) {\n this.setStyle('seriesDefaults.area.opacity', opacity);\n this.setStyle('seriesDefaults.radarArea.opacity', opacity);\n this.setStyle('seriesDefaults.verticalArea.opacity', opacity);\n this.setStyle('seriesDefaults.labels.opacity', opacity);\n }\n this.setInactiveOpacity(['area', 'verticalArea'], 'chart-area-inactive-opacity');\n this.setInactiveOpacity(['line', 'verticalLine'], 'chart-line-inactive-opacity');\n }\n setInactiveOpacity(seriesTypes, selector) {\n const inactiveOpacity = parseFloat(this.queryStyle(selector).opacity);\n if (!isNaN(inactiveOpacity) && inactiveOpacity < 1) {\n seriesTypes.forEach(type => this.setStyle(`seriesDefaults.${type}.highlight.inactiveOpacity`, inactiveOpacity));\n }\n }\n setFonts() {\n const defaultFont = font(this.queryStyle('chart-font'));\n const titleFont = font(this.queryStyle('chart-title-font'));\n const paneTitleFont = font(this.queryStyle('chart-pane-title-font'));\n const labelFont = font(this.queryStyle('chart-label-font'));\n this.setStyle('axisDefaults.labels.font', labelFont);\n this.setStyle('axisDefaults.notes.label.font', defaultFont);\n this.setStyle('axisDefaults.title.font', defaultFont);\n this.setStyle('legend.labels.font', defaultFont);\n this.setStyle('seriesDefaults.labels.font', labelFont);\n this.setStyle('seriesDefaults.notes.label.font', defaultFont);\n this.setStyle('title.font', titleFont);\n this.setStyle('paneDefaults.title.font', paneTitleFont);\n }\n setSeriesColors() {\n const element = this.element;\n const series = [].slice.call(element.querySelectorAll('.k-var--series div'));\n const unsetColor = computedBackgroundColor(element.querySelector('.k-var--series-unset'));\n const seriesColors = series.reduce((arr, el) => {\n const pos = seriesPos(el.className);\n const color = computedBackgroundColor(el);\n if (color !== unsetColor) {\n arr[pos] = color;\n }\n return arr;\n }, [] // Will populate the series colors in this array\n );\n this.setStyle('seriesColors', seriesColors);\n }\n mapColor(key, varName) {\n this.setStyle(key, this.queryColor(varName));\n }\n queryColor(varName) {\n return this.queryStyle(varName).backgroundColor;\n }\n queryStyle(varName) {\n const element = this.element.querySelector(`.k-var--${varName}`);\n return window.getComputedStyle(element);\n }\n}\nThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ThemeService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ThemeService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ThemeService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\nfunction hasObservers(emitter) {\n return emitter.observers.length > 0;\n}\n/**\n * The root Chart component.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public legendVisible: boolean = true;\n * public seriesVisible: boolean = true;\n *\n * public toggleSeries(): void {\n * this.seriesVisible = !this.seriesVisible;\n * }\n *\n * public toggleLegend(): void {\n * this.legendVisible = !this.legendVisible;\n * }\n * }\n *\n * ```\n */\nclass ChartComponent {\n constructor(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer) {\n this.configurationService = configurationService;\n this.themeService = themeService;\n this.element = element;\n this.intl = intl;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.instanceEventService = instanceEventService;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n /**\n * Fires when the user clicks an axis label ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.axisLabelClick = new EventEmitter();\n /**\n * Fires as long as the user is dragging the Chart with the mouse or through swipe gestures.\n */\n this.drag = new EventEmitter();\n /**\n * Fires when the user stops dragging the Chart.\n */\n this.dragEnd = new EventEmitter();\n /**\n * Fires when the user starts dragging the Chart.\n */\n this.dragStart = new EventEmitter();\n /**\n * Fires when the user hovers over a legend item ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.legendItemHover = new EventEmitter();\n /**\n * Fires when the cursor leaves a legend item.\n */\n this.legendItemLeave = new EventEmitter();\n /**\n * Fires when the user clicks a note.\n */\n this.noteClick = new EventEmitter();\n /**\n * Fires when the user hovers over a note.\n */\n this.noteHover = new EventEmitter();\n /**\n * Fires when the cursor leaves a note.\n */\n this.noteLeave = new EventEmitter();\n /**\n * Fires when a pane is rendered because the Chart:\n * * Is rendered.\n * * Performs panning or zooming.\n * * Is exported with different options.\n * The event is used to render custom visuals in the panes.\n */\n this.paneRender = new EventEmitter();\n /**\n * Fires when the user clicks the plot area ([see example]({% slug overview_chart_charts %}#toc-events)).\n * The `click` event is triggered by the `tap` and `contextmenu` events.\n * To distinguish between the original events, inspect the `e.originalEvent.type` field.\n */\n this.plotAreaClick = new EventEmitter();\n /**\n * Fires when the user hovers the plot area ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.plotAreaHover = new EventEmitter();\n /**\n * Fires when the cursor leaves the plot area.\n */\n this.plotAreaLeave = new EventEmitter();\n /**\n * Fires when the Chart is ready to render on screen ([see example]({% slug overview_chart_charts %}#toc-events)).\n * For example, you can use it to remove loading indicators.\n * Any changes made to the options are ignored.\n */\n this.render = new EventEmitter();\n /**\n * Fires when the user modifies the selection.\n *\n * The range units are:\n * - Generic axis—Category index (0-based).\n * - Date axis—Date instance.\n */\n this.select = new EventEmitter();\n /**\n * Fires when the user completes the modification of the selection.\n *\n * The range units are:\n * - Generic axis—Category index (0-based).\n * - Date axis—Date instance.\n */\n this.selectEnd = new EventEmitter();\n /**\n * Fires when the user starts modifying the axis selection.\n *\n * The range units are:\n * - Generic axis—Category index (0-based).\n * - Date axis—Date instance.\n */\n this.selectStart = new EventEmitter();\n /**\n * Fires when the user clicks the Chart series.\n *\n * The `click` event will be triggered by the `tap` and `contextmenu` events ([see example]({% slug overview_chart_charts %}#toc-events)).\n * To distinguish between the original events, inspect the `e.originalEvent.type` field.\n */\n this.seriesClick = new EventEmitter();\n /**\n * Fires when the user hovers the Chart series ([see example]({% slug overview_chart_charts %}#toc-events)).\n */\n this.seriesHover = new EventEmitter();\n /**\n * Fires when the cursor enters a series.\n */\n this.seriesOver = new EventEmitter();\n /**\n * Fires when the cursor leaves a series.\n */\n this.seriesLeave = new EventEmitter();\n /**\n * Fires as long as the user is zooming the Chart by using the mousewheel operation.\n */\n this.zoom = new EventEmitter();\n /**\n * Fires when the user stops zooming the Chart.\n */\n this.zoomEnd = new EventEmitter();\n /**\n * Fires when the user uses the mousewheel to zoom the Chart.\n */\n this.zoomStart = new EventEmitter();\n /**\n * Fires when a legend item is clicked before the selected series visibility is toggled.\n * Can be prevented.\n */\n this.legendItemClick = new EventEmitter();\n /**\n * Limits the automatic resizing of the Chart. Sets the maximum number of times per second\n * that the component redraws its content when the size of its container changes.\n * Defaults to `10`. To disable the automatic resizing, set it to `0`.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * seriesData: number[] = [1, 2, 3, 5];\n * }\n * ```\n */\n this.resizeRateLimit = 10;\n this.theme = null;\n this.suppressTransitions = false;\n this.rtl = false;\n this.hostClasses = ['k-chart', 'k-widget'];\n validatePackage(packageMetadata);\n this.themeService.loadTheme();\n this.refreshWait();\n }\n ngOnInit() {\n if (this.element) {\n this.hostClasses.forEach(name => {\n this.renderer.addClass(this.element.nativeElement, name);\n });\n this.renderer.setStyle(this.element.nativeElement, 'position', 'relative');\n }\n }\n ngAfterViewInit() {\n if (this.canRender) {\n this.ngZone.runOutsideAngular(() => {\n const chartMouseleave = this.renderer.listen(this.surfaceElement.nativeElement, 'mouseleave', this.chartMouseleave.bind(this));\n this.domSubscriptions = () => {\n chartMouseleave();\n };\n });\n }\n this.setDirection();\n this.subscriptions = this.intl.changes.subscribe(this.intlChange.bind(this));\n this.subscriptions.add(this.localizationService.changes.subscribe(this.rtlChange.bind(this)));\n }\n ngAfterViewChecked() {\n if (this.instance && this.autoResize) {\n this.ngZone.runOutsideAngular(() => {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n this.resize();\n }, 0);\n });\n }\n }\n ngOnChanges(changes) {\n const store = this.configurationService.store;\n copyChanges(changes, store);\n store.popupSettings = null;\n this.configurationService.push(store);\n }\n /**\n * Updates the component fields with the specified values and refreshes the Chart.\n *\n * Use this method when the configuration values cannot be set through the template.\n *\n * @example\n * ```ts-no-run\n * chart.notifyChanges({ title: { text: 'New Title' } });\n * ```\n *\n * @param changes An object containing the updated input fields.\n */\n notifyChanges(changes) {\n this.ngOnChanges(toSimpleChanges(changes));\n }\n ngOnDestroy() {\n this.destroyed = true;\n if (this.optionsChange) {\n this.optionsChange.unsubscribe();\n }\n if (this.domSubscriptions) {\n this.domSubscriptions();\n this.domSubscriptions = null;\n }\n if (this.instance) {\n this.instance.destroy();\n this.instance = null;\n }\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n clearTimeout(this.resizeTimeout);\n clearTimeout(this.redrawTimeout);\n }\n createInstance(element, observer) {\n this.instance = new Chart(element, this.options, this.theme, {\n intlService: this.intl,\n observer: observer,\n rtl: this.rtl,\n sender: this\n });\n }\n /**\n * Exports the Chart as an image. The export operation is asynchronous and returns a promise.\n *\n * @param {ImageExportOptions} options - The parameters for the exported image.\n * @returns {Promise} - A promise that will be resolved with a PNG image encoded as a Data URI.\n */\n exportImage(options = {}) {\n return exportImage(this.exportVisual(options), options);\n }\n /**\n * Exports the Chart as an SVG document. The export operation is asynchronous and returns a promise.\n *\n * @param options - The parameters for the exported file.\n * @returns - A promise that will be resolved with an SVG document that is encoded as a Data URI.\n */\n exportSVG(options = {}) {\n return exportSVG(this.exportVisual(options), options);\n }\n /**\n * Exports the Chart as a Drawing `Scene`.\n *\n * @param options - The parameters for the export operation.\n * @returns - The root Group of the scene.\n */\n exportVisual(options = {}) {\n return this.instance.exportVisual(options);\n }\n /**\n * Returns the axis with the specified name.\n *\n * @param {string} name - The axis name.\n * @returns {ChartAxis} - The axis with a corresponding name.\n */\n findAxisByName(name) {\n if (this.instance) {\n return this.instance.findAxisByName(name);\n }\n }\n /**\n * Returns the pane at the specified index.\n *\n * @param {number} index - The pane index.\n * @returns {ChartPane} - The pane at the specified index.\n */\n findPaneByIndex(index) {\n if (this.instance) {\n return this.instance.findPaneByIndex(index);\n }\n }\n /**\n * Returns the pane with the specified name.\n *\n * @param {string} name - The name of the pane.\n * @returns {ChartPane} - The pane with the provided name.\n */\n findPaneByName(name) {\n if (this.instance) {\n return this.instance.findPaneByName(name);\n }\n }\n /**\n * Returns the plot area of the Chart.\n * @returns {ChartPlotArea} - The plot area of the Chart.\n */\n getPlotArea() {\n if (this.instance) {\n return this.instance.plotArea();\n }\n }\n /**\n * Highlights the series points or the segments of a Pie, Donut, or Funnel charts.\n *\n * See [Series Highlight]({% slug serieshighlight_chart_charts %}) for more details.\n *\n * In the following example, the callback is evaluated for each data point.\n * If the function returns `true`, the point is highlighted.\n *\n * {% meta height:500 %}\n * {% embed_file elements/highlight/api/app.component.ts preview %}\n * {% embed_file shared/app.module.ts hidden %}\n * {% embed_file shared/main.ts hidden %}\n * {% endmeta %}\n *\n * @param show - A Boolean value that indicates whether the highlight is shown or hidden.\n * @param filter - A string that represents the series or category name, an object with the series and category name, or a function which will be called for each point. The function should return `true` for the points for which the highlight is toggled.\n */\n toggleHighlight(show, filter) {\n if (this.instance) {\n this.instance.toggleHighlight(show, filter);\n }\n }\n /**\n * Hides the tooltip of the Chart.\n */\n hideTooltip() {\n if (this.instance) {\n this.instance.hideTooltip();\n }\n }\n /**\n * Shows the Chart tooltip of a specific point or the shared tooltip of a specific category.\n *\n * @param filter - The category for a shared tooltip or a function which will be called for each point until the function returns `true`.\n */\n showTooltip(filter) {\n if (this.instance) {\n this.instance.showTooltip(filter);\n }\n }\n init() {\n if (!this.canRender) {\n return;\n }\n const element = this.surfaceElement.nativeElement;\n const instanceObserver = new ChartInstanceObserver(this);\n this.createInstance(element, instanceObserver);\n }\n /**\n * Detects the size of the container and redraws the Chart.\n * Resizing is automatic unless you set the `resizeRateLimit` option to `0`.\n */\n resize() {\n if (this.instance) {\n this.instance.resize();\n }\n }\n /**\n * @hidden\n */\n onResize() {\n if (this.autoResize) {\n this.resize();\n }\n }\n onLegendItemClick(e) {\n this.run(() => {\n const args = new LegendItemClickEvent(e, this);\n this.legendItemClick.emit(args);\n if (!args.isDefaultPrevented()) {\n const series = this.seriesComponents.toArray()[e.series.index];\n if (!series) {\n return;\n }\n if (e.pointIndex === undefined) {\n series.toggleVisibility();\n }\n else {\n series.togglePointVisibility(e.pointIndex);\n }\n this.suppressTransitions = true;\n }\n }, hasObservers(this.legendItemClick), this.seriesComponents.length > 0);\n }\n onInit(e) {\n this.instance = e.sender;\n }\n onRender(e) {\n const donutCenterStyle = this.getDonutCenterStyle();\n this.run(() => {\n const args = new RenderEvent(e, this);\n this.surface = e.sender.surface;\n this.render.emit(args);\n this.donutCenterStyle = donutCenterStyle;\n }, hasObservers(this.render), this.donutCenterStyle !== donutCenterStyle);\n }\n onShowTooltip(e) {\n this.run(() => {\n if (!e.crosshair) {\n this.tooltipInstance.show(e);\n }\n else {\n this.crossahirTooltips.show(e);\n }\n }, !e.crosshair, true);\n }\n onHideTooltip(e) {\n if (!e.crosshair) {\n if (this.tooltipInstance.active) {\n this.tooltipInstance.hide();\n this.detectChanges();\n }\n }\n else if (this.crossahirTooltips.active) {\n this.crossahirTooltips.hide();\n this.detectChanges();\n }\n }\n trigger(name, e) {\n if (name === 'resize') {\n return;\n }\n const emitter = this.activeEmitter(name);\n if (emitter) {\n const args = this.instanceEventService.create(name, e, this);\n this.run(() => {\n emitter.emit(args);\n });\n return args.isDefaultPrevented && args.isDefaultPrevented();\n }\n }\n requiresHandlers(names) {\n for (let idx = 0; idx < names.length; idx++) {\n if (this.activeEmitter(names[idx])) {\n return true;\n }\n }\n return false;\n }\n refresh() {\n clearTimeout(this.redrawTimeout);\n this.updateDirection();\n this.crossahirTooltips.createCrosshairTooltips(this.options);\n this.setChartAreaSize();\n if (!this.instance) {\n this.init();\n return;\n }\n const transitions = this.options.transitions;\n if (this.suppressTransitions) {\n this.options.transitions = false;\n }\n this.updateOptions();\n if (this.suppressTransitions) {\n this.options.transitions = transitions;\n this.suppressTransitions = false;\n }\n }\n setChartAreaSize() {\n if (!this.element) {\n return;\n }\n const element = this.element.nativeElement;\n const chartArea = this.options.chartArea || {};\n if (chartArea.width) {\n element.style.width = `${chartArea.width}px`;\n }\n if (chartArea.height) {\n element.style.height = `${chartArea.height}px`;\n }\n }\n updateOptions() {\n this.instance.setOptions(this.options);\n }\n /**\n * @hidden\n */\n tooltipMouseleave(e) {\n const relatedTarget = e.relatedTarget;\n const chartElement = this.element.nativeElement;\n if (this.instance && (!relatedTarget || !hasParent(relatedTarget, chartElement))) {\n this.instance.hideElements();\n }\n }\n /**\n * @hidden\n */\n chartMouseleave(e) {\n const relatedTarget = e.relatedTarget;\n const chartElement = this.element.nativeElement;\n if (this.instance && (!relatedTarget || !(this.tooltipInstance.containsElement(relatedTarget) || hasParent(relatedTarget, chartElement))) &&\n !this.instance.handlingTap) {\n this.instance.hideElements();\n }\n }\n get canRender() {\n return isDocumentAvailable() && Boolean(this.surfaceElement);\n }\n get autoResize() {\n return this.resizeRateLimit > 0;\n }\n activeEmitter(name) {\n const emitter = this[name];\n if (emitter && emitter.emit && hasObservers(emitter)) {\n return emitter;\n }\n }\n getDonutCenterStyle() {\n if (!this.instance || !this.options || !this.options.series) {\n return;\n }\n const firstSeries = this.options.series[0];\n const charts = this.instance._plotArea.charts;\n if (!firstSeries || firstSeries.type !== 'donut' || !charts || charts[0].points.length === 0) {\n return;\n }\n const firstPoint = charts[0].points[0];\n const center = firstPoint.box.center();\n const radius = firstPoint.sector.innerRadius;\n const top = center.y - radius;\n const left = center.x - radius;\n const size = radius * 2;\n return {\n height: size + 'px',\n left: left + 'px',\n top: top + 'px',\n width: size + 'px'\n };\n }\n refreshWait() {\n this.ngZone.runOutsideAngular(() => {\n this.optionsChange = combineLatest(this.configurationService.onChange$, this.themeService.onChange$).pipe(tap((result) => {\n this.options = result[0];\n this.theme = result[1];\n }), auditTime(THROTTLE_MS))\n .subscribe(() => {\n this.refresh();\n });\n });\n }\n run(callback, inZone = true, detectChanges) {\n if (inZone) {\n if (detectChanges) {\n this.changeDetector.markForCheck();\n }\n this.ngZone.run(callback);\n }\n else {\n callback();\n if (detectChanges) {\n this.detectChanges();\n }\n }\n }\n detectChanges() {\n if (!this.destroyed) {\n this.changeDetector.detectChanges();\n }\n }\n intlChange() {\n if (this.instance) {\n this.deferredRedraw();\n }\n }\n rtlChange() {\n if (this.instance && this.rtl !== this.isRTL) {\n this.deferredRedraw();\n }\n }\n deferredRedraw() {\n this.ngZone.runOutsideAngular(() => {\n clearTimeout(this.redrawTimeout);\n this.redrawTimeout = setTimeout(() => {\n this.updateDirection();\n this.instance.noTransitionsRedraw();\n }, 0);\n });\n }\n updateDirection() {\n const current = this.isRTL;\n if (this.rtl !== current) {\n this.setDirection();\n if (this.instance) {\n this.instance.setDirection(current);\n }\n }\n }\n setDirection() {\n this.rtl = this.isRTL;\n if (this.element) {\n this.renderer.setAttribute(this.element.nativeElement, 'dir', this.rtl ? 'rtl' : 'ltr');\n }\n }\n get isRTL() {\n return Boolean(this.localizationService.rtl);\n }\n}\nChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartComponent, deps: [{ token: ConfigurationService }, { token: ThemeService }, { token: i0.ElementRef }, { token: i3.IntlService }, { token: i4.LocalizationService }, { token: i0.NgZone }, { token: InstanceEventService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ChartComponent, selector: \"kendo-chart\", inputs: { pannable: \"pannable\", renderAs: \"renderAs\", seriesColors: \"seriesColors\", title: \"title\", transitions: \"transitions\", zoomable: \"zoomable\", axisDefaults: \"axisDefaults\", categoryAxis: \"categoryAxis\", chartArea: \"chartArea\", legend: \"legend\", panes: \"panes\", paneDefaults: \"paneDefaults\", plotArea: \"plotArea\", series: \"series\", seriesDefaults: \"seriesDefaults\", tooltip: \"tooltip\", valueAxis: \"valueAxis\", xAxis: \"xAxis\", yAxis: \"yAxis\", resizeRateLimit: \"resizeRateLimit\", popupSettings: \"popupSettings\" }, outputs: { axisLabelClick: \"axisLabelClick\", drag: \"drag\", dragEnd: \"dragEnd\", dragStart: \"dragStart\", legendItemHover: \"legendItemHover\", legendItemLeave: \"legendItemLeave\", noteClick: \"noteClick\", noteHover: \"noteHover\", noteLeave: \"noteLeave\", paneRender: \"paneRender\", plotAreaClick: \"plotAreaClick\", plotAreaHover: \"plotAreaHover\", plotAreaLeave: \"plotAreaLeave\", render: \"render\", select: \"select\", selectEnd: \"selectEnd\", selectStart: \"selectStart\", seriesClick: \"seriesClick\", seriesHover: \"seriesHover\", seriesOver: \"seriesOver\", seriesLeave: \"seriesLeave\", zoom: \"zoom\", zoomEnd: \"zoomEnd\", zoomStart: \"zoomStart\", legendItemClick: \"legendItemClick\" }, providers: [\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ], queries: [{ propertyName: \"donutCenterTemplate\", first: true, predicate: DonutCenterTemplateDirective, descendants: true }, { propertyName: \"seriesComponents\", predicate: SeriesItemComponent, descendants: true }], viewQueries: [{ propertyName: \"tooltipInstance\", first: true, predicate: TooltipPopupComponent, descendants: true, static: true }, { propertyName: \"crossahirTooltips\", first: true, predicate: CrosshairTooltipsContainerComponent, descendants: true, static: true }, { propertyName: \"surfaceElement\", first: true, predicate: [\"surface\"], descendants: true, static: true }], exportAs: [\"kendoChart\"], usesOnChanges: true, ngImport: i0, template: `\n
\n \n \n \n \n \n
\n \n
\n `, isInline: true, components: [{ type: CrosshairTooltipsContainerComponent, selector: \"kendo-chart-crosshair-tooltips-container\", inputs: [\"popupSettings\"] }, { type: TooltipPopupComponent, selector: \"kendo-chart-tooltip-popup\", inputs: [\"animate\", \"classNames\", \"popupSettings\", \"wrapperClass\"], outputs: [\"leave\"] }, { type: i8.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: i4$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i4$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i4$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendoChart',\n providers: [\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ],\n selector: 'kendo-chart',\n template: `\n
\n \n \n \n \n \n
\n \n
\n `\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: ThemeService }, { type: i0.ElementRef }, { type: i3.IntlService }, { type: i4.LocalizationService }, { type: i0.NgZone }, { type: InstanceEventService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { pannable: [{\n type: Input\n }], renderAs: [{\n type: Input\n }], seriesColors: [{\n type: Input\n }], title: [{\n type: Input\n }], transitions: [{\n type: Input\n }], zoomable: [{\n type: Input\n }], axisDefaults: [{\n type: Input\n }], categoryAxis: [{\n type: Input\n }], chartArea: [{\n type: Input\n }], legend: [{\n type: Input\n }], panes: [{\n type: Input\n }], paneDefaults: [{\n type: Input\n }], plotArea: [{\n type: Input\n }], series: [{\n type: Input\n }], seriesDefaults: [{\n type: Input\n }], tooltip: [{\n type: Input\n }], valueAxis: [{\n type: Input\n }], xAxis: [{\n type: Input\n }], yAxis: [{\n type: Input\n }], axisLabelClick: [{\n type: Output\n }], drag: [{\n type: Output\n }], dragEnd: [{\n type: Output\n }], dragStart: [{\n type: Output\n }], legendItemHover: [{\n type: Output\n }], legendItemLeave: [{\n type: Output\n }], noteClick: [{\n type: Output\n }], noteHover: [{\n type: Output\n }], noteLeave: [{\n type: Output\n }], paneRender: [{\n type: Output\n }], plotAreaClick: [{\n type: Output\n }], plotAreaHover: [{\n type: Output\n }], plotAreaLeave: [{\n type: Output\n }], render: [{\n type: Output\n }], select: [{\n type: Output\n }], selectEnd: [{\n type: Output\n }], selectStart: [{\n type: Output\n }], seriesClick: [{\n type: Output\n }], seriesHover: [{\n type: Output\n }], seriesOver: [{\n type: Output\n }], seriesLeave: [{\n type: Output\n }], zoom: [{\n type: Output\n }], zoomEnd: [{\n type: Output\n }], zoomStart: [{\n type: Output\n }], legendItemClick: [{\n type: Output\n }], resizeRateLimit: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], seriesComponents: [{\n type: ContentChildren,\n args: [SeriesItemComponent, { descendants: true }]\n }], donutCenterTemplate: [{\n type: ContentChild,\n args: [DonutCenterTemplateDirective, { static: false }]\n }], tooltipInstance: [{\n type: ViewChild,\n args: [TooltipPopupComponent, { static: true }]\n }], crossahirTooltips: [{\n type: ViewChild,\n args: [CrosshairTooltipsContainerComponent, { static: true }]\n }], surfaceElement: [{\n type: ViewChild,\n args: ['surface', { static: true }]\n }] } });\n\n/**\n * The default options for all Chart axes.\n * Accepts the options which are supported by [`categoryAxis`]({% slug api_charts_categoryaxisitemcomponent %}),\n * [`valueAxis`]({% slug api_charts_valueaxisitemcomponent %}),\n * [`xAxis`]({% slug api_charts_xaxisitemcomponent %}),\n * and [`yAxis`]({% slug api_charts_yaxisitemcomponent %}).\n *\n * @example\n * ```ts-preview\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
\n * `\n * })\n * export class AppComponent {\n * public series: any[] = [{\n * name: \"India\",\n * data: [4, 8, 8, 9, 9, 9, 3, 8, 9, 6]\n * }, {\n * name: \"Russian Federation\",\n * data: [4, 7, 7, 6, 8, 8, 5, 8, 4, 4]\n * }, {\n * name: \"Germany\",\n * data: [0, 0, 1, 1, 4, 3, 1, 5, 4, 3]\n * },{\n * name: \"World\",\n * data: [2, 3, 4, 4, 4, 4, 1, 2, 4, 3]\n * }];\n *\n * public categories: number[] = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011];\n *\n * public background = 'white';\n * // public color = 'cyan'; // will override the line.color option\n * public crosshair = {\n * visible: true\n * };\n * public labels = {\n * font: 'bold 12px/30px Helvetica, Arial, sans-serif',\n * color: '#4CAF50',\n * padding: 5,\n * rotation: 45,\n * background: 'white',\n * border: {\n * color: '#4CAF50',\n * width: 2\n * },\n * };\n * public line = {\n * color: 'black',\n * width: 3\n * };\n *\n * public majorGridLines = {\n * color: 'black',\n * visible: true\n * }\n *\n * public minorGridLines = {\n * color: 'lightgray',\n * visible: true\n * }\n *\n * public majorTicks = {\n * color: 'black',\n * size: 15\n * }\n *\n * public minorTicks = {\n * color: 'lightgray',\n * size: 10\n * }\n *\n * public title = {\n * text: 'Default Axis Title',\n * color: 'black',\n * background: 'white',\n * border: {\n * color: 'black',\n * width: 2\n * },\n * padding: 10\n * }\n * }\n * ```\n */\nclass AxisDefaultsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nAxisDefaultsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: AxisDefaultsComponent, selector: \"kendo-chart-axis-defaults\", inputs: { background: \"background\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", startAngle: \"startAngle\", visible: \"visible\", crosshair: \"crosshair\", labels: \"labels\", title: \"title\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], color: [{\n type: Input\n }], line: [{\n type: Input\n }], majorGridLines: [{\n type: Input\n }], majorTicks: [{\n type: Input\n }], minorGridLines: [{\n type: Input\n }], minorTicks: [{\n type: Input\n }], narrowRange: [{\n type: Input\n }], pane: [{\n type: Input\n }], plotBands: [{\n type: Input\n }], reverse: [{\n type: Input\n }], startAngle: [{\n type: Input\n }], visible: [{\n type: Input\n }], crosshair: [{\n type: Input\n }], labels: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\n/**\n * The crosshair configuration options ([see example]({% slug api_charts_axisdefaultscomponent %})).\n */\nclass AxisDefaultsCrosshairComponent extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.crosshair', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nAxisDefaultsCrosshairComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsCrosshairComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nAxisDefaultsCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: AxisDefaultsCrosshairComponent, selector: \"kendo-chart-axis-defaults-crosshair\", inputs: { color: \"color\", dashType: \"dashType\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsCrosshairComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-crosshair',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { color: [{\n type: Input\n }], dashType: [{\n type: Input\n }], opacity: [{\n type: Input\n }], visible: [{\n type: Input\n }], width: [{\n type: Input\n }], tooltip: [{\n type: Input\n }] } });\n\n/**\n * The options of the crosshair tooltip ([see example]({% slug crosshairs_chart_charts %})).\n * The crosshair tooltip is displayed when the [`axisDefaults.crosshair.tooltip.visible`]({% slug api_charts_axisdefaultscrosshairtooltipcomponent %}#toc-visible)\n * option is set to `true`.\n */\nclass AxisDefaultsCrosshairTooltipComponent extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nAxisDefaultsCrosshairTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsCrosshairTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nAxisDefaultsCrosshairTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: AxisDefaultsCrosshairTooltipComponent, selector: \"kendo-chart-axis-defaults-crosshair-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsCrosshairTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-crosshair-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the axis labels ([see example]({% slug api_charts_axisdefaultscomponent %})).\n */\nclass AxisDefaultsLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nAxisDefaultsLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: AxisDefaultsLabelsComponent, selector: \"kendo-chart-axis-defaults-labels\", inputs: { content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], mirror: [{\n type: Input\n }], padding: [{\n type: Input\n }], rotation: [{\n type: Input\n }], skip: [{\n type: Input\n }], step: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the axis title ([see example]({% slug api_charts_axisdefaultscomponent %})).\n */\nclass AxisDefaultsTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('axisDefaults.title', configurationService);\n this.configurationService = configurationService;\n }\n}\nAxisDefaultsTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nAxisDefaultsTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: AxisDefaultsTitleComponent, selector: \"kendo-chart-axis-defaults-title\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AxisDefaultsTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-axis-defaults-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], text: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass CollectionComponent {\n constructor(configKey, configurationService, collectionService) {\n this.configKey = configKey;\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.items = [];\n this.subscription = collectionService.onItemChange$.subscribe(changes => this.processChanges(changes));\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n ngAfterContentInit() {\n this.readItems();\n this.children.changes.subscribe(() => this.readItems());\n }\n processChanges(changes) {\n if (!this.children) {\n return;\n }\n const index = this.children.toArray().indexOf(changes.sender);\n if (index < 0) {\n return;\n }\n this.items[index] = changes.options;\n this.change();\n }\n readItems() {\n this.items = this.children.map(s => s.options);\n this.change();\n }\n change() {\n this.configurationService.notify(new Change(this.configKey, this.items.length === 0 ? undefined : this.items));\n }\n}\nCollectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CollectionComponent, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive });\nCollectionComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CollectionComponent, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CollectionComponent, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: undefined }, { type: ConfigurationService }, { type: CollectionService }]; } });\n\n/**\n * The configuration component for a category axis ([see example]({% slug axes_chart_charts %})).\n */\nclass CategoryAxisItemComponent extends CollectionItemComponent {\n constructor(configurationService, collectionService, intl, localeId) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });\n }\n}\nCategoryAxisItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }, { token: i3.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisItemComponent, selector: \"kendo-chart-category-axis-item\", inputs: { autoBaseUnitSteps: \"autoBaseUnitSteps\", axisCrossingValue: \"axisCrossingValue\", background: \"background\", baseUnit: \"baseUnit\", baseUnitStep: \"baseUnitStep\", categories: \"categories\", color: \"color\", justified: \"justified\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", max: \"max\", maxDateGroups: \"maxDateGroups\", maxDivisions: \"maxDivisions\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", name: \"name\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", roundToBaseUnit: \"roundToBaseUnit\", startAngle: \"startAngle\", type: \"type\", visible: \"visible\", weekStartDay: \"weekStartDay\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", select: \"select\", title: \"title\", rangeLabels: \"rangeLabels\" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-category-axis-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: i3.IntlService }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; }, propDecorators: { autoBaseUnitSteps: [{\n type: Input\n }], axisCrossingValue: [{\n type: Input\n }], background: [{\n type: Input\n }], baseUnit: [{\n type: Input\n }], baseUnitStep: [{\n type: Input\n }], categories: [{\n type: Input\n }], color: [{\n type: Input\n }], justified: [{\n type: Input\n }], line: [{\n type: Input\n }], majorGridLines: [{\n type: Input\n }], majorTicks: [{\n type: Input\n }], max: [{\n type: Input\n }], maxDateGroups: [{\n type: Input\n }], maxDivisions: [{\n type: Input\n }], min: [{\n type: Input\n }], minorGridLines: [{\n type: Input\n }], minorTicks: [{\n type: Input\n }], name: [{\n type: Input\n }], pane: [{\n type: Input\n }], plotBands: [{\n type: Input\n }], reverse: [{\n type: Input\n }], roundToBaseUnit: [{\n type: Input\n }], startAngle: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }], weekStartDay: [{\n type: Input\n }], crosshair: [{\n type: Input\n }], labels: [{\n type: Input\n }], notes: [{\n type: Input\n }], select: [{\n type: Input\n }], title: [{\n type: Input\n }], rangeLabels: [{\n type: Input\n }] } });\n\n/**\n * A collection of one or more category axis items.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n * ```\n */\nclass CategoryAxisComponent extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('categoryAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nCategoryAxisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisComponent, selector: \"kendo-chart-category-axis\", providers: [CollectionService], queries: [{ propertyName: \"children\", predicate: CategoryAxisItemComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-category-axis',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { children: [{\n type: ContentChildren,\n args: [CategoryAxisItemComponent]\n }] } });\n\n/**\n * The crosshair configuration options ([see example]({% slug crosshairs_chart_charts %})).\n */\nclass CategoryAxisCrosshairComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nCategoryAxisCrosshairComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisCrosshairComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisCrosshairComponent, selector: \"kendo-chart-category-axis-item-crosshair\", inputs: { color: \"color\", dashType: \"dashType\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisCrosshairComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-crosshair',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { color: [{\n type: Input\n }], dashType: [{\n type: Input\n }], opacity: [{\n type: Input\n }], visible: [{\n type: Input\n }], width: [{\n type: Input\n }], tooltip: [{\n type: Input\n }] } });\n\n/**\n * The options of the crosshair tooltip ([see example]({% slug crosshairs_chart_charts %})).\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nclass CategoryAxisCrosshairTooltipComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nCategoryAxisCrosshairTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisCrosshairTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisCrosshairTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisCrosshairTooltipComponent, selector: \"kendo-chart-category-axis-item-crosshair-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisCrosshairTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the axis labels ([see example]({% slug labels_chart_charts %})).\n */\nclass CategoryAxisLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisLabelsComponent, selector: \"kendo-chart-category-axis-item-labels\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", culture: \"culture\", dateFormats: \"dateFormats\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], culture: [{\n type: Input\n }], dateFormats: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], mirror: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], skip: [{\n type: Input\n }], step: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the axis date range labels ([see example]({% slug labels_chart_charts %})).\n */\nclass CategoryAxisRangeLabelsComponent extends CategoryAxisLabelsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.configKey = 'rangeLabels';\n this.markAsVisible();\n }\n}\nCategoryAxisRangeLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisRangeLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisRangeLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisRangeLabelsComponent, selector: \"kendo-chart-category-axis-item-range-labels\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisRangeLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-range-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The configuration of the category axis notes ([see example]({% slug notes_chart_charts %}#toc-axis-notes)).\n */\nclass CategoryAxisNotesComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisNotesComponent, selector: \"kendo-chart-category-axis-item-notes\", inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { data: [{\n type: Input\n }], line: [{\n type: Input\n }], position: [{\n type: Input\n }], visual: [{\n type: Input\n }], icon: [{\n type: Input\n }], label: [{\n type: Input\n }] } });\n\n/**\n * The icon of the notes.\n */\nclass CategoryAxisNotesIconComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisNotesIconComponent, selector: \"kendo-chart-category-axis-item-notes-icon\", inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The label of the notes.\n */\nclass CategoryAxisNotesLabelComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisNotesLabelComponent, selector: \"kendo-chart-category-axis-item-notes-label\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The selected axis range. If set, the axis selection is enabled. The range is index-based and starts from zero.\n * Categories with indexes in the\n * ([`select.from`]({% slug api_charts_categoryaxisselectcomponent %}#toc-from)\n * —[`select.to`]({% slug api_charts_categoryaxisselectcomponent %}#toc-to)) range will be selected.\n * This means that the last category in the range will not be included in the selection.\n * If the categories are dates, the range has to be also specified with date values.\n */\nclass CategoryAxisSelectComponent extends SettingsComponent {\n constructor(configurationService) {\n super('select', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisSelectComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisSelectComponent, selector: \"kendo-chart-category-axis-item-select\", inputs: { from: \"from\", max: \"max\", min: \"min\", mousewheel: \"mousewheel\", to: \"to\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisSelectComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-select',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { from: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], mousewheel: [{\n type: Input\n }], to: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the category axis title.\n */\nclass CategoryAxisTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nCategoryAxisTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nCategoryAxisTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CategoryAxisTitleComponent, selector: \"kendo-chart-category-axis-item-title\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CategoryAxisTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-category-axis-item-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], text: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the Chart area.\n * Represents the entire visible area of the Chart\n * ([see example]({% slug chartarea_chart_charts %})).\n */\nclass ChartAreaComponent extends SettingsComponent {\n constructor(configurationService) {\n super('chartArea', configurationService);\n this.configurationService = configurationService;\n }\n}\nChartAreaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartAreaComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nChartAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ChartAreaComponent, selector: \"kendo-chart-area\", inputs: { background: \"background\", border: \"border\", height: \"height\", margin: \"margin\", opacity: \"opacity\", width: \"width\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartAreaComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-area',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], height: [{\n type: Input\n }], margin: [{\n type: Input\n }], opacity: [{\n type: Input\n }], width: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the Chart legend\n * ([see example]({% slug legend_chart_charts %})).\n */\nclass LegendComponent extends SettingsComponent {\n constructor(configurationService) {\n super('legend', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nLegendComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LegendComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nLegendComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LegendComponent, selector: \"kendo-chart-legend\", inputs: { align: \"align\", background: \"background\", border: \"border\", height: \"height\", labels: \"labels\", margin: \"margin\", offsetX: \"offsetX\", offsetY: \"offsetY\", orientation: \"orientation\", padding: \"padding\", position: \"position\", reverse: \"reverse\", visible: \"visible\", width: \"width\", markers: \"markers\", spacing: \"spacing\", inactiveItems: \"inactiveItems\", item: \"item\", title: \"title\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LegendComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-legend',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { align: [{\n type: Input\n }], background: [{\n type: Input\n }], border: [{\n type: Input\n }], height: [{\n type: Input\n }], labels: [{\n type: Input\n }], margin: [{\n type: Input\n }], offsetX: [{\n type: Input\n }], offsetY: [{\n type: Input\n }], orientation: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], reverse: [{\n type: Input\n }], visible: [{\n type: Input\n }], width: [{\n type: Input\n }], markers: [{\n type: Input\n }], spacing: [{\n type: Input\n }], inactiveItems: [{\n type: Input\n }], item: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the inactive Chart legend items.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * ```\n */\nclass LegendInactiveItemsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('legend.inactiveItems', configurationService);\n this.configurationService = configurationService;\n }\n}\nLegendInactiveItemsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LegendInactiveItemsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nLegendInactiveItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LegendInactiveItemsComponent, selector: \"kendo-chart-legend-inactive-items\", inputs: { labels: \"labels\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LegendInactiveItemsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-legend-inactive-items',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { labels: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the Chart legend item.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * ```\n */\nclass LegendItemComponent extends SettingsComponent {\n constructor(configurationService) {\n super('legend.item', configurationService);\n this.configurationService = configurationService;\n }\n}\nLegendItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LegendItemComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nLegendItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LegendItemComponent, selector: \"kendo-chart-legend-item\", inputs: { cursor: \"cursor\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LegendItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-legend-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { cursor: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration component for a Chart pane.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public seriesData: number[][] = [[1, 2, 3, 5], [0, 1, 0, 1]];\n * }\n * ```\n */\nclass PaneComponent extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PaneComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PaneComponent, selector: \"kendo-chart-pane, kendo-chart-panes-item\", inputs: { background: \"background\", border: \"border\", clip: \"clip\", height: \"height\", margin: \"margin\", name: \"name\", padding: \"padding\", title: \"title\" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PaneComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-pane, kendo-chart-panes-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], clip: [{\n type: Input\n }], height: [{\n type: Input\n }], margin: [{\n type: Input\n }], name: [{\n type: Input\n }], padding: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\n/**\n * The default options for all chart panes,\n * ([see example]({% slug panes_chart_charts %}#toc-default-panes-configuration)).\n */\nclass PaneDefaultsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('paneDefaults', configurationService);\n this.configurationService = configurationService;\n }\n}\nPaneDefaultsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PaneDefaultsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nPaneDefaultsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PaneDefaultsComponent, selector: \"kendo-chart-pane-defaults\", inputs: { background: \"background\", border: \"border\", clip: \"clip\", height: \"height\", margin: \"margin\", padding: \"padding\", title: \"title\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PaneDefaultsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-pane-defaults',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], clip: [{\n type: Input\n }], height: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the pane default title.\n */\nclass PaneDefaultsTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('paneDefaults.title', configurationService);\n this.configurationService = configurationService;\n }\n}\nPaneDefaultsTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PaneDefaultsTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nPaneDefaultsTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PaneDefaultsTitleComponent, selector: \"kendo-chart-pane-defaults-title\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", position: \"position\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PaneDefaultsTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-pane-defaults-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], position: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * A collection of one or more pane configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nclass PanesComponent extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('panes', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nPanesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanesComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nPanesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PanesComponent, selector: \"kendo-chart-panes\", providers: [CollectionService], queries: [{ propertyName: \"children\", predicate: PaneComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-panes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { children: [{\n type: ContentChildren,\n args: [PaneComponent]\n }] } });\n\n/**\n * The configuration of the Chart pane title.\n */\nclass PanesTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nPanesTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanesTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nPanesTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PanesTitleComponent, selector: \"kendo-chart-pane-title\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", position: \"position\", text: \"text\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanesTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-pane-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], position: [{\n type: Input\n }], text: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the plot area\n * ([see example]({% slug plotarea_chart_charts %})).\n * The plot area is the area which displays the series.\n */\nclass PlotAreaComponent extends SettingsComponent {\n constructor(configurationService) {\n super('plotArea', configurationService);\n this.configurationService = configurationService;\n }\n}\nPlotAreaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PlotAreaComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nPlotAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PlotAreaComponent, selector: \"kendo-chart-plot-area\", inputs: { background: \"background\", border: \"border\", margin: \"margin\", opacity: \"opacity\", padding: \"padding\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PlotAreaComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-plot-area',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], margin: [{\n type: Input\n }], opacity: [{\n type: Input\n }], padding: [{\n type: Input\n }] } });\n\n/**\n * A collection of one or more series items.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nclass SeriesComponent extends CollectionComponent {\n constructor(configurationService, collectionService, tooltipTemplateService) {\n super('series', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.tooltipTemplateService = tooltipTemplateService;\n }\n ngAfterContentChecked() {\n this.readTooltipTemplates();\n }\n readTooltipTemplates() {\n const templates = this.children.map((item) => item.seriesTooltipTemplateRef);\n this.tooltipTemplateService.setSeriesTemplates(templates);\n }\n}\nSeriesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }, { token: TooltipTemplateService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesComponent, selector: \"kendo-chart-series\", providers: [CollectionService], queries: [{ propertyName: \"children\", predicate: SeriesItemComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-series',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: TooltipTemplateService }]; }, propDecorators: { children: [{\n type: ContentChildren,\n args: [SeriesItemComponent]\n }] } });\n\n/**\n * The default options for all series\n * ([see example]({% slug series_chart_charts %}#toc-default-series-configuration)).\n */\nclass SeriesDefaultsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsComponent, selector: \"kendo-chart-series-defaults\", inputs: { border: \"border\", gap: \"gap\", highlight: \"highlight\", overlay: \"overlay\", spacing: \"spacing\", stack: \"stack\", type: \"type\", visual: \"visual\", labels: \"labels\", notes: \"notes\", tooltip: \"tooltip\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { border: [{\n type: Input\n }], gap: [{\n type: Input\n }], highlight: [{\n type: Input\n }], overlay: [{\n type: Input\n }], spacing: [{\n type: Input\n }], stack: [{\n type: Input\n }], type: [{\n type: Input\n }], visual: [{\n type: Input\n }], labels: [{\n type: Input\n }], notes: [{\n type: Input\n }], tooltip: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the Chart series label.\n */\nclass SeriesDefaultsLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.labels', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nSeriesDefaultsLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsLabelsComponent, selector: \"kendo-chart-series-defaults-labels\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", visible: \"visible\", visual: \"visual\", from: \"from\", to: \"to\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }], from: [{\n type: Input\n }], to: [{\n type: Input\n }] } });\n\n/**\n * The `from` label configuration of the Chart series.\n */\nclass SeriesDefaultsLabelsFromComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.labels.from', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nSeriesDefaultsLabelsFromComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsLabelsFromComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsLabelsFromComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsLabelsFromComponent, selector: \"kendo-chart-series-defaults-labels-from\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsLabelsFromComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-labels-from',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The `to` label configuration of the Chart series.\n */\nclass SeriesDefaultsLabelsToComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.labels.to', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nSeriesDefaultsLabelsToComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsLabelsToComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsLabelsToComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsLabelsToComponent, selector: \"kendo-chart-series-defaults-labels-to\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsLabelsToComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-labels-to',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the [`seriesDefaults`]({% slug api_charts_seriesdefaultscomponent %}) notes.\n */\nclass SeriesDefaultsNotesComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsNotesComponent, selector: \"kendo-chart-series-defaults-notes\", inputs: { line: \"line\", visual: \"visual\", icon: \"icon\", label: \"label\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { line: [{\n type: Input\n }], visual: [{\n type: Input\n }], icon: [{\n type: Input\n }], label: [{\n type: Input\n }] } });\n\n/**\n * The icon of the notes.\n */\nclass SeriesDefaultsNotesIconComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsNotesIconComponent, selector: \"kendo-chart-series-defaults-notes-icon\", inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The label of the notes.\n */\nclass SeriesDefaultsNotesLabelComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesDefaultsNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsNotesLabelComponent, selector: \"kendo-chart-series-defaults-notes-label\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the Chart series tooltip.\n */\nclass SeriesDefaultsTooltipComponent extends SettingsComponent {\n constructor(configurationService) {\n super('seriesDefaults.tooltip', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nSeriesDefaultsTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesDefaultsTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesDefaultsTooltipComponent, selector: \"kendo-chart-series-defaults-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesDefaultsTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-defaults-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The error bars of the Chart series\n * ([see example]({% slug errorbars_chart_charts %})).\n */\nclass SeriesErrorBarsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('errorBars', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesErrorBarsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesErrorBarsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesErrorBarsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesErrorBarsComponent, selector: \"kendo-chart-series-item-error-bars\", inputs: { color: \"color\", endCaps: \"endCaps\", line: \"line\", value: \"value\", visual: \"visual\", xValue: \"xValue\", yValue: \"yValue\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesErrorBarsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-error-bars',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { color: [{\n type: Input\n }], endCaps: [{\n type: Input\n }], line: [{\n type: Input\n }], value: [{\n type: Input\n }], visual: [{\n type: Input\n }], xValue: [{\n type: Input\n }], yValue: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the Chart series extremes.\n * Applies to extreme outliers.\n * For more information, refer to [`series.outliers`]({% slug api_charts_seriesitemcomponent %}#toc-outliers).\n */\nclass SeriesExtremesComponent extends SettingsComponent {\n constructor(configurationService) {\n super('extremes', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesExtremesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesExtremesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesExtremesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesExtremesComponent, selector: \"kendo-chart-series-item-extremes\", inputs: { background: \"background\", border: \"border\", rotation: \"rotation\", size: \"size\", type: \"type\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesExtremesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-extremes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], rotation: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }] } });\n\n/**\n * The Chart series highlighting configuration options.\n */\nclass SeriesHighlightComponent extends SettingsComponent {\n constructor(configurationService) {\n super('highlight', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesHighlightComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesHighlightComponent, selector: \"kendo-chart-series-item-highlight\", inputs: { border: \"border\", color: \"color\", line: \"line\", markers: \"markers\", opacity: \"opacity\", toggle: \"toggle\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesHighlightComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-highlight',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { border: [{\n type: Input\n }], color: [{\n type: Input\n }], line: [{\n type: Input\n }], markers: [{\n type: Input\n }], opacity: [{\n type: Input\n }], toggle: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the Chart series label\n * ([see example]({% slug labels_chart_charts %})).\n */\nclass SeriesLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nSeriesLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesLabelsComponent, selector: \"kendo-chart-series-item-labels\", inputs: { align: \"align\", background: \"background\", border: \"border\", color: \"color\", content: \"content\", distance: \"distance\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", visible: \"visible\", visual: \"visual\", from: \"from\", to: \"to\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { align: [{\n type: Input\n }], background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], distance: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }], from: [{\n type: Input\n }], to: [{\n type: Input\n }] } });\n\n/**\n * The `from` label configuration of the Chart series.\n */\nclass SeriesLabelsFromComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels.from', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nSeriesLabelsFromComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesLabelsFromComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesLabelsFromComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesLabelsFromComponent, selector: \"kendo-chart-series-item-labels-from\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", position: \"position\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesLabelsFromComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-labels-from',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The `to` label configuration of the Chart series.\n */\nclass SeriesLabelsToComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels.to', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nSeriesLabelsToComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesLabelsToComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesLabelsToComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesLabelsToComponent, selector: \"kendo-chart-series-item-labels-to\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", padding: \"padding\", position: \"position\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesLabelsToComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-labels-to',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the Chart series marker.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public series: any[] = [{\n * name: \"India\",\n * data: [3.907, 7.943, 7.848, 9.284, 9.263, 9.801, 3.890, 8.238, 9.552, 6.855],\n * markers: {\n * background: 'red',\n * size: 20,\n * type: 'circle'\n * }\n * }, {\n * name: \"Russian Federation\",\n * data: [4.743, 7.295, 7.175, 6.376, 8.153, 8.535, 5.247, -7.832, 4.3, 4.3],\n * markers: {\n * background: 'yellow',\n * size: 10,\n * type: 'square',\n * rotation: 45\n * }\n * }, {\n * name: \"Germany\",\n * data: [0.010, -0.375, 1.161, 0.684, 3.7, 3.269, 1.083, -5.127, 3.690, 2.995],\n * markers: {\n * background: 'green',\n * size: 20,\n * type: 'triangle'\n * }\n * },{\n * name: \"World\",\n * data: [1.988, 2.733, 3.994, 3.464, 4.001, 3.939, 1.333, -2.245, 4.339, 2.727],\n * markers: {\n * background: 'blue',\n * size: 10,\n * type: 'cross'\n * }\n * }];\n * public categories: number[] = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011];\n * }\n * ```\n */\nclass SeriesMarkersComponent extends SettingsComponent {\n constructor(configurationService) {\n super('markers', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesMarkersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesMarkersComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesMarkersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesMarkersComponent, selector: \"kendo-chart-series-item-markers\", inputs: { background: \"background\", border: \"border\", rotation: \"rotation\", size: \"size\", type: \"type\", visible: \"visible\", visual: \"visual\", from: \"from\", to: \"to\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesMarkersComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-markers',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], rotation: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }], from: [{\n type: Input\n }], to: [{\n type: Input\n }] } });\n\n/**\n * The series notes configuration\n * ([see example]({% slug notes_chart_charts %})).\n */\nclass SeriesNotesComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesNotesComponent, selector: \"kendo-chart-series-item-notes\", inputs: { line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { line: [{\n type: Input\n }], position: [{\n type: Input\n }], visual: [{\n type: Input\n }], icon: [{\n type: Input\n }], label: [{\n type: Input\n }] } });\n\n/**\n * The icon of the notes.\n */\nclass SeriesNotesIconComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesNotesIconComponent, selector: \"kendo-chart-series-item-notes-icon\", inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The label of the notes.\n */\nclass SeriesNotesLabelComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesNotesLabelComponent, selector: \"kendo-chart-series-item-notes-label\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the Chart series outliers.\n * Applies to mild outliers.\n * For more information, refer to the [`series.extremes`]({% slug api_charts_seriesitemcomponent %}#toc-extremes) option.\n */\nclass SeriesOutliersComponent extends SettingsComponent {\n constructor(configurationService) {\n super('outliers', configurationService);\n this.configurationService = configurationService;\n }\n}\nSeriesOutliersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesOutliersComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nSeriesOutliersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SeriesOutliersComponent, selector: \"kendo-chart-series-item-outliers\", inputs: { background: \"background\", border: \"border\", rotation: \"rotation\", size: \"size\", type: \"type\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SeriesOutliersComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-series-item-outliers',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], rotation: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the Chart title or text\n * ([see example]({% slug title_chart_charts %})).\n *\n * @example\n * ```ts-preview\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n *

\n * \n * `\n * })\n * export class AppComponent {\n * public isVisible = true;\n * public borderOptions = {\n * color: \"rgba(255, 0, 0, 0.8)\",\n * dashType: 'dash',\n * width: 2\n * };\n *\n * public series: any[] = [{\n * name: \"India\",\n * data: [3.907, 7.943, 7.848, 9.284, 9.263, 9.801, 3.890, 8.238, 9.552, 6.855]\n * }, {\n * name: \"Russian Federation\",\n * data: [4.743, 7.295, 7.175, 6.376, 8.153, 8.535, 5.247, -7.832, 4.3, 4.3]\n * }, {\n * name: \"Germany\",\n * data: [0.010, -0.375, 1.161, 0.684, 3.7, 3.269, 1.083, -5.127, 3.690, 2.995]\n * },{\n * name: \"World\",\n * data: [1.988, 2.733, 3.994, 3.464, 4.001, 3.939, 1.333, -2.245, 4.339, 2.727]\n * }];\n * public categories: number[] = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011];\n * }\n * ```\n */\nclass TitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TitleComponent, selector: \"kendo-chart-title\", inputs: { align: \"align\", background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", text: \"text\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { align: [{\n type: Input\n }], background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], text: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the Chart series tooltip\n * ([see example]({% slug tooltips_chart_charts %})).\n */\nclass TooltipComponent extends SettingsComponent {\n constructor(configurationService, templateService) {\n super('tooltip', configurationService);\n this.configurationService = configurationService;\n this.templateService = templateService;\n this.markAsVisible();\n }\n ngAfterContentChecked() {\n this.templateService.setTemplate(this.seriesTooltipTemplate ? this.seriesTooltipTemplate.templateRef : null);\n this.templateService.setSharedTemplate(this.sharedTooltipTemplate ? this.sharedTooltipTemplate.templateRef : null);\n }\n}\nTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TooltipComponent, deps: [{ token: ConfigurationService }, { token: TooltipTemplateService }], target: i0.ɵɵFactoryTarget.Component });\nTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TooltipComponent, selector: \"kendo-chart-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", opacity: \"opacity\", padding: \"padding\", shared: \"shared\", visible: \"visible\" }, queries: [{ propertyName: \"seriesTooltipTemplate\", first: true, predicate: SeriesTooltipTemplateDirective, descendants: true }, { propertyName: \"sharedTooltipTemplate\", first: true, predicate: SharedTooltipTemplateDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TooltipComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-chart-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: TooltipTemplateService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], opacity: [{\n type: Input\n }], padding: [{\n type: Input\n }], shared: [{\n type: Input\n }], visible: [{\n type: Input\n }], seriesTooltipTemplate: [{\n type: ContentChild,\n args: [SeriesTooltipTemplateDirective, { static: false }]\n }], sharedTooltipTemplate: [{\n type: ContentChild,\n args: [SharedTooltipTemplateDirective, { static: false }]\n }] } });\n\n/**\n * The configuration component for a value axis.\n */\nclass ValueAxisItemComponent extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nValueAxisItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisItemComponent, selector: \"kendo-chart-value-axis-item\", inputs: { axisCrossingValue: \"axisCrossingValue\", background: \"background\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", majorUnit: \"majorUnit\", max: \"max\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", minorUnit: \"minorUnit\", name: \"name\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", type: \"type\", visible: \"visible\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", title: \"title\" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-value-axis-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { axisCrossingValue: [{\n type: Input\n }], background: [{\n type: Input\n }], color: [{\n type: Input\n }], line: [{\n type: Input\n }], majorGridLines: [{\n type: Input\n }], majorTicks: [{\n type: Input\n }], majorUnit: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], minorGridLines: [{\n type: Input\n }], minorTicks: [{\n type: Input\n }], minorUnit: [{\n type: Input\n }], name: [{\n type: Input\n }], narrowRange: [{\n type: Input\n }], pane: [{\n type: Input\n }], plotBands: [{\n type: Input\n }], reverse: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }], crosshair: [{\n type: Input\n }], labels: [{\n type: Input\n }], notes: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\n/**\n * A collection of one or more value axis configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * }\n *\n * ```\n */\nclass ValueAxisComponent extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('valueAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nValueAxisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisComponent, selector: \"kendo-chart-value-axis\", providers: [CollectionService], queries: [{ propertyName: \"children\", predicate: ValueAxisItemComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-value-axis',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { children: [{\n type: ContentChildren,\n args: [ValueAxisItemComponent]\n }] } });\n\n/**\n * The crosshair configuration options ([see example]({% slug crosshairs_chart_charts %})).\n */\nclass ValueAxisCrosshairComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nValueAxisCrosshairComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisCrosshairComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisCrosshairComponent, selector: \"kendo-chart-value-axis-item-crosshair\", inputs: { color: \"color\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisCrosshairComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-crosshair',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { color: [{\n type: Input\n }], opacity: [{\n type: Input\n }], visible: [{\n type: Input\n }], width: [{\n type: Input\n }], tooltip: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the crosshair tooltip ([see example]({% slug crosshairs_chart_charts %})).\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nclass ValueAxisCrosshairTooltipComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nValueAxisCrosshairTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisCrosshairTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisCrosshairTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisCrosshairTooltipComponent, selector: \"kendo-chart-value-axis-item-crosshair-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisCrosshairTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The axis labels configuration.\n */\nclass ValueAxisLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisLabelsComponent, selector: \"kendo-chart-value-axis-item-labels\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], mirror: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], skip: [{\n type: Input\n }], step: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the value axis notes ([see example]({% slug notes_chart_charts %}#toc-axis-notes)).\n */\nclass ValueAxisNotesComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisNotesComponent, selector: \"kendo-chart-value-axis-item-notes\", inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { data: [{\n type: Input\n }], line: [{\n type: Input\n }], position: [{\n type: Input\n }], visual: [{\n type: Input\n }], icon: [{\n type: Input\n }], label: [{\n type: Input\n }] } });\n\n/**\n * The icon of the notes.\n */\nclass ValueAxisNotesIconComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisNotesIconComponent, selector: \"kendo-chart-value-axis-item-notes-icon\", inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The label of the notes.\n */\nclass ValueAxisNotesLabelComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisNotesLabelComponent, selector: \"kendo-chart-value-axis-item-notes-label\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The title configuration of the value axis.\n */\nclass ValueAxisTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nValueAxisTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nValueAxisTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueAxisTitleComponent, selector: \"kendo-chart-value-axis-item-title\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueAxisTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-value-axis-item-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], text: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration component for an X axis\n * ([see example]({% slug api_charts_xaxiscomponent %})).\n */\nclass XAxisItemComponent extends CollectionItemComponent {\n constructor(configurationService, collectionService, intl, localeId) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.intl = intl;\n this.notifyChanges({ weekStartDay: intl.firstDay(localeId) });\n }\n}\nXAxisItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }, { token: i3.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });\nXAxisItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisItemComponent, selector: \"kendo-chart-x-axis-item\", inputs: { axisCrossingValue: \"axisCrossingValue\", background: \"background\", baseUnit: \"baseUnit\", categories: \"categories\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", majorUnit: \"majorUnit\", max: \"max\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", minorUnit: \"minorUnit\", name: \"name\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", startAngle: \"startAngle\", type: \"type\", visible: \"visible\", weekStartDay: \"weekStartDay\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", title: \"title\" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-x-axis-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: i3.IntlService }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; }, propDecorators: { axisCrossingValue: [{\n type: Input\n }], background: [{\n type: Input\n }], baseUnit: [{\n type: Input\n }], categories: [{\n type: Input\n }], color: [{\n type: Input\n }], line: [{\n type: Input\n }], majorGridLines: [{\n type: Input\n }], majorTicks: [{\n type: Input\n }], majorUnit: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], minorGridLines: [{\n type: Input\n }], minorTicks: [{\n type: Input\n }], minorUnit: [{\n type: Input\n }], name: [{\n type: Input\n }], narrowRange: [{\n type: Input\n }], pane: [{\n type: Input\n }], plotBands: [{\n type: Input\n }], reverse: [{\n type: Input\n }], startAngle: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }], weekStartDay: [{\n type: Input\n }], crosshair: [{\n type: Input\n }], labels: [{\n type: Input\n }], notes: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\n/**\n * A collection of one or more X-axis configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public notesConfig = {\n * data: [{\n * value: 0.2,\n * text: \"foo\"\n * }, {\n * value: 0.8,\n * text: \"bar\"\n * }],\n * label: {\n * content: (args: any) => args.dataItem.text,\n * background: 'red',\n * color: 'white'\n * },\n * line: {\n * color: 'blue',\n * dashType: 'dash',\n * length: 150,\n * width: 2\n * },\n * position: 'top'\n * };\n *\n * public crosshairConfig = {\n * color: 'green',\n * opacity: 0.8,\n * visible: true,\n * width: 3\n * };\n * }\n *\n * ```\n */\nclass XAxisComponent extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('xAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nXAxisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisComponent, selector: \"kendo-chart-x-axis\", providers: [CollectionService], queries: [{ propertyName: \"children\", predicate: XAxisItemComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-x-axis',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { children: [{\n type: ContentChildren,\n args: [XAxisItemComponent]\n }] } });\n\n/**\n * The crosshair configuration options\n * ([see example]({% slug api_charts_xaxiscomponent %})).\n */\nclass XAxisCrosshairComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nXAxisCrosshairComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisCrosshairComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisCrosshairComponent, selector: \"kendo-chart-x-axis-item-crosshair\", inputs: { color: \"color\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisCrosshairComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-crosshair',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { color: [{\n type: Input\n }], opacity: [{\n type: Input\n }], visible: [{\n type: Input\n }], width: [{\n type: Input\n }], tooltip: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the crosshair tooltip.\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nclass XAxisCrosshairTooltipComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nXAxisCrosshairTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisCrosshairTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisCrosshairTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisCrosshairTooltipComponent, selector: \"kendo-chart-x-axis-item-crosshair-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisCrosshairTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The axis labels configuration.\n */\nclass XAxisLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisLabelsComponent, selector: \"kendo-chart-x-axis-item-labels\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", culture: \"culture\", dateFormats: \"dateFormats\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], culture: [{\n type: Input\n }], dateFormats: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], mirror: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], skip: [{\n type: Input\n }], step: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the X-axis notes.\n * For an example on the basic usage of the XAxisNotesComponent,\n * refer to the [demo on the XAxisComponent]({% slug api_charts_xaxiscomponent %})\n * or to the documentation about the\n * [axis notes]({% slug notes_chart_charts %}#toc-axis-notes).\n */\nclass XAxisNotesComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisNotesComponent, selector: \"kendo-chart-x-axis-item-notes\", inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { data: [{\n type: Input\n }], line: [{\n type: Input\n }], position: [{\n type: Input\n }], visual: [{\n type: Input\n }], icon: [{\n type: Input\n }], label: [{\n type: Input\n }] } });\n\n/**\n * The icon of the notes.\n */\nclass XAxisNotesIconComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisNotesIconComponent, selector: \"kendo-chart-x-axis-item-notes-icon\", inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The label of the notes.\n */\nclass XAxisNotesLabelComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisNotesLabelComponent, selector: \"kendo-chart-x-axis-item-notes-label\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The title configuration of the Scatter Chart X axis.\n */\nclass XAxisTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nXAxisTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nXAxisTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: XAxisTitleComponent, selector: \"kendo-chart-x-axis-item-title\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: XAxisTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-x-axis-item-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], text: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration component for the Y axis\n * ([see example]({% slug api_charts_yaxiscomponent %})).\n */\nclass YAxisItemComponent extends CollectionItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nYAxisItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisItemComponent, selector: \"kendo-chart-y-axis-item\", inputs: { axisCrossingValue: \"axisCrossingValue\", background: \"background\", baseUnit: \"baseUnit\", categories: \"categories\", color: \"color\", line: \"line\", majorGridLines: \"majorGridLines\", majorTicks: \"majorTicks\", majorUnit: \"majorUnit\", max: \"max\", min: \"min\", minorGridLines: \"minorGridLines\", minorTicks: \"minorTicks\", minorUnit: \"minorUnit\", name: \"name\", narrowRange: \"narrowRange\", pane: \"pane\", plotBands: \"plotBands\", reverse: \"reverse\", type: \"type\", visible: \"visible\", crosshair: \"crosshair\", labels: \"labels\", notes: \"notes\", title: \"title\" }, providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-y-axis-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { axisCrossingValue: [{\n type: Input\n }], background: [{\n type: Input\n }], baseUnit: [{\n type: Input\n }], categories: [{\n type: Input\n }], color: [{\n type: Input\n }], line: [{\n type: Input\n }], majorGridLines: [{\n type: Input\n }], majorTicks: [{\n type: Input\n }], majorUnit: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], minorGridLines: [{\n type: Input\n }], minorTicks: [{\n type: Input\n }], minorUnit: [{\n type: Input\n }], name: [{\n type: Input\n }], narrowRange: [{\n type: Input\n }], pane: [{\n type: Input\n }], plotBands: [{\n type: Input\n }], reverse: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }], crosshair: [{\n type: Input\n }], labels: [{\n type: Input\n }], notes: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\n/**\n * A collection of one or more Y-axis configuration components.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public notesConfig = {\n * data: [{\n * value: 0.2,\n * text: \"foo\"\n * }, {\n * value: 0.8,\n * text: \"bar\"\n * }],\n * label: {\n * content: (args: any) => args.dataItem.text,\n * background: 'red',\n * color: 'white'\n * },\n * line: {\n * color: 'blue',\n * dashType: 'dash',\n * length: 150,\n * width: 2\n * },\n * position: 'top'\n * };\n *\n * public crosshairConfig = {\n * color: 'green',\n * opacity: 0.8,\n * visible: true,\n * width: 3\n * };\n * }\n *\n * ```\n */\nclass YAxisComponent extends CollectionComponent {\n constructor(configurationService, collectionService) {\n super('yAxis', configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nYAxisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisComponent, selector: \"kendo-chart-y-axis\", providers: [CollectionService], queries: [{ propertyName: \"children\", predicate: YAxisItemComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-y-axis',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; }, propDecorators: { children: [{\n type: ContentChildren,\n args: [YAxisItemComponent]\n }] } });\n\n/**\n * The crosshair configuration options\n * ([see example]({% slug api_charts_yaxiscomponent %})).\n */\nclass YAxisCrosshairComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nYAxisCrosshairComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisCrosshairComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisCrosshairComponent, selector: \"kendo-chart-y-axis-item-crosshair\", inputs: { color: \"color\", opacity: \"opacity\", visible: \"visible\", width: \"width\", tooltip: \"tooltip\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisCrosshairComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-crosshair',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { color: [{\n type: Input\n }], opacity: [{\n type: Input\n }], visible: [{\n type: Input\n }], width: [{\n type: Input\n }], tooltip: [{\n type: Input\n }] } });\n\n/**\n * The configuration options of the crosshair tooltip.\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nclass YAxisCrosshairTooltipComponent extends SettingsComponent {\n constructor(configurationService) {\n super('crosshair.tooltip', configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nYAxisCrosshairTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisCrosshairTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisCrosshairTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisCrosshairTooltipComponent, selector: \"kendo-chart-y-axis-item-crosshair-tooltip\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", format: \"format\", padding: \"padding\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisCrosshairTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-crosshair-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], padding: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The axis labels configuration.\n */\nclass YAxisLabelsComponent extends SettingsComponent {\n constructor(configurationService) {\n super('labels', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisLabelsComponent, selector: \"kendo-chart-y-axis-item-labels\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", culture: \"culture\", dateFormats: \"dateFormats\", font: \"font\", format: \"format\", margin: \"margin\", mirror: \"mirror\", padding: \"padding\", position: \"position\", rotation: \"rotation\", skip: \"skip\", step: \"step\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], culture: [{\n type: Input\n }], dateFormats: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], margin: [{\n type: Input\n }], mirror: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], skip: [{\n type: Input\n }], step: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * The configuration of the Y axis notes\n * ([see example]({% slug api_charts_yaxiscomponent %})).\n */\nclass YAxisNotesComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisNotesComponent, selector: \"kendo-chart-y-axis-item-notes\", inputs: { data: \"data\", line: \"line\", position: \"position\", visual: \"visual\", icon: \"icon\", label: \"label\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { data: [{\n type: Input\n }], line: [{\n type: Input\n }], position: [{\n type: Input\n }], visual: [{\n type: Input\n }], icon: [{\n type: Input\n }], label: [{\n type: Input\n }] } });\n\n/**\n * The icon of the notes.\n */\nclass YAxisNotesIconComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.icon', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisNotesIconComponent, selector: \"kendo-chart-y-axis-item-notes-icon\", inputs: { background: \"background\", border: \"border\", size: \"size\", type: \"type\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], size: [{\n type: Input\n }], type: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The label of the notes.\n */\nclass YAxisNotesLabelComponent extends SettingsComponent {\n constructor(configurationService) {\n super('notes.label', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisNotesLabelComponent, selector: \"kendo-chart-y-axis-item-notes-label\", inputs: { background: \"background\", border: \"border\", color: \"color\", content: \"content\", font: \"font\", format: \"format\", position: \"position\", rotation: \"rotation\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], content: [{\n type: Input\n }], font: [{\n type: Input\n }], format: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The title configuration of the Scatter Chart Y axis.\n */\nclass YAxisTitleComponent extends SettingsComponent {\n constructor(configurationService) {\n super('title', configurationService);\n this.configurationService = configurationService;\n }\n}\nYAxisTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nYAxisTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YAxisTitleComponent, selector: \"kendo-chart-y-axis-item-title\", inputs: { background: \"background\", border: \"border\", color: \"color\", font: \"font\", margin: \"margin\", padding: \"padding\", position: \"position\", rotation: \"rotation\", text: \"text\", visible: \"visible\", visual: \"visual\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YAxisTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-y-axis-item-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { background: [{\n type: Input\n }], border: [{\n type: Input\n }], color: [{\n type: Input\n }], font: [{\n type: Input\n }], margin: [{\n type: Input\n }], padding: [{\n type: Input\n }], position: [{\n type: Input\n }], rotation: [{\n type: Input\n }], text: [{\n type: Input\n }], visible: [{\n type: Input\n }], visual: [{\n type: Input\n }] } });\n\n/**\n * Specifies if the Chart can be zoomed.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * ```\n */\nclass ZoomableComponent extends SettingsComponent {\n constructor(configurationService) {\n super('zoomable', configurationService);\n this.configurationService = configurationService;\n }\n}\nZoomableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ZoomableComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nZoomableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ZoomableComponent, selector: \"kendo-chart-zoomable\", inputs: { mousewheel: \"mousewheel\", selection: \"selection\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ZoomableComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-zoomable',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { mousewheel: [{\n type: Input\n }], selection: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nconst CHART_DIRECTIVES = [\n ChartComponent,\n TooltipPopupComponent,\n SeriesTooltipTemplateDirective,\n SharedTooltipTemplateDirective,\n CrosshairTooltipsContainerComponent,\n CrosshairTooltipComponent,\n DonutCenterTemplateDirective,\n AxisDefaultsComponent,\n AxisDefaultsCrosshairComponent,\n AxisDefaultsCrosshairTooltipComponent,\n AxisDefaultsLabelsComponent,\n AxisDefaultsTitleComponent,\n CategoryAxisComponent,\n CategoryAxisCrosshairComponent,\n CategoryAxisCrosshairTooltipComponent,\n CategoryAxisItemComponent,\n CategoryAxisLabelsComponent,\n CategoryAxisRangeLabelsComponent,\n CategoryAxisNotesComponent,\n CategoryAxisNotesIconComponent,\n CategoryAxisNotesLabelComponent,\n CategoryAxisSelectComponent,\n CategoryAxisTitleComponent,\n ChartAreaComponent,\n LegendComponent,\n LegendInactiveItemsComponent,\n LegendItemComponent,\n PaneComponent,\n PaneDefaultsComponent,\n PaneDefaultsTitleComponent,\n PanesComponent,\n PanesTitleComponent,\n PlotAreaComponent,\n SeriesComponent,\n SeriesDefaultsComponent,\n SeriesDefaultsLabelsComponent,\n SeriesDefaultsLabelsFromComponent,\n SeriesDefaultsLabelsToComponent,\n SeriesDefaultsNotesComponent,\n SeriesDefaultsNotesIconComponent,\n SeriesDefaultsNotesLabelComponent,\n SeriesDefaultsTooltipComponent,\n SeriesErrorBarsComponent,\n SeriesExtremesComponent,\n SeriesHighlightComponent,\n SeriesItemComponent,\n SeriesLabelsComponent,\n SeriesLabelsFromComponent,\n SeriesLabelsToComponent,\n SeriesMarkersComponent,\n SeriesNotesComponent,\n SeriesNotesIconComponent,\n SeriesNotesLabelComponent,\n SeriesOutliersComponent,\n SeriesTooltipComponent,\n TitleComponent,\n TooltipComponent,\n ValueAxisComponent,\n ValueAxisCrosshairComponent,\n ValueAxisCrosshairTooltipComponent,\n ValueAxisItemComponent,\n ValueAxisLabelsComponent,\n ValueAxisNotesComponent,\n ValueAxisNotesIconComponent,\n ValueAxisNotesLabelComponent,\n ValueAxisTitleComponent,\n XAxisComponent,\n XAxisCrosshairComponent,\n XAxisCrosshairTooltipComponent,\n XAxisItemComponent,\n XAxisLabelsComponent,\n XAxisNotesComponent,\n XAxisNotesIconComponent,\n XAxisNotesLabelComponent,\n XAxisTitleComponent,\n YAxisComponent,\n YAxisCrosshairComponent,\n YAxisCrosshairTooltipComponent,\n YAxisItemComponent,\n YAxisLabelsComponent,\n YAxisNotesComponent,\n YAxisNotesIconComponent,\n YAxisNotesLabelComponent,\n YAxisTitleComponent,\n ZoomableComponent\n];\n\n// Re-export event types\n\n/**\n * Specifies the `weekStartDay` of a [CategoryAxisItemComponent]({% slug api_charts_categoryaxisitemcomponent %}).\n */\nvar WeekStartDay;\n(function (WeekStartDay) {\n /**\n * Specifies Sunday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Sunday\"] = 0] = \"Sunday\";\n /**\n * Specifies Monday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Monday\"] = 1] = \"Monday\";\n /**\n * Specifies Tuesday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Tuesday\"] = 2] = \"Tuesday\";\n /**\n * Specifies Wednesday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Wednesday\"] = 3] = \"Wednesday\";\n /**\n * Specifies Thursday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Thursday\"] = 4] = \"Thursday\";\n /**\n * Specifies Friday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Friday\"] = 5] = \"Friday\";\n /**\n * Specifies Saturday as the first day of the week.\n */\n WeekStartDay[WeekStartDay[\"Saturday\"] = 6] = \"Saturday\";\n})(WeekStartDay || (WeekStartDay = {}));\n\n/**\n * The arguments for the `navigatorFilter` event.\n */\nclass NavigatorFilterEvent extends BaseEvent {\n /**\n * Constructs the event arguments from a raw object.\n */\n constructor(e, sender) {\n super(sender);\n this.from = e.from;\n this.to = e.to;\n }\n}\n\n// Re-export event types\n\n/**\n * @hidden\n */\nclass RootConfigurationService extends ConfigurationService {\n}\nRootConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RootConfigurationService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\nRootConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RootConfigurationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RootConfigurationService, decorators: [{\n type: Injectable\n }] });\n\nconst EVENT_MAP = {\n navigatorFilter: NavigatorFilterEvent\n};\n/**\n * @hidden\n */\nclass StockInstanceEventService extends InstanceEventService {\n create(name, args, sender) {\n if (EVENT_MAP[name]) {\n return new EVENT_MAP[name](args, sender);\n }\n return super.create(name, args, sender);\n }\n}\n\nconst NAVIGATOR_DEFAULTS = {\n autoBindElements: true,\n liveDrag: false,\n partialRedraw: true\n};\n/**\n * The root StockChart component.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public data: any[] = [];\n *\n * constructor() {\n * for (let idx = 0; idx < 100; idx++) {\n * this.data.push({\n * date: new Date(2017, 0, idx),\n * value: Math.random() * 100\n * });\n * }\n * }\n * }\n *\n * ```\n */\nclass StockChartComponent extends ChartComponent {\n constructor(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer) {\n super(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer);\n this.configurationService = configurationService;\n this.themeService = themeService;\n this.element = element;\n this.intl = intl;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.instanceEventService = instanceEventService;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n /**\n * Fires when the navigator range is changed.\n */\n this.navigatorFilter = new EventEmitter();\n this.redrawSlaves = false;\n this.hostClasses = ['k-chart', 'k-stockchart'];\n validatePackage(packageMetadata);\n }\n /**\n * If called, the navigator pane is not redrawn the next time the StockChart options are updated.\n * The method is useful if you need to update only the main series data for the selected period.\n */\n skipNavigatorRedraw() {\n this.redrawSlaves = true;\n }\n createInstance(element, observer) {\n this.applyNavigatorDefaults();\n if (this.isDevMode() && (this.options.zoomable || this.options.pannable)) {\n throw new Error('The pannable and zoomable options are not supported by the StockChart component.');\n }\n this.instance = new StockChart(element, this.options, this.theme, {\n intlService: this.intl,\n observer: observer,\n rtl: this.rtl,\n sender: this\n });\n }\n updateOptions() {\n this.applyNavigatorDefaults();\n if (this.redrawSlaves) {\n this.instance.applyOptions(this.options);\n this.instance.bindCategories();\n this.instance.navigator.redrawSlaves();\n }\n else {\n this.instance.setOptions(this.options);\n }\n this.redrawSlaves = false;\n }\n applyNavigatorDefaults() {\n this.options.navigator = Object.assign({}, this.options.navigator, NAVIGATOR_DEFAULTS);\n }\n isDevMode() {\n return isDevMode();\n }\n}\nStockChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StockChartComponent, deps: [{ token: ConfigurationService }, { token: ThemeService }, { token: i0.ElementRef }, { token: i3.IntlService }, { token: i4.LocalizationService }, { token: i0.NgZone }, { token: StockInstanceEventService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nStockChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StockChartComponent, selector: \"kendo-stockchart\", inputs: { navigator: \"navigator\", pannable: \"pannable\", zoomable: \"zoomable\" }, outputs: { navigatorFilter: \"navigatorFilter\" }, providers: [\n ConfigurationService,\n TooltipTemplateService,\n { provide: RootConfigurationService, useExisting: ConfigurationService },\n StockInstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ], exportAs: [\"kendoStockChart\"], usesInheritance: true, ngImport: i0, template: `\n
\n \n \n \n \n \n `, isInline: true, components: [{ type: CrosshairTooltipsContainerComponent, selector: \"kendo-chart-crosshair-tooltips-container\", inputs: [\"popupSettings\"] }, { type: TooltipPopupComponent, selector: \"kendo-chart-tooltip-popup\", inputs: [\"animate\", \"classNames\", \"popupSettings\", \"wrapperClass\"], outputs: [\"leave\"] }, { type: i8.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StockChartComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendoStockChart',\n providers: [\n ConfigurationService,\n TooltipTemplateService,\n { provide: RootConfigurationService, useExisting: ConfigurationService },\n StockInstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ],\n selector: 'kendo-stockchart',\n template: `\n
\n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: ThemeService }, { type: i0.ElementRef }, { type: i3.IntlService }, { type: i4.LocalizationService }, { type: i0.NgZone }, { type: StockInstanceEventService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { navigator: [{\n type: Input\n }], pannable: [{\n type: Input\n }], zoomable: [{\n type: Input\n }], navigatorFilter: [{\n type: Output\n }] } });\n\n/**\n * @hidden\n */\nconst PREFIX = new InjectionToken('configuration prefix');\n/**\n * @hidden\n */\nclass PrefixConfigurationService extends ConfigurationService {\n constructor(rootService, prefix, ngZone) {\n super(ngZone);\n this.rootService = rootService;\n this.prefix = prefix;\n }\n push(store) {\n this.rootService.notify(new Change(this.prefix, store));\n }\n notify(change) {\n change.key = this.prefix + (change.key ? `.${change.key}` : '');\n this.rootService.notify(change);\n }\n}\nPrefixConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PrefixConfigurationService, deps: [{ token: RootConfigurationService }, { token: PREFIX }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nPrefixConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PrefixConfigurationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PrefixConfigurationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: RootConfigurationService, decorators: [{\n type: Inject,\n args: [RootConfigurationService]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [PREFIX]\n }] }, { type: i0.NgZone }]; } });\n\n/**\n * The configuration options of the navigator\n * ([see runnable example]({% slug overview_stockchart_charts %}#toc-navigator)).\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *

\n * \n * `\n * })\n * ```\n */\nclass NavigatorComponent extends SettingsComponent {\n constructor(configurationService) {\n super('', configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorComponent, selector: \"kendo-chart-navigator\", inputs: { visible: \"visible\", categoryAxis: \"categoryAxis\", hint: \"hint\", pane: \"pane\", select: \"select\", series: \"series\" }, providers: [{ provide: PREFIX, useValue: 'navigator' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: PREFIX, useValue: 'navigator' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }],\n selector: 'kendo-chart-navigator',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { visible: [{\n type: Input\n }], categoryAxis: [{\n type: Input\n }], hint: [{\n type: Input\n }], pane: [{\n type: Input\n }], select: [{\n type: Input\n }], series: [{\n type: Input\n }] } });\n\n/**\n * The configuration component of the navigator category axis.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass NavigatorCategoryAxisComponent extends CategoryAxisItemComponent {\n constructor(configurationService, intl, localeId) {\n super(configurationService, null, intl, localeId);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisComponent, deps: [{ token: ConfigurationService }, { token: i3.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisComponent, selector: \"kendo-chart-navigator-category-axis\", providers: [{\n provide: PREFIX,\n useValue: 'navigator.categoryAxis'\n }, {\n provide: ConfigurationService,\n useClass: PrefixConfigurationService\n }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: PREFIX,\n useValue: 'navigator.categoryAxis'\n }, {\n provide: ConfigurationService,\n useClass: PrefixConfigurationService\n }],\n selector: 'kendo-chart-navigator-category-axis',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: i3.IntlService }, { type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; } });\n\n/**\n * The configuration options of the crosshair.\n */\nclass NavigatorCategoryAxisCrosshairComponent extends CategoryAxisCrosshairComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisCrosshairComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisCrosshairComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisCrosshairComponent, selector: \"kendo-chart-navigator-category-axis-crosshair\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisCrosshairComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-crosshair',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The configuration options of the crosshair tooltip.\n * The crosshair tooltip is displayed when the `visible` option is set to `true`.\n */\nclass NavigatorCategoryAxisCrosshairTooltipComponent extends CategoryAxisCrosshairTooltipComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisCrosshairTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisCrosshairTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisCrosshairTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisCrosshairTooltipComponent, selector: \"kendo-chart-navigator-category-axis-crosshair-tooltip\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisCrosshairTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-crosshair-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The configuration of the axis labels.\n */\nclass NavigatorCategoryAxisLabelsComponent extends CategoryAxisLabelsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisLabelsComponent, selector: \"kendo-chart-navigator-category-axis-labels\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The configuration of the category axis notes.\n */\nclass NavigatorCategoryAxisNotesComponent extends CategoryAxisNotesComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisNotesComponent, selector: \"kendo-chart-navigator-category-axis-notes\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The icon of the notes.\n */\nclass NavigatorCategoryAxisNotesIconComponent extends CategoryAxisNotesIconComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisNotesIconComponent, selector: \"kendo-chart-navigator-category-axis-notes-icon\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The label of the notes.\n */\nclass NavigatorCategoryAxisNotesLabelComponent extends CategoryAxisNotesLabelComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisNotesLabelComponent, selector: \"kendo-chart-navigator-category-axis-notes-label\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The selected axis range. If set, the axis selection is enabled. The range is index-based and starts from zero.\n * Categories with indexes in the range (`select.from`, `select.to`) will be selected.\n * This means that the last category in the range will not be included in the selection.\n * If the categories are dates, the range has also to be specified with date values.\n */\nclass NavigatorCategoryAxisSelectComponent extends CategoryAxisSelectComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisSelectComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisSelectComponent, selector: \"kendo-chart-navigator-category-axis-select\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisSelectComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-select',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The title configuration of the navigator category axis.\n */\nclass NavigatorCategoryAxisTitleComponent extends CategoryAxisTitleComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorCategoryAxisTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorCategoryAxisTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorCategoryAxisTitleComponent, selector: \"kendo-chart-navigator-category-axis-title\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorCategoryAxisTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-category-axis-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The default options of the navigator hint\n * ([see example]({% slug overview_stockchart_charts %}#toc-navigator)).\n */\nclass NavigatorHintComponent extends SettingsComponent {\n constructor(configurationService) {\n super('hint', configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorHintComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorHintComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorHintComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorHintComponent, selector: \"kendo-chart-navigator-hint\", inputs: { content: \"content\", format: \"format\", visible: \"visible\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorHintComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-hint',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { content: [{\n type: Input\n }], format: [{\n type: Input\n }], visible: [{\n type: Input\n }] } });\n\n/**\n * The configuration component of the navigator pane\n * ([see example]({% slug overview_stockchart_charts %}#toc-navigator)).\n */\nclass NavigatorPaneComponent extends PaneComponent {\n constructor(configurationService) {\n super(configurationService, null);\n this.configurationService = configurationService;\n }\n}\nNavigatorPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorPaneComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorPaneComponent, selector: \"kendo-chart-navigator-pane\", providers: [{ provide: PREFIX, useValue: 'navigator.pane' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorPaneComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: PREFIX, useValue: 'navigator.pane' }, { provide: ConfigurationService, useClass: PrefixConfigurationService }],\n selector: 'kendo-chart-navigator-pane',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The title configuration of the StockChart navigator pane.\n */\nclass NavigatorPaneTitleComponent extends PanesTitleComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorPaneTitleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorPaneTitleComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorPaneTitleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorPaneTitleComponent, selector: \"kendo-chart-navigator-pane-title\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorPaneTitleComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-pane-title',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * Specifies the initially selected range.\n * If no range is specified, the full range of values is rendered.\n */\nclass NavigatorSelectComponent extends SettingsComponent {\n constructor(configurationService) {\n super('select', configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSelectComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSelectComponent, selector: \"kendo-chart-navigator-select\", inputs: { from: \"from\", to: \"to\", mousewheel: \"mousewheel\" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSelectComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-select',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; }, propDecorators: { from: [{\n type: Input\n }], to: [{\n type: Input\n }], mousewheel: [{\n type: Input\n }] } });\n\n/**\n * The configuration component of a navigator series item\n * ([see example]({% slug navigator_stockchart_charts %})).\n */\nclass NavigatorSeriesItemComponent extends SeriesItemComponent {\n constructor(configurationService, collectionService) {\n super(configurationService, collectionService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n }\n}\nNavigatorSeriesItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesItemComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesItemComponent, selector: \"kendo-chart-navigator-series-item\", providers: [ConfigurationService], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationService],\n selector: 'kendo-chart-navigator-series-item',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }]; } });\n\n/**\n * A collection of one or more navigator series items.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public data: any[] = [];\n *\n * constructor() {\n * for (let idx = 0; idx < 100; idx++) {\n * this.data.push({\n * date: new Date(2017, 0, idx),\n * value: Math.random() * 100\n * });\n * }\n * }\n * }\n *\n * ```\n */\nclass NavigatorSeriesComponent extends SeriesComponent {\n constructor(configurationService, collectionService, tooltipTemplateService) {\n super(configurationService, collectionService, tooltipTemplateService);\n this.configurationService = configurationService;\n this.collectionService = collectionService;\n this.tooltipTemplateService = tooltipTemplateService;\n }\n readTooltipTemplates() {\n }\n}\nNavigatorSeriesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesComponent, deps: [{ token: ConfigurationService }, { token: CollectionService }, { token: TooltipTemplateService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesComponent, selector: \"kendo-chart-navigator-series\", providers: [CollectionService], queries: [{ propertyName: \"children\", predicate: NavigatorSeriesItemComponent }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CollectionService],\n selector: 'kendo-chart-navigator-series',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: CollectionService }, { type: TooltipTemplateService }]; }, propDecorators: { children: [{\n type: ContentChildren,\n args: [NavigatorSeriesItemComponent]\n }] } });\n\n/**\n * The error bars of the StockChart navigator series.\n */\nclass NavigatorSeriesErrorBarsComponent extends SeriesErrorBarsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesErrorBarsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesErrorBarsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesErrorBarsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesErrorBarsComponent, selector: \"kendo-chart-navigator-series-item-error-bars\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesErrorBarsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-error-bars',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The extremes configuration of the StockChart navigator series. Applies to extreme outliers.\n */\nclass NavigatorSeriesExtremesComponent extends SeriesExtremesComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesExtremesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesExtremesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesExtremesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesExtremesComponent, selector: \"kendo-chart-navigator-series-item-extremes\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesExtremesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-extremes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The configuration options of the StockChart series highlight.\n */\nclass NavigatorSeriesHighlightComponent extends SeriesHighlightComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesHighlightComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesHighlightComponent, selector: \"kendo-chart-navigator-series-item-highlight\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesHighlightComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-highlight',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The label configuration of the StockChart navigator series.\n */\nclass NavigatorSeriesLabelsComponent extends SeriesLabelsComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nNavigatorSeriesLabelsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesLabelsComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesLabelsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesLabelsComponent, selector: \"kendo-chart-navigator-series-item-labels\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesLabelsComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-labels',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The `from` label configuration of the StockChart navigator series.\n */\nclass NavigatorSeriesLabelsFromComponent extends SeriesLabelsFromComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nNavigatorSeriesLabelsFromComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesLabelsFromComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesLabelsFromComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesLabelsFromComponent, selector: \"kendo-chart-navigator-series-item-labels-from\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesLabelsFromComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-labels-from',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The `to` label configuration of the StockChart navigator series.\n */\nclass NavigatorSeriesLabelsToComponent extends SeriesLabelsToComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n this.markAsVisible();\n }\n}\nNavigatorSeriesLabelsToComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesLabelsToComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesLabelsToComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesLabelsToComponent, selector: \"kendo-chart-navigator-series-item-labels-to\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesLabelsToComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-labels-to',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The marker configuration of the StockChart navigator series.\n */\nclass NavigatorSeriesMarkersComponent extends SeriesMarkersComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesMarkersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesMarkersComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesMarkersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesMarkersComponent, selector: \"kendo-chart-navigator-series-item-markers\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesMarkersComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-markers',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The notes configuration of the StockChart navigator series.\n */\nclass NavigatorSeriesNotesComponent extends SeriesNotesComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesNotesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesNotesComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesNotesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesNotesComponent, selector: \"kendo-chart-navigator-series-item-notes\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesNotesComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-notes',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The icon of the notes.\n */\nclass NavigatorSeriesNotesIconComponent extends SeriesNotesIconComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesNotesIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesNotesIconComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesNotesIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesNotesIconComponent, selector: \"kendo-chart-navigator-series-item-notes-icon\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesNotesIconComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-notes-icon',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The label of the notes.\n */\nclass NavigatorSeriesNotesLabelComponent extends SeriesNotesLabelComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesNotesLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesNotesLabelComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesNotesLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesNotesLabelComponent, selector: \"kendo-chart-navigator-series-item-notes-label\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesNotesLabelComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-notes-label',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The outliers configuration of the StockChart navigator series. Applies to mild outliers.\n */\nclass NavigatorSeriesOutliersComponent extends SeriesOutliersComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesOutliersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesOutliersComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesOutliersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesOutliersComponent, selector: \"kendo-chart-navigator-series-item-outliers\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesOutliersComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-outliers',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * The tooltip configuration of the StockChart navigator series.\n * The StockChart navigator series tooltip is displayed when the `navigator.series.tooltip.visible` option is set to `true`.\n */\nclass NavigatorSeriesTooltipComponent extends SeriesTooltipComponent {\n constructor(configurationService) {\n super(configurationService);\n this.configurationService = configurationService;\n }\n}\nNavigatorSeriesTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesTooltipComponent, deps: [{ token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Component });\nNavigatorSeriesTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigatorSeriesTooltipComponent, selector: \"kendo-chart-navigator-series-item-tooltip\", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigatorSeriesTooltipComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-chart-navigator-series-item-tooltip',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });\n\n/**\n * @hidden\n */\nconst STOCK_CHART_DIRECTIVES = [\n StockChartComponent,\n NavigatorComponent,\n NavigatorCategoryAxisComponent,\n NavigatorCategoryAxisCrosshairComponent,\n NavigatorCategoryAxisCrosshairTooltipComponent,\n NavigatorCategoryAxisLabelsComponent,\n NavigatorCategoryAxisNotesComponent,\n NavigatorCategoryAxisNotesIconComponent,\n NavigatorCategoryAxisNotesLabelComponent,\n NavigatorCategoryAxisSelectComponent,\n NavigatorCategoryAxisTitleComponent,\n NavigatorHintComponent,\n NavigatorPaneComponent,\n NavigatorPaneTitleComponent,\n NavigatorSelectComponent,\n NavigatorSeriesComponent,\n NavigatorSeriesItemComponent,\n NavigatorSeriesErrorBarsComponent,\n NavigatorSeriesExtremesComponent,\n NavigatorSeriesHighlightComponent,\n NavigatorSeriesLabelsComponent,\n NavigatorSeriesLabelsFromComponent,\n NavigatorSeriesLabelsToComponent,\n NavigatorSeriesMarkersComponent,\n NavigatorSeriesNotesComponent,\n NavigatorSeriesNotesIconComponent,\n NavigatorSeriesNotesLabelComponent,\n NavigatorSeriesOutliersComponent,\n NavigatorSeriesTooltipComponent\n];\n\n/**\n * The root Chart component.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public data: any[] = [\n * 936, 968, 1025, 999, 998, 1014, 1017, 1010, 1010, 1007,\n * 1004, 988, 990, 988, 987, 995, 946, 954, 991, 984,\n * 974, 956, 986, 936, 955, 1021, 1013, 1005, 958, 953,\n * 952, 940, 937, 980, 966, 965, 928, 916, 910, 980\n * ];\n * }\n *\n * ```\n */\nclass SparklineComponent extends ChartComponent {\n constructor(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer) {\n super(configurationService, themeService, element, intl, localizationService, ngZone, instanceEventService, changeDetector, renderer);\n this.configurationService = configurationService;\n this.themeService = themeService;\n this.element = element;\n this.intl = intl;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.instanceEventService = instanceEventService;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n /**\n * @hidden\n */\n this.tooltipWrapperClass = 'k-sparkline-tooltip-wrapper';\n /**\n * @hidden\n */\n this.tooltipContentClasses = {\n 'k-sparkline-tooltip': true\n };\n this.hostClasses = ['k-sparkline', 'k-widget'];\n validatePackage(packageMetadata);\n }\n createInstance(element, observer) {\n this.instance = new Sparkline(element, Sparkline.normalizeOptions(this.options), this.theme, {\n intlService: this.intl,\n observer: observer,\n rtl: this.rtl,\n sender: this\n });\n }\n updateOptions() {\n this.instance.setOptions(Sparkline.normalizeOptions(this.options));\n }\n}\nSparklineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SparklineComponent, deps: [{ token: ConfigurationService }, { token: ThemeService }, { token: i0.ElementRef }, { token: i3.IntlService }, { token: i4.LocalizationService }, { token: i0.NgZone }, { token: InstanceEventService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nSparklineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SparklineComponent, selector: \"kendo-sparkline\", inputs: { type: \"type\", data: \"data\" }, providers: [\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ], exportAs: [\"kendoSparkline\"], usesInheritance: true, ngImport: i0, template: `\n \n \n \n \n \n \n `, isInline: true, components: [{ type: CrosshairTooltipsContainerComponent, selector: \"kendo-chart-crosshair-tooltips-container\", inputs: [\"popupSettings\"] }, { type: TooltipPopupComponent, selector: \"kendo-chart-tooltip-popup\", inputs: [\"animate\", \"classNames\", \"popupSettings\", \"wrapperClass\"], outputs: [\"leave\"] }, { type: i8.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SparklineComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendoSparkline',\n providers: [\n ConfigurationService,\n TooltipTemplateService,\n InstanceEventService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chart'\n }\n ],\n selector: 'kendo-sparkline',\n template: `\n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: ThemeService }, { type: i0.ElementRef }, { type: i3.IntlService }, { type: i4.LocalizationService }, { type: i0.NgZone }, { type: InstanceEventService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { type: [{\n type: Input\n }], data: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nconst SPARKLINE_DIRECTIVES = [\n SparklineComponent\n];\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes the Chart component and directives.\n *\n * Imports the ChartModule into your application\n * [root module]({{ site.data.url.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the Chart component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { ChartModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, ChartModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass ChartModule {\n}\nChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartModule, declarations: [ChartComponent, TooltipPopupComponent, SeriesTooltipTemplateDirective, SharedTooltipTemplateDirective, CrosshairTooltipsContainerComponent, CrosshairTooltipComponent, DonutCenterTemplateDirective, AxisDefaultsComponent, AxisDefaultsCrosshairComponent, AxisDefaultsCrosshairTooltipComponent, AxisDefaultsLabelsComponent, AxisDefaultsTitleComponent, CategoryAxisComponent, CategoryAxisCrosshairComponent, CategoryAxisCrosshairTooltipComponent, CategoryAxisItemComponent, CategoryAxisLabelsComponent, CategoryAxisRangeLabelsComponent, CategoryAxisNotesComponent, CategoryAxisNotesIconComponent, CategoryAxisNotesLabelComponent, CategoryAxisSelectComponent, CategoryAxisTitleComponent, ChartAreaComponent, LegendComponent, LegendInactiveItemsComponent, LegendItemComponent, PaneComponent, PaneDefaultsComponent, PaneDefaultsTitleComponent, PanesComponent, PanesTitleComponent, PlotAreaComponent, SeriesComponent, SeriesDefaultsComponent, SeriesDefaultsLabelsComponent, SeriesDefaultsLabelsFromComponent, SeriesDefaultsLabelsToComponent, SeriesDefaultsNotesComponent, SeriesDefaultsNotesIconComponent, SeriesDefaultsNotesLabelComponent, SeriesDefaultsTooltipComponent, SeriesErrorBarsComponent, SeriesExtremesComponent, SeriesHighlightComponent, SeriesItemComponent, SeriesLabelsComponent, SeriesLabelsFromComponent, SeriesLabelsToComponent, SeriesMarkersComponent, SeriesNotesComponent, SeriesNotesIconComponent, SeriesNotesLabelComponent, SeriesOutliersComponent, SeriesTooltipComponent, TitleComponent, TooltipComponent, ValueAxisComponent, ValueAxisCrosshairComponent, ValueAxisCrosshairTooltipComponent, ValueAxisItemComponent, ValueAxisLabelsComponent, ValueAxisNotesComponent, ValueAxisNotesIconComponent, ValueAxisNotesLabelComponent, ValueAxisTitleComponent, XAxisComponent, XAxisCrosshairComponent, XAxisCrosshairTooltipComponent, XAxisItemComponent, XAxisLabelsComponent, XAxisNotesComponent, XAxisNotesIconComponent, XAxisNotesLabelComponent, XAxisTitleComponent, YAxisComponent, YAxisCrosshairComponent, YAxisCrosshairTooltipComponent, YAxisItemComponent, YAxisLabelsComponent, YAxisNotesComponent, YAxisNotesIconComponent, YAxisNotesLabelComponent, YAxisTitleComponent, ZoomableComponent], imports: [CommonModule, PopupModule, ResizeSensorModule], exports: [ChartComponent, TooltipPopupComponent, SeriesTooltipTemplateDirective, SharedTooltipTemplateDirective, CrosshairTooltipsContainerComponent, CrosshairTooltipComponent, DonutCenterTemplateDirective, AxisDefaultsComponent, AxisDefaultsCrosshairComponent, AxisDefaultsCrosshairTooltipComponent, AxisDefaultsLabelsComponent, AxisDefaultsTitleComponent, CategoryAxisComponent, CategoryAxisCrosshairComponent, CategoryAxisCrosshairTooltipComponent, CategoryAxisItemComponent, CategoryAxisLabelsComponent, CategoryAxisRangeLabelsComponent, CategoryAxisNotesComponent, CategoryAxisNotesIconComponent, CategoryAxisNotesLabelComponent, CategoryAxisSelectComponent, CategoryAxisTitleComponent, ChartAreaComponent, LegendComponent, LegendInactiveItemsComponent, LegendItemComponent, PaneComponent, PaneDefaultsComponent, PaneDefaultsTitleComponent, PanesComponent, PanesTitleComponent, PlotAreaComponent, SeriesComponent, SeriesDefaultsComponent, SeriesDefaultsLabelsComponent, SeriesDefaultsLabelsFromComponent, SeriesDefaultsLabelsToComponent, SeriesDefaultsNotesComponent, SeriesDefaultsNotesIconComponent, SeriesDefaultsNotesLabelComponent, SeriesDefaultsTooltipComponent, SeriesErrorBarsComponent, SeriesExtremesComponent, SeriesHighlightComponent, SeriesItemComponent, SeriesLabelsComponent, SeriesLabelsFromComponent, SeriesLabelsToComponent, SeriesMarkersComponent, SeriesNotesComponent, SeriesNotesIconComponent, SeriesNotesLabelComponent, SeriesOutliersComponent, SeriesTooltipComponent, TitleComponent, TooltipComponent, ValueAxisComponent, ValueAxisCrosshairComponent, ValueAxisCrosshairTooltipComponent, ValueAxisItemComponent, ValueAxisLabelsComponent, ValueAxisNotesComponent, ValueAxisNotesIconComponent, ValueAxisNotesLabelComponent, ValueAxisTitleComponent, XAxisComponent, XAxisCrosshairComponent, XAxisCrosshairTooltipComponent, XAxisItemComponent, XAxisLabelsComponent, XAxisNotesComponent, XAxisNotesIconComponent, XAxisNotesLabelComponent, XAxisTitleComponent, YAxisComponent, YAxisCrosshairComponent, YAxisCrosshairTooltipComponent, YAxisItemComponent, YAxisLabelsComponent, YAxisNotesComponent, YAxisNotesIconComponent, YAxisNotesLabelComponent, YAxisTitleComponent, ZoomableComponent] });\nChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartModule, providers: [\n ThemeService\n ], imports: [[CommonModule, PopupModule, ResizeSensorModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [CHART_DIRECTIVES],\n exports: [CHART_DIRECTIVES],\n imports: [CommonModule, PopupModule, ResizeSensorModule],\n providers: [\n ThemeService\n ]\n }]\n }] });\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes the StockChart component and directives.\n *\n * Imports the StockChartModule into your application\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the StockChart component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { StockChartModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, StockChartModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass StockChartModule {\n}\nStockChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StockChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nStockChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StockChartModule, declarations: [StockChartComponent, NavigatorComponent, NavigatorCategoryAxisComponent, NavigatorCategoryAxisCrosshairComponent, NavigatorCategoryAxisCrosshairTooltipComponent, NavigatorCategoryAxisLabelsComponent, NavigatorCategoryAxisNotesComponent, NavigatorCategoryAxisNotesIconComponent, NavigatorCategoryAxisNotesLabelComponent, NavigatorCategoryAxisSelectComponent, NavigatorCategoryAxisTitleComponent, NavigatorHintComponent, NavigatorPaneComponent, NavigatorPaneTitleComponent, NavigatorSelectComponent, NavigatorSeriesComponent, NavigatorSeriesItemComponent, NavigatorSeriesErrorBarsComponent, NavigatorSeriesExtremesComponent, NavigatorSeriesHighlightComponent, NavigatorSeriesLabelsComponent, NavigatorSeriesLabelsFromComponent, NavigatorSeriesLabelsToComponent, NavigatorSeriesMarkersComponent, NavigatorSeriesNotesComponent, NavigatorSeriesNotesIconComponent, NavigatorSeriesNotesLabelComponent, NavigatorSeriesOutliersComponent, NavigatorSeriesTooltipComponent], imports: [ChartModule, CommonModule, PopupModule, ResizeSensorModule], exports: [StockChartComponent, NavigatorComponent, NavigatorCategoryAxisComponent, NavigatorCategoryAxisCrosshairComponent, NavigatorCategoryAxisCrosshairTooltipComponent, NavigatorCategoryAxisLabelsComponent, NavigatorCategoryAxisNotesComponent, NavigatorCategoryAxisNotesIconComponent, NavigatorCategoryAxisNotesLabelComponent, NavigatorCategoryAxisSelectComponent, NavigatorCategoryAxisTitleComponent, NavigatorHintComponent, NavigatorPaneComponent, NavigatorPaneTitleComponent, NavigatorSelectComponent, NavigatorSeriesComponent, NavigatorSeriesItemComponent, NavigatorSeriesErrorBarsComponent, NavigatorSeriesExtremesComponent, NavigatorSeriesHighlightComponent, NavigatorSeriesLabelsComponent, NavigatorSeriesLabelsFromComponent, NavigatorSeriesLabelsToComponent, NavigatorSeriesMarkersComponent, NavigatorSeriesNotesComponent, NavigatorSeriesNotesIconComponent, NavigatorSeriesNotesLabelComponent, NavigatorSeriesOutliersComponent, NavigatorSeriesTooltipComponent, ChartModule] });\nStockChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StockChartModule, imports: [[ChartModule, CommonModule, PopupModule, ResizeSensorModule], ChartModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StockChartModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [STOCK_CHART_DIRECTIVES],\n exports: [STOCK_CHART_DIRECTIVES, ChartModule],\n imports: [ChartModule, CommonModule, PopupModule, ResizeSensorModule]\n }]\n }] });\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes the Sparkline component and directives.\n *\n * Imports the SparklineModule into your application\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the Sparkline component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { SparklineModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, SparklineModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass SparklineModule {\n}\nSparklineModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SparklineModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSparklineModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SparklineModule, declarations: [SparklineComponent], imports: [ChartModule, CommonModule, PopupModule, ResizeSensorModule], exports: [SparklineComponent, ChartModule] });\nSparklineModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SparklineModule, imports: [[ChartModule, CommonModule, PopupModule, ResizeSensorModule], ChartModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SparklineModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SPARKLINE_DIRECTIVES],\n exports: [SPARKLINE_DIRECTIVES, ChartModule],\n imports: [ChartModule, CommonModule, PopupModule, ResizeSensorModule]\n }]\n }] });\n\n/**\n * A [module]({{ site.data.urls.angular['ngmoduleapi'] }}) that includes all Chart components and directives.\n *\n * Imports the ChartsModule into your application\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity) or any other sub-module\n * that will use the Charts components.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { ChartsModule } from '@progress/kendo-angular-charts';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, ChartsModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass ChartsModule {\n}\nChartsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nChartsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartsModule, exports: [ChartModule, SparklineModule, StockChartModule] });\nChartsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartsModule, imports: [ChartModule, SparklineModule, StockChartModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChartsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [ChartModule, SparklineModule, StockChartModule]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AxisDefaultsComponent, AxisDefaultsCrosshairComponent, AxisDefaultsCrosshairTooltipComponent, AxisDefaultsLabelsComponent, AxisDefaultsTitleComponent, AxisLabelClickEvent, CHART_DIRECTIVES, CategoryAxisComponent, CategoryAxisCrosshairComponent, CategoryAxisCrosshairTooltipComponent, CategoryAxisItemComponent, CategoryAxisLabelsComponent, CategoryAxisNotesComponent, CategoryAxisNotesIconComponent, CategoryAxisNotesLabelComponent, CategoryAxisRangeLabelsComponent, CategoryAxisSelectComponent, CategoryAxisTitleComponent, ChartAreaComponent, ChartComponent, ChartModule, ChartsModule, CrosshairTooltipComponent, CrosshairTooltipsContainerComponent, DonutCenterTemplateDirective, DragEndEvent, DragEvent, DragStartEvent, LegendComponent, LegendInactiveItemsComponent, LegendItemClickEvent, LegendItemComponent, LegendItemHoverEvent, LegendItemLeaveEvent, NavigatorCategoryAxisComponent, NavigatorCategoryAxisCrosshairComponent, NavigatorCategoryAxisCrosshairTooltipComponent, NavigatorCategoryAxisLabelsComponent, NavigatorCategoryAxisNotesComponent, NavigatorCategoryAxisNotesIconComponent, NavigatorCategoryAxisNotesLabelComponent, NavigatorCategoryAxisSelectComponent, NavigatorCategoryAxisTitleComponent, NavigatorComponent, NavigatorFilterEvent, NavigatorHintComponent, NavigatorPaneComponent, NavigatorPaneTitleComponent, NavigatorSelectComponent, NavigatorSeriesComponent, NavigatorSeriesErrorBarsComponent, NavigatorSeriesExtremesComponent, NavigatorSeriesHighlightComponent, NavigatorSeriesItemComponent, NavigatorSeriesLabelsComponent, NavigatorSeriesLabelsFromComponent, NavigatorSeriesLabelsToComponent, NavigatorSeriesMarkersComponent, NavigatorSeriesNotesComponent, NavigatorSeriesNotesIconComponent, NavigatorSeriesNotesLabelComponent, NavigatorSeriesOutliersComponent, NavigatorSeriesTooltipComponent, NoteClickEvent, NoteHoverEvent, PaneComponent, PaneDefaultsComponent, PaneDefaultsTitleComponent, PaneRenderEvent, PanesComponent, PanesTitleComponent, PlotAreaClickEvent, PlotAreaComponent, PlotAreaHoverEvent, RenderEvent, SPARKLINE_DIRECTIVES, STOCK_CHART_DIRECTIVES, SelectEndEvent, SelectEvent, SelectStartEvent, SeriesClickEvent, SeriesComponent, SeriesDefaultsComponent, SeriesDefaultsLabelsComponent, SeriesDefaultsLabelsFromComponent, SeriesDefaultsLabelsToComponent, SeriesDefaultsNotesComponent, SeriesDefaultsNotesIconComponent, SeriesDefaultsNotesLabelComponent, SeriesDefaultsTooltipComponent, SeriesErrorBarsComponent, SeriesExtremesComponent, SeriesHighlightComponent, SeriesHoverEvent, SeriesItemComponent, SeriesLabelsComponent, SeriesLabelsFromComponent, SeriesLabelsToComponent, SeriesMarkersComponent, SeriesNotesComponent, SeriesNotesIconComponent, SeriesNotesLabelComponent, SeriesOutliersComponent, SeriesTooltipComponent, SeriesTooltipTemplateDirective, SharedTooltipTemplateDirective, SparklineComponent, SparklineModule, StockChartComponent, StockChartModule, TitleComponent, TooltipComponent, TooltipPopupComponent, ValueAxisComponent, ValueAxisCrosshairComponent, ValueAxisCrosshairTooltipComponent, ValueAxisItemComponent, ValueAxisLabelsComponent, ValueAxisNotesComponent, ValueAxisNotesIconComponent, ValueAxisNotesLabelComponent, ValueAxisTitleComponent, WeekStartDay, XAxisComponent, XAxisCrosshairComponent, XAxisCrosshairTooltipComponent, XAxisItemComponent, XAxisLabelsComponent, XAxisNotesComponent, XAxisNotesIconComponent, XAxisNotesLabelComponent, XAxisTitleComponent, YAxisComponent, YAxisCrosshairComponent, YAxisCrosshairTooltipComponent, YAxisItemComponent, YAxisLabelsComponent, YAxisNotesComponent, YAxisNotesIconComponent, YAxisNotesLabelComponent, YAxisTitleComponent, ZoomEndEvent, ZoomEvent, ZoomStartEvent, ZoomableComponent };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { EventEmitter, Directive, Input, Output, NgModule, Injectable, Component } from '@angular/core';\nimport { Draggable } from '@progress/kendo-draggable';\nimport { CommonModule } from '@angular/common';\nimport { auditTime } from 'rxjs/operators';\nimport { merge, fromEvent, from } from 'rxjs';\n\n/**\n * @hidden\n */\nconst isDocumentAvailable = () => typeof document !== 'undefined';\n\n/**\n * @hidden\n */\nconst isChanged = (propertyName, changes, skipFirstChange = true) => (typeof changes[propertyName] !== 'undefined' &&\n (!changes[propertyName].isFirstChange() || !skipFirstChange) &&\n changes[propertyName].previousValue !== changes[propertyName].currentValue);\n\n/**\n * @hidden\n */\nconst anyChanged = (propertyNames, changes, skipFirstChange = true) => propertyNames.some(name => isChanged(name, changes, skipFirstChange));\n\n/**\n * @hidden\n */\nconst hasObservers = (emitter) => emitter && emitter.observers.length > 0;\n\n/**\n * @hidden\n */\nconst guid = () => {\n let id = \"\";\n for (let i = 0; i < 32; i++) {\n const random = Math.random() * 16 | 0; // eslint-disable-line no-bitwise\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n id += \"-\";\n }\n // eslint-disable-next-line no-bitwise\n id += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16);\n }\n return id;\n};\n\nconst canCreateElement = () => isDocumentAvailable() && document.createElement;\n/**\n * @hidden\n */\nfunction getScrollbarWidth() {\n let scrollbarWidth = 0;\n if (canCreateElement()) {\n const div = document.createElement('div');\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n scrollbarWidth = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n }\n return scrollbarWidth;\n}\n\nclass DraggableDirective {\n constructor(element, ngZone) {\n this.element = element;\n this.ngZone = ngZone;\n this.enableDrag = true;\n this.kendoPress = new EventEmitter();\n this.kendoDrag = new EventEmitter();\n this.kendoRelease = new EventEmitter();\n }\n ngOnInit() {\n this.toggleDraggable();\n }\n ngOnChanges(changes) {\n if (isChanged('enableDrag', changes)) {\n this.toggleDraggable();\n }\n }\n ngOnDestroy() {\n this.destroyDraggable();\n }\n toggleDraggable() {\n if (isDocumentAvailable()) {\n this.destroyDraggable();\n if (this.enableDrag) {\n this.draggable = new Draggable({\n drag: (e) => this.kendoDrag.next(e),\n press: (e) => this.kendoPress.next(e),\n release: (e) => this.kendoRelease.next(e)\n });\n this.ngZone.runOutsideAngular(() => this.draggable.bindTo(this.element.nativeElement));\n }\n }\n }\n destroyDraggable() {\n if (this.draggable) {\n this.draggable.destroy();\n this.draggable = null;\n }\n }\n}\nDraggableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nDraggableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DraggableDirective, selector: \"[kendoDraggable]\", inputs: { enableDrag: \"enableDrag\" }, outputs: { kendoPress: \"kendoPress\", kendoDrag: \"kendoDrag\", kendoRelease: \"kendoRelease\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDraggable]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { enableDrag: [{\n type: Input\n }], kendoPress: [{\n type: Output\n }], kendoDrag: [{\n type: Output\n }], kendoRelease: [{\n type: Output\n }] } });\n\n/**\n * @hidden\n */\nclass DraggableModule {\n}\nDraggableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDraggableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableModule, declarations: [DraggableDirective], imports: [CommonModule], exports: [DraggableDirective] });\nDraggableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [DraggableDirective],\n exports: [DraggableDirective],\n imports: [CommonModule]\n }]\n }] });\n\nconst closestInScope = (node, predicate, scope) => {\n while (node && node !== scope && !predicate(node)) {\n node = node.parentNode;\n }\n if (node !== scope) {\n return node;\n }\n};\n\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n\nconst contains = (parent, node, matchSelf = false) => {\n const outside = !closest(node, (child) => child === parent);\n if (outside) {\n return false;\n }\n const el = closest(node, (child) => child === node);\n return el && (matchSelf || el !== parent);\n};\n\nconst findElement = (node, predicate, matchSelf = true) => {\n if (!node) {\n return;\n }\n if (matchSelf && predicate(node)) {\n return node;\n }\n node = node.firstChild;\n while (node) {\n if (node.nodeType === 1) {\n const element = findElement(node, predicate);\n if (element) {\n return element;\n }\n }\n node = node.nextSibling;\n }\n};\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\nconst isFocusable = (element) => {\n if (!element.tagName) {\n return false;\n }\n const tagName = element.tagName.toLowerCase();\n const hasTabIndex = Boolean(element.getAttribute('tabIndex'));\n const focusable = !element.disabled && focusableRegex.test(tagName);\n return focusable || hasTabIndex;\n};\n\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n const hasSize = rect.width > 0 && rect.height > 0;\n const hasPosition = rect.x !== 0 && rect.y !== 0;\n // Elements can have zero size due to styling, but they will still count as visible.\n // For example, the selection checkbox has no size, but is made visible through styling.\n return (hasSize || hasPosition) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n\nconst isFocusableWithTabKey = (element, checkVisibility = true) => {\n if (!isFocusable(element)) {\n return false;\n }\n const tabIndex = element.getAttribute('tabIndex');\n const visible = !checkVisibility || isVisible(element);\n return visible && tabIndex !== '-1';\n};\n\nconst findFocusableChild = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);\n};\n\nconst findFocusable = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility));\n};\n\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n\nconst matchesClasses = (classNames) => (element) => hasClasses(element, classNames);\n\nconst NODE_NAME_PREDICATES = {};\nconst matchesNodeName = (nodeName) => {\n if (!NODE_NAME_PREDICATES[nodeName]) {\n NODE_NAME_PREDICATES[nodeName] = (element) => String(element.nodeName).toLowerCase() === nodeName.toLowerCase();\n }\n return NODE_NAME_PREDICATES[nodeName];\n};\n\n/**\n * Normalizes a scroll position value in RTL mode.\n */\nfunction rtlScrollPosition(position, element, initial) {\n let result = position;\n if (initial < 0) {\n result = -position;\n }\n else if (initial > 0) {\n result = element.scrollWidth - element.offsetWidth - position;\n }\n return result;\n}\n\n/**\n * @hidden\n */\nclass EventsOutsideAngularDirective {\n constructor(element, ngZone, renderer) {\n this.element = element;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.events = {};\n }\n ngOnInit() {\n if (!this.element || !this.element.nativeElement) {\n return;\n }\n const events = this.events;\n this.subscriptions = [];\n this.ngZone.runOutsideAngular(() => {\n for (let name in events) {\n if (events.hasOwnProperty(name)) {\n this.subscriptions.push(this.renderer.listen(this.element.nativeElement, name, this.scope ? events[name].bind(this.scope) : events[name]));\n }\n }\n });\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n for (let idx = 0; idx < this.subscriptions.length; idx++) {\n this.subscriptions[idx]();\n }\n this.subscriptions = null;\n }\n }\n}\nEventsOutsideAngularDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: EventsOutsideAngularDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nEventsOutsideAngularDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: { events: [\"kendoEventsOutsideAngular\", \"events\"], scope: \"scope\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: EventsOutsideAngularDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoEventsOutsideAngular]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { events: [{\n type: Input,\n args: ['kendoEventsOutsideAngular']\n }], scope: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass EventsModule {\n}\nEventsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: EventsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nEventsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: EventsModule, declarations: [EventsOutsideAngularDirective], exports: [EventsOutsideAngularDirective] });\nEventsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: EventsModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: EventsModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [EventsOutsideAngularDirective],\n exports: [EventsOutsideAngularDirective]\n }]\n }] });\n\nclass ResizeService {\n constructor(resizeBatchService) {\n this.resizeBatchService = resizeBatchService;\n this.resize = new EventEmitter();\n this.acceptedSize = false;\n this.state = 0 /* Initial */;\n }\n acceptSize(size = this.measure()) {\n this.lastWidth = size.width;\n this.lastHeight = size.height;\n this.acceptedSize = true;\n }\n checkChanges() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.state === 0 /* Initial */) {\n this.state = 1 /* Initializing */;\n // batch initial measure\n this.resizeBatchService.schedule(this, this.init);\n }\n }\n destroy() {\n this.resizeBatchService.cancel(this);\n }\n checkSize() {\n if (!this.parentElement) {\n return;\n }\n const { width, height } = this.measure();\n const sameSize = width === this.lastWidth && height === this.lastHeight;\n if (sameSize) {\n return;\n }\n this.lastWidth = width;\n this.lastHeight = height;\n this.acceptedSize = false;\n this.resize.emit();\n return true;\n }\n initSize() {\n const size = this.measure();\n this.lastWidth = size.width;\n this.lastHeight = size.height;\n }\n measure() {\n let width = 0;\n let height = 0;\n if (this.parentElement) {\n height = this.parentElement.offsetHeight;\n width = this.parentElement.offsetWidth;\n }\n return { height, width };\n }\n}\n\n// eslint-disable import/no-deprecated\nconst div = style => {\n const el = document.createElement('div');\n el.style.cssText = style;\n return el;\n};\nconst computedProp = (elem, prop) => getComputedStyle(elem, null).getPropertyValue(prop);\nconst WRAP_STYLE = 'position: absolute; display: block; left: 0; top: 0; right: 0; bottom: 0; z-index: -1;' +\n 'overflow: hidden; visibility: hidden;';\nconst EXPAND_CHILD_STYLE = 'position: absolute; left: 0; top: 0; transition: 0s;';\nconst SHRINK_CHILD_STYLE = EXPAND_CHILD_STYLE + 'width: 200%; height: 200%;';\nclass ResizeCompatService extends ResizeService {\n constructor(resizeBatchService, element, ngZone) {\n super(resizeBatchService);\n this.element = element;\n this.ngZone = ngZone;\n }\n checkChanges() {\n if (this.state === 2 /* Initialized */) {\n if (!this.resizeBatchService.isScheduled(this)) {\n this.resizeBatchService.schedule(this, this.checkSize);\n }\n return;\n }\n super.checkChanges();\n }\n destroy() {\n super.destroy();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.expand) {\n const element = this.element.nativeElement;\n element.removeChild(this.expand);\n element.removeChild(this.shrink);\n this.expand.removeChild(this.expandChild);\n this.expand = this.expandChild = this.shrink = this.element = null;\n }\n }\n checkSize() {\n if (super.checkSize()) {\n this.reset();\n return true;\n }\n }\n init() {\n const parentElement = this.parentElement = this.element.nativeElement.parentElement;\n if (computedProp(parentElement, 'position') === 'static') {\n parentElement.style.position = 'relative';\n }\n this.state = 2 /* Initialized */;\n this.render();\n this.reset();\n this.initSize();\n this.subscribe();\n }\n render() {\n const element = this.element.nativeElement;\n element.style.cssText = WRAP_STYLE;\n element.setAttribute('dir', 'ltr');\n this.expand = div(WRAP_STYLE);\n this.expandChild = div(EXPAND_CHILD_STYLE);\n this.expand.appendChild(this.expandChild);\n element.appendChild(this.expand);\n this.shrink = div(WRAP_STYLE);\n const shrinkChild = div(SHRINK_CHILD_STYLE);\n this.shrink.appendChild(shrinkChild);\n element.appendChild(this.shrink);\n }\n reset() {\n const expandChild = this.expandChild;\n expandChild.style.width = 100000 + 'px';\n expandChild.style.height = 100000 + 'px';\n const expand = this.expand;\n expand.scrollLeft = 100000;\n expand.scrollTop = 100000;\n const shrink = this.shrink;\n shrink.scrollLeft = 100000;\n shrink.scrollTop = 100000;\n }\n subscribe() {\n this.ngZone.runOutsideAngular(() => {\n this.subscription = merge(fromEvent(this.shrink, 'scroll'), fromEvent(this.expand, 'scroll'))\n .subscribe(() => {\n this.checkSize();\n });\n });\n }\n}\n\nconst HAS_OBSERVER = typeof ResizeObserver !== 'undefined';\n/**\n * @hidden\n */\nclass ResizeObserverService extends ResizeService {\n constructor(resizeBatchService, element, ngZone) {\n super(resizeBatchService);\n this.element = element;\n this.ngZone = ngZone;\n }\n static supported() {\n return HAS_OBSERVER;\n }\n destroy() {\n super.destroy();\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n this.parentElement = null;\n }\n init() {\n this.parentElement = this.element.nativeElement.parentElement;\n this.initSize();\n this.state = 2 /* Initialized */;\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => {\n this.checkSize();\n });\n this.resizeObserver.observe(this.parentElement);\n });\n }\n}\n\n/**\n * @hidden\n */\nclass ResizeBatchService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.scheduled = [];\n this.resolvedPromise = Promise.resolve(null);\n this.flush = this.flush.bind(this);\n }\n schedule(instance, method) {\n this.scheduled.push({ instance, method });\n if (!this.subscription) {\n this.ngZone.runOutsideAngular(() => {\n this.subscription = from(this.resolvedPromise)\n .subscribe(this.flush);\n });\n }\n }\n isScheduled(instance) {\n return Boolean(this.scheduled.find(item => item.instance === instance));\n }\n cancel(instance) {\n const scheduled = this.scheduled;\n const count = scheduled.length;\n for (let idx = 0; idx < count; idx++) {\n if (scheduled[idx].instance === instance) {\n scheduled.splice(idx, 1);\n if (!scheduled.length) {\n this.unsubscribe();\n }\n return;\n }\n }\n }\n ngOnDestroy() {\n this.unsubscribe();\n }\n unsubscribe() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.subscription = null;\n }\n }\n flush() {\n this.scheduled.forEach(item => {\n item.method.call(item.instance);\n });\n this.scheduled = [];\n this.unsubscribe();\n }\n}\nResizeBatchService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeBatchService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nResizeBatchService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeBatchService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeBatchService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\n/**\n * Emit up to 10 resize events per second by default.\n * Chosen as a compromise between responsiveness and performance.\n */\nconst DEFAULT_RATE_LIMIT = 10;\n/**\n * Resize Sensor Component\n *\n * Triggers a \"resize\" event whenever the parent DOM element size changes.\n */\nclass ResizeSensorComponent {\n constructor(resizeBatchService, element, ngZone) {\n /**\n * The maximum number of resize events to emit per second.\n *\n * Defaults to 10.\n */\n this.rateLimit = DEFAULT_RATE_LIMIT;\n /**\n * Fires when the parent DOM element has been resized.\n */\n this.resize = new EventEmitter();\n const serviceType = ResizeObserverService.supported() ? ResizeObserverService : ResizeCompatService;\n this.resizeService = new serviceType(resizeBatchService, element, ngZone);\n const throttleTime = 1000 / (this.rateLimit || DEFAULT_RATE_LIMIT);\n this.subscription = this.resizeService.resize\n .pipe(auditTime(throttleTime))\n .subscribe(() => {\n if (!this.resizeService.acceptedSize) {\n this.resize.emit();\n }\n });\n }\n ngAfterViewChecked() {\n this.resizeService.checkChanges();\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n this.resizeService.destroy();\n }\n acceptSize(size) {\n this.resizeService.acceptSize(size);\n }\n}\nResizeSensorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeSensorComponent, deps: [{ token: ResizeBatchService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nResizeSensorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: { rateLimit: \"rateLimit\" }, outputs: { resize: \"resize\" }, ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeSensorComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-resize-sensor',\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: ResizeBatchService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { rateLimit: [{\n type: Input\n }], resize: [{\n type: Output\n }] } });\n\nconst COMPONENT_DIRECTIVES = [ResizeSensorComponent];\n/**\n * Resize Sensor module\n */\nclass ResizeSensorModule {\n}\nResizeSensorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeSensorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nResizeSensorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeSensorModule, declarations: [ResizeSensorComponent], exports: [ResizeSensorComponent] });\nResizeSensorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeSensorModule, providers: [ResizeBatchService] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeSensorModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES],\n providers: [ResizeBatchService]\n }]\n }] });\n\nclass KendoInput {\n}\n\n/**\n * Enum with key codes.\n */\nvar Keys;\n(function (Keys) {\n Keys[Keys[\"Alt\"] = 18] = \"Alt\";\n Keys[Keys[\"ArrowDown\"] = 40] = \"ArrowDown\";\n Keys[Keys[\"ArrowLeft\"] = 37] = \"ArrowLeft\";\n Keys[Keys[\"ArrowRight\"] = 39] = \"ArrowRight\";\n Keys[Keys[\"ArrowUp\"] = 38] = \"ArrowUp\";\n Keys[Keys[\"Backspace\"] = 8] = \"Backspace\";\n Keys[Keys[\"Control\"] = 17] = \"Control\";\n Keys[Keys[\"Delete\"] = 46] = \"Delete\";\n Keys[Keys[\"Digit0\"] = 48] = \"Digit0\";\n Keys[Keys[\"Digit1\"] = 49] = \"Digit1\";\n Keys[Keys[\"Digit2\"] = 50] = \"Digit2\";\n Keys[Keys[\"Digit3\"] = 51] = \"Digit3\";\n Keys[Keys[\"Digit4\"] = 52] = \"Digit4\";\n Keys[Keys[\"Digit5\"] = 53] = \"Digit5\";\n Keys[Keys[\"Digit6\"] = 54] = \"Digit6\";\n Keys[Keys[\"Digit7\"] = 55] = \"Digit7\";\n Keys[Keys[\"Digit8\"] = 56] = \"Digit8\";\n Keys[Keys[\"Digit9\"] = 57] = \"Digit9\";\n Keys[Keys[\"End\"] = 35] = \"End\";\n Keys[Keys[\"Enter\"] = 13] = \"Enter\";\n Keys[Keys[\"Escape\"] = 27] = \"Escape\";\n Keys[Keys[\"F1\"] = 112] = \"F1\";\n Keys[Keys[\"F2\"] = 113] = \"F2\";\n Keys[Keys[\"F10\"] = 121] = \"F10\";\n Keys[Keys[\"Home\"] = 36] = \"Home\";\n Keys[Keys[\"Insert\"] = 45] = \"Insert\";\n Keys[Keys[\"KeyA\"] = 65] = \"KeyA\";\n Keys[Keys[\"KeyB\"] = 66] = \"KeyB\";\n Keys[Keys[\"KeyC\"] = 67] = \"KeyC\";\n Keys[Keys[\"KeyD\"] = 68] = \"KeyD\";\n Keys[Keys[\"KeyE\"] = 69] = \"KeyE\";\n Keys[Keys[\"KeyF\"] = 70] = \"KeyF\";\n Keys[Keys[\"KeyG\"] = 71] = \"KeyG\";\n Keys[Keys[\"KeyH\"] = 72] = \"KeyH\";\n Keys[Keys[\"KeyI\"] = 73] = \"KeyI\";\n Keys[Keys[\"KeyJ\"] = 74] = \"KeyJ\";\n Keys[Keys[\"KeyK\"] = 75] = \"KeyK\";\n Keys[Keys[\"KeyL\"] = 76] = \"KeyL\";\n Keys[Keys[\"KeyM\"] = 77] = \"KeyM\";\n Keys[Keys[\"KeyN\"] = 78] = \"KeyN\";\n Keys[Keys[\"KeyO\"] = 79] = \"KeyO\";\n Keys[Keys[\"KeyP\"] = 80] = \"KeyP\";\n Keys[Keys[\"KeyQ\"] = 81] = \"KeyQ\";\n Keys[Keys[\"KeyR\"] = 82] = \"KeyR\";\n Keys[Keys[\"KeyS\"] = 83] = \"KeyS\";\n Keys[Keys[\"KeyT\"] = 84] = \"KeyT\";\n Keys[Keys[\"KeyU\"] = 85] = \"KeyU\";\n Keys[Keys[\"KeyV\"] = 86] = \"KeyV\";\n Keys[Keys[\"KeyW\"] = 87] = \"KeyW\";\n Keys[Keys[\"KeyX\"] = 88] = \"KeyX\";\n Keys[Keys[\"KeyY\"] = 89] = \"KeyY\";\n Keys[Keys[\"KeyZ\"] = 90] = \"KeyZ\";\n Keys[Keys[\"NumpadDecimal\"] = 110] = \"NumpadDecimal\";\n Keys[Keys[\"PageDown\"] = 34] = \"PageDown\";\n Keys[Keys[\"PageUp\"] = 33] = \"PageUp\";\n Keys[Keys[\"Shift\"] = 16] = \"Shift\";\n Keys[Keys[\"Space\"] = 32] = \"Space\";\n Keys[Keys[\"Tab\"] = 9] = \"Tab\";\n})(Keys || (Keys = {}));\n\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\nconst propName = '--kendo-scrollbar-width';\n/**\n * @hidden\n */\nclass ScrollbarWidthService {\n constructor() {\n this.changes = new EventEmitter();\n if (typeof window !== 'undefined' && isDocumentAvailable()) {\n document.body.style.setProperty(propName, `${getScrollbarWidth()}px`);\n }\n }\n}\nScrollbarWidthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollbarWidthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nScrollbarWidthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollbarWidthService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollbarWidthService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: function () { return []; } });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DraggableDirective, DraggableModule, EventsModule, EventsOutsideAngularDirective, KendoInput, Keys, PreventableEvent, ResizeBatchService, ResizeCompatService, ResizeObserverService, ResizeSensorComponent, ResizeSensorModule, ScrollbarWidthService, anyChanged, closest, closestInScope, contains, findElement, findFocusable, findFocusableChild, getScrollbarWidth, guid, hasClasses, hasObservers, isChanged, isDocumentAvailable, isFocusable, isFocusableWithTabKey, isVisible, matchesClasses, matchesNodeName, rtlScrollPosition };\n\n","/**\n * A function that clones the passed date. The parameter could be `null`.\n *\n * @param date - The initial date value.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * cloneDate(new Date(2016, 0, 1)); // returns new Date(2016, 0, 1);\n * cloneDate(null); // returns null\n * ```\n */\nexport const cloneDate = (date) => date ? new Date(date.getTime()) : null;\n","import { cloneDate } from './clone-date';\n/**\n * @hidden\n */\nexport const adjustDST = (date, hour) => {\n const newDate = cloneDate(date);\n if (hour === 0 && newDate.getHours() === 23) {\n newDate.setHours(newDate.getHours() + 2);\n }\n return newDate;\n};\n","import { adjustDST } from './adjust-dst';\nimport { cloneDate } from './clone-date';\n/**\n * A function that adds and subtracts days from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of days to add and subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addDays(new Date(2016, 0, 1), 5); // 2016-1-6\n * addDays(new Date(2016, 0, 1), -5); // 2015-12-26\n * ```\n */\nexport const addDays = (date, offset) => {\n const newDate = cloneDate(date);\n newDate.setDate(newDate.getDate() + offset);\n return adjustDST(newDate, date.getHours());\n};\n","import { adjustDST } from './adjust-dst';\n/**\n * A function which returns a new `Date` instance.\n *\n * @param year - The year value.\n * @param month - The month value.\n * @param day - The day value.\n * @param hours - The hours value.\n * @param minutes - The minutes value.\n * @param seconds - The seconds value.\n * @param milliseconds - milliseconds value.\n * @returns The date instance.\n *\n * @example\n * ```ts-no-run\n * createDate(2016, 0, 15); // 2016-01-15 00:00:00\n * createDate(2016, 0, 15, 22, 22, 20); // 2016-01-15 22:22:20\n * ```\n */\nexport const createDate = (year, month, day, hours = 0, minutes = 0, seconds = 0, milliseconds = 0) => {\n const date = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n if (year > -1 && year < 100) {\n date.setFullYear(date.getFullYear() - 1900);\n }\n return adjustDST(date, hours);\n};\n","import { createDate } from './create-date';\n/**\n * A function which returns the passed date with a midnight time portion.\n *\n * @param date - The initial date.\n * @returns - The date with a midnight time portion.\n *\n * @example\n * ```ts-no-run\n * getDate(new Date(2016, 0, 15, 14, 30, 30)); // 2016-01-15 00:00:00\n * ```\n */\nexport const getDate = (date) => {\n return createDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n};\n","/**\n * A function that compares two dates. The comparison also includes the time portion.\n *\n * @param candidate - The candidate date.\n * @param expected - The expected date.\n * @returns - A Boolean value indicating whether the values are equal.\n *\n * @example\n * ```ts-no-run\n * isEqual(new Date(2016, 0, 1), new Date(2016, 0, 1)); // true\n * isEqual(new Date(2016, 0, 1), new Date(2016, 0, 2)); // false\n * isEqual(new Date(2016, 0, 1, 10), new Date(2016, 0, 1, 20)); // false\n * ```\n */\nexport const isEqual = (candidate, expected) => {\n if (!candidate && !expected) {\n return true;\n }\n return candidate && expected && candidate.getTime() === expected.getTime();\n};\n","import { addDays } from './add-days';\nimport { createDate } from './create-date';\n/**\n * A function which returns the last date of the month.\n *\n * @param date - The initial date.\n * @returns - The last date of the initial date month.\n *\n * @example\n * ```ts-no-run\n * lastDayOfMonth(new Date(2016, 0, 15)); // 2016-01-31\n * ```\n */\nexport const lastDayOfMonth = (date) => {\n const newDate = createDate(date.getFullYear(), date.getMonth() + 1, 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n return addDays(newDate, -1);\n};\n","import { adjustDST } from './adjust-dst';\nimport { cloneDate } from './clone-date';\nimport { lastDayOfMonth } from './last-day-of-month';\nconst MONTHS_LENGTH = 12;\nconst normalize = (date, expectedMonth) => (date.getMonth() !== expectedMonth ? lastDayOfMonth(addMonths(date, -1)) : date //tslint:disable-line:no-use-before-declare\n);\n/**\n * A function that adds and subtracts months from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of months to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addMonths(new Date(2016, 5, 1), 5); // 2016-11-1\n * addMonths(new Date(2016, 5, 1), -5); // 2015-1-1\n * ```\n */\nexport const addMonths = (date, offset) => {\n const newDate = cloneDate(date);\n const diff = (newDate.getMonth() + offset) % MONTHS_LENGTH;\n const expectedMonth = (MONTHS_LENGTH + diff) % MONTHS_LENGTH;\n newDate.setMonth(newDate.getMonth() + offset);\n return normalize(adjustDST(newDate, date.getHours()), expectedMonth);\n};\n","import { addMonths } from './add-months';\nimport { createDate } from './create-date';\nimport { lastDayOfMonth } from './last-day-of-month';\n/**\n * @hidden\n */\nexport const setYear = (value, year) => {\n const month = value.getMonth();\n const candidate = createDate(year, month, value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n return candidate.getMonth() === month ? candidate : lastDayOfMonth(addMonths(candidate, -1));\n};\n","import { adjustDST } from './adjust-dst';\nimport { setYear } from './set-year';\n/**\n * A function that adds and subtracts years from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of years to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addYears(new Date(2016, 5, 1), 5); // 2011-6-1\n * addYears(new Date(2016, 5, 1), -5); // 2021-6-1\n * ```\n */\nexport const addYears = (value, offset) => {\n return adjustDST(setYear(value, value.getFullYear() + offset), value.getHours());\n};\n","import { addYears } from './add-years';\n/**\n * A function that adds and subtracts decades from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of decades to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addDecades(new Date(2016, 5, 1), 5); // 2066-6-1\n * addDecades(new Date(2016, 5, 1), -5); // 1966-6-1\n * ```\n */\nexport const addDecades = (value, offset) => {\n return addYears(value, 10 * offset);\n};\n","import { addYears } from './add-years';\n/**\n * A function that adds and subtracts centuries from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of centuries to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addCenturies(new Date(2016, 5, 1), 5); // 2516-6-1\n * addCenturies(new Date(2016, 5, 1), -5); // 1516-6-1\n * ```\n */\nexport const addCenturies = (value, offset) => {\n return addYears(value, 100 * offset);\n};\n","import { setYear } from './set-year';\n/**\n * @hidden\n */\nexport const normalizeYear = (value, year) => (setYear(value, year(value.getFullYear())));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the first decade in a century.\n *\n * @param date - The start date value.\n * @returns - The first year in a century.\n *\n * @example\n * ```ts-no-run\n * firstDecadeOfCentury(new Date(2017, 0, 1)); // 2000-1-1\n * firstDecadeOfCentury(new Date(2007, 10, 22)); // 2000-11-22\n * firstDecadeOfCentury(new Date(2126, 0, 1)); // 2100-1-1\n * ```\n */\nexport const firstDecadeOfCentury = (value) => (normalizeYear(value, (y) => y - (y % 100)));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the last decade in a century.\n *\n * @param date - The start date value.\n * @returns - The last year in a decade.\n *\n * @example\n * ```ts-no-run\n * lastDecadeOfCentury(new Date(2017, 0, 1)); // 2090-1-1\n * lastDecadeOfCentury(new Date(2007, 10, 22)); // 2090-11-22\n * lastDecadeOfCentury(new Date(2126, 0, 1)); // 2190-1-1\n * ```\n */\nexport const lastDecadeOfCentury = (value) => (normalizeYear(value, (y) => y - (y % 100) + 90));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the first year in a decade.\n *\n * @param date - The start date value.\n * @returns - The first year in a decade.\n *\n * @example\n * ```ts-no-run\n * firstYearOfDecade(new Date(2017, 0, 1)); // 2010-1-1\n * firstYearOfDecade(new Date(2007, 10, 22)); // 2000-11-22\n * firstYearOfDecade(new Date(2026, 0, 1)); // 2020-1-1\n * ```\n */\nexport const firstYearOfDecade = (value) => (normalizeYear(value, (y) => y - (y % 10)));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the last year in a decade.\n *\n * @param date - The start date value.\n * @returns - The last year in a decade.\n *\n * @example\n * ```ts-no-run\n * lastYearOfDecade(new Date(2017, 0, 1)); // 2019-1-1\n * lastYearOfDecade(new Date(2007, 10, 22)); // 2009-11-22\n * lastYearOfDecade(new Date(2026, 0, 1)); // 2029-1-1\n * ```\n */\nexport const lastYearOfDecade = (value) => (normalizeYear(value, (y) => y - (y % 10) + 9));\n","import { addMonths } from './add-months';\nimport { createDate } from './create-date';\nimport { lastDayOfMonth } from './last-day-of-month';\n/**\n * @hidden\n */\nexport const setMonth = (value, month) => {\n const day = value.getDate();\n const candidate = createDate(value.getFullYear(), month, day, value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n return candidate.getDate() === day ? candidate : lastDayOfMonth(addMonths(candidate, -1));\n};\n","import { setMonth } from './set-month';\n/**\n * A function that returns a `Date` object of the last month in a year.\n *\n * @param date - The start date value.\n * @returns - The last month in a year.\n *\n * @example\n * ```ts-no-run\n * lastMonthOfYear(new Date(2017, 5, 3)); // 2017-12-3\n * lastMonthOfYear(new Date(2017, 11, 3)); // 2017-12-3\n * ```\n */\nexport const lastMonthOfYear = (value) => setMonth(value, 11);\n","import { firstDecadeOfCentury } from './first-decade-of-century';\n/**\n * A function that calculates duration in centuries between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInCenturies(new Date(2016, 0, 1), new Date(3216, 0, 1)); // 12\n * durationInCenturies(new Date(2016, 6, 1), new Date(2617, 0, 1)); // 6\n * durationInCenturies(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInCenturies = (start, end) => ((firstDecadeOfCentury(end).getFullYear() - firstDecadeOfCentury(start).getFullYear()) / 100);\n","import { firstYearOfDecade } from './first-year-of-decade';\n/**\n * A function that calculates duration in decades between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInDecades(new Date(2016, 0, 1), new Date(2136, 0, 1)); // 12\n * durationInDecades(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInDecades = (start, end) => ((firstYearOfDecade(end).getFullYear() - firstYearOfDecade(start).getFullYear()) / 10);\n","import { addDays } from './add-days';\n/**\n * A function that adds and subtracts weeks from a Date object.\n *\n * @param date - The initial date value.\n * @param offset - The number of weeks to add/subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addWeeks(new Date(2016, 5, 1), 3); // 2016-6-22\n * addWeeks(new Date(2016, 5, 1), -3); // 2015-5-11\n * ```\n */\nexport const addWeeks = (date, offset) => {\n return addDays(date, offset * 7);\n};\n","import { createDate } from './create-date';\n/**\n * A function which returns the first date of the month.\n *\n * @param date - The initial date.\n * @returns - The first date of the initial date month.\n *\n * @example\n * ```ts-no-run\n * firstDayOfMonth(new Date(2016, 0, 15)); // 2016-01-01\n * ```\n */\nexport const firstDayOfMonth = (date) => {\n return createDate(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n};\n","// tslint:disable:max-line-length\n/**\n * An enumeration which represents the horizontal direction. The `Forward` option moves forward. The `Backward` option moves backward.\n */\nexport var Direction;\n(function (Direction) {\n /**\n * The `Forward` value with an underlying `1` number value.\n */\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n /**\n * The `Backward` value with an underlying `-1` (minus one) number value.\n */\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n// tslint:enable:max-line-length\n","import { Direction } from \"./direction.enum\";\nimport { adjustDST } from \"./adjust-dst\";\nimport { cloneDate } from './clone-date';\n/**\n * @hidden\n *\n * A function which returns the next or previous date for a specific week day. For example, `Day.Monday`.\n *\n * @param date - The date to calculate from.\n * @param weekDay - The `Day` enum specifying the desired week day.\n * @param direction - The `Direction` enum specifying the calculation direction.\n * @returns - A `Date` instance.\n *\n * @example\n * ```ts-no-run\n * dayOfWeek(new Date(2016, 0, 1), Day.Wednesday, Direction.Forward); // 2016-01-06, Wednesday\n * dayOfWeek(new Date(2016, 0, 1), Day.Wednesday, Direction.Backward); // 2015-12-30, Wednesday\n * ```\n */\nexport const dayOfWeek = (date, weekDay, direction = Direction.Forward) => {\n const newDate = cloneDate(date);\n const newDay = ((weekDay - newDate.getDay()) + (7 * direction)) % 7;\n newDate.setDate(newDate.getDate() + newDay);\n return adjustDST(newDate, date.getHours());\n};\n","/**\n * A function that calculates duration in months between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInMonths(new Date(2016, 0, 1), new Date(2017, 0, 1)); // 12\n * durationInMonths(new Date(2016, 6, 1), new Date(2017, 0, 1)); // 6\n * durationInMonths(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInMonths = (start, end) => (((end.getFullYear() - start.getFullYear())) * 12 + (end.getMonth() - start.getMonth()));\n","import { setMonth } from './set-month';\n/**\n * A function that returns a `Date` object of the first month in a year.\n *\n * @param date - The start date value.\n * @returns - The first month in a year.\n *\n * @example\n * ```ts-no-run\n * firstMonthOfYear(new Date(2017, 11, 1)); // 2017-1-1\n * firstMonthOfYear(new Date(2017, 0, 1)); // 2017-1-1\n * ```\n */\nexport const firstMonthOfYear = (value) => setMonth(value, 0);\n","/**\n * A function that calculates duration in years between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in years.\n *\n * @example\n * ```ts-no-run\n * durationInYears(new Date(2016, 0, 1), new Date(2028, 0, 1)); // 12\n * durationInYears(new Date(2016, 0, 1), new Date(2022, 0, 1)); // 6\n * durationInYears(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInYears = (start, end) => (end.getFullYear() - start.getFullYear());\n","/**\n * Enumeration which represents the week days.\n */\nexport var Day;\n(function (Day) {\n /**\n * The Sunday value with an underlying `0` number value.\n */\n Day[Day[\"Sunday\"] = 0] = \"Sunday\";\n /**\n * The Monday value with an underlying `1` number value.\n */\n Day[Day[\"Monday\"] = 1] = \"Monday\";\n /**\n * The Tuesday value with an underlying `2` number value.\n */\n Day[Day[\"Tuesday\"] = 2] = \"Tuesday\";\n /**\n * The Wednesday value with an underlying `3` number value.\n */\n Day[Day[\"Wednesday\"] = 3] = \"Wednesday\";\n /**\n * The Thursday value with an underlying `4` number value.\n */\n Day[Day[\"Thursday\"] = 4] = \"Thursday\";\n /**\n * The Friday value with an underlying `5` number value.\n */\n Day[Day[\"Friday\"] = 5] = \"Friday\";\n /**\n * The Saturday value with an underlying `6` number value.\n */\n Day[Day[\"Saturday\"] = 6] = \"Saturday\";\n})(Day || (Day = {}));\n","import { Direction } from \"./direction.enum\";\nimport { dayOfWeek } from './day-of-week';\n/**\n * A function which returns a date by a specific week name. For example, `Day.Monday`.\n *\n * @param date - The date to calculate from.\n * @param weekDay - The `Day` enum specifying the desired week day.\n * @returns - A `Date` instance.\n *\n * @example\n * ```ts-no-run\n * prevDayOfWeek(new Date(2016, 0, 1), Day.Wednesday); // 2015-12-30, Wednesday\n * ```\n */\nexport const prevDayOfWeek = (date, weekDay) => {\n return dayOfWeek(date, weekDay, Direction.Backward);\n};\n","import { Day } from './day.enum';\nimport { addDays } from './add-days';\nimport { createDate } from './create-date';\nimport { prevDayOfWeek } from './prev-day-of-week';\nimport { MS_PER_DAY } from './constants';\nimport { getDate } from './get-date';\nconst moveDateToWeekStart = (date, weekStartDay) => {\n if (weekStartDay !== Day.Monday) {\n return addDays(prevDayOfWeek(date, weekStartDay), 4);\n }\n return addDays(date, (4 - (date.getDay() || 7)));\n};\nconst calcWeekInYear = (date, weekStartDay) => {\n const firstWeekInYear = createDate(date.getFullYear(), 0, 1, -6);\n const newDate = moveDateToWeekStart(date, weekStartDay);\n const diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n const days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n};\n/**\n * A function that returns the number of the week within a year, which is calculated in relation to the date.\n *\n * For more information, refer to the [**ISO week date**](https://en.wikipedia.org/wiki/ISO_week_date) article.\n *\n * @param date - The date used for the week number calculation.\n * @param weekStartDay - The first day of the week. By default, the first week day is Monday.\n * @returns - The number of the week within the year.\n *\n * @example\n * ```ts-no-run\n * weekInYear(new Date(2016, 0, 1)); // Week 53, 2015\n * weekInYear(new Date(2016, 0, 5)); // Week 1, 2016\n * weekInYear(new Date(2017, 0, 1)); // Week 52, 2016\n * weekInYear(new Date(2017, 0, 2)); // Week 1, 2017\n * ```\n */\nexport const weekInYear = (date, weekStartDay = Day.Monday) => {\n date = getDate(date);\n const prevWeekDate = addDays(date, -7);\n const nextWeekDate = addDays(date, 7);\n const weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n};\n","/**\n * The number of milliseconds in one minute.\n */\nexport const MS_PER_MINUTE = 60000;\n/**\n * The number of milliseconds in one hour.\n */\nexport const MS_PER_HOUR = 3600000;\n/**\n * The number of milliseconds in one standard day.\n */\nexport const MS_PER_DAY = 86400000;\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, isDevMode, Directive, Input, Component, Output, ChangeDetectionStrategy, HostBinding, forwardRef, ElementRef, ContentChild, ViewChild, HostListener, InjectionToken, Inject, NgZone, Optional, ViewContainerRef, ViewChildren, TemplateRef, ContentChildren, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, NgControl } from '@angular/forms';\nimport * as i1$1 from '@progress/kendo-angular-l10n';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX, RTL } from '@progress/kendo-angular-l10n';\nimport { cloneDate, addDays, getDate, isEqual, addDecades, addCenturies, firstDecadeOfCentury, lastDecadeOfCentury, firstYearOfDecade, createDate, lastYearOfDecade, lastMonthOfYear, lastDayOfMonth, durationInCenturies, addYears, durationInDecades, addWeeks, addMonths, firstDayOfMonth, dayOfWeek, durationInMonths, firstMonthOfYear, durationInYears, weekInYear } from '@progress/kendo-date-math';\nimport * as i5 from '@progress/kendo-angular-common';\nimport { isDocumentAvailable, guid, Keys, hasObservers, KendoInput, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i1 from '@progress/kendo-angular-intl';\nimport { IntlModule } from '@progress/kendo-angular-intl';\nimport { Subject, Subscription, ReplaySubject, Observable, combineLatest, of, interval, animationFrameScheduler, fromEvent, EMPTY, from, BehaviorSubject, merge } from 'rxjs';\nimport * as i7 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { map, scan, takeWhile, debounceTime, tap, filter } from 'rxjs/operators';\nimport * as i2 from '@progress/kendo-angular-popup';\nimport { PopupModule } from '@progress/kendo-angular-popup';\nimport { touchEnabled } from '@progress/kendo-common';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-dateinputs',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1659524475,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nvar Action;\n(function (Action) {\n Action[Action[\"Left\"] = 0] = \"Left\";\n Action[Action[\"Right\"] = 1] = \"Right\";\n Action[Action[\"Up\"] = 2] = \"Up\";\n Action[Action[\"Down\"] = 3] = \"Down\";\n Action[Action[\"PrevView\"] = 4] = \"PrevView\";\n Action[Action[\"NextView\"] = 5] = \"NextView\";\n Action[Action[\"FirstInView\"] = 6] = \"FirstInView\";\n Action[Action[\"LastInView\"] = 7] = \"LastInView\";\n Action[Action[\"LowerView\"] = 8] = \"LowerView\";\n Action[Action[\"UpperView\"] = 9] = \"UpperView\";\n})(Action || (Action = {}));\n\n/**\n * @hidden\n *\n * The Enum which defines all possible Calendar view types.\n */\nvar CalendarViewEnum;\n(function (CalendarViewEnum) {\n CalendarViewEnum[CalendarViewEnum[\"month\"] = 0] = \"month\";\n CalendarViewEnum[CalendarViewEnum[\"year\"] = 1] = \"year\";\n CalendarViewEnum[CalendarViewEnum[\"decade\"] = 2] = \"decade\";\n CalendarViewEnum[CalendarViewEnum[\"century\"] = 3] = \"century\";\n})(CalendarViewEnum || (CalendarViewEnum = {}));\n\n/**\n * @hidden\n */\nconst MIDNIGHT_DATE = new Date(1980, 0, 1);\n/**\n * @hidden\n */\nconst MIN_DATE = new Date(1900, 0, 1);\n/**\n * @hidden\n */\nconst MAX_DATE = new Date(2099, 11, 31);\n/**\n * @hidden\n */\nconst MIN_TIME = new Date(1980, 0, 1);\n/**\n * @hidden\n */\nconst MAX_TIME = new Date(1980, 0, 1, 23, 59, 59);\n\n/**\n * @hidden\n */\nconst EMPTY_SELECTIONRANGE = { start: null, end: null };\n\n/**\n * @hidden\n */\nconst requiresZoneOnBlur = (ngControl) => ngControl &&\n (!ngControl.touched || (ngControl.control && ngControl.control.updateOn === 'blur'));\n/**\n * @hidden\n */\nconst preventDefault = (args) => args.preventDefault();\n/**\n * @hidden\n */\nconst currentFocusTarget = (blurArgs) => blurArgs.relatedTarget || document.activeElement;\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== undefined && value !== null;\n/**\n * @hidden\n *\n * If the provided parameter is an array with at least one item\n * and all items in the array are numbers, returns `true.\n */\nconst isNumberArray = (value) => Array.isArray(value) && value.length > 0 && value.every(item => typeof item === 'number');\n/**\n * @hidden\n *\n * If the provided parameter is an array with at least one item\n * and all items in the array are dates, returns `true`.\n */\nconst isDateArray = (value) => Array.isArray(value) && value.length > 0 && value.every(item => item instanceof Date);\n\nconst isSet = (value) => value !== null && value !== undefined;\nconst setter = (method) => (date, value) => {\n const clone = cloneDate(date);\n clone[method](value);\n return clone;\n};\n/**\n * @hidden\n */\nconst setTime = (origin, candidate) => {\n const date = cloneDate(origin);\n date.setHours(candidate.getHours(), candidate.getMinutes(), candidate.getSeconds(), candidate.getMilliseconds());\n return date;\n};\nconst normalizeTimes = (candidate, min, max) => ({\n candidateValue: setTime(MIDNIGHT_DATE, candidate),\n maxValue: addDays(setTime(MIDNIGHT_DATE, max), min.getHours() < max.getHours() ||\n (min.getHours() === max.getHours() && min.getMinutes() < max.getMinutes()) ? 0 : 1),\n minValue: setTime(MIDNIGHT_DATE, min)\n});\n/**\n * @hidden\n */\nconst setYears = setter('setFullYear');\n/**\n * @hidden\n */\nconst setHours$1 = setter('setHours');\n/**\n * @hidden\n */\nconst setMinutes = setter('setMinutes');\n/**\n * @hidden\n */\nconst setSeconds = setter('setSeconds');\n/**\n * @hidden\n */\nconst setMilliseconds = setter('setMilliseconds');\n/**\n * @hidden\n */\nconst range = (start, end, step = 1) => {\n const result = [];\n for (let i = start; i < end; i = i + step) {\n result.push(i);\n }\n return result;\n};\n/**\n * @hidden\n */\nconst isInRange = (candidate, min, max) => (!candidate || !((min && min > candidate) || (max && max < candidate)));\n/**\n * @hidden\n */\nconst isInTimeRange = (candidate, min, max) => {\n if (!candidate || !min || !max) {\n return true;\n }\n const { candidateValue, minValue, maxValue } = normalizeTimes(candidate, min, max);\n return minValue <= candidateValue && candidateValue <= maxValue;\n};\n/**\n * @hidden\n */\nconst isValidRange = (min, max) => (!isSet(min) || !isSet(max) || min <= max);\n/**\n * @hidden\n */\nconst dateInRange = (candidate, min, max) => {\n if (!candidate) {\n return candidate;\n }\n if (min && candidate < min) {\n return cloneDate(min);\n }\n if (max && candidate > max) {\n return cloneDate(max);\n }\n return candidate;\n};\n/**\n * @hidden\n */\nconst timeInRange = (candidate, min, max) => {\n if (!candidate || !min || !max) {\n return candidate;\n }\n const { candidateValue, minValue, maxValue } = normalizeTimes(candidate, min, max);\n if (candidateValue < minValue) {\n return setTime(candidate, min);\n }\n if (candidateValue > maxValue) {\n return setTime(candidate, max);\n }\n return candidate;\n};\n/**\n * @hidden\n */\nconst getNow = () => new Date();\n/**\n * @hidden\n */\nconst getToday = () => getDate(new Date());\n/**\n * @hidden\n */\nconst noop$2 = (_) => { }; // eslint-disable-line no-empty\n/**\n * @hidden\n */\nconst isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n/**\n * @hidden\n */\nconst stringifyClassObject = (classes) => {\n const pushToAcc = (acc, cls) => classes[cls] ? acc.concat(cls) : acc;\n return Object.keys(classes).reduce(pushToAcc, []).join(' ');\n};\n/**\n * @hidden\n */\nconst shiftWeekNames = (names, offset) => (names.slice(offset).concat(names.slice(0, offset)));\n/**\n * @hidden\n */\nconst approximateStringMatching = (oldTextOrigin, oldFormat, newTextOrigin, caret) => {\n // Remove the right part of the cursor.\n //oldFormat = oldFormat.substring(0, caret + oldText.length - newText.length);\n const oldIndex = caret + oldTextOrigin.length - newTextOrigin.length;\n const oldTextSeparator = oldTextOrigin[oldIndex];\n const oldText = oldTextOrigin.substring(0, caret + oldTextOrigin.length - newTextOrigin.length);\n const newText = newTextOrigin.substring(0, caret);\n const diff = [];\n // Handle typing a single character over the same selection.\n if (oldText === newText && caret > 0) {\n diff.push([oldFormat[caret - 1], newText[caret - 1]]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n // Handle Delete/Backspace.\n let deletedSymbol = \"\";\n //XXX:\n // Whole text is replaced with a same char\n // Nasty patch required to keep the selection in the first segment\n if (newText.length === 1) {\n diff.push([oldFormat[0], newText[0]]);\n }\n for (let i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && oldFormat[i] !== \"_\") {\n deletedSymbol = oldFormat[i];\n diff.push([deletedSymbol, \"\"]);\n }\n }\n return diff;\n }\n // Handle inserting text (the new text is longer than the previous one).\n // Handle typing over a literal as well.\n if (newText.indexOf(oldText) === 0 || oldFormat[caret - 1] === \"_\") {\n let symbol = oldFormat[0];\n for (let i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (oldFormat[i] !== \"_\") {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[symbol, newText[caret - 1]]];\n }\n // Handle entering a space or a separator, for navigation to the next item.\n if (newText[newText.length - 1] === \" \" || (newText[newText.length - 1] === oldTextSeparator && oldFormat[oldIndex] === '_')) {\n return [[oldFormat[caret - 1], \"_\"]];\n }\n // Handle typing over a correctly selected part.\n return [[oldFormat[caret - 1], newText[caret - 1]]];\n};\n/**\n * @hidden\n */\nconst domContainerFactory = (type) => (children, classes = \"\", styles = {}) => {\n const container = document.createElement(type);\n container.className = classes;\n Object.keys(styles).map(key => container.style[key] = styles[key]);\n if (typeof children === 'string') {\n container.innerHTML = children || '';\n }\n else {\n (children || []).forEach(child => child && container.appendChild(child));\n }\n return container;\n};\n/**\n * @hidden\n */\nconst hasChange = (changes, field) => changes[field] !== undefined;\n/**\n * @hidden\n */\nconst hasExistingValue = (changes, field) => changes[field] && changes[field].currentValue !== undefined && changes[field].currentValue !== null;\n/**\n * @hidden\n */\nconst last = (list = []) => list && list[list.length - 1];\n/**\n * @hidden\n */\nconst isInSelectionRange = (value, selectionRange) => {\n const { start, end } = selectionRange || EMPTY_SELECTIONRANGE;\n if (!start || !end) {\n return false;\n }\n return start < value && value < end;\n};\n/**\n * @hidden\n */\nconst either = (value1, value2) => value1 || value2;\n/**\n * @hidden\n */\nconst clampRange = (value) => ({ start: value, end: value });\n/**\n * @hidden\n */\nconst isEqualRange = (initial, updated) => {\n const { start: initialStart, end: initialEnd } = initial || EMPTY_SELECTIONRANGE;\n const { start: updatedStart, end: updatedEnd } = updated || EMPTY_SELECTIONRANGE;\n return isEqual(initialStart, updatedStart) && isEqual(initialEnd, updatedEnd);\n};\n/**\n * @hidden\n */\nconst areDatesEqual = (first, second) => {\n first = first || [];\n second = second || [];\n return first.length === second.length && first.every((date, index) => isEqual(date, second[index]));\n};\n/**\n * @hidden\n */\nconst sortDates = (dates) => {\n return dates.filter(date => isPresent(date)).sort((a, b) => a.getTime() - b.getTime());\n};\n/**\n * @hidden\n *\n * Creates a new date based on the date information from the specified date portion\n * and the time information from the time portion.\n * If a parameter is not provided, returns `null`.\n */\nconst mergeDateAndTime = (date, time) => {\n if (!(date && time)) {\n return null;\n }\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n};\n/**\n * @hidden\n */\nconst lastMillisecondOfDate = (date) => {\n if (!date) {\n return null;\n }\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n};\n/**\n * @hidden\n *\n * Returns an array with dates ranging between and including the specified start and\n * end dates that are evaluated as disabled.\n */\nconst disabledDatesInRange = (start, end, isDateDisabled) => {\n if (!(start && end && isDateDisabled) || (start > end)) {\n return [];\n }\n const dates = [];\n let current = start;\n while (current <= end) {\n if (isDateDisabled(current)) {\n dates.push(current);\n }\n current = addDays(current, 1);\n }\n return dates;\n};\n/**\n * @hidden\n *\n * Crops the last two digits from the year of the provided date value.\n */\nconst cropTwoDigitYear = (date) => {\n if (!isPresent(date) || isNaN(date.getTime())) {\n return 0;\n }\n return Number(date\n .getFullYear()\n .toString()\n .slice(-2));\n};\n/**\n * @hidden\n *\n * Used when resetting millisecond segment value in the DateInput\n */\nconst msPaddingFromFormat = (format) => {\n return Array(format.match(/S+(\\1)/)[0].length).join(\"0\");\n};\n/**\n * @hidden\n */\nconst millisecondDigitsInFormat = (format) => {\n const result = format && format.match(/S+(\\1)/);\n return result ? result[0].length : 0;\n};\n/**\n * @hidden\n */\nconst millisecondStepFor = (digits) => {\n return Math.pow(10, 3 - digits);\n};\n/**\n * @hidden\n *\n * Checks if a tab keydown would would move the focus outside of the calendar.\n */\nconst isTabExitingCalendar = (calendarType, focusedElement, shiftKey) => {\n if (!isPresent(focusedElement)) {\n return false;\n }\n return calendarType === 'infinite' || ( // infinte calendar is always exited on first tab keydown\n calendarType === 'classic' &&\n (shiftKey && focusedElement.classList.contains('k-calendar')) || // exited on main calendar element focused and back-tab\n (!shiftKey && focusedElement.classList.contains('k-next-view')) // exited on next button focused and regular tab\n );\n};\n/**\n * @hidden\n * Returns the size class based on the component and size input.\n */\nconst getSizeClass = (component, size) => {\n const SIZE_CLASSES = {\n 'small': `k-${component}-sm`,\n 'medium': `k-${component}-md`,\n 'large': `k-${component}-lg`\n };\n return SIZE_CLASSES[size];\n};\n/**\n * @hidden\n * Returns the rounded class based on the rounded input.\n */\nconst getRoundedClass = (rounded) => {\n const ROUNDED_CLASSES = {\n 'small': 'k-rounded-sm',\n 'medium': 'k-rounded-md',\n 'large': 'k-rounded-lg',\n 'full': 'k-rounded-full'\n };\n return ROUNDED_CLASSES[rounded];\n};\n/**\n * @hidden\n * Return the fillMode class based on the component and fillMode input.\n */\nconst getFillModeClass = (component, fillMode) => {\n const FILLMODE_CLASSES = {\n 'solid': `k-${component}-solid`,\n 'flat': `k-${component}-flat`,\n 'outline': `k-${component}-outline`\n };\n return FILLMODE_CLASSES[fillMode];\n};\n/**\n * @hidden\n */\nconst DEFAULT_ROUNDED = 'medium';\n/**\n * @hidden\n */\nconst DEFAULT_SIZE = 'medium';\n/**\n * @hidden\n */\nconst DEFAULT_FILL_MODE = 'solid';\n\nconst EMPTY_DATA$3 = [[]];\nconst CELLS_LENGTH$3 = 4;\nconst ROWS_LENGTH$3 = 3;\nconst ACTIONS$3 = {\n [Action.Left]: (date) => addDecades(date, -1),\n [Action.Up]: (date) => addDecades(date, -5),\n [Action.Right]: (date) => addDecades(date, 1),\n [Action.Down]: (date) => addDecades(date, 5),\n [Action.PrevView]: (date) => addCenturies(date, -1),\n [Action.NextView]: (date) => addCenturies(date, 1),\n [Action.FirstInView]: (date) => firstDecadeOfCentury(date),\n [Action.LastInView]: (date) => lastDecadeOfCentury(date)\n};\n/**\n * @hidden\n */\nclass CenturyViewService {\n constructor() {\n this.dateRange = (start, end) => {\n if (!isPresent(start) || !isPresent(end)) {\n return [];\n }\n const result = [];\n let current = start;\n while (current <= end) {\n result.push(current);\n current = addDecades(current, 1);\n }\n return result;\n };\n }\n addToDate(min, skip) {\n return addCenturies(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addCenturies(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDates, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA$3;\n }\n const cells = range(0, CELLS_LENGTH$3);\n const firstDate = firstDecadeOfCentury(viewDate);\n const lastDate = lastDecadeOfCentury(viewDate);\n const today = getToday();\n return range(0, ROWS_LENGTH$3).map(rowOffset => {\n const baseDate = addDecades(firstDate, rowOffset * CELLS_LENGTH$3);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addDecades(baseDate, cellOffset), min, max);\n const nextCentury = cellDate.getFullYear() > lastDate.getFullYear();\n if (!this.isInRange(cellDate, min, max) || nextCentury) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && selectedDates.some(date => this.isEqual(cellDate, date)),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return firstYearOfDecade(candidate).getFullYear() === firstYearOfDecade(expected).getFullYear();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= (dates[dates.length - 1].getFullYear() + 99);\n }\n isInRange(candidate, min, max) {\n const year = firstYearOfDecade(candidate).getFullYear();\n const aboveMin = !min || firstYearOfDecade(min).getFullYear() <= year;\n const belowMax = !max || year <= firstYearOfDecade(max).getFullYear();\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n const firstYear = firstYearOfDecade(firstDecadeOfCentury(date));\n return createDate(firstYear.getFullYear(), 0, 1);\n }\n lastDayOfPeriod(date) {\n const decade = lastDecadeOfCentury(date);\n const year = lastYearOfDecade(decade);\n const month = lastMonthOfYear(year);\n return lastDayOfMonth(month);\n }\n isRangeStart(value) {\n return value.getFullYear() % 1000 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS$3[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return firstYearOfDecade(value).getFullYear().toString();\n }\n navigationTitle(value) {\n return value ? firstDecadeOfCentury(value).getFullYear().toString() : '';\n }\n title(value) {\n if (!value) {\n return '';\n }\n return `${firstDecadeOfCentury(value).getFullYear()} - ${lastDecadeOfCentury(value).getFullYear()}`;\n }\n rowLength() {\n return CELLS_LENGTH$3;\n }\n skip(value, min) {\n return durationInCenturies(min, value);\n }\n total(min, max) {\n return durationInCenturies(min, max) + 1;\n }\n value(current) {\n return current ? firstYearOfDecade(current).getFullYear().toString() : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const centuriesToSubtract = viewsCount - viewsInRange;\n return addCenturies(date, -1 * centuriesToSubtract);\n }\n return date;\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nCenturyViewService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CenturyViewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nCenturyViewService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CenturyViewService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CenturyViewService, decorators: [{\n type: Injectable\n }] });\n\nconst EMPTY_DATA$2 = [[]];\nconst CELLS_LENGTH$2 = 4;\nconst ROWS_LENGTH$2 = 3;\nconst ACTIONS$2 = {\n [Action.Left]: (date) => addYears(date, -1),\n [Action.Up]: (date) => addYears(date, -5),\n [Action.Right]: (date) => addYears(date, 1),\n [Action.Down]: (date) => addYears(date, 5),\n [Action.PrevView]: (date) => addDecades(date, -1),\n [Action.NextView]: (date) => addDecades(date, 1),\n [Action.FirstInView]: (date) => firstYearOfDecade(date),\n [Action.LastInView]: (date) => lastYearOfDecade(date)\n};\n/**\n * @hidden\n */\nclass DecadeViewService {\n constructor() {\n this.dateRange = (start, end) => {\n if (!isPresent(start) || !isPresent(end)) {\n return [];\n }\n const result = [];\n let current = start;\n while (current <= end) {\n result.push(current);\n current = addYears(current, 1);\n }\n return result;\n };\n }\n addToDate(min, skip) {\n return addDecades(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addDecades(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDates, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA$2;\n }\n const cells = range(0, CELLS_LENGTH$2);\n const firstDate = firstYearOfDecade(viewDate);\n const lastDate = lastYearOfDecade(viewDate);\n const today = getToday();\n return range(0, ROWS_LENGTH$2).map(rowOffset => {\n const baseDate = addYears(firstDate, rowOffset * CELLS_LENGTH$2);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addYears(baseDate, cellOffset), min, max);\n const nextDecade = cellDate.getFullYear() > lastDate.getFullYear();\n if (!this.isInRange(cellDate, min, max) || nextDecade) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && selectedDates.some(date => this.isEqual(cellDate, date)),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return candidate.getFullYear() === expected.getFullYear();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= (dates[dates.length - 1].getFullYear() + 9);\n }\n isInRange(candidate, min, max) {\n const year = candidate.getFullYear();\n const aboveMin = !min || min.getFullYear() <= year;\n const belowMax = !max || year <= max.getFullYear();\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n const firstYear = firstYearOfDecade(date);\n return createDate(firstYear.getFullYear(), 0, 1);\n }\n lastDayOfPeriod(date) {\n const year = lastYearOfDecade(date);\n const month = lastMonthOfYear(year);\n return lastDayOfMonth(month);\n }\n isRangeStart(value) {\n return value.getFullYear() % 100 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS$2[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return value.getFullYear().toString();\n }\n navigationTitle(value) {\n return value ? firstYearOfDecade(value).getFullYear().toString() : '';\n }\n title(value) {\n if (!value) {\n return '';\n }\n return `${firstYearOfDecade(value).getFullYear()} - ${lastYearOfDecade(value).getFullYear()}`;\n }\n rowLength() {\n return CELLS_LENGTH$2;\n }\n skip(value, min) {\n return durationInDecades(min, value);\n }\n total(min, max) {\n return durationInDecades(min, max) + 1;\n }\n value(current) {\n return current ? current.getFullYear().toString() : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const decadesToSubtract = viewsCount - viewsInRange;\n return addDecades(date, -1 * decadesToSubtract);\n }\n return date;\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nDecadeViewService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DecadeViewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDecadeViewService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DecadeViewService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DecadeViewService, decorators: [{\n type: Injectable\n }] });\n\nconst EMPTY_DATA$1 = [[]];\nconst CELLS_LENGTH$1 = 7;\nconst ROWS_LENGTH$1 = 6;\nconst ACTIONS$1 = {\n [Action.Left]: (date) => addDays(date, -1),\n [Action.Up]: (date) => addWeeks(date, -1),\n [Action.Right]: (date) => addDays(date, 1),\n [Action.Down]: (date) => addWeeks(date, 1),\n [Action.PrevView]: (date) => addMonths(date, -1),\n [Action.NextView]: (date) => addMonths(date, 1),\n [Action.FirstInView]: (date) => firstDayOfMonth(date),\n [Action.LastInView]: (date) => lastDayOfMonth(date)\n};\n/**\n * @hidden\n */\nclass MonthViewService {\n constructor(_intlService) {\n this._intlService = _intlService;\n this.dateRange = (start, end) => {\n if (!isPresent(start) || !isPresent(end)) {\n return [];\n }\n const result = [];\n let current = start;\n while (current <= end) {\n result.push(current);\n current = addDays(current, 1);\n }\n return result;\n };\n }\n addToDate(min, skip) {\n return addMonths(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addMonths(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDates, selectionRange = EMPTY_SELECTIONRANGE, viewDate, isDateDisabled = () => false } = options;\n if (!viewDate) {\n return EMPTY_DATA$1;\n }\n const firstMonthDate = firstDayOfMonth(viewDate);\n const firstMonthDay = getDate(firstMonthDate);\n const lastMonthDate = lastDayOfMonth(viewDate);\n const lastMonthDay = getDate(lastMonthDate);\n const backward = -1;\n const date = dayOfWeek(firstMonthDate, this._intlService.firstDay(), backward);\n const cells = range(0, CELLS_LENGTH$1);\n const today = getToday();\n return range(0, ROWS_LENGTH$1).map(rowOffset => {\n const baseDate = addDays(date, rowOffset * CELLS_LENGTH$1);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addDays(baseDate, cellOffset), min, max);\n const cellDay = getDate(cellDate);\n const otherMonth = cellDay < firstMonthDay || cellDay > lastMonthDay;\n const outOfRange = cellDate < min || cellDate > max;\n if (outOfRange) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && selectedDates.some(date => this.isEqual(cellDate, date)),\n isWeekend: this.isWeekend(cellDate),\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstMonthDate),\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastMonthDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate,\n isDisabled: isDateDisabled(cellDate),\n isOtherMonth: otherMonth\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return getDate(candidate).getTime() === getDate(expected).getTime();\n }\n isInArray(date, dates) {\n if (dates.length === 0) {\n return false;\n }\n const lowerBound = this.beginningOfPeriod(dates[0]);\n const upperBound = this.beginningOfPeriod(addMonths(dates[dates.length - 1], 1));\n return lowerBound <= date && date < upperBound;\n }\n isInRange(candidate, min, max) {\n const value = getDate(candidate);\n const aboveMin = !min || getDate(min) <= value;\n const belowMax = !max || value <= getDate(max);\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n return createDate(date.getFullYear(), date.getMonth(), 1);\n }\n lastDayOfPeriod(date) {\n return lastDayOfMonth(date);\n }\n isRangeStart(value) {\n return !value.getMonth();\n }\n move(value, action) {\n const modifier = ACTIONS$1[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return this._intlService.formatDate(value, 'D');\n }\n navigationTitle(value) {\n if (!value) {\n return '';\n }\n return this.isRangeStart(value) ? value.getFullYear().toString() : this.abbrMonthNames()[value.getMonth()];\n }\n title(current) {\n return `${this.wideMonthNames()[current.getMonth()]} ${current.getFullYear()}`;\n }\n rowLength(options = {}) {\n return CELLS_LENGTH$1 + (options.prependCell ? 1 : 0);\n }\n skip(value, min) {\n return durationInMonths(min, value);\n }\n total(min, max) {\n return durationInMonths(min, max) + 1;\n }\n value(current) {\n return current ? current.getDate().toString() : \"\";\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const monthsToSubtract = viewsCount - viewsInRange;\n return addMonths(date, -1 * monthsToSubtract);\n }\n return date;\n }\n isWeekend(date) {\n const { start, end } = this._intlService.weekendRange();\n const day = date.getDay();\n if (end < start) {\n return day <= end || start <= day;\n }\n return start <= day && day <= end;\n }\n abbrMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'abbreviated', type: 'months' });\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n wideMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'wide', type: 'months' });\n }\n}\nMonthViewService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MonthViewService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nMonthViewService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MonthViewService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MonthViewService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\nconst EMPTY_DATA = [[]];\nconst CELLS_LENGTH = 4;\nconst ROWS_LENGTH = 3;\nconst upStep = (month) => {\n if (month > 4) {\n return -5;\n }\n if (month < 2) {\n return -2;\n }\n return -7;\n};\nconst downStep = (month) => {\n if (month < 7) {\n return 5;\n }\n if (month < 10) {\n return 7;\n }\n return 2;\n};\nconst ACTIONS = {\n [Action.Left]: (date) => addMonths(date, -1),\n [Action.Up]: (date) => addMonths(date, upStep(date.getMonth())),\n [Action.Right]: (date) => addMonths(date, 1),\n [Action.Down]: (date) => addMonths(date, downStep(date.getMonth())),\n [Action.PrevView]: (date) => addYears(date, -1),\n [Action.NextView]: (date) => addYears(date, 1),\n [Action.FirstInView]: (date) => firstMonthOfYear(date),\n [Action.LastInView]: (date) => lastMonthOfYear(date)\n};\n/**\n * @hidden\n */\nclass YearViewService {\n constructor(_intlService) {\n this._intlService = _intlService;\n this.dateRange = (start, end) => {\n if (!isPresent(start) || !isPresent(end)) {\n return [];\n }\n const result = [];\n let current = start;\n while (current <= end) {\n result.push(current);\n current = addMonths(current, 1);\n }\n return result;\n };\n }\n addToDate(min, skip) {\n return addYears(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addYears(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDates, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA;\n }\n const months = this.abbrMonthNames();\n const firstDate = firstMonthOfYear(viewDate);\n const lastDate = lastMonthOfYear(viewDate);\n const currentYear = firstDate.getFullYear();\n const cells = range(0, CELLS_LENGTH);\n const today = getToday();\n return range(0, ROWS_LENGTH).map(rowOffset => {\n const baseDate = addMonths(firstDate, rowOffset * CELLS_LENGTH);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addMonths(baseDate, cellOffset), min, max);\n const changedYear = currentYear < cellDate.getFullYear();\n if (!this.isInRange(cellDate, min, max) || changedYear) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: months[cellDate.getMonth()],\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && selectedDates.some(date => this.isEqual(cellDate, date)),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return candidate.getFullYear() === expected.getFullYear() &&\n candidate.getMonth() === expected.getMonth();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= dates[dates.length - 1].getFullYear();\n }\n isInRange(candidate, min, max) {\n const candidateValue = createDate(candidate.getFullYear(), candidate.getMonth(), 1);\n const aboveMin = !min || createDate(min.getFullYear(), min.getMonth(), 1) <= candidateValue;\n const belowMax = !max || candidateValue <= createDate(max.getFullYear(), max.getMonth(), 1);\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n return createDate(date.getFullYear(), 0, 1);\n }\n lastDayOfPeriod(date) {\n const month = lastMonthOfYear(date);\n return lastDayOfMonth(month);\n }\n isRangeStart(value) {\n return value.getFullYear() % 10 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return `${value.getFullYear()} ${this.value(value)}`;\n }\n navigationTitle(value) {\n return this.title(value);\n }\n title(current) {\n return current ? current.getFullYear().toString() : '';\n }\n rowLength() {\n return CELLS_LENGTH;\n }\n skip(value, min) {\n return durationInYears(min, value);\n }\n total(min, max) {\n return durationInYears(min, max) + 1;\n }\n value(current) {\n return current ? this.abbrMonthNames()[current.getMonth()] : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const yearsToSubtract = viewsCount - viewsInRange;\n return addYears(date, -1 * yearsToSubtract);\n }\n return date;\n }\n abbrMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'abbreviated', type: 'months' });\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nYearViewService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YearViewService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nYearViewService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YearViewService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YearViewService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\nconst services$1 = {\n [CalendarViewEnum.month]: MonthViewService,\n [CalendarViewEnum.year]: YearViewService,\n [CalendarViewEnum.decade]: DecadeViewService,\n [CalendarViewEnum.century]: CenturyViewService\n};\nconst viewOffset = (view, offset) => {\n const candidate = CalendarViewEnum[CalendarViewEnum[view + offset]];\n return candidate !== undefined ? candidate : view;\n};\n/**\n * @hidden\n */\nclass BusViewService {\n constructor(injector) {\n this.injector = injector;\n this.viewChanged = new EventEmitter();\n this.bottom = CalendarViewEnum.month;\n this.top = CalendarViewEnum.century;\n }\n configure(bottom, top) {\n this.bottom = bottom;\n this.top = top;\n }\n service(view) {\n const serviceType = services$1[view];\n return serviceType ? this.injector.get(serviceType) : null;\n }\n moveDown(view) {\n this.move(view, -1);\n }\n moveUp(view) {\n this.move(view, 1);\n }\n moveToBottom(activeView) {\n if (activeView === this.bottom) {\n return;\n }\n this.viewChanged.emit({ view: this.bottom });\n }\n canMoveDown(view) {\n return this.bottom < view;\n }\n canMoveUp(view) {\n return view < this.top;\n }\n clamp(view) {\n if (view < this.bottom) {\n return this.bottom;\n }\n if (view > this.top) {\n return this.top;\n }\n return view;\n }\n move(view, offset) {\n const candidate = this.clamp(viewOffset(view, offset));\n if (candidate === view) {\n return;\n }\n this.viewChanged.emit({ view: candidate });\n }\n}\nBusViewService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BusViewService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });\nBusViewService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BusViewService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BusViewService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.Injector }]; } });\n\n/**\n * @hidden\n */\nclass WeekNamesService {\n constructor(intl) {\n this.intl = intl;\n }\n getWeekNames(includeWeekNumber = false) {\n const weekNames = shiftWeekNames(this.intl.dateFormatNames({ nameType: 'short', type: 'days' }), this.intl.firstDay());\n return includeWeekNumber ? [''].concat(weekNames) : weekNames;\n }\n}\nWeekNamesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WeekNamesService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nWeekNamesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WeekNamesService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WeekNamesService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\n/**\n * @hidden\n */\nconst closestInScope = (node, predicate, scope) => {\n while (node && node !== scope && !predicate(node)) {\n node = node.parentNode;\n }\n if (node !== scope) {\n return node;\n }\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n\nconst noop$1 = () => false;\nconst DISABLED_DATES_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/disabled-dates/';\n/**\n * @hidden\n */\nclass DisabledDatesService {\n constructor() {\n /**\n * Emits every time the `isDateDisabled` method changes.\n */\n this.changes = new Subject();\n /**\n * Based on the user-defined `disabledDates` input evaluates if the date is disabled.\n * If not set, returns `false`.\n */\n this.isDateDisabled = noop$1;\n }\n /**\n * Configures the `isDateDisabled` function.\n *\n * * If a function is provided, uses it as-is and passes each date to it for evaluation.\n * The time part is set to `midnight`.\n * * If a `Date[]` is provided, creates a function that checks the targeted date against\n * the listed dates and, if the targeted date is listed, marks it as disabled.\n * * If a `Day[]` is provided, creates a function that evaluates the provided days of the\n * week as disabled.\n */\n initialize(disabledDates) {\n if (typeof disabledDates === 'function') {\n this.isDateDisabled = (date) => disabledDates(getDate(date));\n }\n else if (isNumberArray(disabledDates)) {\n const disabledWeekDays = new Set(disabledDates);\n this.isDateDisabled = (date) => disabledWeekDays.has(date.getDay());\n }\n else if (isDateArray(disabledDates)) {\n const normalizedDisabledDates = new Set(disabledDates.map(date => getDate(date).getTime()));\n this.isDateDisabled = (date) => normalizedDisabledDates.has(getDate(date).getTime());\n }\n else {\n this.isDateDisabled = noop$1;\n this.notifyInvalidInput(disabledDates);\n }\n this.notifyServiceChange();\n }\n notifyInvalidInput(disabledDates) {\n if (isPresent(disabledDates) && isDevMode()) {\n throw new Error(`The 'disabledDates' value should be a function, a Day array or a Date array. Check ${DISABLED_DATES_DOC_LINK} for more information.`);\n }\n }\n notifyServiceChange() {\n this.changes.next();\n }\n}\nDisabledDatesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisabledDatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDisabledDatesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisabledDatesService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisabledDatesService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass KForOfContext {\n constructor($implicit, kForOf, index, count) {\n this.$implicit = $implicit;\n this.kForOf = kForOf;\n this.index = index;\n this.count = count;\n }\n get first() { return this.index === 0; }\n get last() { return this.index === this.count - 1; }\n get even() { return this.index % 2 === 0; }\n get odd() { return !this.even; }\n}\n/**\n * @hidden\n */\n// eslint-disable-next-line\nclass KForOf {\n constructor(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n this._differ = null;\n }\n set kForTemplate(value) {\n if (value) {\n this._template = value;\n }\n }\n ngOnChanges(changes) {\n if ('kForOf' in changes) {\n const value = changes.kForOf.currentValue;\n if (this._differ || !value) {\n return;\n }\n try {\n this._differ = this._differs.find(value).create(this.kForTrackBy);\n }\n catch (e) {\n throw new Error(`Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'.`);\n }\n }\n }\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this.kForOf);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n }\n _applyChanges(changes) {\n if (!isDocumentAvailable()) {\n return;\n }\n const viewContainerLength = this._viewContainer.length;\n const dataLength = this.kForOf.length;\n const tuples = {};\n changes.forEachOperation((record, _, currentIndex) => {\n if (currentIndex !== null) {\n tuples[currentIndex] = record.item;\n }\n });\n for (let i = viewContainerLength; i < dataLength; i++) {\n this._viewContainer.createEmbeddedView(this._template, new KForOfContext(null, this.kForOf, -1, -1), i);\n }\n for (let i = this._viewContainer.length; i > dataLength; i--) {\n this._viewContainer.remove(i - 1);\n }\n for (let i = 0; i < this._viewContainer.length; i++) {\n const view = this._viewContainer.get(i);\n view.context.index = i;\n view.context.count = length;\n view.context.$implicit = tuples[i] || null;\n }\n }\n}\nKForOf.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: KForOf, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Directive });\nKForOf.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: KForOf, selector: \"[kFor][kForOf]\", inputs: { kForOf: \"kForOf\", kForTrackBy: \"kForTrackBy\", kForTemplate: \"kForTemplate\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: KForOf, decorators: [{\n type: Directive,\n args: [{ selector: '[kFor][kForOf]' }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.IterableDiffers }]; }, propDecorators: { kForOf: [{\n type: Input\n }], kForTrackBy: [{\n type: Input\n }], kForTemplate: [{\n type: Input\n }] } });\n/**\n * @hidden\n */\nfunction getTypeNameForDebugging(type) {\n return type.name || typeof type;\n}\n\n/**\n * @hidden\n */\nclass ViewComponent {\n constructor(bus, intl, cdr, element, zone, renderer, disabledDatesService) {\n this.bus = bus;\n this.intl = intl;\n this.cdr = cdr;\n this.element = element;\n this.zone = zone;\n this.renderer = renderer;\n this.disabledDatesService = disabledDatesService;\n this.direction = 'vertical';\n this.isActive = true;\n this.selectedDates = [];\n this.cellClick = new EventEmitter();\n this.weekNumberCellClick = new EventEmitter();\n this.cellEnter = new EventEmitter();\n this.cellLeave = new EventEmitter();\n this.colSpan = 0;\n this.subscriptions = new Subscription();\n this.domEvents = [];\n this.subscriptions.add(this.intl.changes.subscribe(this.intlChange.bind(this)));\n this.subscriptions.add(this.disabledDatesService.changes.subscribe(this.disabledDatesChange.bind(this)));\n }\n get weekNumber() {\n return this.showWeekNumbers && this.activeView === CalendarViewEnum.month;\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n ngOnInit() {\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n this.colSpan = this.service.rowLength({ prependCell: this.weekNumber });\n this.title = this.service.title(this.viewDate);\n this.updateData();\n if (changes.activeView) {\n this.currentCellIndex = null;\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.domEvents.forEach(unsubscribeCallback => unsubscribeCallback());\n }\n isHorizontal() {\n return this.direction === 'horizontal';\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n shouldRenderCellContent(cellCtx) {\n return isPresent(cellCtx) && !(!this.isHorizontal() && cellCtx.isOtherMonth);\n }\n firstDate(rowCtx) {\n const ctx = this.firstWeekDateContext(rowCtx);\n return ctx ? ctx.value : null;\n }\n getWeekNumber(date) {\n if (!this.weekNumber) {\n return null;\n }\n return weekInYear(date, this.intl.firstDay());\n }\n getWeekNumberContext(rowCtx) {\n const ctx = this.firstWeekDateContext(rowCtx);\n if (!this.weekNumber || !ctx) {\n return null;\n }\n const weekNumber = weekInYear(ctx.value, this.intl.firstDay()).toString();\n return {\n formattedValue: weekNumber,\n id: null,\n isFocused: false,\n isSelected: false,\n isWeekend: false,\n title: weekNumber,\n value: cloneDate(ctx.value)\n };\n }\n getStyles(context) {\n const { isRangeEnd, isRangeStart } = context;\n const isEndActive = this.activeRangeEnd === 'end' && isRangeEnd;\n const isStartActive = this.activeRangeEnd === 'start' && isRangeStart;\n return stringifyClassObject({\n 'k-range-end': !context.isOtherMonth && isRangeEnd,\n 'k-range-mid': !context.isOtherMonth && context.isRangeMid,\n 'k-range-split-end': !context.isOtherMonth && context.isRangeSplitEnd,\n 'k-range-split-start': !context.isOtherMonth && context.isRangeSplitStart,\n 'k-range-start': !context.isOtherMonth && isRangeStart,\n 'k-active': isStartActive || isEndActive,\n 'k-focus': !context.isOtherMonth && this.isActive && context.isFocused,\n 'k-selected': !context.isOtherMonth && (context.isSelected || isRangeStart || isRangeEnd),\n 'k-today': !context.isOtherMonth && context.isToday,\n 'k-weekend': context.isWeekend,\n 'k-disabled': context.isDisabled,\n 'k-other-month': context.isOtherMonth\n });\n }\n tableCellIndex(rowIndex, cellIndex) {\n return `${rowIndex}:${cellIndex}`;\n }\n handleWeekNumberClick(week) {\n const availableDates = week.map(item => item.value).filter(date => !this.disabledDatesService.isDateDisabled(date));\n this.weekNumberCellClick.emit(availableDates);\n }\n firstWeekDateContext(rowCtx) {\n if (!this.weekNumber) {\n return null;\n }\n let idx = 0;\n let ctx = this.shouldRenderCellContent(rowCtx[idx]) ? rowCtx[idx] : null;\n while (!ctx && idx < rowCtx.length) {\n const cellCtx = rowCtx[++idx];\n ctx = this.shouldRenderCellContent(cellCtx) ? cellCtx : null;\n }\n return ctx;\n }\n updateData() {\n const time = last(this.selectedDates) || getToday();\n const viewDate = setTime(this.viewDate, time);\n this.data = this.service.data({\n cellUID: this.cellUID,\n focusedDate: this.focusedDate,\n isActiveView: !this.bus.canMoveDown(this.activeView),\n max: this.max,\n min: this.min,\n selectedDates: this.selectedDates,\n selectionRange: this.selectionRange,\n viewDate: viewDate,\n isDateDisabled: this.disabledDatesService.isDateDisabled,\n direction: this.direction\n });\n }\n intlChange() {\n this.updateData();\n this.cdr.markForCheck();\n }\n disabledDatesChange() {\n this.updateData();\n this.cdr.markForCheck();\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'mouseover', this.cellMouseoverHandler.bind(this)), this.renderer.listen(element, 'mouseleave', this.mouseLeaveHandler.bind(this)), this.renderer.listen(element, 'click', this.clickHandler.bind(this)));\n }\n clickHandler(args) {\n const cell = this.closestCell(args);\n if (!cell) {\n return;\n }\n const index = cell.getAttribute('data-cell-index');\n const cellContext = this.cellByIndex(index);\n if (!cellContext.isDisabled) {\n const { ctrlKey, metaKey, shiftKey } = args;\n this.cellClick.emit({\n date: cellContext.value,\n modifiers: { ctrlKey, metaKey, shiftKey }\n });\n }\n }\n mouseLeaveHandler() {\n if (this.currentCellIndex) {\n this.emitCellLeave();\n }\n }\n cellMouseoverHandler(args) {\n const cell = this.closestCell(args);\n if (cell) {\n const index = cell.getAttribute('data-cell-index');\n if (this.currentCellIndex && this.currentCellIndex !== index) {\n this.emitCellLeave();\n }\n const value = this.cellByIndex(index).value;\n this.cellEnter.emit(value);\n this.currentCellIndex = index;\n }\n else if (this.currentCellIndex) {\n this.emitCellLeave();\n }\n }\n closestCell(eventArgs) {\n return closestInScope(eventArgs.target, node => node.hasAttribute('data-cell-index'), this.element.nativeElement);\n }\n emitCellLeave() {\n const item = this.cellByIndex(this.currentCellIndex);\n if (item) {\n this.cellLeave.emit(item.value);\n }\n this.currentCellIndex = null;\n }\n cellByIndex(index) {\n const [rowIndex, cellIndex] = index.split(':');\n return this.data[rowIndex][cellIndex];\n }\n}\nViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ViewComponent, deps: [{ token: BusViewService }, { token: i1.IntlService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: DisabledDatesService }], target: i0.ɵɵFactoryTarget.Component });\nViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ViewComponent, selector: \"[kendoCalendarView]\", inputs: { direction: \"direction\", isActive: \"isActive\", activeView: \"activeView\", cellUID: \"cellUID\", focusedDate: \"focusedDate\", viewDate: \"viewDate\", activeRangeEnd: \"activeRangeEnd\", selectionRange: \"selectionRange\", min: \"min\", max: \"max\", selectedDates: \"selectedDates\", weekNumber: \"weekNumber\", viewIndex: \"viewIndex\", templateRef: \"templateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\" }, outputs: { cellClick: \"cellClick\", weekNumberCellClick: \"weekNumberCellClick\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\" }, usesOnChanges: true, ngImport: i0, template: `\n  \n {{title}}\n \n \n \n \n {{getWeekNumber(firstDate(row))}}\n \n \n \n
\n \n \n \n {{cell.formattedValue}}\n
\n \n \n \n \n `, isInline: true, directives: [{ type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: KForOf, selector: \"[kFor][kForOf]\", inputs: [\"kForOf\", \"kForTrackBy\", \"kForTemplate\"] }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i7.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i7.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ViewComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line\n selector: '[kendoCalendarView]',\n template: `\n  \n {{title}}\n \n \n \n \n {{getWeekNumber(firstDate(row))}}\n \n \n \n
\n \n \n \n {{cell.formattedValue}}\n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: BusViewService }, { type: i1.IntlService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: DisabledDatesService }]; }, propDecorators: { direction: [{\n type: Input\n }], isActive: [{\n type: Input\n }], activeView: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], selectedDates: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], viewIndex: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }], cellClick: [{\n type: Output\n }], weekNumberCellClick: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }] } });\n\n/* eslint-disable @angular-eslint/component-selector */\nconst DEFAULT_VIEWS_LENGTH = 2;\n/**\n * @hidden\n */\nclass HorizontalViewListComponent {\n constructor(bus, intl, weekService, cdr, element, renderer) {\n this.bus = bus;\n this.intl = intl;\n this.weekService = weekService;\n this.cdr = cdr;\n this.element = element;\n this.renderer = renderer;\n this.activeView = CalendarViewEnum.month;\n this.isActive = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.selectedDates = [];\n this.views = DEFAULT_VIEWS_LENGTH;\n this.showViewHeader = false;\n this.animateNavigation = false;\n this.orientation = 'horizontal';\n this.cellClick = new EventEmitter();\n this.weekNumberCellClick = new EventEmitter();\n this.cellEnter = new EventEmitter();\n this.cellLeave = new EventEmitter();\n this.activeDateChange = new EventEmitter();\n this.getComponentClass = true;\n this.weekNames = [];\n this.dates = [];\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n }\n get weekNumber() {\n return this.showWeekNumbers && this.isMonthView();\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n get horizontalHostClass() {\n return this.orientation === 'horizontal';\n }\n get verticalHostClass() {\n return this.orientation === 'vertical';\n }\n get getComponentMonthClass() {\n return this.activeView === CalendarViewEnum.month;\n }\n get getComponentYearClass() {\n return this.activeView === CalendarViewEnum.year;\n }\n get getComponentDecadeClass() {\n return this.activeView === CalendarViewEnum.decade;\n }\n get getComponentCenturyClass() {\n return this.activeView === CalendarViewEnum.century;\n }\n ngOnChanges(changes) {\n this.initService();\n if (this.weekNames.length === 0 || changes.weekNumber) {\n this.weekNames = this.weekService.getWeekNames(this.weekNumber);\n }\n if (!this.service) {\n return;\n }\n this.views = this.views || DEFAULT_VIEWS_LENGTH;\n const focusedDate = this.focusedDate;\n const viewDate = this.clampDate(this.service.viewDate(focusedDate, this.max, this.views));\n this.skip = this.service.skip(viewDate, this.min);\n this.total = this.service.total(this.min, this.max);\n const activeViewChanged = hasChange(changes, 'activeView');\n const viewsHasChanged = this.views > 0 && hasChange(changes, 'views');\n if (activeViewChanged || !this.isInDates(focusedDate) || viewsHasChanged || !this.activeDate) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n this.activeDate = cloneDate(this.dates[0]);\n this.activeDateChange.emit(this.activeDate);\n }\n }\n ngAfterViewInit() {\n // make the calendar look the same in the different browsers\n // which also smoothens the navigation animation\n if (this.views === 1) {\n this.setTableMinWidth();\n }\n }\n ngOnDestroy() {\n this.intlSubscription.unsubscribe();\n }\n initService() {\n this.service = this.bus.service(this.activeView);\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n getCaptionTitle(date) {\n return this.service.title(date);\n }\n getCaptionClass() {\n return this.isMonthView() ? 'k-month-header' : 'k-meta-header';\n }\n animateView(action) {\n const container = this.element.nativeElement;\n const table = container.querySelector('table');\n // the whole width excluding padding/margin\n const initialContainerWidth = parseFloat(getComputedStyle(container).width);\n // table width\n const tableWidth = parseFloat(getComputedStyle(table).width);\n this.renderer.setStyle(container, 'width', `${initialContainerWidth}px`);\n this.renderer.setStyle(container, 'overflow', 'visible');\n // initialize an additional view for the animation\n if (action === Action.NextView) {\n // animating Action.NextView requires adding an additional view before the rendered views\n this.nextAnimationDate = cloneDate(this.dates[0]);\n }\n else {\n // animating Action.PrevView requires adding an additional view after the rendered views\n this.prevAnimationDate = cloneDate(this.dates[this.dates.length - 1]);\n }\n // run cdr to render the additional view\n this.cdr.detectChanges();\n container.querySelectorAll('table').forEach(table => {\n this.renderer.setStyle(table, 'width', `${tableWidth}px`);\n if (this.views === 1) {\n this.renderer.setStyle(table, 'min-width', `${initialContainerWidth}px`);\n }\n });\n // we always slide by the width of 1 table\n // cross-browser compatibility is ensured by measuring the client rectangle and substracting the gap\n const tabRect = table.getBoundingClientRect();\n const containerGap = parseFloat(getComputedStyle(container).columnGap);\n const start = action === Action.NextView ? 'translateX(0)' : `translateX(-${tabRect.width + containerGap}px)`;\n const end = action === Action.NextView ? `translateX(-${tabRect.width + containerGap}px)` : 'translateX(0)';\n if (!this.animation) {\n this.animation = container.animate([\n { transform: start },\n { transform: end }\n ], {\n duration: 500,\n easing: 'ease-out'\n });\n this.animation.oncancel = this.animation.onfinish = () => {\n // clear all inline styles\n this.renderer.removeStyle(container, 'width');\n this.renderer.removeStyle(container, 'overflow');\n container.querySelectorAll('table').forEach(table => {\n this.renderer.removeStyle(table, 'width');\n });\n // clear the animation and the animation view\n this.animation = null;\n this.nextAnimationDate = null;\n this.prevAnimationDate = null;\n // run cdr to remove additional animation view from the markup\n this.cdr.detectChanges();\n };\n }\n else {\n // if animation is already running, cancel it and show the end navigation result on multiple prev/next button clicks\n this.animation.cancel();\n }\n }\n navigate(action) {\n if (this.animateNavigation && isDocumentAvailable() && isPresent(this.element.nativeElement.animate)) {\n this.animateView(action);\n }\n const candidate = this.move(action);\n const list = this.service.datesList(candidate, this.getTake(this.skip));\n if (this.isListInRange(list)) {\n this.dates = list;\n }\n this.activeDate = cloneDate(this.dates[0]);\n this.focusedDate = cloneDate(candidate);\n this.cdr.markForCheck();\n this.activeDateChange.emit(this.activeDate);\n return cloneDate(candidate);\n }\n canNavigate(action) {\n if (!this.service) {\n return false;\n }\n return this.isListInRange(this.service.datesList(this.move(action), this.getTake(this.skip)));\n }\n setTableMinWidth() {\n const container = this.element.nativeElement;\n const table = container.querySelector('table');\n if (table) {\n const containerWidth = parseFloat(getComputedStyle(container).width);\n this.renderer.setStyle(table, 'min-width', `${containerWidth}px`);\n }\n }\n intlChange() {\n this.weekNames = this.weekService.getWeekNames(this.weekNumber);\n this.cdr.markForCheck();\n }\n clampDate(value) {\n return dateInRange(value, this.min, this.max);\n }\n move(action) {\n return this.service.move(this.dates[0] || this.focusedDate, action);\n }\n isListInRange(list) {\n const lowerBound = this.service.beginningOfPeriod(this.min);\n const upperBound = this.service.beginningOfPeriod(this.service.addToDate(this.max, 1));\n return lowerBound <= list[0] && list[list.length - 1] < upperBound;\n }\n isInDates(value) {\n return this.service.isInArray(value, this.dates);\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.views);\n }\n}\nHorizontalViewListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HorizontalViewListComponent, deps: [{ token: BusViewService }, { token: i1.IntlService }, { token: WeekNamesService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nHorizontalViewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: HorizontalViewListComponent, selector: \"kendo-calendar-horizontal\", inputs: { cellTemplateRef: \"cellTemplateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\", activeRangeEnd: \"activeRangeEnd\", activeView: \"activeView\", cellUID: \"cellUID\", focusedDate: \"focusedDate\", isActive: \"isActive\", min: \"min\", max: \"max\", selectionRange: \"selectionRange\", selectedDates: \"selectedDates\", views: \"views\", showViewHeader: \"showViewHeader\", animateNavigation: \"animateNavigation\", orientation: \"orientation\", weekNumber: \"weekNumber\" }, outputs: { cellClick: \"cellClick\", weekNumberCellClick: \"weekNumberCellClick\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\", activeDateChange: \"activeDateChange\" }, host: { properties: { \"class.k-calendar-view\": \"this.getComponentClass\", \"class.k-align-items-start\": \"this.getComponentClass\", \"class.k-justify-content-center\": \"this.getComponentClass\", \"class.k-hstack\": \"this.horizontalHostClass\", \"class.k-vstack\": \"this.verticalHostClass\", \"class.k-calendar-monthview\": \"this.getComponentMonthClass\", \"class.k-calendar-yearview\": \"this.getComponentYearClass\", \"class.k-calendar-decadeview\": \"this.getComponentDecadeClass\", \"class.k-calendar-centuryview\": \"this.getComponentCenturyClass\" } }, usesOnChanges: true, ngImport: i0, template: `\n \n \n {{ getCaptionTitle(date) }}\n \n \n {{name}}\n \n \n \n \n \n \n\n \n \n \n\n \n \n\n \n \n \n `, isInline: true, components: [{ type: ViewComponent, selector: \"[kendoCalendarView]\", inputs: [\"direction\", \"isActive\", \"activeView\", \"cellUID\", \"focusedDate\", \"viewDate\", \"activeRangeEnd\", \"selectionRange\", \"min\", \"max\", \"selectedDates\", \"weekNumber\", \"viewIndex\", \"templateRef\", \"weekNumberTemplateRef\"], outputs: [\"cellClick\", \"weekNumberCellClick\", \"cellEnter\", \"cellLeave\"] }], directives: [{ type: i7.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i7.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i7.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: KForOf, selector: \"[kFor][kForOf]\", inputs: [\"kForOf\", \"kForTrackBy\", \"kForTemplate\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HorizontalViewListComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-horizontal',\n template: `\n \n \n {{ getCaptionTitle(date) }}\n \n \n {{name}}\n \n \n \n \n \n \n\n \n \n \n\n \n \n\n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: BusViewService }, { type: i1.IntlService }, { type: WeekNamesService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { cellTemplateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], activeView: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], isActive: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], selectedDates: [{\n type: Input\n }], views: [{\n type: Input\n }], showViewHeader: [{\n type: Input\n }], animateNavigation: [{\n type: Input\n }], orientation: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], cellClick: [{\n type: Output\n }], weekNumberCellClick: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-view\"]\n }, {\n type: HostBinding,\n args: [\"class.k-align-items-start\"]\n }, {\n type: HostBinding,\n args: [\"class.k-justify-content-center\"]\n }], horizontalHostClass: [{\n type: HostBinding,\n args: [\"class.k-hstack\"]\n }], verticalHostClass: [{\n type: HostBinding,\n args: [\"class.k-vstack\"]\n }], getComponentMonthClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-monthview\"]\n }], getComponentYearClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-yearview\"]\n }], getComponentDecadeClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-decadeview\"]\n }], getComponentCenturyClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-centuryview\"]\n }] } });\n\n/**\n * @hidden\n */\nclass HeaderComponent {\n constructor(bus, cdr, localization, intl, disabledDatesService) {\n this.bus = bus;\n this.cdr = cdr;\n this.localization = localization;\n this.intl = intl;\n this.disabledDatesService = disabledDatesService;\n this.navigate = true;\n this.todayAvailable = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.rangeLength = 1;\n this.isPrevDisabled = true;\n this.isNextDisabled = true;\n this.showNavigationButtons = false;\n this.orientation = 'horizontal';\n this.todayButtonClick = new EventEmitter();\n this.prevButtonClick = new EventEmitter();\n this.nextButtonClick = new EventEmitter();\n this.getComponentClass = true;\n this.subscriptions = new Subscription();\n }\n get horizontalHostClass() {\n return this.orientation === 'horizontal';\n }\n get verticalHostClass() {\n return this.orientation === 'vertical';\n }\n ngOnInit() {\n this.subscriptions.add(this.intl.changes.subscribe(this.intlChange.bind(this)));\n this.subscriptions.add(this.localization.changes.subscribe(this.l10nChange.bind(this)));\n this.subscriptions.add(this.disabledDatesService.changes.subscribe(this.setTodayAvailability.bind(this)));\n }\n ngOnChanges(_) {\n const service = this.bus.service(this.activeView);\n if (!service) {\n return;\n }\n this.activeViewValue = CalendarViewEnum[this.activeView];\n this.todayMessage = this.localization.get('today');\n this.setTodayAvailability();\n this.navigate = this.bus.canMoveUp(this.activeView);\n this.title = this.getTitle();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n handleTodayClick() {\n if (!this.todayAvailable) {\n return;\n }\n this.bus.moveToBottom(this.activeView);\n this.todayButtonClick.emit(dateInRange(getToday(), this.min, this.max));\n }\n handleNavigation() {\n if (!this.navigate) {\n return;\n }\n this.bus.moveUp(this.activeView);\n }\n intlChange() {\n if (this.currentDate && this.bus.service(this.activeView)) {\n this.title = this.getTitle();\n this.cdr.markForCheck();\n }\n }\n l10nChange() {\n this.prevButtonTitle = this.localization.get('prevButtonTitle');\n this.nextButtonTitle = this.localization.get('nextButtonTitle');\n this.todayMessage = this.localization.get('today');\n this.cdr.markForCheck();\n }\n getTitle() {\n if (!this.currentDate) {\n return '';\n }\n const service = this.bus.service(this.activeView);\n const take = this.rangeLength - 1;\n const title = service.title(this.currentDate);\n const nextDate = service.addToDate(this.currentDate, take);\n if (take < 1 || !service.isInRange(nextDate, this.min, this.max)) {\n return title;\n }\n return `${title} - ${service.title(nextDate)}`;\n }\n setTodayAvailability() {\n const today = getToday();\n const isTodayInRange = isInRange(today, getDate(this.min), getDate(this.max));\n const isDisabled = this.disabledDatesService.isDateDisabled(today);\n this.todayAvailable = isTodayInRange && !isDisabled;\n this.cdr.markForCheck();\n }\n}\nHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HeaderComponent, deps: [{ token: BusViewService }, { token: i0.ChangeDetectorRef }, { token: i1$1.LocalizationService }, { token: i1.IntlService }, { token: DisabledDatesService }], target: i0.ɵɵFactoryTarget.Component });\nHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: HeaderComponent, selector: \"kendo-calendar-header\", inputs: { activeView: \"activeView\", currentDate: \"currentDate\", min: \"min\", max: \"max\", rangeLength: \"rangeLength\", templateRef: \"templateRef\", isPrevDisabled: \"isPrevDisabled\", isNextDisabled: \"isNextDisabled\", showNavigationButtons: \"showNavigationButtons\", orientation: \"orientation\" }, outputs: { todayButtonClick: \"todayButtonClick\", prevButtonClick: \"prevButtonClick\", nextButtonClick: \"nextButtonClick\" }, host: { properties: { \"class.k-calendar-header\": \"this.getComponentClass\", \"class.k-hstack\": \"this.horizontalHostClass\", \"class.k-vstack\": \"this.verticalHostClass\" } }, usesOnChanges: true, ngImport: i0, template: `\n \n {{title}}\n \n \n \n \n \n \n \n \n {{ todayMessage }}\n \n \n \n \n \n `, isInline: true, directives: [{ type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i7.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HeaderComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-calendar-header',\n template: `\n \n {{title}}\n \n \n \n \n \n \n \n \n {{ todayMessage }}\n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: BusViewService }, { type: i0.ChangeDetectorRef }, { type: i1$1.LocalizationService }, { type: i1.IntlService }, { type: DisabledDatesService }]; }, propDecorators: { activeView: [{\n type: Input\n }], currentDate: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], rangeLength: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], isPrevDisabled: [{\n type: Input\n }], isNextDisabled: [{\n type: Input\n }], showNavigationButtons: [{\n type: Input\n }], orientation: [{\n type: Input\n }], todayButtonClick: [{\n type: Output\n }], prevButtonClick: [{\n type: Output\n }], nextButtonClick: [{\n type: Output\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-header\"]\n }], horizontalHostClass: [{\n type: HostBinding,\n args: [\"class.k-hstack\"]\n }], verticalHostClass: [{\n type: HostBinding,\n args: [\"class.k-vstack\"]\n }] } });\n\nconst KEY_TO_ACTION = {\n '33': Action.PrevView,\n '34': Action.NextView,\n '35': Action.LastInView,\n '36': Action.FirstInView,\n '37': Action.Left,\n '38': Action.Up,\n '39': Action.Right,\n '40': Action.Down,\n 'meta+38': Action.UpperView,\n 'meta+40': Action.LowerView\n};\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(bus) {\n this.bus = bus;\n }\n action(event) {\n const action = `${event.ctrlKey || event.metaKey ? 'meta+' : ''}${event.keyCode}`;\n return KEY_TO_ACTION[action];\n }\n move(value, action, activeView) {\n const service = this.bus.service(activeView);\n if (!service) {\n return value;\n }\n if (action === Action.UpperView && this.bus.canMoveUp(activeView)) {\n this.bus.moveUp(activeView);\n return value;\n }\n if (action === Action.LowerView && this.bus.canMoveDown(activeView)) {\n this.bus.moveDown(activeView);\n return value;\n }\n return service.move(value, action);\n }\n}\nNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, deps: [{ token: BusViewService }], target: i0.ɵɵFactoryTarget.Injectable });\nNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: BusViewService }]; } });\n\n/**\n * @hidden\n */\nclass SelectionService {\n constructor(bus) {\n this.bus = bus;\n }\n performSelection(args) {\n let { date, modifiers, selectionMode, activeViewEnum, rangePivot } = args;\n let selectedDates = args.selectedDates.slice();\n if (selectionMode === 'multiple') {\n if (modifiers.ctrlKey || modifiers.metaKey) {\n if (this.isDateSelected(selectedDates, date)) {\n selectedDates = selectedDates.filter(item => !isEqual(item, date));\n }\n else {\n selectedDates.push(date);\n }\n rangePivot = date;\n }\n else if (modifiers.shiftKey) {\n const [start, end] = sortDates([rangePivot || date, date]);\n selectedDates = this.bus.service(activeViewEnum).dateRange(start, end);\n rangePivot = date > selectedDates[0] ? selectedDates[0] : last(selectedDates);\n }\n else {\n selectedDates = [date];\n rangePivot = date;\n }\n }\n else {\n selectedDates = [date];\n rangePivot = date;\n }\n return { selectedDates, rangePivot };\n }\n isDateSelected(selectedDates, date) {\n return selectedDates.some(item => isEqual(item, date));\n }\n}\nSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService, deps: [{ token: BusViewService }], target: i0.ɵɵFactoryTarget.Injectable });\nSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: BusViewService }]; } });\n\n/**\n * Used for rendering the cell content of the Calendar. To define the cell template, nest an `` tag\n * with the `kendoCalendarCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details\n * about the current cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * > `kendoCalendarCellTemplate` is equivalent to\n * > [`kendoCalendarMonthCellTemplate`]({% slug api_dateinputs_monthcelltemplatedirective %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{date.getDate()}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass CellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CellTemplateDirective, selector: \"[kendoCalendarCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Used for rendering the month cell content of the Calendar. To define the month cell template, nest an `` tag\n * with the `kendoCalendarMonthCellTemplate` directive inside the component tag. The template context is set to the current\n * component. To get a reference to the current date, use the `let-date` directive. To provide more details about the current\n * month cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass MonthCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nMonthCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MonthCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMonthCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MonthCellTemplateDirective, selector: \"[kendoCalendarMonthCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MonthCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarMonthCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Used for rendering the year cell content of the Calendar. To define the year cell template, nest an\n * `` tag with the `kendoCalendarYearCellTemplate` directive inside the component tag.\n * The template context is set to the current component. To get a reference to the current date, use\n * the `let-date` directive. To provide more details about the current year cell, get a reference to the\n * current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'year';\n * }\n * ```\n */\nclass YearCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nYearCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YearCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nYearCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: YearCellTemplateDirective, selector: \"[kendoCalendarYearCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: YearCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarYearCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Used for rendering the decade cell content of the Calendar. To define the decade cell template, nest an ``\n * tag with the `kendoCalendarDecadeCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details about\n * the current decade cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'decade';\n * }\n * ```\n */\nclass DecadeCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDecadeCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DecadeCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nDecadeCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DecadeCellTemplateDirective, selector: \"[kendoCalendarDecadeCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DecadeCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarDecadeCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Used for rendering the century cell content of the Calendar. To define the century cell template, nest an ``\n * tag with the `kendoCalendarCenturyCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details about\n * the current century cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'century';\n * }\n * ```\n */\nclass CenturyCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCenturyCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CenturyCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCenturyCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CenturyCellTemplateDirective, selector: \"[kendoCalendarCenturyCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CenturyCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarCenturyCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Used for rendering the week number cell content in the month view of the Calendar. To define the month week number cell template,\n * nest an `` tag with the `kendoCalendarWeekNumberCellTemplate` directive inside the component tag. The template\n * context is set to the current component. To get a reference to the current date, use the `let-date` directive. To provide more\n * details about the current week number cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass WeekNumberCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nWeekNumberCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WeekNumberCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nWeekNumberCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WeekNumberCellTemplateDirective, selector: \"[kendoCalendarWeekNumberCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WeekNumberCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarWeekNumberCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Used for rendering the header title of the Calendar. To define the header title template, nest an `` tag\n * with the `kendoCalendarHeaderTitleTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current title, use the `let-title` directive. To provide more details about\n * the current title, get a reference to the current `date` by using the `let-date` directive or get a reference to the\n * current active view by using the `let-activeView` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{title}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass HeaderTitleTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nHeaderTitleTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HeaderTitleTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nHeaderTitleTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: HeaderTitleTemplateDirective, selector: \"[kendoCalendarHeaderTitleTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HeaderTitleTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarHeaderTitleTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @hidden\n */\nconst minValidator = (minValue) => {\n return (control) => {\n const err = {\n minError: {\n minValue: minValue,\n value: control.value\n }\n };\n if (!minValue || !control.value) {\n return null;\n }\n return control.value < minValue ? err : null;\n };\n};\n\n/**\n * @hidden\n */\nconst maxValidator = (maxValue) => {\n return (control) => {\n const err = {\n maxError: {\n maxValue: maxValue,\n value: control.value\n }\n };\n if (!maxValue || !control.value) {\n return null;\n }\n return control.value > maxValue ? err : null;\n };\n};\n\nconst noop = () => null;\n/**\n * @hidden\n */\nconst disabledDatesRangeValidator = (isDateDisabled) => {\n if (!isPresent(isDateDisabled)) {\n return noop;\n }\n return (selectedRange) => {\n const isRangeComplete = isPresent(selectedRange) && isPresent(selectedRange.start) && isPresent(selectedRange.end);\n if (!isRangeComplete || selectedRange.start > selectedRange.end) {\n return null;\n }\n const disabledDates = disabledDatesInRange(selectedRange.start, selectedRange.end, isDateDisabled);\n const error = {\n disabledDatesInRange: disabledDates\n };\n return disabledDates.length ? error : null;\n };\n};\n\n/**\n * @hidden\n */\nclass Messages$1 extends ComponentMessages {\n}\nMessages$1.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages$1, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMessages$1.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: Messages$1, selector: \"kendo-multiview-calendar-messages-base\", inputs: { today: \"today\", prevButtonTitle: \"prevButtonTitle\", nextButtonTitle: \"nextButtonTitle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages$1, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line\n selector: 'kendo-multiview-calendar-messages-base'\n }]\n }], propDecorators: { today: [{\n type: Input\n }], prevButtonTitle: [{\n type: Input\n }], nextButtonTitle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass MultiViewCalendarLocalizedMessagesDirective extends Messages$1 {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nMultiViewCalendarLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarLocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nMultiViewCalendarLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiViewCalendarLocalizedMessagesDirective, selector: \"[kendoMultiViewCalendarLocalizedMessages]\", providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => MultiViewCalendarLocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarLocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => MultiViewCalendarLocalizedMessagesDirective)\n }\n ],\n selector: '[kendoMultiViewCalendarLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst BOTTOM_VIEW_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-bottomview';\nconst TOP_VIEW_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-topview';\nconst MIN_DOC_LINK$3 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-min';\nconst MAX_DOC_LINK$3 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-max';\nconst VALUE_DOC_LINK$5 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/#toc-using-with-json';\n/**\n * @hidden\n */\nconst RANGE_CALENDAR_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiViewCalendarComponent)\n};\n/**\n * @hidden\n */\nconst RANGE_CALENDAR_RANGE_VALIDATORS = {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MultiViewCalendarComponent)\n};\n/**\n * Represents the Kendo UI MultiViewCalendar component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass MultiViewCalendarComponent {\n constructor(bus, element, navigator, renderer, cdr, zone, disabledDatesService, selectionService) {\n this.bus = bus;\n this.element = element;\n this.navigator = navigator;\n this.renderer = renderer;\n this.cdr = cdr;\n this.zone = zone;\n this.disabledDatesService = disabledDatesService;\n this.selectionService = selectionService;\n /**\n * @hidden\n */\n this.id = guid();\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = false;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_multiviewcalendar %}#toc-validation)).\n */\n this.disabledDatesRangeValidation = false;\n /**\n * Sets the Calendar selection mode\n * ([see example]({% slug multiple_selection_multiviewcalendar %})).\n *\n * The available values are:\n * * `single` (default)\n * * `multiple`\n */\n this.selection = 'single';\n /**\n * Sets or gets the `disabled` property of the Calendar and\n * determines whether the component is active\n * ([see example]({% slug disabled_multiviewcalendar %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the `tabindex` property of the Calendar. Based on the\n * [HTML `tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) behavior,\n * it determines whether the component is focusable.\n */\n this.tabindex = 0;\n /**\n * @hidden\n */\n this.isActive = false;\n /**\n * @hidden\n */\n this.isHeaderActive = false;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_multiviewcalendar %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost view, to which the user can navigate\n * ([see example]({% slug dates_multiviewcalendar %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost view, to which the user can navigate.\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Determines whether to display a header for every view (for example the month name).\n */\n this.showViewHeader = false;\n /**\n * Determines whether to enable animation when navigating to previous/next view.\n *\n * > This feature uses the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). In order to run the animation in browsers that do not support it, you need the `web-animations-js` polyfill.\n *\n * @default false\n */\n this.animateNavigation = false;\n /**\n * Determines whether to display a week number column in the `month` view\n * ([see example]({% slug weeknumcolumn_multiviewcalendar %})).\n */\n this.weekNumber = false;\n /**\n * Sets or gets the `views` property of the Calendar and\n * defines the number of rendered months.\n */\n this.views = 2;\n /**\n * Specifies the orientation of the MultiViewCalendar.\n *\n * The available values are:\n * * `horizontal` (default)\n * * `vertical`\n */\n this.orientation = 'horizontal';\n /**\n * Fires when the active view is changed\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.activeViewChange = new EventEmitter();\n /**\n * Fires when navigating in the currently active view\n * ([more information and example]({% slug events_multiviewcalendar %})).\n */\n this.navigate = new EventEmitter();\n /**\n * Fires when a view cell is entered\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.cellEnter = new EventEmitter();\n /**\n * Fires when a view cell is leaved\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.cellLeave = new EventEmitter();\n /**\n * Fires when the value is changed\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.blurEvent = new EventEmitter();\n this.cellUID = guid();\n this.isHovered = false;\n this.isPrevDisabled = true;\n this.isNextDisabled = true;\n this.prevView = Action.PrevView;\n this.nextView = Action.NextView;\n this.selectedDates = [];\n this._min = new Date(MIN_DATE);\n this._max = new Date(MAX_DATE);\n this._focusedDate = getToday();\n this.resolvedPromise = Promise.resolve();\n this.onControlChange = noop$2;\n this.onControlTouched = noop$2;\n this.onValidatorChange = noop$2;\n this.minValidateFn = noop$2;\n this.maxValidateFn = noop$2;\n this.disabledDatesRangeValidateFn = noop$2;\n this.subscriptions = new Subscription();\n this.setClasses(element.nativeElement);\n }\n /**\n * Sets or gets the `focusedDate` property of the Calendar and\n * defines the focused date of the component\n * ([see example]({% slug dates_multiviewcalendar %}#toc-focused-dates)).\n *\n * > If the Calendar is out of the min or max range, it normalizes the defined `focusedDate`.\n */\n set focusedDate(focusedDate) {\n this._focusedDate = focusedDate || getToday();\n }\n get focusedDate() {\n return this._focusedDate;\n }\n /**\n * Sets or gets the `min` property of the Calendar and\n * defines the minimum allowed date value.\n * By default, the `min` value is `1900-1-1`.\n */\n set min(min) {\n this._min = min || new Date(MIN_DATE);\n }\n get min() {\n return this._min;\n }\n /**\n * Sets or gets the `max` property of the Calendar and\n * defines the maximum allowed date value.\n * By default, the `max` value is `2099-12-31`.\n */\n set max(max) {\n this._max = max || new Date(MAX_DATE);\n }\n get max() {\n return this._max;\n }\n /**\n * Sets or gets the `value` property of the Calendar and defines the selected value of the component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date)\n * instance when in `single` selection mode or an array of valid JavaScript Date instances when in `multiple` selection mode.\n */\n get value() {\n return this._value;\n }\n set value(candidate) {\n this.verifyValue(candidate);\n this._value = Array.isArray(candidate) ?\n candidate.filter(date => isPresent(date)).map(element => cloneDate(element)) :\n cloneDate(candidate);\n const selection = [].concat(candidate).filter(date => isPresent(date)).map(date => cloneDate(date));\n if (!areDatesEqual(selection, this.selectedDates)) {\n const lastSelected = last(selection);\n this.rangePivot = cloneDate(lastSelected);\n this.focusedDate = cloneDate(lastSelected) || this.focusedDate;\n this.selectedDates = selection;\n }\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the MultiViewCalendar that will be disabled\n * ([see example]({% slug disabled_dates_multiviewcalendar %})).\n */\n set disabledDates(value) {\n this.disabledDatesService.initialize(value);\n }\n /**\n * Sets or gets the `selectionRange` property of the Calendar and\n * defines the selection range of the component\n * ([see example]({% slug dates_multiviewcalendar %}#toc-selection-range)).\n */\n set selectionRange(range) {\n this._selectionRange = range;\n if (this.disabledDatesRangeValidation) {\n this.onValidatorChange();\n }\n }\n get selectionRange() {\n return this._selectionRange;\n }\n /**\n * @hidden\n *\n * Defines the template for each cell.\n * Takes precedence over nested templates in the KendoMultiViewCalendar tag.\n */\n set cellTemplateRef(template) {\n this._cellTemplateRef = template;\n }\n get cellTemplateRef() {\n return this._cellTemplateRef || this.cellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each month cell.\n * Takes precedence over nested templates in the KendoMultiViewCalendar tag.\n */\n set monthCellTemplateRef(template) {\n this._monthCellTemplateRef = template;\n }\n get monthCellTemplateRef() {\n return this._monthCellTemplateRef || this.monthCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each year cell.\n * Takes precedence over nested templates in the KendoMultiViewCalendar tag.\n */\n set yearCellTemplateRef(template) {\n this._yearCellTemplateRef = template;\n }\n get yearCellTemplateRef() {\n return this._yearCellTemplateRef || this.yearCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each decade cell.\n * Takes precedence over nested templates in the KendoMultiViewCalendar tag.\n */\n set decadeCellTemplateRef(template) {\n this._decadeCellTemplateRef = template;\n }\n get decadeCellTemplateRef() {\n return this._decadeCellTemplateRef || this.decadeCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each century cell.\n * Takes precedence over nested templates in the KendoMultiViewCalendar tag.\n */\n set centuryCellTemplateRef(template) {\n this._centuryCellTemplateRef = template;\n }\n get centuryCellTemplateRef() {\n return this._centuryCellTemplateRef || this.centuryCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for the week cell.\n * Takes precedence over nested templates in the KendoMultiViewCalendar tag.\n */\n set weekNumberTemplateRef(template) {\n this._weekNumberTemplateRef = template;\n }\n get weekNumberTemplateRef() {\n return this._weekNumberTemplateRef || this.weekNumberTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for the header title.\n * Takes precedence over nested templates in the KendoMultiViewCalendar tag.\n */\n set headerTitleTemplateRef(template) {\n this._headerTitleTemplateRef = template;\n }\n get headerTitleTemplateRef() {\n return this._headerTitleTemplateRef || this.headerTitleTemplate;\n }\n get activeViewEnum() {\n const activeView = CalendarViewEnum[this.activeView];\n return activeView < this.bottomViewEnum ? this.bottomViewEnum : activeView;\n }\n get bottomViewEnum() {\n return CalendarViewEnum[this.bottomView];\n }\n get topViewEnum() {\n return CalendarViewEnum[this.topView];\n }\n get widgetId() {\n return this.id;\n }\n get calendarTabIndex() {\n return this.disabled ? undefined : this.tabIndex;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get ariaActivedescendant() {\n return this.cellUID + this.focusedDate.getTime();\n }\n /**\n * @hidden\n */\n handleFocusout(event) {\n const relatedTarget = event.relatedTarget;\n if (!this.element.nativeElement.contains(relatedTarget)) {\n this.blurEvent.emit(event);\n this.onControlTouched();\n }\n this.isActive = false;\n this.isHovered = false; //ensure that hovered is also not active\n this.isHeaderActive = this.headerElement.nativeElement.contains(relatedTarget);\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isActive = true;\n this.isHeaderActive = false;\n }\n /**\n * @hidden\n */\n handleMouseEnter() {\n this.isHovered = true;\n }\n /**\n * @hidden\n */\n handleMouseLeave() {\n this.isHovered = false;\n }\n /**\n * @hidden\n */\n handleMousedown(event) {\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleClick() {\n if (this.isActive) {\n return;\n }\n this.focus();\n }\n /**\n * @hidden\n */\n keydown(event) {\n if (this.isHeaderActive) {\n return;\n }\n if (event.keyCode === Keys.Enter) {\n this.performSelection(this.focusedDate, event);\n }\n const candidate = dateInRange(this.navigator.move(this.focusedDate, this.navigator.action(event), this.activeViewEnum), this.min, this.max);\n if (isEqual(this.focusedDate, candidate)) {\n return;\n }\n this.focusedDate = candidate;\n event.preventDefault();\n const isSameView = this.bus.service(this.activeViewEnum).isInArray(this.focusedDate, this.viewList.dates);\n if (!isSameView) {\n this.emitNavigate(this.focusedDate);\n }\n }\n ngOnInit() {\n this.subscriptions.add(this.bus.viewChanged.subscribe(({ view }) => {\n this.activeView = CalendarViewEnum[view];\n this.activeViewChange.emit(this.activeView);\n this.cdr.detectChanges();\n this.updateButtonState();\n }));\n }\n ngOnChanges(changes) {\n this.verifyChanges();\n this.bus.configure(this.bottomViewEnum, this.topViewEnum);\n if (hasExistingValue(changes, 'focusedDate')) {\n const focusedDate = changes.focusedDate.currentValue;\n this.focusedDate = dateInRange(focusedDate, this.min, this.max);\n }\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDates || changes.disabledDatesRangeValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop$2;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop$2;\n this.disabledDatesRangeValidateFn = this.disabledDatesRangeValidation ? disabledDatesRangeValidator(this.disabledDatesService.isDateDisabled) : noop$2;\n this.onValidatorChange();\n }\n if (changes.min || changes.max || changes.focusedDate || changes.activeView) {\n this.updateButtonState();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n ngAfterViewInit() {\n this.updateButtonState();\n }\n /**\n * Focuses the host element of the Calendar.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the Calendar component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n /**\n * @hidden\n */\n handleHeaderFocus() {\n this.isHeaderActive = true;\n }\n /**\n * @hidden\n */\n handleDateChange(args) {\n const canNavigateDown = this.bus.canMoveDown(this.activeViewEnum);\n const availableDates = args.selectedDates.filter(date => !this.disabledDatesService.isDateDisabled(date));\n this.focusedDate = args.focusedDate || this.focusedDate;\n const sameDates = !canNavigateDown && areDatesEqual(availableDates, this.selectedDates);\n if (this.disabled || sameDates) {\n return;\n }\n if (canNavigateDown) {\n this.bus.moveDown(this.activeViewEnum);\n return;\n }\n if (this.disabledDatesService.isDateDisabled(this.focusedDate)) {\n return;\n }\n this.selectedDates = availableDates.map(date => cloneDate(date));\n this.value = this.parseSelectionToValue(availableDates);\n this.onControlChange(this.parseSelectionToValue(availableDates));\n this.valueChange.emit(this.parseSelectionToValue(availableDates));\n }\n /**\n * @hidden\n */\n handleTodayButtonClick(args) {\n const todayDate = args.focusedDate;\n const isSameView = this.bus.service(this.activeViewEnum).isInArray(todayDate, this.viewList.dates);\n const isBottomView = !this.bus.canMoveDown(this.activeViewEnum);\n if (!isSameView && isBottomView) {\n this.emitNavigate(todayDate);\n }\n this.handleDateChange(args);\n }\n /**\n * @hidden\n */\n setActiveDate(date) {\n this.activeDate = cloneDate(date);\n this.cdr.detectChanges();\n }\n /**\n * @hidden\n */\n writeValue(candidate) {\n this.verifyValue(candidate);\n this.value = candidate;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesRangeValidateFn(this.selectionRange);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n activeCellTemplate() {\n switch (this.activeViewEnum) {\n case CalendarViewEnum.month:\n return this.monthCellTemplateRef || this.cellTemplateRef;\n case CalendarViewEnum.year:\n return this.yearCellTemplateRef;\n case CalendarViewEnum.decade:\n return this.decadeCellTemplateRef;\n case CalendarViewEnum.century:\n return this.centuryCellTemplateRef;\n default:\n return null;\n }\n }\n /**\n * @hidden\n */\n navigateView(action) {\n this.focusedDate = this.viewList.navigate(action);\n this.updateButtonState();\n this.emitNavigate(this.focusedDate);\n }\n /**\n * @hidden\n */\n emitNavigate(focusedDate) {\n const activeView = CalendarViewEnum[this.activeViewEnum];\n this.navigate.emit({ activeView, focusedDate });\n }\n /**\n * @hidden\n */\n emitCellEvent(emitter, args) {\n if (hasObservers(emitter)) {\n this.zone.run(() => {\n emitter.emit(args);\n });\n }\n }\n /**\n * @hidden\n */\n handleCellClick({ date, modifiers }) {\n this.performSelection(date, modifiers);\n const isSameView = this.bus.service(this.activeViewEnum).isInArray(this.focusedDate, this.viewList.dates);\n if (!isSameView) {\n this.emitNavigate(this.focusedDate);\n }\n }\n /**\n * @hidden\n */\n handleWeekNumberClick(dates) {\n if (this.selection === 'single') {\n return;\n }\n this.zone.run(() => {\n this.handleDateChange({\n selectedDates: dates,\n focusedDate: last(dates)\n });\n });\n }\n setClasses(element) {\n this.renderer.addClass(element, 'k-widget');\n this.renderer.addClass(element, 'k-calendar');\n this.renderer.addClass(element, 'k-calendar-range');\n }\n verifyChanges() {\n if (!isDevMode()) {\n return;\n }\n if (this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$3} and ${MAX_DOC_LINK$3}.`);\n }\n if (this.bottomViewEnum > this.topViewEnum) {\n throw new Error(`The topView should be greater than bottomView. See ${BOTTOM_VIEW_DOC_LINK$1} and ${TOP_VIEW_DOC_LINK$1}.`);\n }\n }\n verifyValue(candidate) {\n if (!isDevMode()) {\n return;\n }\n if (this.selection === 'single' && candidate && !(candidate instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$5} for possible resolution.`);\n }\n else if (this.selection === 'multiple' && candidate && Array.isArray(candidate)) {\n const onlyDates = candidate.every(value => value instanceof Date);\n if (!onlyDates) {\n throw new Error(`The 'value' should be an array of valid JavaScript Date instances. Check ${VALUE_DOC_LINK$5} for possible resolution.`);\n }\n }\n }\n updateButtonState() {\n this.resolvedPromise.then(() => {\n this.isPrevDisabled = !this.viewList.canNavigate(this.prevView);\n this.isNextDisabled = !this.viewList.canNavigate(this.nextView);\n this.cdr.markForCheck();\n });\n }\n parseSelectionToValue(selection) {\n selection = selection || [];\n return this.selection === 'single' ? cloneDate(last(selection)) : selection.map(date => cloneDate(date));\n }\n performSelection(date, selectionModifiers) {\n const selection = this.selectionService.performSelection({\n date: date,\n modifiers: selectionModifiers,\n selectionMode: this.selection,\n activeViewEnum: this.activeViewEnum,\n rangePivot: this.rangePivot,\n selectedDates: this.selectedDates\n });\n this.rangePivot = selection.rangePivot;\n this.handleDateChange({\n selectedDates: selection.selectedDates,\n focusedDate: date\n });\n }\n}\nMultiViewCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarComponent, deps: [{ token: BusViewService }, { token: i0.ElementRef }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: DisabledDatesService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Component });\nMultiViewCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiViewCalendarComponent, selector: \"kendo-multiviewcalendar\", inputs: { id: \"id\", focusedDate: \"focusedDate\", min: \"min\", max: \"max\", rangeValidation: \"rangeValidation\", disabledDatesRangeValidation: \"disabledDatesRangeValidation\", selection: \"selection\", value: \"value\", disabled: \"disabled\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", isActive: \"isActive\", disabledDates: \"disabledDates\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", showViewHeader: \"showViewHeader\", animateNavigation: \"animateNavigation\", weekNumber: \"weekNumber\", activeRangeEnd: \"activeRangeEnd\", selectionRange: \"selectionRange\", views: \"views\", orientation: \"orientation\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"] }, outputs: { activeViewChange: \"activeViewChange\", navigate: \"navigate\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\", valueChange: \"valueChange\", blurEvent: \"blur\" }, host: { listeners: { \"focusout\": \"handleFocusout($event)\", \"focus\": \"handleFocus()\", \"mouseenter\": \"handleMouseEnter()\", \"mouseleave\": \"handleMouseLeave()\", \"mousedown\": \"handleMousedown($event)\", \"click\": \"handleClick()\", \"keydown\": \"keydown($event)\" }, properties: { \"attr.id\": \"this.widgetId\", \"attr.tabindex\": \"this.calendarTabIndex\", \"attr.aria-disabled\": \"this.ariaDisabled\", \"class.k-disabled\": \"this.ariaDisabled\", \"attr.aria-activedescendant\": \"this.ariaActivedescendant\" } }, providers: [\n BusViewService,\n RANGE_CALENDAR_VALUE_ACCESSOR,\n RANGE_CALENDAR_RANGE_VALIDATORS,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiviewcalendar'\n },\n NavigationService,\n SelectionService\n ], queries: [{ propertyName: \"cellTemplate\", first: true, predicate: CellTemplateDirective, descendants: true }, { propertyName: \"monthCellTemplate\", first: true, predicate: MonthCellTemplateDirective, descendants: true }, { propertyName: \"yearCellTemplate\", first: true, predicate: YearCellTemplateDirective, descendants: true }, { propertyName: \"decadeCellTemplate\", first: true, predicate: DecadeCellTemplateDirective, descendants: true }, { propertyName: \"centuryCellTemplate\", first: true, predicate: CenturyCellTemplateDirective, descendants: true }, { propertyName: \"weekNumberTemplate\", first: true, predicate: WeekNumberCellTemplateDirective, descendants: true }, { propertyName: \"headerTitleTemplate\", first: true, predicate: HeaderTitleTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"headerElement\", first: true, predicate: HeaderComponent, descendants: true, read: ElementRef }, { propertyName: \"viewList\", first: true, predicate: HorizontalViewListComponent, descendants: true }], exportAs: [\"kendo-multiviewcalendar\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n `, isInline: true, components: [{ type: HeaderComponent, selector: \"kendo-calendar-header\", inputs: [\"activeView\", \"currentDate\", \"min\", \"max\", \"rangeLength\", \"templateRef\", \"isPrevDisabled\", \"isNextDisabled\", \"showNavigationButtons\", \"orientation\"], outputs: [\"todayButtonClick\", \"prevButtonClick\", \"nextButtonClick\"] }, { type: HorizontalViewListComponent, selector: \"kendo-calendar-horizontal\", inputs: [\"cellTemplateRef\", \"weekNumberTemplateRef\", \"activeRangeEnd\", \"activeView\", \"cellUID\", \"focusedDate\", \"isActive\", \"min\", \"max\", \"selectionRange\", \"selectedDates\", \"views\", \"showViewHeader\", \"animateNavigation\", \"orientation\", \"weekNumber\"], outputs: [\"cellClick\", \"weekNumberCellClick\", \"cellEnter\", \"cellLeave\", \"activeDateChange\"] }], directives: [{ type: MultiViewCalendarLocalizedMessagesDirective, selector: \"[kendoMultiViewCalendarLocalizedMessages]\" }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-multiviewcalendar',\n providers: [\n BusViewService,\n RANGE_CALENDAR_VALUE_ACCESSOR,\n RANGE_CALENDAR_RANGE_VALIDATORS,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiviewcalendar'\n },\n NavigationService,\n SelectionService\n ],\n selector: 'kendo-multiviewcalendar',\n template: `\n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: BusViewService }, { type: i0.ElementRef }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: DisabledDatesService }, { type: SelectionService }]; }, propDecorators: { id: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesRangeValidation: [{\n type: Input\n }], selection: [{\n type: Input\n }], value: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], isActive: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], showViewHeader: [{\n type: Input\n }], animateNavigation: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], views: [{\n type: Input\n }], orientation: [{\n type: Input\n }], activeViewChange: [{\n type: Output\n }], navigate: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], blurEvent: [{\n type: Output,\n args: ['blur']\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: false }]\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: false }]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: false }]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: false }]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: false }]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: false }]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: false }]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], headerElement: [{\n type: ViewChild,\n args: [HeaderComponent, { static: false, read: ElementRef }]\n }], viewList: [{\n type: ViewChild,\n args: [HorizontalViewListComponent, { static: false }]\n }], widgetId: [{\n type: HostBinding,\n args: ['attr.id']\n }], calendarTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], ariaActivedescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], handleFocusout: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }], handleFocus: [{\n type: HostListener,\n args: [\"focus\"]\n }], handleMouseEnter: [{\n type: HostListener,\n args: [\"mouseenter\"]\n }], handleMouseLeave: [{\n type: HostListener,\n args: [\"mouseleave\"]\n }], handleMousedown: [{\n type: HostListener,\n args: [\"mousedown\", ['$event']]\n }], handleClick: [{\n type: HostListener,\n args: [\"click\"]\n }], keydown: [{\n type: HostListener,\n args: [\"keydown\", [\"$event\"]]\n }] } });\n\n/**\n * @hidden\n */\nconst update = (arr, idx, value) => ([\n ...arr.slice(0, idx + 1),\n ...(arr.slice(idx + 1).map(x => x + value))\n]);\n/**\n * @hidden\n */\nclass RowHeightService {\n constructor(total = 0, rowHeight, detailRowHeight) {\n this.total = total;\n this.rowHeight = rowHeight;\n this.detailRowHeight = detailRowHeight;\n this.offsets = [];\n this.heights = [];\n let agg = 0;\n for (let idx = 0; idx < total; idx++) {\n this.offsets.push(agg);\n agg += rowHeight;\n this.heights.push(rowHeight);\n }\n }\n height(rowIndex) {\n return this.heights[rowIndex];\n }\n expandDetail(rowIndex) {\n if (this.height(rowIndex) === this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight);\n }\n }\n collapseDetail(rowIndex) {\n if (this.height(rowIndex) > this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight * -1);\n }\n }\n index(position) {\n if (position < 0) {\n return undefined;\n }\n const result = this.offsets.reduce((prev, current, idx) => {\n if (prev !== undefined) {\n return prev;\n }\n else if (current === position) {\n return idx;\n }\n else if (current > position) {\n return idx - 1;\n }\n return undefined;\n }, undefined);\n return result === undefined ? this.total - 1 : result;\n }\n offset(rowIndex) {\n return this.offsets[rowIndex];\n }\n totalHeight() {\n return this.heights.reduce((prev, curr) => prev + curr, 0);\n }\n updateRowHeight(rowIndex, value) {\n this.heights[rowIndex] += value;\n this.offsets = update(this.offsets, rowIndex, value);\n }\n}\n\nconst normalize = x => Math.max(x, 0);\n/**\n * @hidden\n */\nclass ScrollAction {\n constructor(offset) {\n this.offset = offset;\n }\n}\n/**\n * @hidden\n */\nclass PageAction {\n constructor(skip) {\n this.skip = skip;\n }\n}\n/**\n * @hidden\n */\nclass ScrollerService {\n constructor(scrollObservable) {\n this.scrollObservable = scrollObservable;\n this.firstLoaded = 0;\n this.bottomOffset = 0;\n this.topOffset = 0;\n }\n create(rowHeightService, skip, take, total, topOffset = 0, bottomOffset = 0, direction = 'vertical') {\n this.rowHeightService = rowHeightService;\n this.firstLoaded = skip;\n this.lastLoaded = skip + take;\n this.take = take;\n this.total = total;\n this.lastScroll = 0;\n this.topOffset = topOffset;\n this.bottomOffset = bottomOffset;\n this.direction = direction;\n const subject = new ReplaySubject(2);\n const offsetBufferRows = this.rowsForHeight(topOffset);\n const skipWithOffset = normalize(skip - offsetBufferRows);\n subject.next(new ScrollAction(this.rowOffset(skipWithOffset)));\n if (offsetBufferRows) {\n subject.next(new PageAction(skipWithOffset));\n }\n this.subscription = new Observable(observer => {\n this.unsubscribe();\n this.scrollSubscription = this.scrollObservable.subscribe(x => this.onScroll(x, observer));\n }).subscribe((x) => subject.next(x));\n return subject;\n }\n destroy() {\n this.unsubscribe();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n onScroll({ scrollLeft, scrollTop, offsetHeight, offsetWidth }, observer) {\n const scrollPosition = this.direction === 'vertical' ? scrollTop : scrollLeft;\n const offsetSize = this.direction === 'vertical' ? offsetHeight : offsetWidth;\n if (this.lastScroll === scrollPosition) {\n return;\n }\n const up = this.lastScroll >= scrollPosition;\n this.lastScroll = scrollPosition;\n const firstItemIndex = this.rowHeightService.index(normalize(scrollPosition - this.topOffset));\n const lastItemIndex = this.rowHeightService.index(normalize(scrollPosition + offsetSize - this.bottomOffset));\n if (!up && lastItemIndex >= this.lastLoaded && this.lastLoaded < this.total) {\n this.firstLoaded = firstItemIndex;\n observer.next(new ScrollAction(this.rowOffset(firstItemIndex)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded));\n }\n if (up && firstItemIndex <= this.firstLoaded) {\n const nonVisibleBuffer = Math.floor(this.take * 0.3);\n this.firstLoaded = normalize(firstItemIndex - nonVisibleBuffer);\n observer.next(new ScrollAction(this.rowOffset(this.firstLoaded)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded));\n }\n }\n rowOffset(index) {\n return this.rowHeightService.offset(index) + this.topOffset;\n }\n rowsForHeight(height) {\n return Math.ceil(height / this.rowHeightService.height(0));\n }\n unsubscribe() {\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n this.scrollSubscription = null;\n }\n }\n}\n\n/* eslint-disable @angular-eslint/component-selector */\n/**\n * @hidden\n */\nconst SCROLLER_FACTORY_TOKEN = new InjectionToken('dateinputs-scroll-service-factory');\n/**\n * @hidden\n */\nfunction DEFAULT_SCROLLER_FACTORY(observable) {\n return new ScrollerService(observable);\n}\n/**\n * @hidden\n */\nvar ScrollDirection;\n(function (ScrollDirection) {\n ScrollDirection[ScrollDirection[\"Backward\"] = 0] = \"Backward\";\n ScrollDirection[ScrollDirection[\"Forward\"] = 1] = \"Forward\";\n})(ScrollDirection || (ScrollDirection = {}));\nconst FRAME_DURATION = 17;\nconst scrollModifiers = {\n [ScrollDirection.Forward]: (step) => value => value + step,\n [ScrollDirection.Backward]: (step) => value => value - step\n};\nconst scrollNormalizers = {\n [ScrollDirection.Forward]: (end) => value => Math.min(value, end),\n [ScrollDirection.Backward]: (end) => value => Math.max(value, end)\n};\nconst scrollValidators = {\n [ScrollDirection.Forward]: end => start => start < end,\n [ScrollDirection.Backward]: end => start => start > end\n};\nconst differenceToScroll = (scrollTop, staticOffset, maxScrollDifference) => {\n return Math.min(Math.abs(staticOffset - scrollTop), maxScrollDifference);\n};\n/**\n * @hidden\n */\nclass VirtualizationComponent {\n constructor(scrollerFactory, container, renderer, zone) {\n this.container = container;\n this.renderer = renderer;\n this.zone = zone;\n this.direction = 'vertical';\n this.itemHeight = 1;\n this.itemWidth = 1;\n this.topOffset = 0;\n this.bottomOffset = 0;\n this.maxScrollDifference = 100;\n this.scrollOffsetSize = 0;\n this.scrollDuration = 150;\n this.activeIndexChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.scrollChange = new EventEmitter();\n this.wrapperClasses = true;\n this.resolvedPromise = Promise.resolve(null);\n this.dispatcher = new Subject();\n this.scroller = scrollerFactory(this.dispatcher);\n }\n get horizontalClass() {\n return this.direction === 'horizontal';\n }\n get totalVertexLength() {\n const value = `${this.totalSize}px`;\n return this.direction === 'vertical' ? { height: value } : { width: value };\n }\n get containerOffsetSize() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'offsetHeight' : 'offsetWidth');\n }\n get containerScrollSize() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth');\n }\n get containerScrollPosition() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'scrollTop' : 'scrollLeft');\n }\n ngOnChanges(changes) {\n if (changes.direction || changes.take || changes.total) {\n this.initServices();\n this.totalSize = this.rowHeightService.totalHeight() + this.bottomOffset;\n }\n }\n ngOnInit() {\n if (!this.rowHeightService) {\n this.rowHeightService = this.createRowHeightService();\n }\n }\n ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.containerScrollSubscription = this.scroll$()\n .pipe(map((event) => event.target))\n .subscribe(t => {\n this.dispatcher.next(t);\n this.emitActiveIndex();\n });\n });\n }\n ngOnDestroy() {\n if (this.containerScrollSubscription) {\n this.containerScrollSubscription.unsubscribe();\n }\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n if (this.animationSubscription) {\n this.animationSubscription.unsubscribe();\n }\n }\n getContainerProperty(propertyName) {\n return this.container.nativeElement[propertyName];\n }\n activeIndex() {\n return this.itemIndex(Math.ceil(this.containerScrollPosition)); //handle subpixeling\n }\n itemIndex(offset) {\n return this.rowHeightService.index(offset);\n }\n itemOffset(index) {\n return this.rowHeightService.offset(index);\n }\n isIndexVisible(index) {\n if (!this.rowHeightService) {\n return false;\n }\n const containerTop = this.containerScrollPosition;\n const containerBottom = containerTop + this.containerOffsetSize;\n const top = this.rowHeightService.offset(index);\n const bottom = top + this.rowHeightService.height(index);\n return top >= containerTop && bottom <= containerBottom;\n }\n isListScrolled(index) {\n return this.containerScrollPosition !== this.rowHeightService.offset(index);\n }\n scrollTo(value) {\n const scrollProperty = this.direction === \"vertical\" ? 'scrollTop' : 'scrollLeft';\n this.renderer.setProperty(this.container.nativeElement, scrollProperty, value);\n }\n scrollToIndex(index) {\n //XXX: scrolling with tick is required to prevent list jump in Chrome.\n //Original issue: focus first day in the month and press LEFT arrow.\n //Notice how the view jumps on every day change.\n //\n this.zone.runOutsideAngular(() => {\n this.resolvedPromise.then(() => {\n this.scrollTo(this.rowHeightService.offset(index));\n });\n });\n }\n scrollToBottom() {\n this.scrollTo(this.totalSize);\n }\n animateToIndex(index) {\n if (this.animationSubscription) {\n this.animationSubscription.unsubscribe();\n }\n const indexOffset = this.rowHeightService.offset(index);\n const direction = this.getContainerScrollDirection(indexOffset);\n const { start, end } = this.scrollRange(indexOffset, direction);\n if (start === end) {\n return;\n }\n const step = this.scrollStep(start, end);\n const modifyScroll = scrollModifiers[direction](step);\n const normalizeScroll = scrollNormalizers[direction](end);\n const isScrollValid = scrollValidators[direction](modifyScroll(end));\n this.zone.runOutsideAngular(() => {\n this.animationSubscription =\n combineLatest(of(start), interval(0, animationFrameScheduler)).pipe(map(stream => stream[0]), scan(modifyScroll), takeWhile(isScrollValid), map(normalizeScroll)).subscribe((x) => this.scrollTo(x));\n });\n }\n scrollRange(indexOffset, direction) {\n const containerScroll = this.containerScrollPosition;\n if (parseInt(indexOffset, 10) === parseInt(containerScroll, 10)) {\n return { start: indexOffset, end: indexOffset };\n }\n const maxScroll = this.containerMaxScroll();\n const sign = direction === ScrollDirection.Backward ? 1 : -1;\n const difference = differenceToScroll(containerScroll, indexOffset, this.maxScrollDifference);\n const end = Math.min(indexOffset, maxScroll);\n const start = Math.min(Math.max(end + (sign * difference), 0), maxScroll);\n return { start, end };\n }\n scrollStep(start, end) {\n return Math.abs(end - start) / (this.scrollDuration / FRAME_DURATION);\n }\n scroll$() {\n return isDocumentAvailable() ? fromEvent(this.container.nativeElement, 'scroll') : EMPTY;\n }\n initServices() {\n this.rowHeightService = this.createRowHeightService();\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n this.scrollSubscription = this.scroller\n .create(this.rowHeightService, this.skip, this.take, this.total, this.topOffset, this.scrollOffsetSize, this.direction)\n .subscribe((x) => {\n if (x instanceof PageAction) {\n this.pageChange.emit(x);\n }\n else {\n this.scrollChange.emit(x);\n }\n });\n }\n createRowHeightService() {\n const dimension = this.direction === 'vertical' ? this.itemHeight : this.itemWidth;\n return new RowHeightService(this.total, dimension, 0);\n }\n emitActiveIndex() {\n const index = this.rowHeightService.index(this.containerScrollPosition - this.topOffset);\n if (this.lastActiveIndex !== index) {\n this.lastActiveIndex = index;\n this.activeIndexChange.emit(index);\n }\n }\n containerMaxScroll() {\n return this.containerScrollSize - this.containerOffsetSize;\n }\n getContainerScrollDirection(indexOffset) {\n return indexOffset < this.containerScrollPosition ? ScrollDirection.Backward : ScrollDirection.Forward;\n }\n}\nVirtualizationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: VirtualizationComponent, deps: [{ token: SCROLLER_FACTORY_TOKEN }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nVirtualizationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: VirtualizationComponent, selector: \"kendo-virtualization\", inputs: { direction: \"direction\", itemHeight: \"itemHeight\", itemWidth: \"itemWidth\", topOffset: \"topOffset\", bottomOffset: \"bottomOffset\", maxScrollDifference: \"maxScrollDifference\", scrollOffsetSize: \"scrollOffsetSize\", scrollDuration: \"scrollDuration\", skip: \"skip\", take: \"take\", total: \"total\" }, outputs: { activeIndexChange: \"activeIndexChange\", pageChange: \"pageChange\", scrollChange: \"scrollChange\" }, host: { properties: { \"class.k-flex\": \"this.wrapperClasses\", \"class.k-content\": \"this.wrapperClasses\", \"class.k-calendar-content\": \"this.wrapperClasses\", \"class.k-scrollable\": \"this.wrapperClasses\", \"class.k-scrollable-horizontal\": \"this.horizontalClass\" } }, providers: [{\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }], usesOnChanges: true, ngImport: i0, template: `\n \n \n `, isInline: true, directives: [{ type: i7.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: VirtualizationComponent, decorators: [{\n type: Component,\n args: [{\n providers: [{\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }],\n selector: 'kendo-virtualization',\n template: `\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [SCROLLER_FACTORY_TOKEN]\n }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { direction: [{\n type: Input\n }], itemHeight: [{\n type: Input\n }], itemWidth: [{\n type: Input\n }], topOffset: [{\n type: Input\n }], bottomOffset: [{\n type: Input\n }], maxScrollDifference: [{\n type: Input\n }], scrollOffsetSize: [{\n type: Input\n }], scrollDuration: [{\n type: Input\n }], skip: [{\n type: Input\n }], take: [{\n type: Input\n }], total: [{\n type: Input\n }], activeIndexChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], scrollChange: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-flex']\n }, {\n type: HostBinding,\n args: ['class.k-content']\n }, {\n type: HostBinding,\n args: ['class.k-calendar-content']\n }, {\n type: HostBinding,\n args: ['class.k-scrollable']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-scrollable-horizontal']\n }] } });\n\nconst div$1 = domContainerFactory('div');\nconst ul$1 = domContainerFactory('ul');\nconst li$1 = domContainerFactory('li');\nconst td = domContainerFactory('td');\nconst th = domContainerFactory('th');\nconst tr = domContainerFactory('tr');\nconst tbody = domContainerFactory('tbody');\nconst thead = domContainerFactory('thead');\nconst table = domContainerFactory('table');\nconst monthHeader = () => (div$1(`\n March 2017\n \n \n TODAY\n \n `, 'k-calendar-header k-hstack'));\nconst monthWeekHeader = () => (table([\n thead([\n tr([th('MO', 'k-calendar-th')], 'k-calendar-tr')\n ], 'k-calendar-thead')\n], 'k-calendar-weekdays k-calendar-table'));\nconst repeat = (count, mapper) => new Array(count).fill('1').map(mapper);\nconst content = (rows, cells = 1) => (table([\n tbody([tr([th('1', 'k-calendar-th')], 'k-calendar-tr')].concat(repeat(rows, () => tr(repeat(cells, c => td(`${c}`, 'k-calendar-td')), 'k-calendar-tr'))), 'k-calendar-tbody')\n], 'k-calendar-table'));\nconst scrollable$1 = (children) => div$1(children, 'k-flex k-content k-calendar-content k-scrollable');\nconst view = (contentElement, className, renderWeekHeader) => (div$1([\n monthHeader(),\n renderWeekHeader ? monthWeekHeader() : null,\n scrollable$1([contentElement, contentElement])\n], className, { left: '-10000px', position: 'absolute' }));\nconst navigationList = (() => {\n let navElement;\n return () => {\n if (!isDocumentAvailable) {\n return null;\n }\n if (!navElement) {\n navElement = div$1([scrollable$1([ul$1([li$1('FEB')])])], 'k-calendar-navigation', { left: '0px', position: 'absolute' });\n }\n return navElement;\n };\n})();\nconst viewFactory = ({ cells, rows }, className, renderWeekHeader) => {\n let viewElement;\n return () => {\n if (!isDocumentAvailable) {\n return null;\n }\n if (!viewElement) {\n viewElement = view(content(rows, cells), className, renderWeekHeader);\n }\n return viewElement;\n };\n};\nconst getScrollable = (element) => element.querySelector('.k-scrollable');\nconst horizontal = element => {\n const scrollableElement = getScrollable(element);\n scrollableElement.classList.add('k-scrollable-horizontal');\n return element;\n};\nconst monthView = viewFactory({ cells: 7, rows: 6 }, 'k-vstack k-calendar-view k-calendar-monthview', true);\nconst yearView = viewFactory({ cells: 4, rows: 3 }, 'k-vstack k-calendar-view k-calendar-yearview', false);\nconst decadeView = viewFactory({ cells: 4, rows: 3 }, 'k-vstack k-calendar-view k-calendar-decadeview', false);\nconst horzMonthView = () => horizontal(monthView());\nconst horzYearView = () => horizontal(yearView());\nconst horzDecadeView = () => horizontal(decadeView());\nconst height = (element) => (parseFloat(window.getComputedStyle(element).height) || element.offsetHeight);\nconst width = (element) => {\n const styles = window.getComputedStyle(element);\n const computed = parseFloat(styles.width)\n + parseFloat(styles.paddingLeft)\n + parseFloat(styles.paddingRight);\n return computed || element.offsetWidth;\n};\nconst getBody = (element) => element.querySelector('tbody');\n/**\n * @hidden\n */\nclass CalendarDOMService {\n ensureHeights() {\n if (this.calendarHeight !== undefined) {\n return;\n }\n this.calculateHeights();\n }\n calculateHeights(container) {\n if (!isDocumentAvailable()) {\n return;\n }\n this.hostContainer = container;\n this.batch(monthView(), (contentElement) => {\n const viewElement = getBody(contentElement);\n this.calendarHeight = height(contentElement);\n this.monthViewHeight = height(viewElement);\n this.headerHeight = height(viewElement.children[0]);\n this.scrollableContentHeight = height(getScrollable(contentElement));\n });\n this.batch(horzMonthView(), (contentElement) => {\n const viewElement = getBody(contentElement);\n this.calendarWidth = width(contentElement);\n this.monthViewWidth = width(viewElement);\n this.scrollableContentWidth = width(getScrollable(contentElement));\n });\n this.batch(yearView(), (contentElement) => {\n this.yearViewHeight = height(getBody(contentElement));\n this.scrollableYearContentHeight = height(getScrollable(contentElement));\n });\n this.batch(horzYearView(), (contentElement) => {\n this.yearViewWidth = width(getBody(contentElement));\n });\n this.batch(decadeView(), (contentElement) => {\n this.decadeViewHeight = height(getBody(contentElement));\n this.centuryViewHeight = this.decadeViewHeight;\n });\n this.batch(horzDecadeView(), (contentElement) => {\n this.decadeViewWidth = width(getBody(contentElement));\n this.centuryViewWidth = this.decadeViewWidth;\n });\n this.batch(navigationList(), (contentElement) => {\n this.navigationItemHeight = height(contentElement.querySelector('li'));\n });\n }\n viewHeight(viewType) {\n return this.viewDimension(viewType, 'height');\n }\n viewWidth(viewType) {\n return this.viewDimension(viewType, 'width');\n }\n viewDimension(viewType, dimension) {\n const viewProp = dimension === 'height' ? 'ViewHeight' : 'ViewWidth';\n switch (viewType) {\n case CalendarViewEnum.month:\n return this[`month${viewProp}`];\n case CalendarViewEnum.year:\n return this[`year${viewProp}`];\n case CalendarViewEnum.decade:\n return this[`decade${viewProp}`];\n case CalendarViewEnum.century:\n return this[`century${viewProp}`];\n default:\n return 1;\n }\n }\n batch(contentElement, action) {\n if (!isPresent(this.hostContainer)) {\n return;\n }\n const hostClone = this.hostContainer.cloneNode();\n document.body.appendChild(hostClone);\n try {\n const appendedContent = hostClone.appendChild(contentElement);\n action(appendedContent);\n }\n catch (error) {\n throw error;\n }\n finally {\n document.body.removeChild(hostClone);\n }\n }\n}\nCalendarDOMService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarDOMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nCalendarDOMService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarDOMService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarDOMService, decorators: [{\n type: Injectable\n }] });\n\n/* eslint-disable @angular-eslint/component-selector */\nconst ITEMS_COUNT = 30;\n/**\n * @hidden\n */\nclass NavigationComponent {\n constructor(bus, dom, intl, cdr, renderer) {\n this.bus = bus;\n this.dom = dom;\n this.intl = intl;\n this.cdr = cdr;\n this.renderer = renderer;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.focusedDate = new Date();\n this.valueChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.dates = [];\n this.take = ITEMS_COUNT;\n this.indexToScroll = -1;\n }\n get getComponentClass() {\n return true;\n }\n ngOnInit() {\n this.dom.ensureHeights();\n const calendarHeight = this.dom.calendarHeight;\n this.itemHeight = this.dom.navigationItemHeight;\n this.maxViewHeight = this.dom.monthViewHeight;\n this.topOffset = (calendarHeight - this.itemHeight) / 2;\n this.bottomOffset = calendarHeight - this.itemHeight;\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n this.activeViewValue = CalendarViewEnum[this.activeView];\n const viewDate = dateInRange(this.focusedDate, this.min, this.max);\n const total = this.service.total(this.min, this.max);\n const totalChanged = this.total && this.total !== total;\n this.skip = this.service.skip(viewDate, this.min);\n this.total = total;\n if (totalChanged || !this.service.isInArray(viewDate, this.dates)) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n }\n if (!!changes.focusedDate || totalChanged) {\n this.indexToScroll = this.service.skip(this.focusedDate, this.min);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n }\n ngAfterViewInit() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n ngAfterViewChecked() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n onPageChange({ skip }) {\n this.dates = this.service.datesList(this.service.addToDate(this.min, skip), this.getTake(skip));\n this.pageChange.emit();\n }\n scrollChange({ offset }) {\n const el = this.list.nativeElement;\n const translate = `translateY(${offset}px)`;\n this.renderer.setStyle(el, 'transform', translate);\n this.renderer.setStyle(el, '-ms-transform', translate);\n }\n handleDateChange(args) {\n const item = closestInScope(args.target, node => node.hasAttribute('data-date-index'), this.list.nativeElement);\n if (item) {\n const index = parseInt(item.getAttribute('data-date-index'), 10);\n const candidate = this.dates[index];\n this.valueChange.emit(cloneDate(candidate));\n }\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.take);\n }\n intlChange() {\n if (this.activeView === CalendarViewEnum.month) {\n this.cdr.markForCheck();\n }\n }\n}\nNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationComponent, deps: [{ token: BusViewService }, { token: CalendarDOMService }, { token: i1.IntlService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigationComponent, selector: \"kendo-calendar-navigation\", inputs: { activeView: \"activeView\", min: \"min\", max: \"max\", focusedDate: \"focusedDate\", templateRef: \"templateRef\" }, outputs: { valueChange: \"valueChange\", pageChange: \"pageChange\" }, host: { properties: { \"class.k-calendar-navigation\": \"this.getComponentClass\" } }, viewQueries: [{ propertyName: \"virtualization\", first: true, predicate: VirtualizationComponent, descendants: true }, { propertyName: \"list\", first: true, predicate: [\"list\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `\n \n \n
    \n
  • \n \n {{service.navigationTitle(date)}}\n \n \n
  • \n
\n \n `, isInline: true, components: [{ type: VirtualizationComponent, selector: \"kendo-virtualization\", inputs: [\"direction\", \"itemHeight\", \"itemWidth\", \"topOffset\", \"bottomOffset\", \"maxScrollDifference\", \"scrollOffsetSize\", \"scrollDuration\", \"skip\", \"take\", \"total\"], outputs: [\"activeIndexChange\", \"pageChange\", \"scrollChange\"] }], directives: [{ type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: KForOf, selector: \"[kFor][kForOf]\", inputs: [\"kForOf\", \"kForTrackBy\", \"kForTemplate\"] }, { type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i7.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-navigation',\n template: `\n \n \n
    \n
  • \n \n {{service.navigationTitle(date)}}\n \n \n
  • \n
\n \n `\n }]\n }], ctorParameters: function () { return [{ type: BusViewService }, { type: CalendarDOMService }, { type: i1.IntlService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { activeView: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent, { static: false }]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-navigation\"]\n }] } });\n\nconst VIEWS_COUNT = 5;\nconst isEqualMonthYear = (date1, date2) => (date1 && date2 &&\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth());\n/**\n * @hidden\n */\nclass ViewListComponent {\n constructor(bus, cdr, intl, dom, renderer) {\n this.bus = bus;\n this.cdr = cdr;\n this.intl = intl;\n this.dom = dom;\n this.renderer = renderer;\n this.isActive = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.selectedDates = [];\n this.cellClick = new EventEmitter();\n this.weekNumberCellClick = new EventEmitter();\n this.activeDateChange = new EventEmitter();\n this.todayButtonClick = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.getComponentClass = true;\n this.dates = [];\n this.cols = [];\n this.weekNames = [];\n this.take = VIEWS_COUNT;\n this.animateToIndex = true;\n this.indexToScroll = -1;\n this.minViewsToRender = 1;\n }\n get weekNumber() {\n return this.showWeekNumbers && this.isMonthView();\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n get getComponentMonthClass() {\n return this.activeView === CalendarViewEnum.month;\n }\n get getComponentYearClass() {\n return this.activeView === CalendarViewEnum.year;\n }\n get getComponentDecadeClass() {\n return this.activeView === CalendarViewEnum.decade;\n }\n get getComponentCenturyClass() {\n return this.activeView === CalendarViewEnum.century;\n }\n ngOnInit() {\n this.weekNames = this.getWeekNames();\n this.bottomOffset = this.getBottomOffset();\n this.viewOffset = -1 * this.dom.headerHeight;\n this.viewHeight = this.dom.viewHeight(this.activeView);\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n this.cols = new Array(this.service.rowLength({ prependCell: this.weekNumber })).fill('');\n this.colWidth = Math.round(100 / this.cols.length);\n this.weekNames = hasChange(changes, 'weekNumber') && this.weekNumber ? this.getWeekNames() : this.weekNames;\n const activeViewChanged = hasChange(changes, 'activeView');\n const focusedDate = this.focusedDate;\n const viewDate = dateInRange(this.service.viewDate(focusedDate, this.max, this.minViewsToRender), this.min, this.max);\n const total = this.service.total(this.min, this.max);\n const totalChanged = this.total && this.total !== total;\n const generateDates = totalChanged || !this.service.isInArray(focusedDate, this.dates);\n this.skip = this.service.skip(viewDate, this.min);\n this.total = total;\n this.animateToIndex = !activeViewChanged;\n this.bottomOffset = this.getBottomOffset();\n this.viewHeight = this.dom.viewHeight(this.activeView);\n if (generateDates) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n }\n if (!isEqualMonthYear(this.activeDate, focusedDate)) {\n this.activeDate = cloneDate(focusedDate);\n }\n const updateIndex = hasChange(changes, 'focusedDate') || activeViewChanged;\n if (generateDates || updateIndex || this.virtualization.isIndexVisible(this.skip)) {\n this.indexToScroll = this.service.skip(focusedDate, this.min);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n }\n ngAfterViewInit() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n ngAfterViewChecked() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization[this.animateToIndex ? 'animateToIndex' : 'scrollToIndex'](this.indexToScroll);\n this.animateToIndex = true;\n this.indexToScroll = -1;\n }\n onPageChange({ skip }) {\n this.dates = this.service.datesList(this.service.addToDate(this.min, skip), this.getTake(skip));\n this.pageChange.emit();\n }\n scrollChange({ offset }) {\n const el = this.list.nativeElement;\n const translate = `translateY(${offset}px)`;\n this.renderer.setStyle(el, 'transform', translate);\n this.renderer.setStyle(el, '-ms-transform', translate);\n }\n setActiveDate(index) {\n const candidate = this.service.addToDate(this.min, index);\n this.activeDate = candidate;\n this.activeDateChange.emit(candidate);\n this.cdr.detectChanges();\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n isScrolled() {\n return this.virtualization.isListScrolled(this.service.skip(this.focusedDate, this.min));\n }\n getBottomOffset() {\n return this.getScrollableHeight() - this.dom.viewHeight(this.activeView);\n }\n getScrollableHeight() {\n return this.activeView === CalendarViewEnum.month ?\n this.dom.scrollableContentHeight :\n this.dom.scrollableYearContentHeight;\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.take);\n }\n getWeekNames() {\n const weekNames = shiftWeekNames(this.intl.dateFormatNames({ nameType: 'short', type: 'days' }), this.intl.firstDay());\n return this.weekNumber ? [''].concat(weekNames) : weekNames;\n }\n intlChange() {\n this.weekNames = this.getWeekNames();\n if (this.isMonthView()) {\n this.cdr.markForCheck();\n }\n }\n}\nViewListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ViewListComponent, deps: [{ token: BusViewService }, { token: i0.ChangeDetectorRef }, { token: i1.IntlService }, { token: CalendarDOMService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nViewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ViewListComponent, selector: \"kendo-calendar-viewlist\", inputs: { cellTemplateRef: \"cellTemplateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\", headerTitleTemplateRef: \"headerTitleTemplateRef\", activeView: \"activeView\", cellUID: \"cellUID\", focusedDate: \"focusedDate\", isActive: \"isActive\", min: \"min\", max: \"max\", selectedDates: \"selectedDates\", weekNumber: \"weekNumber\" }, outputs: { cellClick: \"cellClick\", weekNumberCellClick: \"weekNumberCellClick\", activeDateChange: \"activeDateChange\", todayButtonClick: \"todayButtonClick\", pageChange: \"pageChange\" }, host: { properties: { \"class.k-vstack\": \"this.getComponentClass\", \"class.k-calendar-view\": \"this.getComponentClass\", \"class.k-calendar-monthview\": \"this.getComponentMonthClass\", \"class.k-calendar-yearview\": \"this.getComponentYearClass\", \"class.k-calendar-decadeview\": \"this.getComponentDecadeClass\", \"class.k-calendar-centuryview\": \"this.getComponentCenturyClass\" } }, viewQueries: [{ propertyName: \"virtualization\", first: true, predicate: VirtualizationComponent, descendants: true }, { propertyName: \"list\", first: true, predicate: [\"list\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n
{{name}}
\n \n \n \n\n \n \n \n `, isInline: true, components: [{ type: HeaderComponent, selector: \"kendo-calendar-header\", inputs: [\"activeView\", \"currentDate\", \"min\", \"max\", \"rangeLength\", \"templateRef\", \"isPrevDisabled\", \"isNextDisabled\", \"showNavigationButtons\", \"orientation\"], outputs: [\"todayButtonClick\", \"prevButtonClick\", \"nextButtonClick\"] }, { type: VirtualizationComponent, selector: \"kendo-virtualization\", inputs: [\"direction\", \"itemHeight\", \"itemWidth\", \"topOffset\", \"bottomOffset\", \"maxScrollDifference\", \"scrollOffsetSize\", \"scrollDuration\", \"skip\", \"take\", \"total\"], outputs: [\"activeIndexChange\", \"pageChange\", \"scrollChange\"] }, { type: ViewComponent, selector: \"[kendoCalendarView]\", inputs: [\"direction\", \"isActive\", \"activeView\", \"cellUID\", \"focusedDate\", \"viewDate\", \"activeRangeEnd\", \"selectionRange\", \"min\", \"max\", \"selectedDates\", \"weekNumber\", \"viewIndex\", \"templateRef\", \"weekNumberTemplateRef\"], outputs: [\"cellClick\", \"weekNumberCellClick\", \"cellEnter\", \"cellLeave\"] }], directives: [{ type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i7.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: KForOf, selector: \"[kFor][kForOf]\", inputs: [\"kForOf\", \"kForTrackBy\", \"kForTemplate\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ViewListComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-viewlist',\n template: `\n \n \n \n \n \n \n \n \n
{{name}}
\n \n \n \n\n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: BusViewService }, { type: i0.ChangeDetectorRef }, { type: i1.IntlService }, { type: CalendarDOMService }, { type: i0.Renderer2 }]; }, propDecorators: { cellTemplateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }], headerTitleTemplateRef: [{\n type: Input\n }], activeView: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], isActive: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], selectedDates: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], cellClick: [{\n type: Output\n }], weekNumberCellClick: [{\n type: Output\n }], activeDateChange: [{\n type: Output\n }], todayButtonClick: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent, { static: false }]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-vstack\"]\n }, {\n type: HostBinding,\n args: [\"class.k-calendar-view\"]\n }], getComponentMonthClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-monthview\"]\n }], getComponentYearClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-yearview\"]\n }], getComponentDecadeClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-decadeview\"]\n }], getComponentCenturyClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-centuryview\"]\n }] } });\n\nconst divideByMagnitude = (magnitude) => x => Math.floor(x / magnitude);\nconst powerByMagnitude = (magnitude) => x => x * magnitude;\n/**\n * @hidden\n */\nclass ScrollSyncService {\n constructor(dom, zone) {\n this.dom = dom;\n this.zone = zone;\n }\n configure(activeView) {\n const magnitude = Math.max(this.dom.viewHeight(activeView) / this.dom.navigationItemHeight, 1);\n this.divideByMagnitude = divideByMagnitude(magnitude);\n this.powerByMagnitude = powerByMagnitude(magnitude);\n }\n sync(navigator, view) {\n this.unsubscribe();\n if (!navigator || !view) {\n return;\n }\n this.navigator = navigator;\n this.view = view;\n this.zone.runOutsideAngular(() => {\n let navScrolled, monthScrolled;\n this.navSubscription = navigator.scroll$()\n .subscribe((e) => {\n if (monthScrolled) {\n monthScrolled = false;\n return;\n }\n navScrolled = true;\n this.scrollSiblingOf(e.target);\n });\n this.viewSubscription = view.scroll$()\n .subscribe((e) => {\n if (navScrolled) {\n navScrolled = false;\n return;\n }\n monthScrolled = true;\n this.scrollSiblingOf(e.target);\n });\n });\n }\n scrollSiblingOf(scrolledElement) {\n const component = this.siblingComponent(scrolledElement);\n const scrollTop = this.calculateScroll(component, scrolledElement.scrollTop);\n component.scrollTo(scrollTop);\n }\n siblingComponent(scrollableElement) {\n return this.navigator.container.nativeElement === scrollableElement ? this.view : this.navigator;\n }\n calculateScroll(component, scrollTop) {\n const modifier = component === this.navigator ? this.divideByMagnitude : this.powerByMagnitude;\n return modifier(scrollTop);\n }\n destroy() {\n this.unsubscribe();\n }\n unsubscribe() {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n if (this.viewSubscription) {\n this.viewSubscription.unsubscribe();\n }\n }\n}\nScrollSyncService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollSyncService, deps: [{ token: CalendarDOMService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nScrollSyncService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollSyncService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollSyncService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: CalendarDOMService }, { type: i0.NgZone }]; } });\n\n/**\n * Used for rendering the navigation item of the Calendar. To define the navigation item template, nest an ``\n * tag with the `kendoCalendarNavigationItemTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current item value, use the `let-title` directive. To provide more details\n * about the current title, get a reference to the current `date` by using the `let-date='date'` directive or get a reference\n * to the current active view by using the `let-activeView='activeView'` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{title}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass NavigationItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNavigationItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationItemTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nNavigationItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NavigationItemTemplateDirective, selector: \"[kendoCalendarNavigationItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarNavigationItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @hidden\n */\nclass PickerService {\n constructor() {\n this.onFocus = new EventEmitter();\n this.onBlur = new EventEmitter();\n this.sameDateSelected = new EventEmitter();\n this.dateCompletenessChange = new EventEmitter();\n }\n}\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass MultiViewCalendarCustomMessagesComponent extends Messages$1 {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nMultiViewCalendarCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarCustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nMultiViewCalendarCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiViewCalendarCustomMessagesComponent, selector: \"kendo-multiviewcalendar-messages\", providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => MultiViewCalendarCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => MultiViewCalendarCustomMessagesComponent)\n }\n ],\n selector: 'kendo-multiviewcalendar-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\n/**\n * @hidden\n */\nclass CalendarMessages extends ComponentMessages {\n}\nCalendarMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nCalendarMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CalendarMessages, selector: \"kendo-calendar-messages-base\", inputs: { today: \"today\", prevButtonTitle: \"prevButtonTitle\", nextButtonTitle: \"nextButtonTitle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line\n selector: 'kendo-calendar-messages-base'\n }]\n }], propDecorators: { today: [{\n type: Input\n }], prevButtonTitle: [{\n type: Input\n }], nextButtonTitle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass CalendarLocalizedMessagesDirective extends CalendarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nCalendarLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarLocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nCalendarLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CalendarLocalizedMessagesDirective, selector: \"[kendoCalendarLocalizedMessages]\", providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarLocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarLocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarLocalizedMessagesDirective)\n }\n ],\n selector: '[kendoCalendarLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst BOTTOM_VIEW_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-bottomview';\nconst TOP_VIEW_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-topview';\nconst MIN_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-min';\nconst MAX_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-max';\nconst VALUE_DOC_LINK$4 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/#toc-using-with-json';\nconst virtualizationProp = x => x ? x.virtualization : null;\n/**\n * @hidden\n */\nconst CALENDAR_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent)\n};\n/**\n * @hidden\n */\nconst CALENDAR_RANGE_VALIDATORS = {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent)\n};\n/**\n * @hidden\n */\nconst KENDO_INPUT_PROVIDER = {\n provide: KendoInput,\n useExisting: forwardRef(() => CalendarComponent)\n};\n/**\n * Represents the [Kendo UI Calendar component for Angular]({% slug overview_calendar %}#toc-basic-usage).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass CalendarComponent {\n constructor(bus, dom, element, navigator, renderer, cdr, ngZone, injector, scrollSyncService, disabledDatesService, localization, selectionService, pickerService) {\n this.bus = bus;\n this.dom = dom;\n this.element = element;\n this.navigator = navigator;\n this.renderer = renderer;\n this.cdr = cdr;\n this.ngZone = ngZone;\n this.injector = injector;\n this.scrollSyncService = scrollSyncService;\n this.disabledDatesService = disabledDatesService;\n this.localization = localization;\n this.selectionService = selectionService;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.id = guid();\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = false;\n /**\n * Sets the Calendar selection mode\n * ([see example]({% slug multiple_selection_calendar %})).\n *\n * The available values are:\n * * `single` (default)\n * * `multiple`\n */\n this.selection = 'single';\n /**\n * Sets or gets the `disabled` property of the Calendar and\n * determines whether the component is active\n * ([see example]({% slug disabled_calendar %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the `tabindex` property of the Calendar. Based on the\n * [HTML `tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) behavior,\n * it determines whether the component is focusable.\n */\n this.tabindex = 0;\n /**\n * Sets or gets the `navigation` property of the Calendar\n * and determines whether the navigation side-bar will be displayed\n * ([see example]({% slug sidebar_calendar %})).\n * Applies to the [`infinite`]({% slug api_dateinputs_calendarcomponent %}#toc-type) Calendar only.\n */\n this.navigation = true;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_calendar %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost view to which the user can navigate\n * ([see example]({% slug dates_calendar %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost view to which the user can navigate\n * ([see example]({% slug sidebar_calendar %}#toc-partial-dates)).\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Determines whether to enable animation when navigating to previous/next view.\n * Applies to the [`classic`]({% slug api_dateinputs_calendarcomponent %}#toc-type) Calendar only.\n *\n * > This feature uses the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). In order to run the animation in browsers that do not support it, you need the `web-animations-js` polyfill.\n *\n * @default false\n */\n this.animateNavigation = false;\n /**\n * Determines whether to display a week number column in the `month` view\n * ([see example]({% slug weeknumcolumn_calendar %})).\n */\n this.weekNumber = false;\n /**\n * Fires when the active view is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.activeViewChange = new EventEmitter();\n /**\n * Fires when navigating in the currently active view\n * ([more information and example]({% slug events_calendar %})).\n */\n this.navigate = new EventEmitter();\n /**\n * Fires when the active view date is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n * Applies to the [`infinite`]({% slug api_dateinputs_calendarcomponent %}#toc-type) Calendar only.\n */\n this.activeViewDateChange = new EventEmitter();\n /**\n * Fires when the value is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n this.isActive = false;\n this.cellUID = guid();\n this.selectedDates = [];\n this._min = new Date(MIN_DATE);\n this._max = new Date(MAX_DATE);\n this._focusedDate = getToday();\n this.onControlChange = noop$2;\n this.onControlTouched = noop$2;\n this.onValidatorChange = noop$2;\n this.minValidateFn = noop$2;\n this.maxValidateFn = noop$2;\n this.syncNavigation = true;\n this._type = 'infinite';\n this.domEvents = [];\n this.resolvedPromise = Promise.resolve(null);\n this.destroyed = false;\n validatePackage(packageMetadata);\n this.setClasses(element.nativeElement);\n if (this.pickerService) {\n this.pickerService.calendar = this;\n }\n }\n /**\n * Sets or gets the `focusedDate` property of the Calendar and\n * defines the focused date of the component\n * ([see example]({% slug dates_calendar %}#toc-focused-dates)).\n *\n * > If the Calendar is out of the min or max range, it normalizes the defined `focusedDate`.\n */\n set focusedDate(focusedDate) {\n if (this.activeViewDate && !isEqual(this._focusedDate, focusedDate)) {\n const service = this.bus.service(this.activeViewEnum);\n const lastDayInPeriod = service.lastDayOfPeriod(this.activeViewDate);\n const isFocusedDateInRange = service.isInRange(focusedDate, this.activeViewDate, lastDayInPeriod);\n if (!isFocusedDateInRange) {\n this.emitNavigate(focusedDate);\n }\n }\n this._focusedDate = focusedDate || getToday();\n this.setAriaActivedescendant();\n }\n get focusedDate() {\n return this._focusedDate;\n }\n /**\n * Sets or gets the `min` property of the Calendar and\n * defines the minimum allowed date value\n * ([see example]({% slug dateranges_calendar %})).\n * By default, the `min` value is `1900-1-1`.\n */\n set min(min) {\n this._min = min || new Date(MIN_DATE);\n }\n get min() {\n return this._min;\n }\n /**\n * Sets or gets the `max` property of the Calendar and\n * defines the maximum allowed date value\n * ([see example]({% slug dateranges_calendar %})).\n * By default, the `max` value is `2099-12-31`.\n */\n set max(max) {\n this._max = max || new Date(MAX_DATE);\n }\n get max() {\n return this._max;\n }\n /**\n * Sets or gets the `value` property of the Calendar and defines the selected value of the component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date)\n * instance when in `single` selection mode or an array of valid JavaScript Date instances when in `multiple` selection mode.\n */\n get value() {\n return this._value;\n }\n set value(candidate) {\n this.verifyValue(candidate);\n this._value = Array.isArray(candidate) ?\n candidate.filter(date => isPresent(date)).map(element => cloneDate(element)) :\n cloneDate(candidate);\n const selection = [].concat(candidate).filter(date => isPresent(date)).map(date => cloneDate(date));\n if (!areDatesEqual(selection, this.selectedDates)) {\n const lastSelected = last(selection);\n this.rangePivot = cloneDate(lastSelected);\n this.focusedDate = cloneDate(lastSelected) || this.focusedDate;\n this.selectedDates = selection;\n }\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the Calendar that will be disabled\n * ([see example]({% slug disabled_dates_calendar %})).\n */\n set disabledDates(value) {\n this.disabledDatesService.initialize(value);\n this._disabledDates = value;\n }\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * Specifies the Calendar type.\n *\n * The possible values are:\n * - `infinite` (default)\n * - `classic`\n *\n */\n set type(type) {\n this.renderer.removeClass(this.element.nativeElement, `k-calendar-${this.type}`);\n this.renderer.addClass(this.element.nativeElement, `k-calendar-${type}`);\n this._type = type;\n }\n get type() {\n return this._type;\n }\n /**\n * @hidden\n *\n * Defines the template for each cell.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set cellTemplateRef(template) {\n this._cellTemplateRef = template;\n }\n get cellTemplateRef() {\n return this._cellTemplateRef || this.cellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each month cell.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set monthCellTemplateRef(template) {\n this._monthCellTemplateRef = template;\n }\n get monthCellTemplateRef() {\n return this._monthCellTemplateRef || this.monthCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each year cell.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set yearCellTemplateRef(template) {\n this._yearCellTemplateRef = template;\n }\n get yearCellTemplateRef() {\n return this._yearCellTemplateRef || this.yearCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each decade cell.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set decadeCellTemplateRef(template) {\n this._decadeCellTemplateRef = template;\n }\n get decadeCellTemplateRef() {\n return this._decadeCellTemplateRef || this.decadeCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for each century cell.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set centuryCellTemplateRef(template) {\n this._centuryCellTemplateRef = template;\n }\n get centuryCellTemplateRef() {\n return this._centuryCellTemplateRef || this.centuryCellTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for the week cell.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set weekNumberTemplateRef(template) {\n this._weekNumberTemplateRef = template;\n }\n get weekNumberTemplateRef() {\n return this._weekNumberTemplateRef || this.weekNumberTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for the header title.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set headerTitleTemplateRef(template) {\n this._headerTitleTemplateRef = template;\n }\n get headerTitleTemplateRef() {\n return this._headerTitleTemplateRef || this.headerTitleTemplate;\n }\n /**\n * @hidden\n *\n * Defines the template for the navigation item.\n * Takes precedence over nested templates in the KendoCalendar tag.\n */\n set navigationItemTemplateRef(template) {\n this._navigationItemTemplateRef = template;\n }\n get navigationItemTemplateRef() {\n return this._navigationItemTemplateRef || this.navigationItemTemplate;\n }\n get activeViewEnum() {\n const activeView = CalendarViewEnum[this.activeView];\n return activeView < this.bottomViewEnum ? this.bottomViewEnum : activeView;\n }\n get bottomViewEnum() {\n return CalendarViewEnum[this.bottomView];\n }\n get topViewEnum() {\n return CalendarViewEnum[this.topView];\n }\n get widgetId() {\n return this.id;\n }\n get calendarTabIndex() {\n // in Classic mode, the inner MultiViewCalendar is the focusable element\n return this.disabled || this.type === 'classic' ? undefined : this.tabIndex;\n }\n get ariaDisabled() {\n // in Classic mode, the inner MultiViewCalendar should handle the disabled class and aria attr\n return this.type === 'classic' ? undefined : this.disabled;\n }\n ngOnInit() {\n this.dom.calculateHeights(this.element.nativeElement);\n this.scrollSyncService.configure(this.activeViewEnum);\n this.localizationChangeSubscription = this.localization.changes.subscribe(() => this.cdr.markForCheck());\n this.viewChangeSubscription = this.bus.viewChanged.subscribe(({ view }) => this.handleActiveViewChange(CalendarViewEnum[view]));\n this.control = this.injector.get(NgControl, null);\n if (this.element) {\n this.ngZone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnChanges(changes) {\n this.verifyChanges();\n this.bus.configure(this.bottomViewEnum, this.topViewEnum);\n this.scrollSyncService.configure(this.activeViewEnum);\n if (hasExistingValue(changes, 'focusedDate')) {\n const focusedDate = changes.focusedDate.currentValue;\n this.focusedDate = dateInRange(focusedDate, this.min, this.max);\n }\n if (changes.navigation) {\n this.syncNavigation = true;\n }\n if (changes.min || changes.max || changes.rangeValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop$2;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop$2;\n this.onValidatorChange();\n }\n }\n ngAfterViewInit() {\n this.setAriaActivedescendant();\n }\n ngAfterViewChecked() {\n if (!this.syncNavigation) {\n return;\n }\n this.syncNavigation = false;\n this.scrollSyncService.sync(virtualizationProp(this.navigationView), virtualizationProp(this.monthView));\n }\n ngOnDestroy() {\n this.scrollSyncService.destroy();\n this.domEvents.forEach(unbindCallback => unbindCallback());\n if (this.pickerService) {\n this.pickerService.calendar = null;\n }\n if (this.viewChangeSubscription) {\n this.viewChangeSubscription.unsubscribe();\n }\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n this.destroyed = true;\n }\n /**\n * @hidden\n */\n onResize() {\n this.focusedDate = new Date(this.focusedDate);\n this.cdr.detectChanges();\n }\n /**\n * Focuses the host element of the Calendar.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n const focusTarget = this.type === 'infinite' ?\n this.element && this.element.nativeElement :\n this.multiViewCalendar;\n if (isPresent(focusTarget)) {\n focusTarget.focus();\n }\n }\n /**\n * Blurs the Calendar component.\n */\n blur() {\n const blurTarget = this.type === 'infinite' ?\n this.element && this.element.nativeElement :\n this.multiViewCalendar;\n if (isPresent(blurTarget)) {\n blurTarget.blur();\n }\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n /**\n * @hidden\n */\n handleNavigation(candidate) {\n if (this.disabled) {\n return;\n }\n const focusTarget = candidate ? new Date(cloneDate(candidate).setDate(1)) : this.focusedDate;\n this.focusedDate = dateInRange(focusTarget, this.min, this.max);\n this.detectChanges();\n }\n /**\n * @hidden\n */\n onPageChange() {\n if (!NgZone.isInAngularZone()) {\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n this.pageChangeSubscription = from(this.resolvedPromise)\n .subscribe(() => {\n this.detectChanges(); // requires zone if templates\n });\n }\n }\n /**\n * @hidden\n */\n handleMultiViewCalendarValueChange(date, focusedDate) {\n const selectedDates = Array.isArray(date) ? date : [date];\n this.handleDateChange({ selectedDates, focusedDate });\n }\n /**\n * @hidden\n */\n handleDateChange(args) {\n const selectedDates = Array.isArray(args.selectedDates) ? args.selectedDates : [args.selectedDates];\n const canNavigateDown = this.bus.canMoveDown(this.activeViewEnum);\n const availableDates = selectedDates.filter(date => !this.disabledDatesService.isDateDisabled(date));\n this.focusedDate = args.focusedDate || this.focusedDate;\n if (this.disabled) {\n return;\n }\n if (!canNavigateDown && areDatesEqual(availableDates, this.selectedDates)) {\n this.emitSameDate();\n return;\n }\n if (canNavigateDown) {\n this.bus.moveDown(this.activeViewEnum);\n return;\n }\n if (this.disabledDatesService.isDateDisabled(this.focusedDate)) {\n return;\n }\n this.ngZone.run(() => {\n this.selectedDates = availableDates.map(date => cloneDate(date));\n this.value = this.parseSelectionToValue(availableDates);\n this.onControlChange(this.parseSelectionToValue(availableDates));\n this.valueChange.emit(this.parseSelectionToValue(availableDates));\n this.cdr.markForCheck();\n });\n }\n /**\n * @hidden\n */\n writeValue(candidate) {\n this.verifyValue(candidate);\n this.value = candidate;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n activeCellTemplate() {\n switch (this.activeViewEnum) {\n case CalendarViewEnum.month:\n return this.monthCellTemplateRef || this.cellTemplateRef;\n case CalendarViewEnum.year:\n return this.yearCellTemplateRef;\n case CalendarViewEnum.decade:\n return this.decadeCellTemplateRef;\n case CalendarViewEnum.century:\n return this.centuryCellTemplateRef;\n default:\n return null;\n }\n }\n /**\n * @hidden\n */\n handleNavigate(event) {\n this.focusedDate = event.focusedDate;\n this.activeView = event.activeView;\n this.emitNavigate(this.focusedDate);\n }\n /**\n * @hidden\n */\n emitNavigate(focusedDate) {\n const activeView = CalendarViewEnum[this.activeViewEnum];\n this.navigate.emit({ activeView, focusedDate });\n }\n /**\n * @hidden\n */\n emitEvent(emitter, args) {\n if (hasObservers(emitter)) {\n this.ngZone.run(() => {\n emitter.emit(args);\n });\n }\n }\n /**\n * @hidden\n */\n handleActiveDateChange(date) {\n this.activeViewDate = date;\n this.emitEvent(this.activeViewDateChange, date);\n }\n /**\n * @hidden\n */\n handleActiveViewChange(view) {\n this.activeView = view;\n this.emitEvent(this.activeViewChange, view);\n if (this.type === 'infinite') {\n this.scrollSyncService.configure(this.activeViewEnum);\n }\n this.detectChanges(); // requires zone if templates\n }\n /**\n * @hidden\n */\n handleCellClick({ date, modifiers }) {\n this.performSelection(date, modifiers);\n }\n /**\n * @hidden\n */\n handleWeekNumberClick(dates) {\n if (this.selection === 'single') {\n return;\n }\n this.ngZone.run(() => {\n this.handleDateChange({\n selectedDates: dates,\n focusedDate: last(dates)\n });\n });\n }\n /**\n * @hidden\n */\n handleBlur(args) {\n if (this.element.nativeElement.contains(args.relatedTarget)) {\n return;\n }\n this.isActive = false;\n // the injector can get the NgControl instance of the parent component (for example, the DateTimePicker)\n // and enters the zone for no reason because the parent component is still untouched\n if (!this.pickerService && requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.onControlTouched();\n this.emitBlur(args);\n this.cdr.markForCheck();\n });\n }\n else {\n this.emitBlur(args);\n this.detectChanges();\n }\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isActive = true;\n if (!NgZone.isInAngularZone()) {\n this.detectChanges();\n }\n this.emitFocus();\n }\n /**\n * @hidden\n */\n handleMultiViewCalendarKeydown(args) {\n // Prevent form from submitting on enter if used in datepicker (classic view)\n if (isPresent(this.pickerService) && args.keyCode === Keys.Enter) {\n args.preventDefault();\n }\n }\n setClasses(element) {\n this.renderer.addClass(element, 'k-widget');\n this.renderer.addClass(element, 'k-calendar');\n this.renderer.addClass(element, `k-calendar-${this.type}`);\n }\n verifyChanges() {\n if (!isDevMode()) {\n return;\n }\n if (this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$2} and ${MAX_DOC_LINK$2}.`);\n }\n if (this.bottomViewEnum > this.topViewEnum) {\n throw new Error(`The topView should be greater than bottomView. See ${BOTTOM_VIEW_DOC_LINK} and ${TOP_VIEW_DOC_LINK}.`);\n }\n }\n verifyValue(candidate) {\n if (!isDevMode()) {\n return;\n }\n if (this.selection === 'single' && candidate && !(candidate instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$4} for possible resolution.`);\n }\n else if (this.selection === 'multiple' && candidate && Array.isArray(candidate)) {\n const onlyDates = candidate.every(value => value instanceof Date);\n if (!onlyDates) {\n throw new Error(`The 'value' should be an array of valid JavaScript Date instances. Check ${VALUE_DOC_LINK$4} for possible resolution.`);\n }\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'blur', this.handleBlur.bind(this)), this.renderer.listen(element, 'focus', this.handleFocus.bind(this)), this.renderer.listen(element, 'mousedown', preventDefault), this.renderer.listen(element, 'click', this.handleComponentClick.bind(this)), this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n }\n emitBlur(args) {\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n emitFocus() {\n if (this.pickerService) {\n this.pickerService.onFocus.emit();\n }\n }\n handleComponentClick() {\n if (!this.isActive) {\n if (this.type === 'infinite' && this.monthView.isScrolled()) {\n this.focusedDate = cloneDate(this.focusedDate); //XXX: forces change detect\n this.detectChanges();\n }\n this.focus();\n }\n }\n handleKeydown(args) {\n const headerActive = this.type === 'classic' && this.multiViewCalendar.isHeaderActive;\n if (headerActive) {\n return;\n }\n // reserve the alt + arrow key commands for the picker\n const arrowKeyPressed = [Keys.ArrowUp, Keys.ArrowRight, Keys.ArrowDown, Keys.ArrowLeft].indexOf(args.keyCode) !== -1;\n if (isPresent(this.pickerService) && arrowKeyPressed && args.altKey) {\n return;\n }\n // Prevent form from submitting on enter if used in datepicker (infinite view)\n if (isPresent(this.pickerService) && args.keyCode === Keys.Enter) {\n args.preventDefault();\n }\n const candidate = dateInRange(this.navigator.move(this.focusedDate, this.navigator.action(args), this.activeViewEnum), this.min, this.max);\n if (!isEqual(this.focusedDate, candidate)) {\n this.focusedDate = candidate;\n this.detectChanges();\n args.preventDefault();\n }\n if (args.keyCode === Keys.Enter) {\n this.performSelection(this.focusedDate, args);\n }\n }\n detectChanges() {\n if (!this.destroyed) {\n this.cdr.detectChanges();\n }\n }\n emitSameDate() {\n if (this.pickerService) {\n this.pickerService.sameDateSelected.emit();\n }\n }\n setAriaActivedescendant() {\n // in Classic mode, the inner MultiViewCalendar handles the activedescendant\n if (!isPresent(this.element) || (this.type === 'classic' && !this.element.nativeElement.hasAttribute('aria-activedescendant'))) {\n return;\n }\n if (this.type === 'classic') {\n this.renderer.removeAttribute(this.element.nativeElement, 'aria-activedescendant');\n return;\n }\n const focusedCellId = this.cellUID + this.focusedDate.getTime();\n this.renderer.setAttribute(this.element.nativeElement, 'aria-activedescendant', focusedCellId);\n }\n parseSelectionToValue(selection) {\n selection = selection || [];\n return this.selection === 'single' ? cloneDate(last(selection)) : selection.map(date => cloneDate(date));\n }\n performSelection(date, selectionModifiers) {\n const selection = this.selectionService.performSelection({\n date: date,\n modifiers: selectionModifiers,\n selectionMode: this.selection,\n activeViewEnum: this.activeViewEnum,\n rangePivot: this.rangePivot,\n selectedDates: this.selectedDates\n });\n this.rangePivot = selection.rangePivot;\n this.handleDateChange({\n selectedDates: selection.selectedDates,\n focusedDate: date\n });\n }\n}\nCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarComponent, deps: [{ token: BusViewService }, { token: CalendarDOMService }, { token: i0.ElementRef }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Injector }, { token: ScrollSyncService }, { token: DisabledDatesService }, { token: i1$1.LocalizationService }, { token: SelectionService }, { token: PickerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CalendarComponent, selector: \"kendo-calendar\", inputs: { id: \"id\", focusedDate: \"focusedDate\", min: \"min\", max: \"max\", rangeValidation: \"rangeValidation\", selection: \"selection\", value: \"value\", disabled: \"disabled\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", navigation: \"navigation\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", type: \"type\", animateNavigation: \"animateNavigation\", weekNumber: \"weekNumber\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], navigationItemTemplateRef: [\"navigationItemTemplate\", \"navigationItemTemplateRef\"] }, outputs: { activeViewChange: \"activeViewChange\", navigate: \"navigate\", activeViewDateChange: \"activeViewDateChange\", valueChange: \"valueChange\" }, host: { properties: { \"class.k-week-number\": \"this.weekNumber\", \"attr.id\": \"this.widgetId\", \"attr.tabindex\": \"this.calendarTabIndex\", \"attr.aria-disabled\": \"this.ariaDisabled\", \"class.k-disabled\": \"this.ariaDisabled\" } }, providers: [\n BusViewService,\n CALENDAR_VALUE_ACCESSOR,\n CALENDAR_RANGE_VALIDATORS,\n KENDO_INPUT_PROVIDER,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.calendar'\n },\n NavigationService,\n ScrollSyncService,\n SelectionService\n ], queries: [{ propertyName: \"cellTemplate\", first: true, predicate: CellTemplateDirective, descendants: true }, { propertyName: \"monthCellTemplate\", first: true, predicate: MonthCellTemplateDirective, descendants: true }, { propertyName: \"yearCellTemplate\", first: true, predicate: YearCellTemplateDirective, descendants: true }, { propertyName: \"decadeCellTemplate\", first: true, predicate: DecadeCellTemplateDirective, descendants: true }, { propertyName: \"centuryCellTemplate\", first: true, predicate: CenturyCellTemplateDirective, descendants: true }, { propertyName: \"weekNumberTemplate\", first: true, predicate: WeekNumberCellTemplateDirective, descendants: true }, { propertyName: \"headerTitleTemplate\", first: true, predicate: HeaderTitleTemplateDirective, descendants: true }, { propertyName: \"navigationItemTemplate\", first: true, predicate: NavigationItemTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"navigationView\", first: true, predicate: NavigationComponent, descendants: true }, { propertyName: \"monthView\", first: true, predicate: ViewListComponent, descendants: true }, { propertyName: \"multiViewCalendar\", first: true, predicate: MultiViewCalendarComponent, descendants: true }], exportAs: [\"kendo-calendar\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `, isInline: true, components: [{ type: NavigationComponent, selector: \"kendo-calendar-navigation\", inputs: [\"activeView\", \"min\", \"max\", \"focusedDate\", \"templateRef\"], outputs: [\"valueChange\", \"pageChange\"] }, { type: ViewListComponent, selector: \"kendo-calendar-viewlist\", inputs: [\"cellTemplateRef\", \"weekNumberTemplateRef\", \"headerTitleTemplateRef\", \"activeView\", \"cellUID\", \"focusedDate\", \"isActive\", \"min\", \"max\", \"selectedDates\", \"weekNumber\"], outputs: [\"cellClick\", \"weekNumberCellClick\", \"activeDateChange\", \"todayButtonClick\", \"pageChange\"] }, { type: i5.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }, { type: MultiViewCalendarComponent, selector: \"kendo-multiviewcalendar\", inputs: [\"id\", \"focusedDate\", \"min\", \"max\", \"rangeValidation\", \"disabledDatesRangeValidation\", \"selection\", \"value\", \"disabled\", \"tabindex\", \"tabIndex\", \"isActive\", \"disabledDates\", \"activeView\", \"bottomView\", \"topView\", \"showViewHeader\", \"animateNavigation\", \"weekNumber\", \"activeRangeEnd\", \"selectionRange\", \"views\", \"orientation\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\"], outputs: [\"activeViewChange\", \"navigate\", \"cellEnter\", \"cellLeave\", \"valueChange\", \"blur\"], exportAs: [\"kendo-multiviewcalendar\"] }, { type: MultiViewCalendarCustomMessagesComponent, selector: \"kendo-multiviewcalendar-messages\" }], directives: [{ type: CalendarLocalizedMessagesDirective, selector: \"[kendoCalendarLocalizedMessages]\" }, { type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-calendar',\n providers: [\n BusViewService,\n CALENDAR_VALUE_ACCESSOR,\n CALENDAR_RANGE_VALIDATORS,\n KENDO_INPUT_PROVIDER,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.calendar'\n },\n NavigationService,\n ScrollSyncService,\n SelectionService\n ],\n selector: 'kendo-calendar',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: BusViewService }, { type: CalendarDOMService }, { type: i0.ElementRef }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Injector }, { type: ScrollSyncService }, { type: DisabledDatesService }, { type: i1$1.LocalizationService }, { type: SelectionService }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { id: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], selection: [{\n type: Input\n }], value: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], navigation: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], type: [{\n type: Input\n }], animateNavigation: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.k-week-number']\n }], activeViewChange: [{\n type: Output\n }], navigate: [{\n type: Output\n }], activeViewDateChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: false }]\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: false }]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: false }]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: false }]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: false }]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: false }]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: false }]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], navigationItemTemplate: [{\n type: ContentChild,\n args: [NavigationItemTemplateDirective, { static: false }]\n }], navigationItemTemplateRef: [{\n type: Input,\n args: ['navigationItemTemplate']\n }], navigationView: [{\n type: ViewChild,\n args: [NavigationComponent, { static: false }]\n }], monthView: [{\n type: ViewChild,\n args: [ViewListComponent, { static: false }]\n }], multiViewCalendar: [{\n type: ViewChild,\n args: [MultiViewCalendarComponent, { static: false }]\n }], widgetId: [{\n type: HostBinding,\n args: ['attr.id']\n }], calendarTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }] } });\n\n/**\n * @hidden\n */\nconst incompleteDateValidator = () => {\n return (control, incomplete) => {\n if (!isPresent(control.value) && incomplete) {\n return { incompleteDate: true };\n }\n else {\n return null;\n }\n };\n};\n\n/**\n * @hidden\n */\nvar Arrow;\n(function (Arrow) {\n Arrow[Arrow[\"Up\"] = 0] = \"Up\";\n Arrow[Arrow[\"Down\"] = 1] = \"Down\";\n Arrow[Arrow[\"None\"] = 2] = \"None\";\n})(Arrow || (Arrow = {}));\n\n/**\n * @hidden\n */\nclass DateInputMessages extends ComponentMessages {\n}\nDateInputMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nDateInputMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateInputMessages, selector: \"kendo-dateinput-messages-base\", inputs: { decrement: \"decrement\", increment: \"increment\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line\n selector: 'kendo-dateinput-messages-base'\n }]\n }], propDecorators: { decrement: [{\n type: Input\n }], increment: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass DateInputLocalizedMessagesDirective extends DateInputMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nDateInputLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputLocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nDateInputLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateInputLocalizedMessagesDirective, selector: \"[kendoDateInputLocalizedMessages]\", providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputLocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputLocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputLocalizedMessagesDirective)\n }\n ],\n selector: '[kendoDateInputLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst MIN_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DateInputComponent/#toc-min';\nconst MAX_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DateInputComponent/#toc-max';\nconst VALUE_DOC_LINK$3 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/dateinput/#toc-using-with-json';\nconst DATE_PART_REGEXP = /year|month|/;\nconst TIME_PART_REGEXP = /hour|minute|second|millisecond/;\nconst SHORT_PATTERN_LENGTH_REGEXP = /d|M|H|h|m|s/;\nconst TWO_DIGIT_YEAR_MAX$2 = 68;\nconst PREVIOUS_CENTURY_BASE = 1900;\nconst CURRENT_CENTURY_BASE = 2000;\nconst DEFAULT_FORMAT$1 = 'd';\nconst padZero = (length) => new Array(Math.max(length, 0)).fill('0').join('');\nconst unpadZero = (value) => value.replace(/^0*/, '');\nclass Mask {\n constructor() {\n this.symbols = \"\";\n }\n}\nclass KendoDate {\n constructor(intl, formatPlaceholder, format, value, twoDigitYearMax = TWO_DIGIT_YEAR_MAX$2) {\n this.intl = intl;\n this.formatPlaceholder = formatPlaceholder;\n this.format = format;\n this.twoDigitYearMax = twoDigitYearMax;\n this.year = true;\n this.month = true;\n this.date = true;\n this.hours = true;\n this.minutes = true;\n this.seconds = true;\n this.milliseconds = true;\n this.leadingZero = null;\n this.monthNames = null;\n this.typedMonthPart = \"\";\n this.value = getDate(new Date());\n this.knownParts = \"adHhmMsSEy\";\n this.symbols = {\n \"E\": \"E\",\n \"H\": \"H\",\n \"M\": \"M\",\n \"a\": \"a\",\n \"d\": \"d\",\n \"h\": \"h\",\n \"m\": \"m\",\n \"s\": \"s\",\n \"S\": \"S\",\n \"y\": \"y\"\n };\n validatePackage(packageMetadata);\n this.monthNames = this.allFormatedMonths();\n this.dayPeriods = this.allDayPeriods();\n if (!value) {\n this.value = getDate(new Date());\n const sampleFormat = this.dateFormatString(this.value, this.format).symbols;\n for (let i = 0; i < sampleFormat.length; i++) {\n this.setExisting(sampleFormat[i], false);\n }\n }\n else {\n this.value = cloneDate(value);\n }\n }\n hasValue() {\n const pred = (a, p) => a || p.type !== 'literal' && p.type !== 'dayperiod' && this.getExisting(p.pattern[0]);\n return this.intl.splitDateFormat(this.format).reduce(pred, false);\n }\n shouldNormalizeCentury() {\n return this.intl.splitDateFormat(this.format).some(part => part.pattern === 'yy');\n }\n getDateObject() {\n for (let i = 0; i < this.knownParts.length; i++) {\n if (!this.getExisting(this.knownParts[i])) {\n return null;\n }\n }\n return cloneDate(this.value);\n }\n getTextAndFormat(format) {\n return this.merge(this.intl.formatDate(this.value, format), this.dateFormatString(this.value, format));\n }\n getExisting(symbol) {\n switch (symbol) {\n case \"y\": return this.year;\n case \"M\":\n case \"L\": return this.month;\n case \"d\": return this.date;\n case \"E\": return this.date && this.month && this.year;\n case \"h\":\n case \"H\": return this.hours;\n case \"m\": return this.minutes;\n case \"s\": return this.seconds;\n case \"S\": return this.milliseconds;\n default: return true;\n }\n }\n setExisting(symbol, value) {\n switch (symbol) {\n case \"y\":\n this.year = value;\n if (value === false) {\n this.value.setFullYear(2000);\n }\n break; //allow 2/29 dates\n case \"M\":\n this.month = value;\n if (value === false) {\n this.value.setMonth(0);\n }\n break; //make sure you can type 31 at day part\n case \"d\":\n this.date = value;\n break;\n case \"h\":\n case \"H\":\n this.hours = value;\n break;\n case \"m\":\n this.minutes = value;\n break;\n case \"s\":\n this.seconds = value;\n break;\n case \"S\":\n this.milliseconds = value;\n break;\n default: return;\n }\n }\n modifyPart(symbol, offset) {\n let newValue = cloneDate(this.value);\n switch (symbol) {\n case \"y\":\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case \"M\":\n newValue = addMonths(this.value, offset);\n break;\n case \"d\":\n case \"E\":\n newValue.setDate(newValue.getDate() + offset);\n break;\n case \"h\":\n case \"H\":\n newValue.setHours(newValue.getHours() + offset);\n break;\n case \"m\":\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case \"s\":\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case \"S\":\n newValue.setMilliseconds(newValue.getMilliseconds() + offset);\n break;\n case \"a\":\n newValue.setHours(newValue.getHours() + (12 * offset));\n break;\n default: break;\n }\n if (this.shouldNormalizeCentury()) {\n newValue = this.normalizeCentury(newValue);\n }\n if (newValue.getFullYear() > 0) {\n this.setExisting(symbol, true);\n this.value = newValue;\n }\n }\n parsePart(symbol, currentChar, resetSegmentValue) {\n if (!currentChar) {\n this.resetLeadingZero();\n this.setExisting(symbol, false);\n return { value: null, switchToNext: false };\n }\n let baseDate = this.intl.formatDate(this.value, this.format);\n let dateParts = this.dateFormatString(this.value, this.format);\n let baseFormat = dateParts.symbols;\n let replaced = false;\n let prefix = \"\";\n let current = \"\";\n let suffix = \"\";\n for (let i = 0; i < baseDate.length; i++) {\n if (baseFormat[i] === symbol) {\n current += this.getExisting(symbol) ? baseDate[i] : \"0\";\n replaced = true;\n }\n else if (!replaced) {\n prefix += baseDate[i];\n }\n else {\n suffix += baseDate[i];\n }\n }\n let currentMaxLength = current.length - 3;\n let parsedDate = null;\n const month = this.matchMonth(currentChar);\n const dayPeriod = this.matchDayPeriod(currentChar, symbol);\n const isZeroCurrentChar = currentChar === '0';\n const leadingZero = (this.leadingZero || {})[symbol] || 0;\n if (isZeroCurrentChar) {\n let valueNumber = parseInt(resetSegmentValue ? currentChar : current + currentChar, 10);\n if (valueNumber === 0 && !this.isAbbrMonth(dateParts.partMap, symbol)) {\n this.incrementLeadingZero(symbol);\n }\n }\n else {\n this.resetLeadingZero();\n }\n for (let i = Math.max(0, currentMaxLength); i <= current.length; i++) {\n let middle = resetSegmentValue ? currentChar : (current.substring(i) + currentChar);\n if (symbol === \"S\" && resetSegmentValue) {\n // The \"S\" parser in intl parses \"1\" as 100ms in order to handle ISOString dates correctly, so to get 1ms, we need to pass \"001\"\n const padding = msPaddingFromFormat(baseFormat);\n middle = padding + middle;\n }\n let middleNumber = parseInt(middle, 10);\n parsedDate = this.intl.parseDate(prefix + middle + suffix, this.format);\n if (!parsedDate && !isNaN(middleNumber) && !isNaN(parseInt(currentChar, 10))) {\n if (symbol === 'M' && !month) {\n const monthNumber = middleNumber - 1;\n if (monthNumber > -1 && monthNumber < 12) {\n parsedDate = cloneDate(this.value);\n parsedDate.setMonth(monthNumber);\n if (parsedDate.getMonth() !== monthNumber) {\n parsedDate = lastDayOfMonth(addMonths(parsedDate, -1));\n }\n }\n }\n if (symbol === 'y') {\n parsedDate = createDate(parseInt(middle, 10), this.month ? this.value.getMonth() : 0, this.date ? this.value.getDate() : 1, this.hours ? this.value.getHours() : 0, this.minutes ? this.value.getMinutes() : 0, this.seconds ? this.value.getSeconds() : 0, this.milliseconds ? this.value.getMilliseconds() : 0);\n if (this.date && parsedDate.getDate() !== this.value.getDate()) {\n parsedDate = lastDayOfMonth(addMonths(parsedDate, -1));\n }\n }\n }\n if (parsedDate) {\n //move to next segment if the part will overflow with next char\n //when start from empty date (01, then 010), padded zeros should be trimmed\n const patternValue = this.partPattern(dateParts.partMap, symbol).pattern;\n const peekDate = this.intl.parseDate(`${prefix}${this.peek(middle, patternValue)}${suffix}`, this.format);\n const patternLength = this.patternLength(patternValue) || patternValue.length;\n const patternSatisfied = (leadingZero + (unpadZero(middle) || currentChar).length) >= patternLength;\n const switchToNext = peekDate === null || patternSatisfied;\n if (this.shouldNormalizeCentury()) {\n parsedDate = this.normalizeCentury(parsedDate);\n }\n this.value = parsedDate;\n this.setExisting(symbol, true);\n return { value: this.value, switchToNext: switchToNext };\n }\n }\n if (month) {\n parsedDate = this.intl.parseDate(prefix + month + suffix, this.format);\n if (parsedDate) {\n this.value = parsedDate;\n this.setExisting(symbol, true);\n return { value: this.value, switchToNext: false };\n }\n }\n if (dayPeriod) {\n parsedDate = this.intl.parseDate(prefix + dayPeriod + suffix, this.format);\n if (parsedDate) {\n this.value = parsedDate;\n return { value: this.value, switchToNext: true };\n }\n }\n if (isZeroCurrentChar) {\n this.setExisting(symbol, false);\n }\n return { value: null, switchToNext: false };\n }\n resetLeadingZero() {\n const hasLeadingZero = this.leadingZero !== null;\n this.setLeadingZero(null);\n return hasLeadingZero;\n }\n setLeadingZero(leadingZero) {\n this.leadingZero = leadingZero;\n }\n normalizeCentury(date) {\n if (!isPresent(date)) {\n return date;\n }\n const twoDigitYear = cropTwoDigitYear(date);\n const centuryBase = this.getNormalizedCenturyBase(twoDigitYear);\n const normalizedDate = setYears(date, centuryBase + twoDigitYear);\n return normalizedDate;\n }\n incrementLeadingZero(symbol) {\n const leadingZero = this.leadingZero || {};\n leadingZero[symbol] = (leadingZero[symbol] || 0) + 1;\n this.leadingZero = leadingZero;\n }\n isAbbrMonth(parts, symbol) {\n const pattern = this.partPattern(parts, symbol);\n return pattern.type === 'month' && pattern.names;\n }\n partPattern(parts, symbol) {\n return parts.filter((part) => part.pattern.indexOf(symbol) !== -1)[0];\n }\n peek(value, pattern) {\n const peekValue = unpadZero(value) + '0';\n return padZero(pattern.length - peekValue.length) + peekValue;\n }\n matchMonth(typedChar) {\n this.typedMonthPart += typedChar.toLowerCase();\n if (!this.monthNames) {\n return \"\";\n }\n while (this.typedMonthPart.length > 0) {\n for (let i = 0; i < this.monthNames.length; i++) {\n if (this.monthNames[i].toLowerCase().indexOf(this.typedMonthPart) === 0) {\n return this.monthNames[i];\n }\n }\n const monthAsNum = parseInt(this.typedMonthPart, 10);\n if (monthAsNum >= 1 && monthAsNum <= 12 && monthAsNum.toString() === this.typedMonthPart /*ensure they exact match*/) {\n return this.monthNames[monthAsNum - 1];\n }\n this.typedMonthPart = this.typedMonthPart.substring(1, this.typedMonthPart.length);\n }\n return \"\";\n }\n matchDayPeriod(typedChar, symbol) {\n const lowerChart = String(typedChar).toLowerCase();\n if (symbol === 'a' && this.dayPeriods) {\n if (this.dayPeriods.am.toLowerCase().startsWith(lowerChart)) {\n return this.dayPeriods.am;\n }\n else if (this.dayPeriods.pm.toLowerCase().startsWith(lowerChart)) {\n return this.dayPeriods.pm;\n }\n }\n return '';\n }\n allFormatedMonths() {\n const dateFormatParts = this.intl.splitDateFormat(this.format);\n for (let i = 0; i < dateFormatParts.length; i++) {\n if (dateFormatParts[i].type === \"month\" && dateFormatParts[i].names) {\n return this.intl.dateFormatNames(dateFormatParts[i].names);\n }\n }\n return null;\n }\n allDayPeriods() {\n const dateFormatParts = this.intl.splitDateFormat(this.format);\n for (let i = 0; i < dateFormatParts.length; i++) {\n if (dateFormatParts[i].type === \"dayperiod\" && dateFormatParts[i].names) {\n return this.intl.dateFormatNames(dateFormatParts[i].names);\n }\n }\n return null;\n }\n patternLength(pattern) {\n if (pattern[0] === 'y') {\n return 4;\n }\n if (SHORT_PATTERN_LENGTH_REGEXP.test(pattern)) {\n return 2;\n }\n return 0;\n }\n //TODO: REMOVE!\n dateFormatString(date, format) {\n const dateFormatParts = this.intl.splitDateFormat(format);\n const parts = [];\n const partMap = [];\n for (let i = 0; i < dateFormatParts.length; i++) {\n let partLength = this.intl.formatDate(date, { pattern: dateFormatParts[i].pattern }).length;\n while (partLength > 0) {\n parts.push(this.symbols[dateFormatParts[i].pattern[0]] || \"_\");\n partMap.push(dateFormatParts[i]);\n partLength--;\n }\n }\n const returnValue = new Mask();\n returnValue.symbols = parts.join(\"\");\n returnValue.partMap = partMap;\n return returnValue;\n }\n merge(text, mask) {\n // Important: right to left.\n let resultText = \"\";\n let resultFormat = \"\";\n let format = mask.symbols;\n for (let r = format.length - 1; r >= 0; r--) {\n if (this.knownParts.indexOf(format[r]) === -1 || this.getExisting(format[r])) {\n resultText = text[r] + resultText;\n resultFormat = format[r] + resultFormat;\n }\n else {\n const currentSymbol = format[r];\n while (r >= 0 && currentSymbol === format[r]) {\n r--;\n }\n r++;\n if (this.leadingZero && this.leadingZero[currentSymbol]) {\n resultText = '0' + resultText;\n }\n else {\n resultText = this.dateFieldName(mask.partMap[r]) + resultText;\n }\n while (resultFormat.length < resultText.length) {\n resultFormat = format[r] + resultFormat;\n }\n }\n }\n return [resultText, resultFormat];\n }\n dateFieldName(part) {\n const formatPlaceholder = this.formatPlaceholder || 'wide';\n if (formatPlaceholder[part.type]) {\n return formatPlaceholder[part.type];\n }\n if (formatPlaceholder === 'formatPattern') {\n return part.pattern;\n }\n return this.intl.dateFieldName(Object.assign(part, { nameType: formatPlaceholder }));\n }\n getNormalizedCenturyBase(twoDigitYear) {\n return twoDigitYear > this.twoDigitYearMax ?\n PREVIOUS_CENTURY_BASE :\n CURRENT_CENTURY_BASE;\n }\n}\n/**\n * Represents the [Kendo UI DateInput component for Angular]({% slug overview_dateinput %}#toc-basic-usage).\n */\nclass DateInputComponent {\n constructor(cdr, intl, renderer, wrapper, ngZone, injector, localization, pickerService) {\n this.cdr = cdr;\n this.intl = intl;\n this.renderer = renderer;\n this.wrapper = wrapper;\n this.ngZone = ngZone;\n this.injector = injector;\n this.localization = localization;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets or gets the `disabled` property of the DateInput and\n * determines whether the component is active\n * ([see example]({% slug disabled_dateinput %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the read-only state of the DateInput\n * ([see example]({% slug readonly_dateinput %})).\n */\n this.readonly = false;\n /**\n * Sets the title of the input element of the DateInput.\n */\n this.title = \"\";\n /**\n * Sets or gets the `tabIndex` property of the DateInput.\n * .\n */\n this.tabindex = 0;\n /**\n * @hidden\n */\n this.role = 'spinbutton';\n /**\n * @hidden\n */\n this.ariaReadOnly = false;\n /**\n * Specifies the date format that is used to display the input value\n * ([see example]({% slug formats_dateinput %})).\n *\n * Format value options:\n * - `string` - Provide a `string` if a single format is going to be used regardless whether the input is focused or blurred.\n * - [`FormatSettings`]({% slug api_dateinputs_formatsettings %}) - To display different formats when the component is focused or blurred, provide a settings object with specified `inputFormat` and `displayFormat` values.\n */\n this.format = DEFAULT_FORMAT$1;\n /**\n * Specifies the hint the DateInput displays when its value is `null`.\n * For more information, refer to the article on\n * [placeholders]({% slug placeholders_dateinput %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Configures the incremental steps of the DateInput.\n * For more information, refer to the article on\n * [incremental steps]({% slug incrementalsteps_dateinput %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public steps = { year: 10, month: 1, day: 5 };\n * }\n * ```\n */\n this.steps = {};\n /**\n * Determines whether the built-in min or max validators are to be enforced when a form is being validated.\n */\n this.rangeValidation = true;\n /**\n * @hidden\n * Based on the min and max values, specifies whether the value will be auto-corrected while typing.\n */\n this.autoCorrect = false;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * The maximum year to assume to be from the current century when typing two-digit year value\n * ([see example]({% slug formats_dateinput %}#toc-two-digit-year-format)).\n *\n * The default value is 68, indicating that typing any value less than 69\n * will be assumed to be 20xx, while 69 and larger will be assumed to be 19xx.\n */\n this.twoDigitYearMax = TWO_DIGIT_YEAR_MAX$2;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered.\n * For more information, refer to the article on\n * [spinner buttons]({% slug spinbuttons_dateinput %}).\n */\n this.spinners = false;\n /**\n * @hidden\n */\n this.isPopupOpen = false;\n /**\n * @hidden\n */\n this.hasPopup = false;\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n */\n this.valueChange = new EventEmitter();\n /**\n * @hidden\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n */\n this.valueUpdate = new EventEmitter();\n /**\n * Fires each time the user focuses the input element.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n *\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the input element gets blurred.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n *\n */\n this.onBlur = new EventEmitter();\n this.arrow = Arrow;\n this.arrowDirection = Arrow.None;\n this.formatSections = { date: false, time: false };\n this.hasMousedown = false;\n this.focusedPriorToMousedown = false;\n /**\n * @hidden\n */\n this.isDateIncomplete = false;\n this.currentValue = \"\";\n this.currentFormat = \"\";\n this.backspace = false;\n this.resetSegmentValue = true;\n this.minValidator = noop$2;\n this.maxValidator = noop$2;\n this.incompleteValidator = noop$2;\n this._value = null;\n this._active = false;\n this.kendoDate = null;\n this.paste = false;\n this.domEvents = [];\n this.onControlChange = noop$2;\n this.onControlTouched = noop$2;\n this.onValidatorChange = noop$2;\n this._size = DEFAULT_SIZE;\n this._rounded = DEFAULT_ROUNDED;\n this._fillMode = DEFAULT_FILL_MODE;\n this.symbolsMap = this.dateSymbolMap();\n this.updateFormatSections();\n if (this.pickerService) {\n this.pickerService.input = this;\n }\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Specifies the value of the DateInput component.\n *\n * > The `value` has to be a valid [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n if (this.autoCorrect && !isInRange(value, this.min, this.max)) {\n return;\n }\n this._value = cloneDate(value);\n this.valueUpdate.emit(cloneDate(value));\n }\n get value() {\n return this._value;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n const newSize = size ? size : DEFAULT_SIZE;\n if (newSize !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n if (newRounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `solid` (Default)\n * * `flat`\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE;\n if (newFillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', newFillMode));\n if (this.spinners && this.spinup && this.spindown) {\n this.setSpinnerFill(this.spinup.nativeElement, newFillMode, this.fillMode);\n this.setSpinnerFill(this.spindown.nativeElement, newFillMode, this.fillMode);\n }\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n get wrapperClass() {\n return true;\n }\n get disabledClass() {\n return this.disabled;\n }\n get inputElement() {\n return this.dateInput ? this.dateInput.nativeElement : null;\n }\n get inputValue() {\n return (this.inputElement || {}).value || '';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrapper) {\n return;\n }\n if (!isPresent(this.pickerService)) {\n const element = this.wrapper.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-focus');\n }\n else {\n this.renderer.removeClass(element, 'k-focus');\n }\n }\n }\n get inputFormat() {\n if (!this.format) {\n return DEFAULT_FORMAT$1;\n }\n if (typeof this.format === 'string') {\n return this.format;\n }\n else {\n return this.format.inputFormat;\n }\n }\n get displayFormat() {\n if (!this.format) {\n return DEFAULT_FORMAT$1;\n }\n if (typeof this.format === 'string') {\n return this.format;\n }\n else {\n return this.format.displayFormat;\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty\n */\n isEmpty() {\n return !this.currentValue || !String(this.currentValue).trim();\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.wrapper.nativeElement));\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n this.verifyRange();\n if (changes.min || changes.max || changes.rangeValidation || changes.incompleteDateValidation) {\n this.minValidator = this.rangeValidation ? minValidator(this.min) : noop$2;\n this.maxValidator = this.rangeValidation ? maxValidator(this.max) : noop$2;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop$2;\n this.onValidatorChange();\n }\n if (changes.format) {\n this.symbolsMap = this.dateSymbolMap();\n this.updateFormatSections();\n }\n const isEqualToKendoDate = this.kendoDate && isEqual(this.value, this.kendoDate.getDateObject());\n if (changes.format || !isEqualToKendoDate || changes.placeholder) {\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue(this.isActive);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n if (this.pickerService) {\n this.pickerService.input = null;\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidator(control) || this.maxValidator(control) || this.incompleteValidator(control, this.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue();\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n this.ngControl = this.injector.get(NgControl, null);\n if (this.wrapper) {\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'tabindex');\n this.ngZone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngAfterViewInit() {\n this.setComponentClasses();\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n //ngModel binding\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.kendoDate = this.getKendoDate(value);\n this.value = cloneDate(value);\n this.updateElementValue(this.isActive);\n }\n /**\n * @hidden\n */\n triggerChange() {\n const value = this.kendoDate.getDateObject();\n if (+value !== +this.value) {\n this.value = cloneDate(value);\n this.notify();\n }\n }\n /**\n * @hidden\n */\n notify() {\n this.ngZone.run(() => {\n this.onControlChange(cloneDate(this.value));\n this.valueChange.emit(cloneDate(this.value));\n });\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * Focuses the DateInput component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n const input = this.inputElement;\n if (input) {\n input.focus();\n this.selectDateSegment(this.currentFormat[0]);\n }\n }\n /**\n * Blurs the DateInput component.\n */\n blur() {\n const input = this.inputElement;\n if (input) {\n input.blur();\n }\n }\n /**\n * @hidden\n */\n handleButtonClick(offset) {\n this.arrowDirection = Arrow.None;\n this.modifyDateSegmentValue(offset);\n }\n /**\n * @hidden\n */\n modifyDateSegmentValue(offset) {\n const caret = this.caret();\n const symbol = this.currentFormat[caret[0]];\n let step = (this.steps || {})[this.symbolsMap[symbol]] || 1;\n if (symbol === \"S\" && !this.steps.millisecond) {\n const msDigits = millisecondDigitsInFormat(this.inputFormat);\n step = millisecondStepFor(msDigits);\n }\n this.kendoDate.modifyPart(symbol, offset * step);\n this.putDateInRange();\n this.updateElementValue(this.isActive);\n this.triggerChange();\n this.selectDateSegment(symbol);\n this.updateIncompleteValidationStatus();\n }\n /**\n * @hidden\n */\n switchDateSegment(offset) {\n const caret = this.caret();\n if (this.kendoDate.resetLeadingZero()) {\n this.updateElementValue(this.isActive);\n }\n if (caret[0] < caret[1] && this.currentFormat[caret[0]] !== this.currentFormat[caret[1] - 1]) {\n this.selectNearestSegment(offset > 0 ? caret[0] : caret[1] - 1);\n this.resetSegmentValue = true;\n return true;\n }\n const previousFormatSymbol = this.currentFormat[caret[0]];\n let a = caret[0] + offset;\n while (a > 0 && a < this.currentFormat.length) {\n if (this.currentFormat[a] !== previousFormatSymbol &&\n this.currentFormat[a] !== \"_\") {\n break;\n }\n a += offset;\n }\n if (this.currentFormat[a] === \"_\") {\n //there is not known symbol found\n return false;\n }\n let b = a;\n while (b >= 0 && b < this.currentFormat.length) {\n if (this.currentFormat[b] !== this.currentFormat[a]) {\n break;\n }\n b += offset;\n }\n if (a > b && (b + 1 !== caret[0] || a + 1 !== caret[1])) {\n this.caret(b + 1, a + 1);\n this.resetSegmentValue = true;\n return true;\n }\n else if (a < b && (a !== caret[0] || b !== caret[1])) {\n this.caret(a, b);\n this.resetSegmentValue = true;\n return true;\n }\n return false;\n }\n /**\n * @hidden\n */\n selectDateSegment(symbol) {\n let begin = -1;\n let end = 0;\n for (let i = 0; i < this.currentFormat.length; i++) {\n if (this.currentFormat[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n this.caret(0, 0);\n this.caret(begin, end);\n }\n /**\n * @hidden\n */\n handleClick() {\n this.hasMousedown = false;\n if (this.isActive) {\n const selectionPresent = this.inputElement.selectionStart !== this.inputElement.selectionEnd;\n const placeholderToggled = isPresent(this.placeholder) && !this.kendoDate.hasValue() && !this.focusedPriorToMousedown;\n // focus first segment if the user hasn't selected something during mousedown and if the placeholder was just toggled\n const selectFirstSegment = !selectionPresent && placeholderToggled;\n const index = selectFirstSegment ? 0 : this.caret()[0];\n this.selectNearestSegment(index);\n }\n }\n /**\n * @hidden\n */\n handleDragAndDrop(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleMousedown() {\n this.hasMousedown = true;\n this.focusedPriorToMousedown = this.isActive;\n }\n /**\n * @hidden\n */\n handleFocus(args) {\n this.isActive = true;\n this.updateElementValue();\n if (!this.hasMousedown) {\n this.caret(0, this.inputValue.length);\n }\n this.hasMousedown = false;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.emitFocus(args);\n });\n }\n else {\n this.emitFocus(args);\n }\n }\n /**\n * @hidden\n */\n handleBlur(args) {\n this.isActive = false;\n this.resetSegmentValue = true;\n this.kendoDate.resetLeadingZero();\n this.updateElementValue();\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.ngControl)) {\n this.ngZone.run(() => {\n this.onControlTouched();\n this.emitBlur(args);\n this.cdr.markForCheck();\n });\n }\n else {\n this.emitBlur(args);\n }\n }\n getKendoDate(value) {\n const { leadingZero } = (this.kendoDate || {}) || null;\n const kendoDate = new KendoDate(this.intl, this.formatPlaceholder, this.inputFormat, value, this.twoDigitYearMax);\n kendoDate.setLeadingZero(this.isActive ? leadingZero : null);\n return kendoDate;\n }\n dateSymbolMap() {\n const reducer = (map, part) => {\n map[part.pattern[0]] = part.type;\n return map;\n };\n return this.intl.splitDateFormat(this.inputFormat).reduce(reducer, {});\n }\n updateElementValue(isActive) {\n const start = this.caret()[0]; //XXX: get caret position before input is updated\n const format = this.isActive ? this.inputFormat : this.displayFormat;\n const texts = this.kendoDate.getTextAndFormat(format);\n const showPlaceholder = !this.isActive && isPresent(this.placeholder) && !this.kendoDate.hasValue();\n const input = this.inputElement;\n this.currentFormat = texts[1];\n this.currentValue = !showPlaceholder ? texts[0] : '';\n this.renderer.setProperty(input, \"value\", this.currentValue);\n if (input.placeholder !== this.placeholder) {\n this.renderer.setProperty(input, \"placeholder\", this.placeholder);\n }\n if (isActive) {\n this.selectNearestSegment(start);\n }\n }\n caret(start, end = start) {\n const isPosition = start !== undefined;\n let returnValue = [start, start];\n const element = this.inputElement;\n if (isPosition && (this.disabled || this.readonly)) {\n return undefined;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n if (isDocumentAvailable() && document.activeElement !== element) {\n element.focus();\n }\n element.setSelectionRange(start, end);\n }\n returnValue = [element.selectionStart, element.selectionEnd];\n }\n }\n catch (e) {\n returnValue = [];\n }\n return returnValue;\n }\n selectNearestSegment(index) {\n // Finds the nearest (in both directions) known part.\n for (let i = index, j = index - 1; i < this.currentFormat.length || j >= 0; i++, j--) {\n if (i < this.currentFormat.length && this.currentFormat[i] !== \"_\") {\n this.selectDateSegment(this.currentFormat[i]);\n return;\n }\n if (j >= 0 && this.currentFormat[j] !== \"_\") {\n this.selectDateSegment(this.currentFormat[j]);\n return;\n }\n }\n }\n verifyRange() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$1} and ${MAX_DOC_LINK$1}.`);\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$3} for possible resolution.`);\n }\n }\n putDateInRange() {\n const currentDate = this.kendoDate.getDateObject();\n const candidate = dateInRange(currentDate, this.min, this.max);\n if (this.autoCorrect && !isEqual(currentDate, candidate)) {\n this.kendoDate = this.getKendoDate(candidate);\n }\n }\n updateFormatSections() {\n this.formatSections = this.intl.splitDateFormat(this.inputFormat)\n .reduce(({ date, time }, p) => {\n return {\n date: date || DATE_PART_REGEXP.test(p.type),\n time: time || TIME_PART_REGEXP.test(p.type)\n };\n }, { date: false, time: false });\n }\n intlChange() {\n this.updateFormatSections();\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue(this.isActive);\n }\n updateOnPaste() {\n let value = this.intl.parseDate(this.inputValue, this.inputFormat) || this.value;\n if (isPresent(value) && this.kendoDate.shouldNormalizeCentury()) {\n value = this.kendoDate.normalizeCentury(value);\n }\n const notify = +value !== +this.value;\n this.writeValue(value);\n if (notify) {\n this.notify();\n }\n }\n bindEvents() {\n const element = this.wrapper.nativeElement;\n const mousewheelHandler = this.handleMouseWheel.bind(this);\n this.domEvents.push(this.renderer.listen(element, 'DOMMouseScroll', mousewheelHandler), this.renderer.listen(element, 'mousewheel', mousewheelHandler), this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)), this.renderer.listen(element, 'paste', this.handlePaste.bind(this)), this.renderer.listen(element, 'input', this.handleInput.bind(this)));\n }\n handleMouseWheel(event) {\n if (this.disabled || this.readonly || !this.isActive) {\n return;\n }\n event = window.event || event;\n if (event.shiftKey) {\n this.switchDateSegment((event.wheelDelta || -event.detail) > 0 ? -1 : 1);\n }\n else {\n this.modifyDateSegmentValue((event.wheelDelta || -event.detail) > 0 ? 1 : -1);\n }\n event.returnValue = false;\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n handlePaste() {\n this.paste = true;\n }\n handleKeydown(event) {\n if (this.disabled || this.readonly || event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n if (event.keyCode === Keys.Tab) {\n const moved = this.switchDateSegment(event.shiftKey ? -1 : 1);\n if (moved) {\n event.preventDefault();\n }\n return;\n }\n if (event.keyCode === Keys.Backspace) {\n this.backspace = true;\n return;\n }\n switch (event.keyCode) {\n case Keys.ArrowDown:\n this.modifyDateSegmentValue(-1);\n break;\n case Keys.ArrowUp:\n this.modifyDateSegmentValue(1);\n break;\n case Keys.ArrowRight:\n this.switchDateSegment(1);\n break;\n case Keys.ArrowLeft:\n this.switchDateSegment(-1);\n break;\n case Keys.Home:\n this.selectNearestSegment(0);\n break;\n case Keys.End:\n this.selectNearestSegment(this.inputValue.length);\n break;\n default:\n return; //skip the preventDefault if we didn't handled the keyCode\n }\n event.preventDefault();\n }\n handleInput() {\n if (this.disabled || this.readonly) {\n return;\n }\n if (this.paste) {\n this.updateOnPaste();\n this.paste = false;\n return;\n }\n const diff = approximateStringMatching(this.currentValue, this.currentFormat, this.inputValue, this.caret()[0]);\n const navigationOnly = (diff.length === 1 && diff[0][1] === \"_\");\n let switchPart = false;\n if (!navigationOnly) {\n let parsedPart;\n for (let i = 0; i < diff.length; i++) {\n parsedPart = this.kendoDate.parsePart(diff[i][0], diff[i][1], this.resetSegmentValue);\n switchPart = parsedPart.switchToNext;\n }\n const candidate = this.kendoDate.getDateObject();\n if (this.value && candidate && !this.formatSections.date) {\n this.kendoDate = this.getKendoDate(setTime(this.value, candidate));\n }\n }\n this.resetSegmentValue = false;\n this.putDateInRange();\n this.updateElementValue(this.isActive);\n this.triggerChange();\n this.updateIncompleteValidationStatus();\n if (diff.length && diff[0][0] !== \"_\") {\n this.selectDateSegment(diff[0][0]);\n }\n if (switchPart || navigationOnly) {\n this.switchDateSegment(1);\n }\n if (this.backspace) {\n this.switchDateSegment(-1);\n }\n this.backspace = false;\n }\n emitFocus(args) {\n this.onFocus.emit();\n if (this.pickerService) {\n this.pickerService.onFocus.emit(args);\n }\n }\n emitBlur(args) {\n this.onBlur.emit();\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n updateIncompleteValidationStatus() {\n const previousValue = this.isDateIncomplete;\n this.isDateIncomplete = this.kendoDate.hasValue() && this.value === null;\n if (previousValue === this.isDateIncomplete || !this.incompleteDateValidation) {\n return;\n }\n if (isPresent(this.ngControl) && !isPresent(this.pickerService)) {\n this.cdr.markForCheck();\n this.ngZone.run(() => this.onValidatorChange());\n }\n else if (isPresent(this.pickerService)) {\n this.pickerService.dateCompletenessChange.emit();\n }\n }\n setSpinnerFill(spinner, fill, oldFill) {\n if (oldFill !== 'none') {\n this.renderer.removeClass(spinner, `k-button-${oldFill}`);\n this.renderer.removeClass(spinner, `k-button-${oldFill}-base`);\n }\n this.renderer.addClass(spinner, `k-button-${fill}`);\n this.renderer.addClass(spinner, `k-button-${fill}-base`);\n }\n setComponentClasses() {\n if (this.size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n }\n if (this.rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n }\n if (this.spinners && this.fillMode !== 'none') {\n this.setSpinnerFill(this.spinup.nativeElement, this.fillMode);\n this.setSpinnerFill(this.spindown.nativeElement, this.fillMode);\n }\n }\n}\nDateInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.IntlService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Injector }, { token: i1$1.LocalizationService }, { token: PickerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nDateInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateInputComponent, selector: \"kendo-dateinput\", inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", title: \"title\", tabindex: \"tabindex\", role: \"role\", ariaReadOnly: \"ariaReadOnly\", tabIndex: \"tabIndex\", format: \"format\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", steps: \"steps\", max: \"max\", min: \"min\", rangeValidation: \"rangeValidation\", autoCorrect: \"autoCorrect\", incompleteDateValidation: \"incompleteDateValidation\", twoDigitYearMax: \"twoDigitYearMax\", value: \"value\", spinners: \"spinners\", isPopupOpen: \"isPopupOpen\", hasPopup: \"hasPopup\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", valueUpdate: \"valueUpdate\", onFocus: \"focus\", onBlur: \"blur\" }, host: { properties: { \"class.k-input\": \"this.wrapperClass\", \"class.k-dateinput\": \"this.wrapperClass\", \"class.k-disabled\": \"this.disabledClass\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: L10N_PREFIX, useValue: 'kendo.dateinput' },\n { provide: KendoInput, useExisting: forwardRef(() => DateInputComponent) },\n LocalizationService\n ], viewQueries: [{ propertyName: \"dateInput\", first: true, predicate: [\"dateInput\"], descendants: true, static: true }, { propertyName: \"spinup\", first: true, predicate: [\"spinup\"], descendants: true }, { propertyName: \"spindown\", first: true, predicate: [\"spindown\"], descendants: true }], exportAs: [\"kendo-dateinput\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n `, isInline: true, directives: [{ type: DateInputLocalizedMessagesDirective, selector: \"[kendoDateInputLocalizedMessages]\" }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-dateinput',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: L10N_PREFIX, useValue: 'kendo.dateinput' },\n { provide: KendoInput, useExisting: forwardRef(() => DateInputComponent) },\n LocalizationService\n ],\n selector: 'kendo-dateinput',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.IntlService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }, { type: i1$1.LocalizationService }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], title: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], role: [{\n type: Input\n }], ariaReadOnly: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], format: [{\n type: Input\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], steps: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], autoCorrect: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], twoDigitYearMax: [{\n type: Input\n }], value: [{\n type: Input\n }], spinners: [{\n type: Input\n }], isPopupOpen: [{\n type: Input\n }], hasPopup: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], valueUpdate: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], dateInput: [{\n type: ViewChild,\n args: ['dateInput', { static: true }]\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-input']\n }, {\n type: HostBinding,\n args: ['class.k-dateinput']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], spinup: [{\n type: ViewChild,\n args: ['spinup', { static: false }]\n }], spindown: [{\n type: ViewChild,\n args: ['spindown', { static: false }]\n }] } });\n\n/**\n * A preventable event instance which is triggered by the `open` and `close` events.\n */\nclass PreventableEvent {\n /** @hidden */\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst TOUCH_ENABLED = new InjectionToken('dateinputs-touch-enabled');\n\n/**\n * @hidden\n */\nconst disabledDatesValidator = (isDateDisabled) => {\n return (control) => {\n if (!isDateDisabled || !control.value) {\n return null;\n }\n const error = {\n disabledDate: true\n };\n return isDateDisabled(control.value) ? error : null;\n };\n};\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass CalendarCustomMessagesComponent extends CalendarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCalendarCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarCustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nCalendarCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CalendarCustomMessagesComponent, selector: \"kendo-calendar-messages\", providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarCustomMessagesComponent)\n }\n ],\n selector: 'kendo-calendar-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\n/**\n * @hidden\n */\nclass DatePickerMessages extends ComponentMessages {\n}\nDatePickerMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nDatePickerMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DatePickerMessages, selector: \"kendo-datepicker-messages-base\", inputs: { today: \"today\", toggle: \"toggle\", prevButtonTitle: \"prevButtonTitle\", nextButtonTitle: \"nextButtonTitle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line\n selector: 'kendo-datepicker-messages-base'\n }]\n }], propDecorators: { today: [{\n type: Input\n }], toggle: [{\n type: Input\n }], prevButtonTitle: [{\n type: Input\n }], nextButtonTitle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass DatePickerLocalizedMessagesDirective extends DatePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nDatePickerLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerLocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nDatePickerLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DatePickerLocalizedMessagesDirective, selector: \"[kendoDatePickerLocalizedMessages]\", providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerLocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerLocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerLocalizedMessagesDirective)\n }\n ],\n selector: '[kendoDatePickerLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst MIN_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DatePickerComponent/#toc-min';\nconst MAX_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DatePickerComponent/#toc-max';\nconst VALUE_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/datepicker/#toc-using-with-json';\nconst DEFAULT_FORMAT = 'd';\nconst TWO_DIGIT_YEAR_MAX$1 = 68;\n/**\n * Represents the [Kendo UI DatePicker component for Angular]({% slug overview_datepicker %}#toc-basic-usage).\n */\nclass DatePickerComponent {\n constructor(zone, localization, cdr, popupService, wrapper, renderer, injector, pickerService, disabledDatesService, touchEnabled) {\n this.zone = zone;\n this.localization = localization;\n this.cdr = cdr;\n this.popupService = popupService;\n this.wrapper = wrapper;\n this.renderer = renderer;\n this.injector = injector;\n this.pickerService = pickerService;\n this.disabledDatesService = disabledDatesService;\n this.touchEnabled = touchEnabled;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug calendar_type_datepicker %}#toc-active-view)).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost Calendar view to which the user can navigate\n * ([see example]({% slug calendar_type_datepicker %}#toc-focused-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost Calendar view to which the user can navigate\n * ([see example]({% slug calendar_type_datepicker %}#toc-focused-dates)).\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Specifies the Calendar type.\n *\n * The possible values are:\n * - `infinite` (default)\n * - `classic`\n *\n */\n this.calendarType = 'infinite';\n /**\n * Determines whether to enable animation when navigating to previous/next Calendar view.\n * Applies to the [`classic`]({% slug api_dateinputs_datepickercomponent %}#toc-calendartype) Calendar only.\n *\n * > This feature uses the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). In order to run the animation in browsers that do not support it, you need the `web-animations-js` polyfill.\n *\n * @default false\n */\n this.animateCalendarNavigation = false;\n /**\n * Sets or gets the `disabled` property of the DatePicker and determines whether the component is active\n * ([see example]({% slug disabled_datepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the DatePicker\n * ([see example]({% slug readonly_datepicker %}#toc-read-only-datepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the DatePicker input field\n * ([see example]({% slug readonly_datepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_datepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Sets or gets the `navigation` property of the Calendar\n * and determines whether the navigation side-bar is displayed.\n * ([see example]({% slug sidebar_datepicker %})).\n */\n this.navigation = true;\n /**\n * Specifies the smallest valid date\n * ([see example]({% slug dateranges_datepicker %})).\n * By default, the `min` value is `1900-1-1`.\n */\n this.min = cloneDate(MIN_DATE);\n /**\n * Specifies the biggest valid date\n * ([see example]({% slug dateranges_datepicker %})).\n * By default, the `max` value is `2099-12-31`.\n */\n this.max = cloneDate(MAX_DATE);\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Specifies the focused date of the Calendar component\n * ([see example]({% slug calendar_type_datepicker %}#toc-focused-dates)).\n */\n this.focusedDate = null;\n /**\n * Specifies the date format that is used to display the input value\n * ([see example]({% slug formats_datepicker %})).\n *\n * Format value options:\n * - `string` - Provide a `string` if a single format is going to be used regardless whether the input is focused or blurred.\n * - [`FormatSettings`]({% slug api_dateinputs_formatsettings %}) - To display different formats when the component is focused or blurred, provide a settings object with specified `inputFormat` and `displayFormat` values.\n */\n this.format = DEFAULT_FORMAT;\n /**\n * The maximum year to assume to be from the current century when typing two-digit year value\n * ([see example]({% slug formats_datepicker %}#toc-two-digit-year-format)).\n *\n * The default value is 68, indicating that typing any value less than 69\n * will be assumed to be 20xx, while 69 and larger will be assumed to be 19xx.\n */\n this.twoDigitYearMax = TWO_DIGIT_YEAR_MAX$1;\n /**\n * Specifies the hint the DatePicker displays when its value is `null`.\n * ([more information and exaples]({% slug placeholders_datepicker %})).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Sets or gets the `tabindex` property of the DatePicker.\n */\n this.tabindex = 0;\n /**\n * Sets the title of the input element of the DatePicker.\n */\n this.title = \"\";\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = true;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_datepicker %}#toc-validation)).\n */\n this.disabledDatesValidation = true;\n /**\n * Determines whether to display a week number column in the `month` view of the Calendar\n * ([see example]({% slug calendar_type_datepicker %}#toc-week-number-column)).\n */\n this.weekNumber = false;\n /**\n * Fires each time the user selects a new value\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the input element\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the input element gets blurred\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.wrapperClasses = true;\n this.popupUID = guid();\n this._popupSettings = { animate: true };\n this._show = false;\n this._value = null;\n this._active = false;\n this.onControlChange = noop$2;\n this.onControlTouched = noop$2;\n this.onValidatorChange = noop$2;\n this.minValidateFn = noop$2;\n this.maxValidateFn = noop$2;\n this.disabledDatesValidateFn = noop$2;\n this.incompleteValidator = noop$2;\n this.resolvedPromise = Promise.resolve(null);\n this.domEvents = [];\n this._size = DEFAULT_SIZE;\n this._rounded = DEFAULT_ROUNDED;\n this._fillMode = DEFAULT_FILL_MODE;\n validatePackage(packageMetadata);\n this.pickerSubscriptions = this.pickerService.onFocus.subscribe(this.handleFocus.bind(this));\n this.pickerSubscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.sameDateSelected.subscribe(this.handleSameSelection.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n }\n /**\n * @hidden\n */\n set cellTemplateRef(template) {\n this.cellTemplate = template;\n }\n /**\n * @hidden\n */\n set monthCellTemplateRef(template) {\n this.monthCellTemplate = template;\n }\n /**\n * @hidden\n */\n set yearCellTemplateRef(template) {\n this.yearCellTemplate = template;\n }\n /**\n * @hidden\n */\n set decadeCellTemplateRef(template) {\n this.decadeCellTemplate = template;\n }\n /**\n * @hidden\n */\n set centuryCellTemplateRef(template) {\n this.centuryCellTemplate = template;\n }\n /**\n * @hidden\n */\n set weekNumberTemplateRef(template) {\n this.weekNumberTemplate = template;\n }\n /**\n * @hidden\n */\n set headerTitleTemplateRef(template) {\n this.headerTitleTemplate = template;\n }\n /**\n * @hidden\n */\n set navigationItemTemplateRef(template) {\n this.navigationItemTemplate = template;\n }\n /**\n * Configures the popup options of the DatePicker.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the value of the DatePicker component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n }\n get value() {\n return this._value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the DatePicker that will be disabled\n * ([see example]({% slug disabled_dates_datepicker %})).\n */\n set disabledDates(value) {\n this._disabledDates = value;\n this.disabledDatesService.initialize(value);\n }\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n this.renderer.removeClass(this.toggleButton.nativeElement, getSizeClass('input', this.size));\n const newSize = size ? size : DEFAULT_SIZE;\n if (newSize !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', newSize));\n this.renderer.addClass(this.toggleButton.nativeElement, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n if (newRounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `solid` (Default)\n * * `flat`\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n this.renderer.removeClass(this.toggleButton.nativeElement, getFillModeClass('button', this.fillMode));\n this.renderer.removeClass(this.toggleButton.nativeElement, `k-button-${this.fillMode}-base`);\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE;\n if (newFillMode !== 'none') {\n this.renderer.addClass(this.toggleButton.nativeElement, getFillModeClass('button', newFillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, `k-button-${newFillMode}-base`);\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', newFillMode));\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrapper) {\n return;\n }\n const element = this.wrapper.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-focus');\n }\n else {\n this.renderer.removeClass(element, 'k-focus');\n }\n }\n get show() {\n return this._show;\n }\n set show(show) {\n if (show && (this.disabled || this.readonly)) {\n return;\n }\n const skipZone = !show && (!this._show || !hasObservers(this.close));\n if (!skipZone) {\n this.zone.run(() => {\n this.togglePopup(show);\n });\n }\n else {\n this.togglePopup(show);\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return !this.value && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes\n .subscribe(() => this.cdr.markForCheck());\n this.control = this.injector.get(NgControl, null);\n if (this.wrapper) {\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'tabindex');\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngAfterViewInit() {\n this.setComponentClasses();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n this.verifySettings();\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDatesValidation || changes.disabledDates || changes.incompleteDateValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop$2;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop$2;\n this.disabledDatesValidateFn = this.disabledDatesValidation ? disabledDatesValidator(this.disabledDatesService.isDateDisabled) : noop$2;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop$2;\n this.onValidatorChange();\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.isActive = false;\n this.show = false;\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n this.pickerSubscriptions.unsubscribe();\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.show;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.value = cloneDate(value);\n this.cdr.markForCheck();\n if (!value && this.input) {\n this.input.placeholder = this.placeholder;\n this.input.writeValue(value);\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * Focuses the DatePicker component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n this.input.focus();\n }\n /**\n * Blurs the DatePicker component.\n */\n blur() {\n (this.calendar || this.input)['blur']();\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n event.preventDefault();\n this.focusInput();\n //XXX: explicitly call the handleFocus handler here\n //due to async IE focus event\n this.handleFocus();\n this.show = !this.show;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleMousedown(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleChange(value) {\n this.cdr.markForCheck();\n this.focusInput();\n this.value = value;\n this.show = false;\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n }\n /**\n * @hidden\n */\n handleInputChange(value) {\n this.handleChange(this.input.formatSections.time ? value : this.mergeTime(value));\n }\n /**\n * @hidden\n */\n get popupClasses() {\n return [\n 'k-calendar-container',\n 'k-group',\n 'k-reset'\n ].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get input() {\n return this.pickerService.input;\n }\n get calendar() {\n return this.pickerService.calendar;\n }\n /**\n * @hidden\n */\n mergeTime(value) {\n return this.value && value ? setTime(value, this.value) : value;\n }\n /**\n * @hidden\n */\n handleKeydown(e) {\n const { altKey, shiftKey, keyCode, target } = e;\n if (keyCode === Keys.Escape) {\n this.show = false;\n }\n if (altKey) {\n if (keyCode === Keys.ArrowDown && !this.show) {\n this.show = true;\n }\n if (keyCode === Keys.ArrowUp) {\n this.show = false;\n }\n }\n if (keyCode === Keys.Tab && this.show && this.calendar.isActive && isTabExitingCalendar(this.calendarType, target, shiftKey)) {\n this.input.focus();\n this.show = false;\n }\n }\n togglePopup(show) {\n const event = new PreventableEvent();\n if (!this._show && show) {\n this.open.emit(event);\n }\n else if (this._show && !show) {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n this.toggleFocus();\n }\n _toggle(show) {\n if (show === this._show) {\n return;\n }\n this._show = show;\n if (show) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: { vertical: 'top', horizontal: direction },\n popupClass: this.popupClasses,\n positionMode: 'absolute'\n });\n this.popupRef.popupElement.setAttribute('id', this.popupUID);\n this.subscription = this.popupRef.popupAnchorViewportLeave.subscribe(() => this.show = false);\n }\n else {\n this.popupRef.close();\n this.popupRef = null;\n this.subscription.unsubscribe();\n }\n }\n focusInput() {\n if (this.touchEnabled) {\n return;\n }\n this.input.focus();\n }\n toggleFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.show) {\n if (!this.calendar) {\n this.cdr.detectChanges();\n }\n if (this.calendar) {\n this.calendar.focus();\n }\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK} and ${MAX_DOC_LINK}.`);\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$2} for possible resolution.`);\n }\n }\n bindEvents() {\n const element = this.wrapper.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n if (isWindowAvailable()) {\n this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this));\n }\n }\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleWindowBlur() {\n if (!this.isOpen) {\n return;\n }\n this.show = false;\n }\n handleBlur(args) {\n const currentTarget = args && currentFocusTarget(args);\n if (currentTarget && (this.input.containsElement(currentTarget) ||\n (this.calendar && this.calendar.containsElement(currentTarget)))) {\n return;\n }\n if (hasObservers(this.onBlur) || (this.show && hasObservers(this.close)) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.blurComponent();\n this.cdr.markForCheck();\n });\n }\n else {\n this.blurComponent();\n }\n }\n blurComponent() {\n this.isActive = false; // order is important ¯\\_(ツ)_/¯\n this.show = false;\n this.cdr.detectChanges();\n this.onControlTouched();\n this.onBlur.emit();\n }\n handleSameSelection() {\n if (this.show) {\n this.focusInput();\n this.show = false;\n }\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.zone.run(() => this.onValidatorChange());\n }\n setComponentClasses() {\n if (this.size) {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n this.renderer.addClass(this.toggleButton.nativeElement, getSizeClass('button', this.size));\n }\n if (this.rounded) {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode) {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, getFillModeClass('button', this.fillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, `k-button-${this.fillMode}-base`);\n }\n }\n}\nDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerComponent, deps: [{ token: i0.NgZone }, { token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i2.PopupService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: PickerService }, { token: DisabledDatesService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DatePickerComponent, selector: \"kendo-datepicker\", inputs: { cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], navigationItemTemplateRef: [\"navigationItemTemplate\", \"navigationItemTemplateRef\"], focusableId: \"focusableId\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", calendarType: \"calendarType\", animateCalendarNavigation: \"animateCalendarNavigation\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", popupSettings: \"popupSettings\", navigation: \"navigation\", min: \"min\", max: \"max\", incompleteDateValidation: \"incompleteDateValidation\", focusedDate: \"focusedDate\", value: \"value\", format: \"format\", twoDigitYearMax: \"twoDigitYearMax\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", title: \"title\", rangeValidation: \"rangeValidation\", disabledDatesValidation: \"disabledDatesValidation\", weekNumber: \"weekNumber\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, host: { properties: { \"class.k-datepicker\": \"this.wrapperClasses\", \"class.k-input\": \"this.wrapperClasses\", \"class.k-disabled\": \"this.disabledClass\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DatePickerComponent) },\n LocalizationService,\n PickerService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.datepicker'\n }\n ], queries: [{ propertyName: \"cellTemplate\", first: true, predicate: CellTemplateDirective, descendants: true }, { propertyName: \"monthCellTemplate\", first: true, predicate: MonthCellTemplateDirective, descendants: true }, { propertyName: \"yearCellTemplate\", first: true, predicate: YearCellTemplateDirective, descendants: true }, { propertyName: \"decadeCellTemplate\", first: true, predicate: DecadeCellTemplateDirective, descendants: true }, { propertyName: \"centuryCellTemplate\", first: true, predicate: CenturyCellTemplateDirective, descendants: true }, { propertyName: \"weekNumberTemplate\", first: true, predicate: WeekNumberCellTemplateDirective, descendants: true }, { propertyName: \"headerTitleTemplate\", first: true, predicate: HeaderTitleTemplateDirective, descendants: true }, { propertyName: \"navigationItemTemplate\", first: true, predicate: NavigationItemTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"toggleButton\", first: true, predicate: [\"toggleButton\"], descendants: true, static: true }], exportAs: [\"kendo-datepicker\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `, isInline: true, components: [{ type: DateInputComponent, selector: \"kendo-dateinput\", inputs: [\"focusableId\", \"disabled\", \"readonly\", \"title\", \"tabindex\", \"role\", \"ariaReadOnly\", \"tabIndex\", \"format\", \"formatPlaceholder\", \"placeholder\", \"steps\", \"max\", \"min\", \"rangeValidation\", \"autoCorrect\", \"incompleteDateValidation\", \"twoDigitYearMax\", \"value\", \"spinners\", \"isPopupOpen\", \"hasPopup\", \"size\", \"rounded\", \"fillMode\"], outputs: [\"valueChange\", \"valueUpdate\", \"focus\", \"blur\"], exportAs: [\"kendo-dateinput\"] }, { type: CalendarComponent, selector: \"kendo-calendar\", inputs: [\"id\", \"focusedDate\", \"min\", \"max\", \"rangeValidation\", \"selection\", \"value\", \"disabled\", \"tabindex\", \"tabIndex\", \"disabledDates\", \"navigation\", \"activeView\", \"bottomView\", \"topView\", \"type\", \"animateNavigation\", \"weekNumber\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\", \"navigationItemTemplate\"], outputs: [\"activeViewChange\", \"navigate\", \"activeViewDateChange\", \"valueChange\"], exportAs: [\"kendo-calendar\"] }, { type: CalendarCustomMessagesComponent, selector: \"kendo-calendar-messages\" }], directives: [{ type: DatePickerLocalizedMessagesDirective, selector: \"[kendoDatePickerLocalizedMessages]\" }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-datepicker',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DatePickerComponent) },\n LocalizationService,\n PickerService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.datepicker'\n }\n ],\n selector: 'kendo-datepicker',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i2.PopupService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: PickerService }, { type: DisabledDatesService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], toggleButton: [{\n type: ViewChild,\n args: ['toggleButton', { static: true }]\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: false }]\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: false }]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: false }]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: false }]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: false }]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: false }]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: false }]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], navigationItemTemplate: [{\n type: ContentChild,\n args: [NavigationItemTemplateDirective, { static: false }]\n }], navigationItemTemplateRef: [{\n type: Input,\n args: ['navigationItemTemplate']\n }], focusableId: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], calendarType: [{\n type: Input\n }], animateCalendarNavigation: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], navigation: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], value: [{\n type: Input\n }], format: [{\n type: Input\n }], twoDigitYearMax: [{\n type: Input\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], title: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesValidation: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-datepicker']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }] } });\n\n/**\n * @hidden\n */\nconst TIME_PART = {\n dayperiod: 'dayperiod',\n hour: 'hour',\n millisecond: 'millisecond',\n minute: 'minute',\n second: 'second'\n};\n\n/**\n * @hidden\n */\nconst timeRangeValidator = (min, max) => {\n return (control) => {\n if (!min || !max || !control.value) {\n return null;\n }\n const err = {\n timeRangeError: {\n maxValue: max,\n minValue: min,\n value: control.value\n }\n };\n return isInTimeRange(control.value, min, max) ? null : err;\n };\n};\n\nconst HOURS_IN_DAY = 24;\nconst clampToRange$3 = (rangeValue) => (value) => value % rangeValue;\nconst clamp$3 = clampToRange$3(HOURS_IN_DAY);\nconst stepper$3 = (start, step) => (idx) => clamp$3(start + (idx * step));\nconst distanceFromMin$3 = (value, min) => clamp$3(HOURS_IN_DAY + value - min);\nconst limit$3 = (borderValue) => (barrier, value) => {\n const useBarrier = !value || getDate(barrier).getTime() === getDate(value).getTime();\n return useBarrier ? barrier : setHours$1(barrier, borderValue);\n};\nconst limitDown$3 = limit$3(0);\nconst limitUp$3 = limit$3(HOURS_IN_DAY - 1);\n/**\n * @hidden\n */\nclass HoursService {\n constructor(intl) {\n this.intl = intl;\n this.boundRange = false;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setHours$1(value, candidate.getHours());\n }\n configure(settings) {\n const { boundRange = this.boundRange, insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.boundRange = boundRange;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (hour) => {\n const date = setHours$1(MIDNIGHT_DATE, hour);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getHour = stepper$3(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getHour(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return this.boundRange ? [limitDown$3(min, value), limitUp$3(max, value)] : [min, max];\n }\n total(value) {\n const last = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastHour(value) === value.getHours();\n return matchMax || !this.isMissing(value);\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastHour(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getHours());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin$3(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setHours$1(this.max, this.lastHour(value)));\n }\n divideByStep(value) {\n return distanceFromMin$3(value.getHours(), this.min.getHours()) / this.step;\n }\n lastHour(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getHours(), max.getHours()];\n }\n}\nHoursService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HoursService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nHoursService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HoursService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HoursService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\nconst MINUTES_IN_HOUR = 60;\nconst clampToRange$2 = (rangeValue) => (value) => value % rangeValue;\nconst clamp$2 = clampToRange$2(MINUTES_IN_HOUR);\nconst stepper$2 = (start, step) => (idx) => clamp$2(start + (idx * step));\nconst distanceFromMin$2 = (value, min) => clamp$2(MINUTES_IN_HOUR + value - min);\nconst limit$2 = (borderValue) => (barrier, value) => {\n const useBarrier = !value || barrier.getHours() === value.getHours();\n return useBarrier ? barrier : setMinutes(barrier, borderValue);\n};\nconst limitDown$2 = limit$2(0);\nconst limitUp$2 = limit$2(MINUTES_IN_HOUR - 1);\n/**\n * @hidden\n */\nclass MinutesService {\n constructor(intl) {\n this.intl = intl;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setMinutes(value, candidate.getMinutes());\n }\n configure(settings) {\n const { insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (minute) => {\n const date = setMinutes(MIDNIGHT_DATE, minute);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getMinute = stepper$2(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getMinute(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return [limitDown$2(min, value), limitUp$2(max, value)];\n }\n total(value) {\n const last = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastMinute(value) === value.getMinutes();\n return matchMax || !this.isMissing(value);\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastMinute(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getMinutes());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin$2(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setMinutes(this.max, this.lastMinute(value)));\n }\n divideByStep(value) {\n return distanceFromMin$2(value.getMinutes(), this.min.getMinutes()) / this.step;\n }\n lastMinute(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getMinutes(), max.getMinutes()];\n }\n}\nMinutesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MinutesService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nMinutesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MinutesService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MinutesService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\nconst SECONDS_IN_HOUR = 60;\nconst clampToRange$1 = (rangeValue) => (value) => value % rangeValue;\nconst clamp$1 = clampToRange$1(SECONDS_IN_HOUR);\nconst stepper$1 = (start, step) => (idx) => clamp$1(start + (idx * step));\nconst distanceFromMin$1 = (value, min) => clamp$1(SECONDS_IN_HOUR + value - min);\nconst limit$1 = (borderValue) => (barrier, value) => {\n const useBarrier = !value || barrier.getHours() === value.getHours() && barrier.getMinutes() === value.getMinutes();\n return useBarrier ? barrier : setSeconds(barrier, borderValue);\n};\nconst limitDown$1 = limit$1(0);\nconst limitUp$1 = limit$1(SECONDS_IN_HOUR - 1);\n/**\n * @hidden\n */\nclass SecondsService {\n constructor(intl) {\n this.intl = intl;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setSeconds(value, candidate.getSeconds());\n }\n configure(settings) {\n const { insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (second) => {\n const date = setSeconds(MIDNIGHT_DATE, second);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getSecond = stepper$1(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getSecond(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return [limitDown$1(min, value), limitUp$1(max, value)];\n }\n total(value) {\n const last = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastSecond(value) === value.getSeconds();\n return matchMax || !this.isMissing(value);\n }\n divideByStep(value) {\n return distanceFromMin$1(value.getSeconds(), this.min.getSeconds()) / this.step;\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastSecond(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getSeconds());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin$1(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setSeconds(this.max, this.lastSecond(value)));\n }\n lastSecond(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getSeconds(), max.getSeconds()];\n }\n}\nSecondsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SecondsService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nSecondsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SecondsService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SecondsService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\nconst MILLISECONDS_IN_SECOND = 1000;\nconst clampToRange = (rangeValue) => (value) => value % rangeValue;\nconst clamp = clampToRange(MILLISECONDS_IN_SECOND);\nconst stepper = (start, step) => (idx) => clamp(start + (idx * step));\nconst distanceFromMin = (value, min) => clamp(MILLISECONDS_IN_SECOND + value - min);\nconst limit = (borderValue) => (barrier, value) => {\n const useBarrier = !value ||\n (barrier.getHours() === value.getHours() &&\n barrier.getMinutes() === value.getMinutes() &&\n barrier.getSeconds() === value.getSeconds());\n return useBarrier ? barrier : setMilliseconds(barrier, borderValue);\n};\nconst limitDown = limit(0);\nconst limitUp = limit(MILLISECONDS_IN_SECOND - 1);\n/**\n * @hidden\n */\nclass MillisecondsService {\n constructor(intl) {\n this.intl = intl;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setMilliseconds(value, candidate.getMilliseconds());\n }\n configure(settings) {\n const { insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, step = this.step } = settings;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (millisecond) => {\n const date = setMilliseconds(MIDNIGHT_DATE, millisecond);\n return {\n text: this.intl.formatDate(date, \"SSS\"),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getMillisecond = stepper(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getMillisecond(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return [limitDown(min, value), limitUp(max, value)];\n }\n total(value) {\n const last = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastMillisecond(value) === value.getMilliseconds();\n return matchMax || !this.isMissing(value);\n }\n divideByStep(value) {\n return distanceFromMin(value.getMilliseconds(), this.min.getMilliseconds()) / this.step;\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastMillisecond(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getMilliseconds());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setMilliseconds(this.max, this.lastMillisecond(value)));\n }\n lastMillisecond(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getMilliseconds(), max.getMilliseconds()];\n }\n}\nMillisecondsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MillisecondsService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nMillisecondsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MillisecondsService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MillisecondsService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\nconst setHours = (date, hours) => {\n const clone = cloneDate(date);\n clone.setHours(hours);\n return clone;\n};\nconst isAM = (value) => value !== null && value < 12;\nconst isPM = (value) => value !== null && (!value || value > 11);\nconst inRange = (value, min, max) => ((!min && !max) || (value >= min && value <= max));\nconst inReverseRange = (value, min, max) => ((!min && !max) || value >= min || value <= max);\n/**\n * @hidden\n */\nclass DayPeriodService {\n constructor(intl) {\n this.intl = intl;\n }\n /**\n * @hidden\n */\n apply(value, candidate) {\n const hour = value.getHours();\n const hourAM = isAM(hour);\n const candidateAM = isAM(candidate.getHours());\n if ((hourAM && candidateAM) || (!hourAM && !candidateAM)) {\n return value;\n }\n const [min, max = 24] = this.normalizedRange();\n const result = hour + (candidateAM ? -12 : 12);\n return setHours(value, Math.min(Math.max(min, result), (max || 24)));\n }\n /**\n * @hidden\n */\n configure(settings) {\n const { min = this.min, max = this.max, part = this.part } = settings;\n this.min = min;\n this.max = max;\n this.part = part;\n }\n /**\n * @hidden\n */\n data(_) {\n const names = this.part.names;\n if (!names) {\n return [];\n }\n const data = [];\n const [min, max] = this.normalizedRange();\n const dayPeriod = this.intl.dateFormatNames(names);\n if (isAM(min)) {\n data.push({ text: dayPeriod.am, value: setHours(this.min, min) });\n }\n if (isPM(max)) {\n data.push({ text: dayPeriod.pm, value: setHours(this.min, Math.max(12, max)) });\n }\n return this.min.getHours() !== min ? data.reverse() : data;\n }\n /**\n * @hidden\n */\n isRangeChanged(_, __) {\n return false;\n }\n /**\n * @hidden\n */\n limitRange(min, max, _) {\n return [min, max];\n }\n /**\n * @hidden\n */\n total() {\n const [min, max] = this.normalizedRange();\n if (!min && !max) {\n return 2;\n }\n if (min > 11 || max < 12) {\n return 1;\n }\n return 2;\n }\n /**\n * @hidden\n */\n selectedIndex(value) {\n if (!this.valueInList(value)) {\n return -1;\n }\n const index = Math.floor(value.getHours() / 12);\n return this.min.getHours() === this.normalizedRange()[0] ? index : (index === 0 ? 1 : 0);\n }\n /**\n * @hidden\n */\n valueInList(value) {\n const reverse = this.min.getHours() !== this.normalizedRange()[0];\n const isInRange = reverse ? inReverseRange : inRange;\n return isInRange(value.getHours(), this.min.getHours(), this.max.getHours());\n }\n normalizedRange() {\n const minHour = this.min.getHours();\n const maxHour = this.max.getHours();\n return [\n Math.min(minHour, maxHour),\n Math.max(minHour, maxHour)\n ];\n }\n}\nDayPeriodService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DayPeriodService, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Injectable });\nDayPeriodService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DayPeriodService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DayPeriodService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });\n\nconst div = domContainerFactory('div');\nconst ul = domContainerFactory('ul');\nconst li = domContainerFactory('li');\nconst span = domContainerFactory('span');\nconst listTitle = () => span('hour', 'k-title k-timeselector-title');\nconst listItem = () => li('02', 'k-item');\nconst list = () => ul([listItem()], 'k-reset');\nconst scrollable = () => (div([list()], 'k-time-container k-flex k-content k-calendar-content k-scrollable'));\nconst timeListWrapper = () => {\n if (!isDocumentAvailable()) {\n return null;\n }\n return div([listTitle(), div([scrollable()], 'k-time-list')], 'k-time-list-wrapper', { left: '-10000px', position: 'absolute' });\n};\nconst TIMELIST_WRAPPER = timeListWrapper();\n/**\n * @hidden\n */\nclass TimePickerDOMService {\n ensureHeights() {\n if (this.timeListHeight !== undefined) {\n return;\n }\n this.calculateHeights();\n }\n calculateHeights(container) {\n if (!isDocumentAvailable()) {\n return;\n }\n const listContainer = container && container.querySelector('.k-time-list-container');\n const hostContainer = listContainer || document.body;\n const wrapper = hostContainer.appendChild(TIMELIST_WRAPPER);\n this.timeListHeight = wrapper.querySelector('.k-scrollable').getBoundingClientRect().height;\n this.itemHeight = wrapper.querySelector('li').getBoundingClientRect().height;\n hostContainer.removeChild(wrapper);\n }\n isActive(element) {\n if (!isDocumentAvailable() || !element) {\n return false;\n }\n return (element.nativeElement || element) === document.activeElement;\n }\n}\nTimePickerDOMService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerDOMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nTimePickerDOMService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerDOMService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerDOMService, decorators: [{\n type: Injectable\n }] });\n\n/* eslint-disable @angular-eslint/component-selector */\nconst SNAP_THRESHOLD = 0.05; //% of the item height\nconst SCROLL_THRESHOLD = 2; //< 2px threshold\nconst nil = () => (null);\nconst getters = {\n 35: (data, _) => data[data.length - 1],\n 36: (data, _) => data[0],\n 38: (data, index) => data[index - 1],\n 40: (data, index) => data[index + 1]\n};\nconst services = {\n [TIME_PART.dayperiod]: DayPeriodService,\n [TIME_PART.hour]: HoursService,\n [TIME_PART.minute]: MinutesService,\n [TIME_PART.second]: SecondsService,\n [TIME_PART.millisecond]: MillisecondsService\n};\n/**\n * @hidden\n */\nclass TimeListComponent {\n constructor(element, injector, dom, renderer, zone) {\n this.element = element;\n this.injector = injector;\n this.dom = dom;\n this.renderer = renderer;\n this.zone = zone;\n this.min = cloneDate(MIDNIGHT_DATE);\n this.max = cloneDate(MAX_TIME);\n this.step = 1;\n this.disabled = false;\n this.valueChange = new EventEmitter();\n this.componentClass = true;\n this.animateToIndex = true;\n this.isActive = false;\n this.skip = 0;\n this.total = 60;\n this.data = [];\n this.indexToScroll = -1;\n this.domEvents = [];\n }\n get tabIndex() {\n return this.disabled ? undefined : 0;\n }\n ngOnChanges(changes) {\n if (changes.part) {\n this.service = this.injector.get(services[this.part.type]);\n this.service.configure(this.serviceSettings());\n }\n const value = this.value;\n const valueChanges = changes.value || {};\n const [min, max] = this.service.limitRange(this.min, this.max, value);\n if (this.service.isRangeChanged(min, max) || changes.min || changes.max || changes.step) {\n this.data = [];\n this.service.configure(this.serviceSettings({ min, max }));\n }\n // Skip the rendering of the list whenever possible\n if (!this.data.length || this.hasMissingValue(valueChanges)) {\n this.animateToIndex = false;\n this.data = this.service.data(value);\n }\n this.animateToIndex = this.animateToIndex && this.textHasChanged(valueChanges);\n this.total = this.service.total(value);\n this.indexToScroll = this.selectedIndex(value);\n }\n ngOnInit() {\n this.animateToIndex = true;\n this.dom.ensureHeights();\n this.itemHeight = this.dom.itemHeight;\n this.listHeight = this.dom.timeListHeight;\n this.topOffset = (this.listHeight - this.itemHeight) / 2;\n this.bottomOffset = this.listHeight - this.itemHeight;\n this.topThreshold = this.itemHeight * SNAP_THRESHOLD;\n this.bottomThreshold = this.itemHeight * (1 - SNAP_THRESHOLD);\n const translate = `translateY(${this.topOffset}px)`;\n this.style = { transform: translate, '-ms-transform': translate };\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnDestroy() {\n this.scrollSubscription.unsubscribe();\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n ngAfterViewInit() {\n this.scrollOnce((index) => this.virtualization.scrollToIndex(index));\n }\n ngAfterViewChecked() {\n this.scrollOnce((index) => {\n const action = this.animateToIndex ? 'animateToIndex' : 'scrollToIndex';\n this.virtualization[action](index);\n this.animateToIndex = true;\n });\n }\n handleChange(dataItem) {\n const candidate = this.service.apply(this.value, dataItem.value);\n if (this.value.getTime() === candidate.getTime()) {\n return;\n }\n this.indexToScroll = this.data.indexOf(dataItem);\n this.value = candidate;\n this.valueChange.emit(candidate);\n }\n handleItemClick(args) {\n const item = closestInScope(args.target, node => node.hasAttribute('data-timelist-item-index'), this.element.nativeElement);\n if (item) {\n const index = item.getAttribute('data-timelist-item-index');\n this.handleChange(this.data[index]);\n }\n }\n /**\n * Focuses the host element of the TimeList.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the TimeList component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n itemOffset(scrollTop) {\n const valueIndex = this.selectedIndex(this.value);\n const activeIndex = this.virtualization.activeIndex();\n const offset = this.virtualization.itemOffset(activeIndex);\n const distance = Math.abs(Math.ceil(scrollTop) - offset);\n if (valueIndex === activeIndex && distance < SCROLL_THRESHOLD) {\n return offset;\n }\n const scrollUp = valueIndex > activeIndex;\n const moveToNext = scrollUp && distance >= this.bottomThreshold || !scrollUp && distance > this.topThreshold;\n return moveToNext ? this.virtualization.itemOffset(activeIndex + 1) : offset;\n }\n hasMissingValue({ previousValue, currentValue }) {\n const isPreviousMissing = previousValue && !this.service.valueInList(previousValue);\n const isCurrentMissing = currentValue && !this.service.valueInList(currentValue);\n return isPreviousMissing || isCurrentMissing;\n }\n scrollOnce(action) {\n if (this.indexToScroll !== -1) {\n action(this.indexToScroll);\n this.indexToScroll = -1;\n }\n }\n serviceSettings(settings) {\n const defaults = {\n boundRange: false,\n insertUndividedMax: false,\n max: this.max,\n min: this.min,\n part: this.part,\n step: this.step\n };\n const result = Object.assign({}, defaults, settings);\n result.boundRange = result.part.type !== 'hour';\n return result;\n }\n selectedIndex(value) {\n if (!value) {\n return -1;\n }\n return this.service.selectedIndex(value);\n }\n textHasChanged({ previousValue, currentValue }) {\n if (!previousValue || !currentValue) {\n return false;\n }\n const oldData = this.data[this.selectedIndex(previousValue)];\n const newData = this.data[this.selectedIndex(currentValue)];\n return oldData && newData && oldData.text !== newData.text;\n }\n handleKeyDown(e) {\n const getter = getters[e.keyCode] || nil;\n const dataItem = getter(this.data, this.service.selectedIndex(this.value));\n if (dataItem) {\n this.handleChange(dataItem);\n e.preventDefault();\n }\n }\n bindEvents() {\n this.scrollSubscription = this.virtualization\n .scroll$()\n .pipe(debounceTime(100), map((e) => e.target.scrollTop), map((top) => this.itemOffset(top)), map((itemOffset) => this.virtualization.itemIndex(itemOffset)))\n .subscribe(index => {\n this.virtualization.scrollToIndex(index);\n this.handleChange(this.data[index]);\n });\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'mouseover', () => !this.isActive && this.focus()), this.renderer.listen(element, 'click', () => this.focus()), this.renderer.listen(element, 'blur', () => this.isActive = false), this.renderer.listen(element, 'focus', () => this.isActive = true), this.renderer.listen(element, 'keydown', this.handleKeyDown.bind(this)));\n }\n}\nTimeListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeListComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: TimePickerDOMService }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nTimeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimeListComponent, selector: \"kendo-timelist\", inputs: { min: \"min\", max: \"max\", part: \"part\", step: \"step\", disabled: \"disabled\", value: \"value\" }, outputs: { valueChange: \"valueChange\" }, host: { properties: { \"attr.tabindex\": \"this.tabIndex\", \"class.k-time-list\": \"this.componentClass\" } }, viewQueries: [{ propertyName: \"virtualization\", first: true, predicate: VirtualizationComponent, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `\n \n
    \n
  • \n {{item.text}}\n
  • \n
\n \n `, isInline: true, components: [{ type: VirtualizationComponent, selector: \"kendo-virtualization\", inputs: [\"direction\", \"itemHeight\", \"itemWidth\", \"topOffset\", \"bottomOffset\", \"maxScrollDifference\", \"scrollOffsetSize\", \"scrollDuration\", \"skip\", \"take\", \"total\"], outputs: [\"activeIndexChange\", \"pageChange\", \"scrollChange\"] }], directives: [{ type: i7.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i7.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeListComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-timelist',\n template: `\n \n
    \n
  • \n {{item.text}}\n
  • \n
\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: TimePickerDOMService }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { min: [{\n type: Input\n }], max: [{\n type: Input\n }], part: [{\n type: Input\n }], step: [{\n type: Input\n }], disabled: [{\n type: Input\n }], value: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent, { static: true }]\n }], tabIndex: [{\n type: HostBinding,\n args: [\"attr.tabindex\"]\n }], componentClass: [{\n type: HostBinding,\n args: [\"class.k-time-list\"]\n }] } });\n\nconst isEqualTillMinute = (value, min) => value.getHours() === min.getHours() && value.getMinutes() === min.getMinutes();\nconst isEqualTillSecond = (value, min) => isEqualTillMinute(value, min) && value.getSeconds() === min.getSeconds();\nconst isEqualTillMillisecond = (value, min) => isEqualTillSecond(value, min) && value.getMilliseconds() === min.getMilliseconds();\nconst defaultGetters = [\n {\n type: TIME_PART.hour,\n getter: (value) => value.getHours(),\n minGetter: (_, min) => min.getHours()\n }, {\n type: TIME_PART.minute,\n getter: (value) => value.getMinutes(),\n minGetter: (value, min) => isEqualTillMinute(value, min) ? min.getMinutes() : 0\n }, {\n type: TIME_PART.second,\n getter: (value) => value.getSeconds(),\n minGetter: (value, min) => isEqualTillSecond(value, min) ? min.getSeconds() : 0\n }, {\n type: TIME_PART.millisecond,\n getter: (value) => value.getMilliseconds(),\n minGetter: (value, min) => isEqualTillMillisecond(value, min) ? min.getMilliseconds() : 0\n }\n];\nconst left = getter => (origin, _) => getter(origin);\nconst right = getter => (_, candidate) => getter(candidate);\nconst convertToObject = (parts) => parts.reduce((obj, p) => { obj[p.type] = p.type; return obj; }, {});\nconst getterByPart = parts => g => parts[g.type] ? right(g.getter) : left(g.getter);\nconst gettersFactory = getters => parts => (getters.map(getterByPart(convertToObject(parts))));\nconst snapValue = (getter, minGetter, step) => (date, min) => {\n const value = getter(date);\n const minValue = minGetter(date, min);\n const rest = value - minValue;\n if (rest < 0) {\n return minValue;\n }\n const mod = rest % step;\n return value - mod + (mod > step / 2 ? step : 0);\n};\nconst snappersFactory = (getters) => steps => (getters.map(g => {\n const step = steps[g.type];\n return step ? snapValue(g.getter, g.minGetter, step) : g.getter;\n}));\n/**\n * @hidden\n */\nconst generateGetters = gettersFactory(defaultGetters);\n/**\n * @hidden\n */\nconst generateSnappers = snappersFactory(defaultGetters);\n/**\n * @hidden\n */\nconst valueMerger = getters => (origin, candidate) => {\n origin.setHours(...getters.map(g => g(origin, candidate)));\n return origin;\n};\n/**\n * @hidden\n */\nconst snapTime = snappers => (candidate, min) => {\n const date = cloneDate(candidate);\n date.setHours(...snappers.map(s => s(date, min)));\n return date;\n};\n\n/**\n * @hidden\n */\nclass TimePickerMessages extends ComponentMessages {\n}\nTimePickerMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nTimePickerMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimePickerMessages, selector: \"kendo-timepicker-messages-base\", inputs: { accept: \"accept\", acceptLabel: \"acceptLabel\", cancel: \"cancel\", cancelLabel: \"cancelLabel\", now: \"now\", nowLabel: \"nowLabel\", toggle: \"toggle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line\n selector: 'kendo-timepicker-messages-base'\n }]\n }], propDecorators: { accept: [{\n type: Input\n }], acceptLabel: [{\n type: Input\n }], cancel: [{\n type: Input\n }], cancelLabel: [{\n type: Input\n }], now: [{\n type: Input\n }], nowLabel: [{\n type: Input\n }], toggle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass TimeSelectorLocalizedMessagesDirective extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nTimeSelectorLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeSelectorLocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nTimeSelectorLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimeSelectorLocalizedMessagesDirective, selector: \"[kendoTimeSelectorLocalizedMessages]\", providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorLocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeSelectorLocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorLocalizedMessagesDirective)\n }\n ],\n selector: '[kendoTimeSelectorLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst listReducer = (state, list, idx, all) => {\n if (state.length || !list.isActive) {\n return state;\n }\n return [{\n next: all[idx + 1] || list,\n prev: all[idx - 1] || list\n }];\n};\nvar Direction;\n(function (Direction) {\n Direction[Direction[\"Left\"] = 0] = \"Left\";\n Direction[Direction[\"Right\"] = 1] = \"Right\";\n})(Direction || (Direction = {}));\n/**\n * @hidden\n *\n * Represents the Kendo UI TimeSelector component for Angular.\n */\nclass TimeSelectorComponent {\n constructor(localization, cdr, element, intl, dom, zone, renderer, pickerService) {\n this.localization = localization;\n this.cdr = cdr;\n this.element = element;\n this.intl = intl;\n this.dom = dom;\n this.zone = zone;\n this.renderer = renderer;\n this.pickerService = pickerService;\n /**\n * Specifies the time format used to display the time list columns.\n */\n this.format = 't';\n /**\n * Specifies the smallest valid time value.\n */\n this.min = cloneDate(MIN_TIME);\n /**\n * Specifies the biggest valid time value.\n */\n this.max = cloneDate(MAX_TIME);\n /**\n * Determines whether to display the **Cancel** button in the popup.\n */\n this.cancelButton = true;\n /**\n * Determines whether to display the **Set** button in the popup.\n */\n this.setButton = true;\n /**\n * Determines whether to display the **Now** button in the popup.\n *\n * > If the current time is out of range or the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n this.nowButton = true;\n /**\n * Sets or gets the `disabled` property of the TimeSelector and determines whether the component is active.\n */\n this.disabled = false;\n /**\n * Specifies the value of the TimeSelector component.\n */\n this.value = null;\n /**\n * Fires each time the user selects a new value.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user cancels the selected value.\n */\n this.valueReject = new EventEmitter();\n this.isActive = false;\n this.showNowButton = true;\n this._activeListIndex = -1;\n this._steps = {};\n this.domEvents = [];\n if (this.pickerService) {\n this.pickerService.timeSelector = this;\n }\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * Configures the incremental steps of the TimeSelector.\n *\n * The available options are:\n * - `hour: Number`—Controls the incremental step of the hour value.\n * - `minute: Number`—Controls the incremental step of the minute value.\n * - `second: Number`—Controls the incremental step of the second value.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public steps = { hour: 2, minute: 15, second: 15 };\n * }\n * ```\n *\n * > If the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n set steps(steps) {\n this._steps = steps || {};\n }\n get steps() {\n return this._steps;\n }\n set current(value) {\n this._current = timeInRange(this.snapTime(cloneDate(value || MIDNIGHT_DATE), this.min), this.min, this.max);\n if (!NgZone.isInAngularZone()) {\n this.cdr.detectChanges();\n }\n }\n get current() {\n return this._current;\n }\n get activeListIndex() {\n return this._activeListIndex;\n }\n set activeListIndex(value) {\n this._activeListIndex = value;\n if (!this.timeListWrappers || !this.timeListWrappers.length) {\n return;\n }\n this.timeListWrappers.forEach(listWrapper => {\n this.renderer.removeClass(listWrapper.nativeElement, 'k-focus');\n });\n if (value >= 0) {\n const listIndex = this.listIndex(value);\n const focusedWrapper = this.timeListWrappers.toArray()[listIndex];\n if (focusedWrapper) {\n this.renderer.addClass(focusedWrapper.nativeElement, 'k-focus');\n }\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.subscriptions = this.intl.changes.subscribe(this.intlChange.bind(this));\n if (this.localization) {\n this.subscriptions.add(this.localization\n .changes\n .subscribe(() => this.cdr.markForCheck()));\n }\n this.renderer.addClass(this.element.nativeElement, 'k-timeselector');\n this.dom.calculateHeights(this.element.nativeElement);\n this.init();\n this.bindEvents();\n }\n /**\n * @hidden\n */\n ngOnChanges(_) {\n this.init();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.pickerService) {\n this.pickerService.timeSelector = null;\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n /**\n * Focuses the TimeSelector component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n const list = this.timeLists.first;\n if (!list) {\n return;\n }\n list.focus();\n }\n /**\n * Blurs the TimeSelector component.\n */\n blur() {\n const list = this.timeLists.first;\n if (!list) {\n return;\n }\n list.blur();\n }\n /**\n * @hidden\n */\n handleAccept() {\n this.handleChange(this.mergeValue(cloneDate(this.value || getDate(getNow())), this.current));\n }\n /**\n * @hidden\n */\n handleNow() {\n this.current = getNow();\n this.handleChange(this.current);\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleReject() {\n this.current = this.value;\n this.valueReject.emit();\n }\n /**\n * @hidden\n */\n handleFocus(args) {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n this.emitFocus(args);\n }\n /**\n * @hidden\n */\n handleListFocus(args) {\n const index = parseInt(args.target.getAttribute('data-timelist-index'), 10);\n this.activeListIndex = index;\n this.handleFocus(args);\n }\n /**\n * @hidden\n */\n handleBlur(args) {\n const currentTarget = currentFocusTarget(args);\n if (currentTarget && this.containsElement(currentTarget)) {\n return;\n }\n this.activeListIndex = -1;\n this.isActive = false;\n this.emitBlur(args);\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n partStep(part) {\n return this.steps[part.type] || 1;\n }\n init(changes) {\n if (!changes || hasChange(changes, 'format')) {\n this.dateFormatParts = this.intl.splitDateFormat(this.format);\n this.mergeValue = valueMerger(generateGetters(this.dateFormatParts));\n }\n if (!changes || hasChange(changes, 'steps')) {\n this.snapTime = snapTime(generateSnappers(this.steps));\n }\n if (!changes || hasChange(changes, 'value')) {\n this.current = this.value;\n }\n this.showNowButton = !this.hasSteps() && this.nowButton && isInTimeRange(getNow(), this.min, this.max);\n }\n focusList(dir) {\n if (!this.timeLists.length) {\n return;\n }\n this.timeLists.reduce(listReducer, [])\n .map(state => dir === Direction.Right ? state.next : state.prev)\n .map(list => list && list.focus());\n }\n handleChange(value) {\n this.value = value;\n this.valueChange.emit(cloneDate(value));\n }\n hasActiveButton() {\n if (!this.accept) {\n return false;\n }\n return [this.accept, this.cancel, this.now].reduce((isActive, el) => isActive || this.dom.isActive(el), false);\n }\n hasSteps() {\n const keys = Object.keys(this.steps);\n return keys.length !== keys.reduce((acc, k) => acc + this.steps[k], 0);\n }\n intlChange() {\n this.dateFormatParts = this.intl.splitDateFormat(this.format);\n this.mergeValue = valueMerger(generateGetters(this.dateFormatParts));\n this.cdr.markForCheck();\n }\n bindEvents() {\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.domEvents.push(this.renderer.listen(this.element.nativeElement, 'keydown', this.handleKeydown.bind(this)));\n });\n }\n }\n handleKeydown(args) {\n const { keyCode, altKey } = args;\n // reserve the alt + arrow key commands for the picker\n const arrowKeyPressed = [Keys.ArrowLeft, Keys.ArrowRight].indexOf(keyCode) !== -1;\n if (isPresent(this.pickerService) && arrowKeyPressed && altKey) {\n return;\n }\n if (keyCode === Keys.Enter && !this.hasActiveButton()) {\n this.handleAccept();\n }\n else if (keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight) {\n this.focusList(keyCode === Keys.ArrowLeft ? Direction.Left : Direction.Right);\n }\n }\n emitBlur(args) {\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n emitFocus(args) {\n if (this.pickerService) {\n this.pickerService.onFocus.emit(args);\n }\n }\n listIndex(partIndex) {\n let listIdx = 0;\n let partIdx = 0;\n while (partIdx < partIndex) {\n if (this.dateFormatParts[partIdx].type !== 'literal') {\n listIdx++;\n }\n partIdx++;\n }\n return listIdx;\n }\n}\nTimeSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeSelectorComponent, deps: [{ token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.IntlService }, { token: TimePickerDOMService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: PickerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nTimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimeSelectorComponent, selector: \"kendo-timeselector\", inputs: { format: \"format\", min: \"min\", max: \"max\", cancelButton: \"cancelButton\", setButton: \"setButton\", nowButton: \"nowButton\", disabled: \"disabled\", steps: \"steps\", value: \"value\" }, outputs: { valueChange: \"valueChange\", valueReject: \"valueReject\" }, host: { properties: { \"class.k-disabled\": \"this.disabledClass\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timeselector'\n }\n ], viewQueries: [{ propertyName: \"accept\", first: true, predicate: [\"accept\"], descendants: true }, { propertyName: \"cancel\", first: true, predicate: [\"cancel\"], descendants: true }, { propertyName: \"now\", first: true, predicate: [\"now\"], descendants: true }, { propertyName: \"timeLists\", predicate: TimeListComponent, descendants: true }, { propertyName: \"timeListWrappers\", predicate: [\"listWrapper\"], descendants: true }], exportAs: [\"kendo-timeselector\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n
\n \n {{ intl.formatDate(current, format) }}\n \n {{localization.get('now')}}\n
\n
\n \n \n \n {{intl.dateFieldName(part)}}\n \n
\n
\n {{part.pattern}}\n
\n
\n \n \n `, isInline: true, components: [{ type: TimeListComponent, selector: \"kendo-timelist\", inputs: [\"min\", \"max\", \"part\", \"step\", \"disabled\", \"value\"], outputs: [\"valueChange\"] }], directives: [{ type: TimeSelectorLocalizedMessagesDirective, selector: \"[kendoTimeSelectorLocalizedMessages]\" }, { type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i7.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeSelectorComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-timeselector',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timeselector'\n }\n ],\n selector: 'kendo-timeselector',\n template: `\n \n \n
\n \n {{ intl.formatDate(current, format) }}\n \n {{localization.get('now')}}\n
\n
\n \n \n \n {{intl.dateFieldName(part)}}\n \n
\n
\n {{part.pattern}}\n
\n
\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.IntlService }, { type: TimePickerDOMService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { accept: [{\n type: ViewChild,\n args: ['accept', { static: false }]\n }], cancel: [{\n type: ViewChild,\n args: ['cancel', { static: false }]\n }], now: [{\n type: ViewChild,\n args: ['now', { static: false }]\n }], timeLists: [{\n type: ViewChildren,\n args: [TimeListComponent]\n }], timeListWrappers: [{\n type: ViewChildren,\n args: ['listWrapper']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], format: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], setButton: [{\n type: Input\n }], nowButton: [{\n type: Input\n }], disabled: [{\n type: Input\n }], steps: [{\n type: Input\n }], value: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], valueReject: [{\n type: Output\n }] } });\n\n/**\n * @hidden\n *\n * Custom component messages override default component messages.\n */\nclass TimeSelectorCustomMessagesComponent extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTimeSelectorCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeSelectorCustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nTimeSelectorCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimeSelectorCustomMessagesComponent, selector: \"kendo-timeselector-messages\", providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimeSelectorCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorCustomMessagesComponent)\n }\n ],\n selector: 'kendo-timeselector-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\n/**\n * @hidden\n */\nclass TimePickerLocalizedMessagesDirective extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nTimePickerLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerLocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nTimePickerLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimePickerLocalizedMessagesDirective, selector: \"[kendoTimePickerLocalizedMessages]\", providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerLocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerLocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerLocalizedMessagesDirective)\n }\n ],\n selector: '[kendoTimePickerLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst VALUE_DOC_LINK$1 = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/timepicker/#toc-integration-with-json';\nconst INTL_DATE_FORMAT = 'https://github.com/telerik/kendo-intl/blob/master/docs/date-formatting/index.md';\nconst formatRegExp = new RegExp(`${TIME_PART.hour}|${TIME_PART.minute}|${TIME_PART.second}|${TIME_PART.millisecond}|${TIME_PART.dayperiod}|literal`);\n/**\n * Represents the [Kendo UI TimePicker component for Angular]({% slug overview_timepicker %}#toc-basic-usage).\n */\nclass TimePickerComponent {\n constructor(zone, localization, cdr, popupService, wrapper, renderer, injector, pickerService, intl, touchEnabled) {\n this.zone = zone;\n this.localization = localization;\n this.cdr = cdr;\n this.popupService = popupService;\n this.wrapper = wrapper;\n this.renderer = renderer;\n this.injector = injector;\n this.pickerService = pickerService;\n this.intl = intl;\n this.touchEnabled = touchEnabled;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets or gets the `disabled` property of the TimePicker and\n * determines whether the component is active\n * ([see example]({% slug disabled_timepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the TimePicker\n * ([see example]({% slug readonly_timepicker %}#toc-read-only-timepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the TimePicker input field\n * ([see example]({% slug readonly_timepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_timepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Specifies the time format that is used to display the input value\n * ([see example]({% slug formats_timepicker %})).\n */\n this.format = 't';\n /**\n * Specifies the hint the TimePicker displays when its value is `null`.\n * For more information, refer to the article on\n * [placeholders]({% slug placeholders_timepicker %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Determines whether to display the **Cancel** button in the popup.\n */\n this.cancelButton = true;\n /**\n * Determines whether to display the **Now** button in the popup.\n *\n * > If the current time is out of range or the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n this.nowButton = true;\n /**\n * Sets or gets the `tabindex` property of the TimePicker.\n */\n this.tabindex = 0;\n /**\n * Sets the title of the input element of the TimePicker.\n */\n this.title = \"\";\n /**\n * Determines whether the built-in min or max validators are enforced when a form is being validated.\n */\n this.rangeValidation = true;\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the input element.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the input element gets blurred.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.wrapperClasses = true;\n this.popupUID = guid();\n this.onControlChange = noop$2;\n this.onControlTouched = noop$2;\n this.onValidatorChange = noop$2;\n this.resolvedPromise = Promise.resolve(null);\n this.timeRangeValidateFn = noop$2;\n this.incompleteValidator = noop$2;\n this._min = cloneDate(MIN_TIME);\n this._max = cloneDate(MAX_TIME);\n this._popupSettings = { animate: true };\n this._show = false;\n this._steps = {};\n this._value = null;\n this._active = false;\n this.domEvents = [];\n this._size = DEFAULT_SIZE;\n this._rounded = DEFAULT_ROUNDED;\n this._fillMode = DEFAULT_FILL_MODE;\n validatePackage(packageMetadata);\n this.pickerSubscriptions = this.pickerService.onFocus.subscribe(this.handleFocus.bind(this));\n this.pickerSubscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n }\n /**\n * Specifies the smallest valid time value\n * ([see example]({% slug timeranges_timepicker %})).\n */\n set min(min) {\n this._min = cloneDate(min || MIN_TIME);\n }\n get min() {\n return this._min;\n }\n /**\n * Specifies the biggest valid time value\n * ([see example]({% slug timeranges_timepicker %})).\n */\n set max(max) {\n this._max = cloneDate(max || MAX_TIME);\n }\n get max() {\n return this._max;\n }\n /**\n * Configures the incremental steps of the TimePicker.\n * For more information, refer to the article on\n * [incremental steps]({% slug incrementalsteps_timepicker %}).\n *\n * > If the incremental step is greater than `1`, the **Now** button will be hidden.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public steps = { hour: 2, minute: 15, second: 15, millisecond: 10 };\n * }\n * ```\n *\n */\n set steps(steps) {\n this._steps = steps || {};\n }\n get steps() {\n return this._steps;\n }\n /**\n * Configures the popup of the TimePicker.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Specifies the value of the TimePicker component.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n }\n get value() {\n return this._value;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n this.renderer.removeClass(this.toggleButton.nativeElement, getSizeClass('input', this.size));\n const newSize = size ? size : DEFAULT_SIZE;\n if (newSize !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', newSize));\n this.renderer.addClass(this.toggleButton.nativeElement, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n if (newRounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `solid` (Default)\n * * `flat`\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n this.renderer.removeClass(this.toggleButton.nativeElement, getFillModeClass('button', this.fillMode));\n this.renderer.removeClass(this.toggleButton.nativeElement, `k-button-${this.fillMode}-base`);\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE;\n if (newFillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', newFillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, getFillModeClass('button', newFillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, `k-button-${newFillMode}-base`);\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrapper) {\n return;\n }\n const element = this.wrapper.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-focus');\n }\n else {\n this.renderer.removeClass(element, 'k-focus');\n }\n }\n get show() {\n return this._show;\n }\n set show(show) {\n if (show && (this.disabled || this.readonly)) {\n return;\n }\n const skipZone = !show && (!this._show || !hasObservers(this.close));\n if (!skipZone) {\n this.zone.run(() => {\n this.togglePopup(show);\n });\n }\n else {\n this.togglePopup(show);\n }\n }\n get input() {\n return this.pickerService.input;\n }\n get timeSelector() {\n return this.pickerService.timeSelector;\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty\n */\n isEmpty() {\n return !this.value && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(() => this.cdr.markForCheck());\n this.control = this.injector.get(NgControl, null);\n if (this.wrapper) {\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'tabindex');\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.setComponentClasses();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.min || changes.max || changes.rangeValidation || changes.incompleteDateValidation) {\n this.timeRangeValidateFn = this.rangeValidation ? timeRangeValidator(this.min, this.max) : noop$2;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop$2;\n this.onValidatorChange();\n }\n if (changes.format) {\n this.verifyFormat();\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.isActive = false;\n this.show = false;\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n this.pickerSubscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const { altKey, keyCode } = event;\n if (keyCode === Keys.Escape) {\n this.show = false;\n return;\n }\n if (altKey) {\n if (keyCode === Keys.ArrowUp) {\n this.show = false;\n }\n if (keyCode === Keys.ArrowDown && !this.show) {\n this.show = true;\n }\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.value = cloneDate(value);\n this.cdr.markForCheck();\n if (!value && this.input) {\n this.input.placeholder = this.placeholder;\n this.input.writeValue(value);\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.timeRangeValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * Focuses the TimePicker component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n this.input.focus();\n }\n /**\n * Blurs the TimePicker component.\n */\n blur() {\n (this.timeSelector || this.input)['blur']();\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.show;\n }\n /**\n * @hidden\n */\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * @hidden\n */\n handleChange(value) {\n if (isEqual(this.value, value)) {\n this.focusInput();\n this.show = false;\n return;\n }\n this.value = cloneDate(value);\n this.zone.run(() => {\n this.focusInput();\n this.show = false;\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n });\n }\n /**\n * @hidden\n */\n handleReject() {\n this.show = false;\n }\n /**\n * @hidden\n */\n handleInputChange(value) {\n const val = this.input.formatSections.date ? value : this.mergeTime(value);\n this.handleChange(val);\n }\n /**\n * @hidden\n */\n handleMousedown(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n event.preventDefault();\n this.focusInput();\n //XXX: explicit call handleFocus handler here\n //due to async IE focus event\n this.handleFocus();\n this.show = !this.show;\n }\n /**\n * @hidden\n */\n get popupClasses() {\n return [\n 'k-group',\n 'k-reset'\n ].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n normalizeTime(date) {\n return setTime(MIDNIGHT_DATE, date);\n }\n /**\n * @hidden\n */\n mergeTime(value) {\n return this.value && value ? setTime(this.value, value) : value;\n }\n togglePopup(show) {\n const event = new PreventableEvent();\n if (!this._show && show) {\n this.open.emit(event);\n }\n else if (this._show && !show) {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n this.toggleFocus();\n }\n _toggle(show) {\n if (show === this.isOpen) {\n return;\n }\n this._show = show;\n this.cdr.markForCheck();\n if (show) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: { vertical: 'top', horizontal: direction },\n popupClass: this.popupClasses,\n positionMode: 'absolute'\n });\n this.popupRef.popupElement.setAttribute('id', this.popupUID);\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.show = false);\n }\n else {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n focusInput() {\n if (this.touchEnabled) {\n return;\n }\n this.input.focus();\n }\n toggleFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.show) {\n if (!this.timeSelector) {\n this.cdr.detectChanges();\n }\n if (this.isActive) {\n this.timeSelector.focus();\n }\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$1} for possible resolution.`);\n }\n }\n verifyFormat() {\n if (!isDevMode()) {\n return;\n }\n const formatContainsDateParts = this.intl.splitDateFormat(this.format).some(part => !formatRegExp.test(part.type));\n if (formatContainsDateParts) {\n throw new Error(`Provided format is not supported. Supported specifiers are T|t|H|h|m|s|S|a. See ${INTL_DATE_FORMAT}`);\n }\n }\n bindEvents() {\n const element = this.wrapper.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n if (isWindowAvailable()) {\n this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this));\n }\n }\n handleWindowBlur() {\n if (!this.isOpen) {\n return;\n }\n this.show = false;\n }\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleBlur(args) {\n const currentTarget = args && currentFocusTarget(args);\n if (currentTarget && (this.input.containsElement(currentTarget) ||\n (this.timeSelector && this.timeSelector.containsElement(currentTarget)))) {\n return;\n }\n if (hasObservers(this.onBlur) || (this.show && hasObservers(this.close)) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.blurComponent();\n this.cdr.markForCheck();\n });\n }\n else {\n this.blurComponent();\n }\n }\n blurComponent() {\n this.isActive = false; // order is important ¯\\_(ツ)_/¯\n this.show = false;\n this.onControlTouched();\n this.onBlur.emit();\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.zone.run(() => this.onValidatorChange());\n }\n setComponentClasses() {\n if (this.size) {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n this.renderer.addClass(this.toggleButton.nativeElement, getSizeClass('button', this.size));\n }\n if (this.rounded) {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode) {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, getFillModeClass('button', this.fillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, `k-button-${this.fillMode}-base`);\n }\n }\n}\nTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerComponent, deps: [{ token: i0.NgZone }, { token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i2.PopupService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: PickerService }, { token: i1.IntlService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimePickerComponent, selector: \"kendo-timepicker\", inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", format: \"format\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", min: \"min\", max: \"max\", incompleteDateValidation: \"incompleteDateValidation\", cancelButton: \"cancelButton\", nowButton: \"nowButton\", steps: \"steps\", popupSettings: \"popupSettings\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", title: \"title\", rangeValidation: \"rangeValidation\", value: \"value\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, host: { properties: { \"class.k-timepicker\": \"this.wrapperClasses\", \"class.k-input\": \"this.wrapperClasses\", \"class.k-disabled\": \"this.disabledClass\" } }, providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => TimePickerComponent) },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timepicker'\n },\n PickerService\n ], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true }, { propertyName: \"toggleButton\", first: true, predicate: [\"toggleButton\"], descendants: true, static: true }], exportAs: [\"kendo-timepicker\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `, isInline: true, components: [{ type: DateInputComponent, selector: \"kendo-dateinput\", inputs: [\"focusableId\", \"disabled\", \"readonly\", \"title\", \"tabindex\", \"role\", \"ariaReadOnly\", \"tabIndex\", \"format\", \"formatPlaceholder\", \"placeholder\", \"steps\", \"max\", \"min\", \"rangeValidation\", \"autoCorrect\", \"incompleteDateValidation\", \"twoDigitYearMax\", \"value\", \"spinners\", \"isPopupOpen\", \"hasPopup\", \"size\", \"rounded\", \"fillMode\"], outputs: [\"valueChange\", \"valueUpdate\", \"focus\", \"blur\"], exportAs: [\"kendo-dateinput\"] }, { type: TimeSelectorComponent, selector: \"kendo-timeselector\", inputs: [\"format\", \"min\", \"max\", \"cancelButton\", \"setButton\", \"nowButton\", \"disabled\", \"steps\", \"value\"], outputs: [\"valueChange\", \"valueReject\"], exportAs: [\"kendo-timeselector\"] }, { type: TimeSelectorCustomMessagesComponent, selector: \"kendo-timeselector-messages\" }], directives: [{ type: TimePickerLocalizedMessagesDirective, selector: \"[kendoTimePickerLocalizedMessages]\" }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-timepicker',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => TimePickerComponent) },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timepicker'\n },\n PickerService\n ],\n selector: 'kendo-timepicker',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i2.PopupService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: PickerService }, { type: i1.IntlService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: false }]\n }], toggleButton: [{\n type: ViewChild,\n args: ['toggleButton', { static: true }]\n }], focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], format: [{\n type: Input\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], nowButton: [{\n type: Input\n }], steps: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], title: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], value: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-timepicker']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }] } });\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: Messages, selector: \"kendo-datetimepicker-messages-base\", inputs: { toggle: \"toggle\", dateTab: \"dateTab\", dateTabLabel: \"dateTabLabel\", timeTab: \"timeTab\", timeTabLabel: \"timeTabLabel\", accept: \"accept\", acceptLabel: \"acceptLabel\", cancel: \"cancel\", cancelLabel: \"cancelLabel\", today: \"today\", now: \"now\", nowLabel: \"nowLabel\", prevButtonTitle: \"prevButtonTitle\", nextButtonTitle: \"nextButtonTitle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line\n selector: 'kendo-datetimepicker-messages-base'\n }]\n }], propDecorators: { toggle: [{\n type: Input\n }], dateTab: [{\n type: Input\n }], dateTabLabel: [{\n type: Input\n }], timeTab: [{\n type: Input\n }], timeTabLabel: [{\n type: Input\n }], accept: [{\n type: Input\n }], acceptLabel: [{\n type: Input\n }], cancel: [{\n type: Input\n }], cancelLabel: [{\n type: Input\n }], today: [{\n type: Input\n }], now: [{\n type: Input\n }], nowLabel: [{\n type: Input\n }], prevButtonTitle: [{\n type: Input\n }], nextButtonTitle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedMessagesDirective, selector: \"[kendoDateTimePickerLocalizedMessages]\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: '[kendoDateTimePickerLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst timeFormatRegExp = new RegExp(`${TIME_PART.hour}|${TIME_PART.minute}|${TIME_PART.second}|${TIME_PART.dayperiod}|literal`);\nconst VALUE_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/datetimepicker/integration-with-json/';\nconst MIN_MAX_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/datetimepicker/date-time-limits/';\nconst DEFAULT_ACTIVE_TAB = 'date';\nconst DEFAULT_DATEINPUT_FORMAT = 'g';\nconst DEFAULT_TIMESELECTOR_FORMAT = 't';\nconst TWO_DIGIT_YEAR_MAX = 68;\n/**\n * Represents the [Kendo UI DateTimePicker component for Angular]({% slug overview_datetimepicker %}).\n */\nclass DateTimePickerComponent {\n constructor(popupService, intl, cdr, pickerService, ngZone, wrapper, touchEnabled, localization, disabledDatesService, renderer) {\n this.popupService = popupService;\n this.intl = intl;\n this.cdr = cdr;\n this.pickerService = pickerService;\n this.ngZone = ngZone;\n this.wrapper = wrapper;\n this.touchEnabled = touchEnabled;\n this.localization = localization;\n this.disabledDatesService = disabledDatesService;\n this.renderer = renderer;\n /**\n * @hidden\n */\n this.hostClasses = true;\n /**\n * The maximum year to assume to be from the current century when typing two-digit year value\n * ([see example]({% slug formats_datetimepicker %}#toc-two-digit-year-format)).\n *\n * The default value is 68, indicating that typing any value less than 69\n * will be assumed to be 20xx, while 69 and larger will be assumed to be 19xx.\n */\n this.twoDigitYearMax = TWO_DIGIT_YEAR_MAX;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets the title of the input element of the DateTimePicker.\n */\n this.title = '';\n /**\n * Sets or gets the `disabled` property of the DateTimePicker and determines whether the component is active\n * ([see example]({% slug disabled_datetimepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the DateTimePicker\n * ([see example]({% slug readonly_datetimepicker %}#toc-read-only-datetimepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the DateTimePicker input field\n * ([see example]({% slug readonly_datetimepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_datetimepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Determines whether to display the **Cancel** button in the popup\n * ([see example]({% slug datetimepicker_popup_options %}#toc-toggling-the-cancel-button)).\n */\n this.cancelButton = true;\n /**\n * Configures the incremental steps of the DateInput and the popup component of the TimePicker\n * ([see example]({% slug incrementalsteps_datetimepicker %})).\n */\n this.steps = {};\n /**\n * Specifies the Calendar type.\n *\n * The possible values are:\n * - `infinite` (default)\n * - `classic`\n *\n */\n this.calendarType = 'infinite';\n /**\n * Determines whether to enable animation when navigating to previous/next Calendar view.\n * Applies to the [`classic`]({% slug api_dateinputs_datetimepickercomponent %}#toc-calendartype) Calendar only.\n *\n * > This feature uses the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). In order to run the animation in browsers that do not support it, you need the `web-animations-js` polyfill.\n *\n * @default false\n */\n this.animateCalendarNavigation = false;\n /**\n * Determines whether to display a week number column in the `month` view of the popup Calendar\n * ([see example]({% slug datetimepicker_calendar_options %}#toc-week-number-column)).\n */\n this.weekNumber = false;\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form\n * ([see example]({% slug dateranges_datetimepicker %}#toc-prevent-invalid-input)).\n */\n this.rangeValidation = true;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_datetimepicker %}#toc-validation)).\n */\n this.disabledDatesValidation = true;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Fires each time the user selects a new value.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event by setting `event.preventDefault()`, the popup will remain closed.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event by setting `event.preventDefault()`, the popup will remain open.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the user focuses the component.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the user blurs the component.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n *\n * Controls whether the Calendar or the TimeSelector will be displayed.\n */\n this.activeTab = DEFAULT_ACTIVE_TAB;\n /**\n * @hidden\n *\n * Specifies the stripped time-related format that is used in the TimeSelector.\n * Updates each time the `format` property value changes.\n */\n this.timeSelectorFormat = DEFAULT_TIMESELECTOR_FORMAT;\n /**\n * @hidden\n */\n this.timeSelectorMin = cloneDate(MIN_TIME);\n /**\n * @hidden\n */\n this.timeSelectorMax = cloneDate(MAX_TIME);\n /**\n * @hidden\n */\n this.calendarValue = null;\n /**\n * @hidden\n */\n this.calendarMin = cloneDate(MIN_DATE);\n /**\n * @hidden\n */\n this.calendarMax = lastMillisecondOfDate(MAX_DATE);\n this._popupSettings = { animate: true };\n this._value = null;\n this._format = DEFAULT_DATEINPUT_FORMAT;\n this._tabindex = 0;\n this._defaultTab = DEFAULT_ACTIVE_TAB;\n this._min = mergeDateAndTime(MIN_DATE, MIN_TIME);\n this._max = mergeDateAndTime(MAX_DATE, MAX_TIME);\n this._isActive = false;\n this.onControlTouched = noop$2;\n this.onControlChange = noop$2;\n this.onValidatorChange = noop$2;\n this.minValidateFn = noop$2;\n this.maxValidateFn = noop$2;\n this.disabledDatesValidateFn = noop$2;\n this.incompleteValidator = noop$2;\n this.subscriptions = new Subscription();\n this._size = DEFAULT_SIZE;\n this._rounded = DEFAULT_ROUNDED;\n this._fillMode = DEFAULT_FILL_MODE;\n validatePackage(packageMetadata);\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get input() {\n return this.pickerService.input;\n }\n /**\n * @hidden\n */\n get calendar() {\n return this.pickerService.calendar;\n }\n /**\n * @hidden\n */\n get timeSelector() {\n return this.pickerService.timeSelector;\n }\n /**\n * Specifies the value of the DateTimePicker component.\n *\n * > The `value` has to be a valid [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n this.setCalendarValue(value);\n this.cdr.markForCheck();\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the date format for displaying the input value\n * ([see example]({% slug formats_datetimepicker %}))\n *\n * Format value options:\n * - `string` - Provide a `string` if a single format is going to be used regardless whether the input is focused or blurred.\n * - [`FormatSettings`]({% slug api_dateinputs_formatsettings %}) - To display different formats when the component is focused or blurred, provide a settings object with specified `inputFormat` and `displayFormat` values.\n *\n * > If a [`FormatSettings`]({% slug api_dateinputs_formatsettings %}) object is provided, the `displayFormat` value will be used for the popup TimePicker.\n */\n set format(format) {\n this._format = format;\n const displayFormat = this.getDisplayFormat(format);\n this.timeSelectorFormat = this.getTimeSelectorFormat(displayFormat);\n }\n get format() {\n return this._format;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the DateTimePicker.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return this.disabled ? -1 : this._tabindex;\n }\n /**\n * Sets the dates of the DateTimePicker that will be disabled\n * ([see example]({% slug disabled_dates_datetimepicker %})).\n */\n set disabledDates(value) {\n this._disabledDates = value;\n this.disabledDatesService.initialize(value);\n }\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * Configures the popup settings of the DateTimePicker\n * ([see example]({% slug datetimepicker_popup_options %}#toc-customizing-the-popup)).\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the smallest valid date.\n * The Calendar will not display dates before this value.\n * If the `min` value of the Calendar is selected, the TimePicker will not display\n * time entries before the specified time portion of this value\n * ([see example]({% slug dateranges_datetimepicker %})).\n */\n set min(value) {\n if (!isPresent(value)) {\n return;\n }\n this._min = cloneDate(value);\n this.calendarMin = getDate(value);\n }\n get min() {\n return this._min;\n }\n /**\n * Specifies the biggest valid date.\n * The Calendar will not display dates after this value.\n * If the `max` value of the Calendar is selected, the TimePicker will not display\n * time entries after the specified time portion of this value\n * ([see example]({% slug dateranges_datetimepicker %})).\n */\n set max(value) {\n if (!isPresent(value)) {\n return;\n }\n this._max = cloneDate(value);\n this.calendarMax = lastMillisecondOfDate(value);\n }\n get max() {\n return this._max;\n }\n /**\n * Indicates whether the component is currently open.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n /**\n * Indicates whether the component or its popup content is focused.\n */\n get isActive() {\n return this._isActive;\n }\n set isActive(value) {\n if (value) {\n this.renderer.addClass(this.wrapper.nativeElement, 'k-focus');\n }\n else {\n this.renderer.removeClass(this.wrapper.nativeElement, 'k-focus');\n }\n this._isActive = value;\n }\n /**\n * Sets the active tab on opening the popup\n * ([see example]({% slug datetimepicker_popup_options %}#toc-setting-the-default-tab)).\n */\n set defaultTab(tab) {\n this._defaultTab = tab || DEFAULT_ACTIVE_TAB;\n this.activeTab = this.defaultTab;\n }\n get defaultTab() {\n return this._defaultTab;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n this.renderer.removeClass(this.toggleButton.nativeElement, getSizeClass('input', this.size));\n const newSize = size ? size : DEFAULT_SIZE;\n if (newSize !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', newSize));\n this.renderer.addClass(this.toggleButton.nativeElement, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n if (newRounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `solid` (Default)\n * * `flat`\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n this.renderer.removeClass(this.toggleButton.nativeElement, getFillModeClass('button', this.fillMode));\n this.renderer.removeClass(this.toggleButton.nativeElement, `k-button-${this.fillMode}-base`);\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE;\n if (newFillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', newFillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, getFillModeClass('button', newFillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, `k-button-${newFillMode}-base`);\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * @hidden\n */\n get tabSwitchTransition() {\n /*\n When the popup is opening, disables the set transition in the themes. When `defaultTab` is set to `time`,\n the popup opens with an active **Time** tab and the animation of the initial transition is undesired.\n Setting the inline transition style to `none` overrides the set animation in the themes.\n Setting the inline transition style to `null` does not apply any inline styles or override the themes CSS.\n */\n return this.isOpen ? null : 'none';\n }\n /**\n * @hidden\n *\n * Indicates whether the Calendar will be disabled.\n * The inactive tab component gets disabled and becomes inaccessible on tab click.\n */\n get disableCalendar() {\n return this.activeTab !== 'date' && !this.calendar.isActive;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n /**\n * @hidden\n *\n * Indicates whether the TimeSelector will be disabled.\n * The inactive tab component gets disabled and becomes inaccessible on tab click.\n */\n get disableTimeSelector() {\n return this.activeTab !== 'time' && !this.timeSelector.isActive;\n }\n get activeTabComponent() {\n if (!this.isOpen) {\n return;\n }\n if (!(isPresent(this.calendar) || isPresent(this.timeSelector))) {\n this.cdr.detectChanges();\n }\n return this.activeTab === 'date' ? this.calendar : this.timeSelector;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!isPresent(appendTo) || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n ngOnInit() {\n this.subscriptions.add(this.pickerService.onFocus\n // detect popup changes to disable the inactive view mark-up when the popup is open\n .pipe(tap(this.detectPopupChanges.bind(this)))\n .subscribe(this.handleFocus.bind(this)));\n this.subscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.subscriptions.add(this.pickerService.sameDateSelected.subscribe(this.handleCalendarValueChange.bind(this)));\n this.subscriptions.add(this.localization.changes.subscribe(() => this.cdr.markForCheck()));\n this.subscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n if (isWindowAvailable()) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => fromEvent(window, 'blur').subscribe(this.handleCancel.bind(this))));\n }\n }\n ngAfterViewInit() {\n this.setComponentClasses();\n }\n ngOnChanges(changes) {\n if (isPresent(changes.min) || isPresent(changes.max)) {\n this.verifyMinMaxRange();\n }\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDatesValidation || changes.disabledDates || changes.incompleteDateValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop$2;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop$2;\n this.disabledDatesValidateFn = this.disabledDatesValidation ? disabledDatesValidator(this.disabledDatesService.isDateDisabled) : noop$2;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop$2;\n this.onValidatorChange();\n }\n }\n ngOnDestroy() {\n if (this.isOpen) {\n this.closePopup();\n }\n this.subscriptions.unsubscribe();\n }\n /**\n * * If the popup is closed, focuses the DateTimePicker input.\n * * If the popup is open, the focus is moved to its content.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.activeTabComponent.focus();\n }\n else {\n this.input.focus();\n }\n }\n /**\n * Blurs the DateTimePicker.\n */\n blur() {\n if (this.isOpen && this.activeTabComponent.isActive) {\n this.activeTabComponent.blur();\n }\n else {\n this.input.blur();\n }\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly || show === this.isOpen) {\n return;\n }\n const shouldOpen = isPresent(show) ? show : !this.isOpen;\n if (shouldOpen) {\n this.openPopup();\n }\n else {\n this.closePopup();\n // Changes the tab and the calendar or clock icon to the designated default.\n if (this.activeTab !== this.defaultTab) {\n this.activeTab = this.defaultTab;\n this.cdr.detectChanges();\n }\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(disabled) {\n this.disabled = disabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n *\n * Used by the TextBoxContainer to determine if the floating label will render in the input.\n */\n isEmpty() {\n return !isPresent(this.value) && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n // prevents the event default to evade focusing the DateInput input when placed inside a label (FF/IE/Edge)\n event.preventDefault();\n const runInZone = !this.isOpen || hasObservers(this.close);\n this.run(runInZone, () => {\n const shouldOpen = !this.isOpen;\n // handle focus first to maintain correct event order `focus` => `open`\n this.handleFocus();\n this.togglePopup(shouldOpen);\n this.switchFocus();\n });\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => this.onFocus.emit());\n }\n }\n /**\n * @hidden\n */\n handleBlur(event) {\n if (!this.isActive || this.focusTargetInComponent(event)) {\n return;\n }\n this.isActive = false;\n const isNgControlUntouched = this.wrapper.nativeElement.classList.contains('ng-untouched');\n const runInZone = isNgControlUntouched || hasObservers(this.onBlur) || (this.isOpen && hasObservers(this.close));\n this.run(runInZone, () => {\n this.onBlur.emit();\n this.onControlTouched();\n this.togglePopup(false);\n this.cdr.markForCheck();\n });\n }\n /**\n * @hidden\n */\n changeActiveTab(tab) {\n if (!this.isOpen || this.activeTab === tab) {\n return;\n }\n // persists the Tcurrent value of the TimeSelector when switching between tabs\n if (!isEqual(this.timeSelector.value, this.timeSelector.current)) {\n this.timeSelector.handleAccept();\n }\n this.activeTab = tab;\n this.cdr.detectChanges();\n this.detectPopupChanges();\n }\n /**\n * @hidden\n */\n handleTabChangeTransitionEnd(dateTimeSelector, event) {\n // handle only the .k-datetime-selector element transition, ignore any child element transitions\n if (event.target !== dateTimeSelector) {\n return;\n }\n this.activeTabComponent.focus();\n }\n /**\n * @hidden\n */\n handleAccept() {\n if (!this.isOpen) {\n return;\n }\n const candidate = mergeDateAndTime(this.calendar.value, this.timeSelector.current);\n const valueChangePresent = !isEqual(this.value, candidate);\n const runInZone = valueChangePresent || hasObservers(this.close);\n this.run(runInZone, () => {\n this.handleValueChange(candidate);\n this.togglePopup(false);\n });\n }\n /**\n * @hidden\n */\n handleCancel() {\n if (!this.isOpen) {\n return;\n }\n const runInZone = hasObservers(this.close);\n this.run(runInZone, () => this.togglePopup(false));\n }\n /**\n * @hidden\n */\n handleInputValueChange(value) {\n this.handleValueChange(value);\n if (this.isOpen) {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n handleCalendarValueChange() {\n this.setTimeSelectorMinMax(this.calendar.value);\n this.changeActiveTab('time');\n }\n /**\n * @hidden\n */\n handleKeyDown(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n const { keyCode, altKey } = event;\n switch (keyCode) {\n case altKey && Keys.ArrowUp:\n case Keys.Escape:\n this.handleCancel();\n break;\n case !this.isOpen && altKey && Keys.ArrowDown:\n this.ngZone.run(() => this.togglePopup(true));\n break;\n case altKey && Keys.ArrowRight:\n this.changeActiveTab('time');\n break;\n case altKey && Keys.ArrowLeft:\n this.changeActiveTab('date');\n break;\n case this.isOpen && this.timeSelector.isActive && isPresent(this.calendarValue) && Keys.Enter:\n this.handleAccept();\n break;\n default: return;\n }\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleTabOut(event) {\n const { keyCode, shiftKey, target } = event;\n // if no focusable next sibling elements exist in the controls sections, the user is tabbing out of the popup\n const focusableSiblingAvailable = isPresent(target.nextElementSibling) && !target.nextElementSibling.disabled;\n if (keyCode === Keys.Tab && !shiftKey && !focusableSiblingAvailable) {\n this.input.focus();\n this.handleCancel();\n }\n }\n /**\n * @hidden\n */\n handleBackTabOut(event) {\n const { keyCode, shiftKey } = event;\n if (keyCode === Keys.Tab && shiftKey) {\n this.input.focus();\n }\n }\n /**\n * @hidden\n */\n popupButtonsClasses(type) {\n const buttonType = type ? type : 'base';\n return `${this.size ? getSizeClass('button', this.size) : ''} ${this.rounded ? getRoundedClass(this.rounded) : ''} ${this.fillMode ? 'k-button-' + this.fillMode + ' ' + 'k-button-' + this.fillMode + '-' + buttonType : ''}`;\n }\n /**\n * @hidden\n *\n * Prevents the diversion of the focus from the currently active element in the component.\n */\n preventMouseDown(event) {\n event.preventDefault();\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (isPresent(value) && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK} for possible resolution.`);\n }\n }\n verifyMinMaxRange() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_MAX_DOC_LINK}.`);\n }\n }\n /**\n * Extracts the time slots and the literals that are not preceded by date parts\n * and concatenates the resulting parts into a string.\n * If the provided format value does not contain any time parts,\n * returns the designated format of the default popup component of the TimePicker.\n */\n getTimeSelectorFormat(format) {\n const timeSelectorFormat = this.intl\n .splitDateFormat(format)\n .filter(this.timeFormatPartFilter)\n .reduce((format, part) => format += part.pattern, '');\n return timeSelectorFormat || DEFAULT_TIMESELECTOR_FORMAT;\n }\n /**\n * Extracts the `displayFormat` from the provided `string | FormatSettings` value.\n * Fallbacks to the default input value, if a falsy value param is passed.\n */\n getDisplayFormat(format) {\n if (!format) {\n return DEFAULT_DATEINPUT_FORMAT;\n }\n if (typeof format === 'string') {\n return format;\n }\n else {\n return format.displayFormat;\n }\n }\n /**\n * The filter expression that filters out all format parts\n * except for `hour`, `minute`, `second`, `dayperiod`, and specific literals.\n * Literals will be left only if they are not preceded by date parts.\n */\n timeFormatPartFilter(part, index, parts) {\n const previousPart = index >= 1 && parts[index - 1];\n if (previousPart && part.type === 'literal') {\n return timeFormatRegExp.test(previousPart.type);\n }\n return timeFormatRegExp.test(part.type);\n }\n togglePopup(open) {\n if (open === this.isOpen) {\n return;\n }\n const event = new PreventableEvent();\n if (open) {\n this.open.emit(event);\n }\n else {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this.toggle(open);\n this.switchFocus();\n }\n switchFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.isOpen) {\n this.activeTabComponent.focus();\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n openPopup() {\n this.setCalendarValue(this.value);\n this.setTimeSelectorMinMax(this.value);\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n content: this.popupTemplate,\n positionMode: 'absolute',\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n popupClass: `k-datetime-container ${this.popupSettings.popupClass || ''}`,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n popupAlign: { vertical: 'top', horizontal: direction }\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.handleCancel());\n }\n closePopup() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.close();\n this.popupRef = null;\n }\n handleValueChange(value) {\n if (isEqual(this.value, value)) {\n return;\n }\n this.value = cloneDate(value);\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n }\n /**\n * Indicates whether the focus target is part of this component,\n * that is, whether the focus target is inside the component or in the popup.\n */\n focusTargetInComponent(event) {\n if (!isPresent(event)) {\n return false;\n }\n const relatedTarget = event.relatedTarget || document.activeElement;\n const focusInPopup = isPresent(this.popupRef) && this.popupRef.popupElement.contains(relatedTarget);\n const focusInWrapper = this.wrapper.nativeElement.contains(relatedTarget);\n return focusInPopup || focusInWrapper;\n }\n setTimeSelectorMinMax(selectedDate) {\n const minDateSelected = isPresent(selectedDate) && isEqual(getDate(selectedDate), getDate(this.min));\n this.timeSelectorMin = cloneDate(minDateSelected ? this.min : MIN_TIME);\n const maxDateSelected = isPresent(selectedDate) && isEqual(getDate(selectedDate), getDate(this.max));\n this.timeSelectorMax = cloneDate(maxDateSelected ? this.max : MAX_TIME);\n }\n setCalendarValue(value) {\n const isInCalendarRange = isPresent(value) && isInRange(value, this.calendarMin, this.calendarMax);\n this.calendarValue = isInCalendarRange ? getDate(value) : null;\n }\n /**\n * If the popup is available, runs a popup change detection.\n */\n detectPopupChanges() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.popup.changeDetectorRef.detectChanges();\n }\n /**\n * Depending on the predicate `runInZone` value that is passed,\n * runs the provided function either in the Angular or in the current zone.\n */\n run(runInZone, fn) {\n if (runInZone) {\n this.ngZone.run(() => fn());\n }\n else {\n fn();\n }\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.ngZone.run(() => this.onValidatorChange());\n }\n setComponentClasses() {\n if (this.size) {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n this.renderer.addClass(this.toggleButton.nativeElement, getSizeClass('button', this.size));\n }\n if (this.rounded) {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode) {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, getFillModeClass('button', this.fillMode));\n this.renderer.addClass(this.toggleButton.nativeElement, `k-button-${this.fillMode}-base`);\n }\n }\n}\nDateTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerComponent, deps: [{ token: i2.PopupService }, { token: i1.IntlService }, { token: i0.ChangeDetectorRef }, { token: PickerService }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }, { token: i1$1.LocalizationService }, { token: DisabledDatesService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nDateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateTimePickerComponent, selector: \"kendo-datetimepicker\", inputs: { value: \"value\", format: \"format\", twoDigitYearMax: \"twoDigitYearMax\", tabindex: \"tabindex\", disabledDates: \"disabledDates\", popupSettings: \"popupSettings\", focusableId: \"focusableId\", title: \"title\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", cancelButton: \"cancelButton\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", steps: \"steps\", focusedDate: \"focusedDate\", calendarType: \"calendarType\", animateCalendarNavigation: \"animateCalendarNavigation\", weekNumber: \"weekNumber\", min: \"min\", max: \"max\", rangeValidation: \"rangeValidation\", disabledDatesValidation: \"disabledDatesValidation\", incompleteDateValidation: \"incompleteDateValidation\", defaultTab: \"defaultTab\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\" }, host: { properties: { \"class.k-datetimepicker\": \"this.hostClasses\", \"class.k-input\": \"this.hostClasses\", \"class.k-disabled\": \"this.disabledClass\" } }, providers: [\n PickerService,\n LocalizationService,\n DisabledDatesService,\n { provide: L10N_PREFIX, useValue: 'kendo.datetimepicker' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DateTimePickerComponent) }\n ], queries: [{ propertyName: \"cellTemplate\", first: true, predicate: CellTemplateDirective, descendants: true }, { propertyName: \"monthCellTemplate\", first: true, predicate: MonthCellTemplateDirective, descendants: true }, { propertyName: \"yearCellTemplate\", first: true, predicate: YearCellTemplateDirective, descendants: true }, { propertyName: \"decadeCellTemplate\", first: true, predicate: DecadeCellTemplateDirective, descendants: true }, { propertyName: \"centuryCellTemplate\", first: true, predicate: CenturyCellTemplateDirective, descendants: true }, { propertyName: \"weekNumberTemplate\", first: true, predicate: WeekNumberCellTemplateDirective, descendants: true }, { propertyName: \"headerTitleTemplate\", first: true, predicate: HeaderTitleTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"toggleButton\", first: true, predicate: [\"toggleButton\"], descendants: true, static: true }, { propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, read: TemplateRef, static: true }], exportAs: [\"kendo-datetimepicker\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n\n \n \n \n \n \n\n \n\n \n \n
\n
\n \n {{localization.get('dateTab')}}\n \n \n {{localization.get('timeTab')}}\n \n
\n
\n \n
\n \n \n \n \n
\n
\n \n \n \n \n
\n \n \n \n {{localization.get('cancel')}}\n \n \n {{localization.get('accept')}}\n \n \n \n
\n `, isInline: true, components: [{ type: DateInputComponent, selector: \"kendo-dateinput\", inputs: [\"focusableId\", \"disabled\", \"readonly\", \"title\", \"tabindex\", \"role\", \"ariaReadOnly\", \"tabIndex\", \"format\", \"formatPlaceholder\", \"placeholder\", \"steps\", \"max\", \"min\", \"rangeValidation\", \"autoCorrect\", \"incompleteDateValidation\", \"twoDigitYearMax\", \"value\", \"spinners\", \"isPopupOpen\", \"hasPopup\", \"size\", \"rounded\", \"fillMode\"], outputs: [\"valueChange\", \"valueUpdate\", \"focus\", \"blur\"], exportAs: [\"kendo-dateinput\"] }, { type: CalendarComponent, selector: \"kendo-calendar\", inputs: [\"id\", \"focusedDate\", \"min\", \"max\", \"rangeValidation\", \"selection\", \"value\", \"disabled\", \"tabindex\", \"tabIndex\", \"disabledDates\", \"navigation\", \"activeView\", \"bottomView\", \"topView\", \"type\", \"animateNavigation\", \"weekNumber\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\", \"navigationItemTemplate\"], outputs: [\"activeViewChange\", \"navigate\", \"activeViewDateChange\", \"valueChange\"], exportAs: [\"kendo-calendar\"] }, { type: CalendarCustomMessagesComponent, selector: \"kendo-calendar-messages\" }, { type: TimeSelectorComponent, selector: \"kendo-timeselector\", inputs: [\"format\", \"min\", \"max\", \"cancelButton\", \"setButton\", \"nowButton\", \"disabled\", \"steps\", \"value\"], outputs: [\"valueChange\", \"valueReject\"], exportAs: [\"kendo-timeselector\"] }, { type: TimeSelectorCustomMessagesComponent, selector: \"kendo-timeselector-messages\" }], directives: [{ type: LocalizedMessagesDirective, selector: \"[kendoDateTimePickerLocalizedMessages]\" }, { type: i5.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i7.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-datetimepicker',\n exportAs: 'kendo-datetimepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n PickerService,\n LocalizationService,\n DisabledDatesService,\n { provide: L10N_PREFIX, useValue: 'kendo.datetimepicker' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DateTimePickerComponent) }\n ],\n template: `\n \n \n\n \n \n \n \n \n\n \n\n \n \n
\n
\n \n {{localization.get('dateTab')}}\n \n \n {{localization.get('timeTab')}}\n \n
\n
\n \n
\n \n \n \n \n
\n
\n \n \n \n \n
\n \n \n \n {{localization.get('cancel')}}\n \n \n {{localization.get('accept')}}\n \n \n \n
\n `\n }]\n }], ctorParameters: function () { return [{ type: i2.PopupService }, { type: i1.IntlService }, { type: i0.ChangeDetectorRef }, { type: PickerService }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }, { type: i1$1.LocalizationService }, { type: DisabledDatesService }, { type: i0.Renderer2 }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-datetimepicker']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], toggleButton: [{\n type: ViewChild,\n args: ['toggleButton', { static: true }]\n }], value: [{\n type: Input\n }], format: [{\n type: Input\n }], twoDigitYearMax: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], focusableId: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], steps: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], calendarType: [{\n type: Input\n }], animateCalendarNavigation: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesValidation: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], defaultTab: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: false }]\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: false }]\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: false }]\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: false }]\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: false }]\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: false }]\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { read: TemplateRef, static: true }]\n }] } });\n\n/**\n * A directive which renders the content of the DateRange Popup. To define the cell template, nest an\n * `` tag with the `kendoRangePopupTemplate` directive inside the component tag.\n */\nclass DateRangePopupTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDateRangePopupTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangePopupTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nDateRangePopupTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateRangePopupTemplateDirective, selector: \"[kendoDateRangePopupTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangePopupTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangePopupTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst isActive = (cmp) => (cmp && cmp.isActive) || false;\nconst hasActiveContent = (popup) => popup && popup.hasActiveContent();\n/**\n * A service that handles the communication between the components that are placed inside the DateRangeComponent.\n * For example, the start and end `DateInput` and `DateRangePopup` components.\n */\nclass DateRangeService {\n /** @hidden */\n constructor() {\n /**\n * An Observable instance that notifies when the `activeRangeEnd` state is changed.\n */\n this.activeRangeEnd$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the `focusedDate` is changed.\n */\n this.focusedDate$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the end `DateInput` component is changed.\n * For example, when a new end `DateInput` is attached or when the old one is detached.\n */\n this.endInput$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the start `DateInput` component is changed.\n * For example, when a new start `DateInput` is attached or the old one is detached.\n */\n this.startInput$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the `DateRangePopup` component is changed.\n */\n this.dateRangePopup$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the state of the selection range is changed.\n */\n this.range$ = new BehaviorSubject(EMPTY_SELECTIONRANGE);\n }\n /**\n * Gets the current `activeRangeEnd` value.\n */\n get activeRangeEnd() {\n return this.activeRangeEnd$.value;\n }\n /**\n * Gets the current `focusedDate` value.\n */\n get focusedDate() {\n return this.focusedDate$.value;\n }\n /**\n * Gets the `min` range value.\n * The `min` value is extracted from the `start` DateInput value or the `min` value of the Calendar.\n */\n get min() {\n return (this.startInput$.value || {}).min || null;\n }\n /**\n * Gets the `max` range value.\n * The `max` value is extracted from the `end` DateInput value or the `max` value of the Calendar.\n */\n get max() {\n return (this.endInput$.value || {}).max || null;\n }\n /**\n * Gets the current `selectionRange` value.\n */\n get selectionRange() {\n return this.range$.value;\n }\n /**\n * Activates the registered `DateRangePopup` component.\n * The method opens the popup and focuses the calendar.\n */\n activatePopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!dateRangePopup) {\n return;\n }\n dateRangePopup.activate();\n }\n /**\n * Deactivates the registered `DateRangePopup` component.\n * The method closes the popup.\n */\n deactivatePopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!(dateRangePopup && dateRangePopup.show)) {\n return;\n }\n dateRangePopup.show = false;\n }\n /**\n * @hidden\n *\n * Deactivates the registered `DateRangePopup` component and fires the `cancel` event.\n * The method closes the popup.\n */\n cancelPopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!(dateRangePopup && dateRangePopup.show)) {\n return;\n }\n dateRangePopup.cancelPopup();\n }\n /**\n * Completes all observables to mitigate possible memory leaks.\n * Calls the method when a component that uses it is destroyed.\n */\n destroy() {\n this.activeRangeEnd$.complete();\n this.dateRangePopup$.complete();\n this.focusedDate$.complete();\n this.endInput$.complete();\n this.startInput$.complete();\n this.range$.complete();\n }\n /**\n * Returns `true` when an active component that is placed inside the `DateRangeComponent` is detected.\n * For example, the opened popup or the focused DateInput.\n *\n * @returns `true` if an active component is present.\n */\n hasActiveComponent() {\n const popup = this.dateRangePopup$.value;\n const isPopup = isActive(popup);\n const isStart = isActive(this.startInput$.value);\n const isEnd = isActive(this.endInput$.value);\n return isPopup || isStart || isEnd || hasActiveContent(popup) || false;\n }\n /**\n * Registers a new start `DateInput` component. Notifies all `startInput$` listeners.\n */\n registerStartInput(startInput) {\n this.startInput$.next(startInput);\n }\n /**\n * Registers a new end `DateInput` component. Notifies all `endInput$` listeners.\n */\n registerEndInput(endInput) {\n this.endInput$.next(endInput);\n }\n /**\n * Registers a new `DateRangePopup` component. Notifies all `dateRangePopup$` listeners.\n */\n registerPopup(dateRangePopup) {\n this.dateRangePopup$.next(dateRangePopup);\n }\n /**\n * Updates the `activeRangeEnd` value. Notifies all `activeRangeEnd$` listeners.\n */\n setActiveRangeEnd(activeRange) {\n if (!activeRange || this.activeRangeEnd === activeRange) {\n return;\n }\n this.activeRangeEnd$.next(activeRange);\n }\n /**\n * Updates the focused date. Notifies all `focusedDate$` listeners.\n */\n setFocusedDate(value) {\n if (isEqual(this.focusedDate$.value, value)) {\n return;\n }\n this.focusedDate$.next(value);\n }\n /**\n * Updates the selection range. Notifies all `range$` listeners.\n */\n setRange(range = EMPTY_SELECTIONRANGE) {\n this.range$.next(range);\n }\n}\nDateRangeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDateRangeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\n/**\n * A directive which manages the MultiViewCalendar range selection.\n */\nclass DateRangeSelectionDirective {\n constructor(calendar, cdr, element, renderer, dateRangeService) {\n this.calendar = calendar;\n this.cdr = cdr;\n this.element = element;\n this.dateRangeService = dateRangeService;\n /**\n * Specifies the auto-correction behavior. If the start date is greater than the end date,\n * the directive fixes the date range to a single date either on input change or on blur\n * ([see example]({% slug autocorrect_daterange %}#toc-configuring-the-calendar-selection-directive)).\n *\n * By default, the auto-correction is triggered on change.\n * To disable this behavior, set the `autoCorrectOn` property to `none`.\n */\n this.autoCorrectOn = 'change';\n /**\n * Fires when the active range end is changed. For more information, refer to\n * the section on [events]({% slug overview_multiviewcalendar %}#toc-events).\n */\n this.activeRangeEndChange = new EventEmitter();\n /**\n * Fires when the selection range is changed. For more information, refer to\n * the section on [events]({% slug overview_multiviewcalendar %}#toc-events).\n */\n this.selectionRangeChange = new EventEmitter();\n this.calendarSubscriptions = new Subscription();\n this.dateRangeService = this.dateRangeService || new DateRangeService();\n renderer.setAttribute(element.nativeElement, 'aria-multiselectable', 'true');\n }\n /**\n * Gets or sets the selection range of the calendar. When a new range is set,\n * the connected DateRangeService notifies all related parties.\n */\n get selectionRange() {\n return this.calendar ? this.calendar.selectionRange : null;\n }\n set selectionRange(range) {\n if (!this.isEqualCalendarRange(range)) {\n this.setSelectionRange(range);\n }\n if (!isEqualRange(this.dateRangeService.selectionRange, range)) {\n this.dateRangeService.setRange(range);\n }\n this.updateFocusedDate(range);\n }\n /**\n * Gets or sets the active end of the selection range. This option determines which range end will be updated on\n * user interaction. When a new active end is set, the connected DateRangeService notifies all related parties.\n */\n /**\n * Specifies which end of the selection range will be marked as active. The active end gets modified upon user\n * interaction. When a new active end is set, the wired DateRangeService notifies all related components. For\n * example, the start and end DateInput components.\n *\n * > If the selection range is undefined, the value is ignored.\n */\n get activeRangeEnd() {\n return this.calendar.activeRangeEnd;\n }\n set activeRangeEnd(activeRange) {\n if (this.dateRangeService.activeRangeEnd === activeRange) {\n return;\n }\n this.calendar.activeRangeEnd = activeRange;\n this.dateRangeService.setActiveRangeEnd(activeRange);\n }\n get calendarRange() {\n return this.selectionRange || EMPTY_SELECTIONRANGE;\n }\n ngOnInit() {\n const calendar = this.calendar;\n const dateRangeService = this.dateRangeService;\n calendar.min = either(dateRangeService.min, calendar.min);\n calendar.max = either(dateRangeService.max, calendar.max);\n this.addSubscriptions(calendar.cellEnter.subscribe((value) => this.handleHover(value)), calendar.valueChange.subscribe((value) => this.handleChange(value)), dateRangeService.focusedDate$.subscribe(focusedDate => {\n if (!isEqual(calendar.focusedDate, focusedDate)) {\n calendar.focusedDate = focusedDate;\n }\n }), dateRangeService.activeRangeEnd$.subscribe(rangeEnd => {\n if (calendar.activeRangeEnd === rangeEnd) {\n return;\n }\n calendar.activeRangeEnd = rangeEnd;\n this.activeRangeEndChange.emit(rangeEnd);\n this.cdr.markForCheck();\n }), dateRangeService.range$.subscribe(range => {\n if (!this.isEqualCalendarRange(range)) {\n this.acceptAndEmit(range);\n }\n this.updateFocusedDate(range);\n }), fromEvent(this.element.nativeElement, 'blur').subscribe(() => this.handleBlur()));\n }\n ngOnDestroy() {\n this.calendarSubscriptions.unsubscribe();\n }\n addSubscriptions(...subscriptions) {\n subscriptions.map(s => this.calendarSubscriptions.add(s));\n }\n isEqualCalendarRange(range) {\n return isEqualRange(this.calendar.selectionRange, range);\n }\n handleBlur() {\n const { start, end } = this.calendarRange;\n const autoCorrect = this.autoCorrectOn === 'blur' && start !== null && end !== null && end < start;\n if (autoCorrect) {\n this.dateRangeService.setRange(clampRange(start));\n }\n }\n handleChange(value) {\n const service = this.dateRangeService;\n const autoCorrect = this.autoCorrectOn === 'change' && this.shouldAutoCorrect(value);\n const activeEnd = this.calendar.activeRangeEnd !== 'end' ? 'end' : (autoCorrect ? 'end' : 'start');\n const range = autoCorrect ? clampRange(value) : this.updateRange(value);\n if (!isEqualRange(service.selectionRange, range)) {\n this.acceptAndEmit(range);\n service.setActiveRangeEnd(activeEnd);\n service.setRange(range);\n }\n }\n handleHover(value) {\n if (this.hasCompleteRange()) {\n return;\n }\n const { start, end } = this.calendarRange;\n const activeRangeEnd = this.calendar.activeRangeEnd;\n const updateRange = (start && activeRangeEnd === 'end') || (end && activeRangeEnd === 'start');\n if (updateRange) {\n this.setSelectionRange(this.updateRange(value));\n }\n }\n hasCompleteRange() {\n const { start, end } = this.dateRangeService.selectionRange || EMPTY_SELECTIONRANGE;\n return Boolean(start) && Boolean(end);\n }\n shouldAutoCorrect(value) {\n const { end, start } = this.calendarRange;\n if (this.calendar.activeRangeEnd !== 'end') {\n return end !== null && value > end;\n }\n else {\n return start !== null && value < start;\n }\n }\n updateFocusedDate(range) {\n if (!range || this.dateRangeService.focusedDate) {\n return;\n }\n this.dateRangeService.setFocusedDate(range.start || range.end);\n }\n updateRange(value) {\n const { end, start } = this.calendarRange;\n return this.calendar.activeRangeEnd !== 'end' ? ({ start: value, end }) : ({ start, end: value });\n }\n setSelectionRange(range) {\n this.calendar.selectionRange = range;\n this.calendar.writeValue(null);\n }\n acceptAndEmit(range) {\n this.setSelectionRange(range);\n this.selectionRangeChange.emit(range);\n }\n}\nDateRangeSelectionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeSelectionDirective, deps: [{ token: MultiViewCalendarComponent }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DateRangeService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDateRangeSelectionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateRangeSelectionDirective, selector: \"[kendoDateRangeSelection]\", inputs: { autoCorrectOn: \"autoCorrectOn\", selectionRange: \"selectionRange\", activeRangeEnd: \"activeRangeEnd\" }, outputs: { activeRangeEndChange: \"activeRangeEndChange\", selectionRangeChange: \"selectionRangeChange\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeSelectionDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeSelection]'\n }]\n }], ctorParameters: function () { return [{ type: MultiViewCalendarComponent }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DateRangeService, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { autoCorrectOn: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], activeRangeEndChange: [{\n type: Output\n }], selectionRangeChange: [{\n type: Output\n }] } });\n\n/**\n * Represents the Kendo UI DateRangePopup component for Angular.\n *\n * @example\n * ```ts\n * import { DateInputsModule, DateRangeService } from '@progress/kendo-angular-dateinputs';\n *\n * _@Component({\n * providers: [DateRangeService],\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent {\n * }\n * ```\n */\nclass DateRangePopupComponent {\n constructor(popupService, dateRangeService, ref, zone, rtl) {\n this.popupService = popupService;\n this.dateRangeService = dateRangeService;\n this.ref = ref;\n this.zone = zone;\n this.rtl = rtl;\n /**\n * Controls the popup animation.\n * By default, the opening and closing animations are enabled.\n * For more information about controlling the popup animations,\n * refer to the article on [animations]({% slug animations_popup %}).\n */\n this.animate = true;\n /**\n * Configures the collision behavior of the popup.\n * For more information, refer to the article on\n * [viewport boundary detection]({% slug viewportboundarydetection_popup %}).\n */\n this.collision = { horizontal: 'fit', vertical: 'flip' };\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n * For more information, refer to the section on\n * [events]({% slug overview_datepicker %}#toc-events).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n * For more information, refer to the section on\n * [events]({% slug overview_datepicker %}#toc-events).\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the calendar element is blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the calendar element is focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the popup is closed either on `ESC` keypress or on leaving the viewport.\n */\n this.cancel = new EventEmitter();\n /**\n * @hidden\n */\n this.popupUID = guid();\n this.calendarSubscriptions = new Subscription();\n this.popupSubscriptions = new Subscription();\n this.resolvedPromise = Promise.resolve();\n }\n /**\n * The active calendar that is visible in the popup.\n *\n * > When the popup is closed, the property returns `null`.\n */\n get calendar() {\n return this._calendar;\n }\n set calendar(calendar) {\n this._calendar = calendar;\n this.subscribeFocusBlur(calendar);\n }\n /**\n * Gets the active state of the component.\n * When the opened calendar is active, returns `true`.\n */\n get isActive() {\n return this.calendar && this.calendar.isActive;\n }\n /**\n * Gets or sets the visibility state of the component.\n */\n set show(show) {\n if (this._show === show) {\n return;\n }\n const event = new PreventableEvent();\n if (show) {\n this.open.emit(event);\n }\n else {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n }\n get show() {\n return this._show;\n }\n ngOnInit() {\n this.dateRangeService.registerPopup(this);\n }\n ngAfterViewInit() {\n this.calendarSubscriptions.add(this.contentCalendar.changes.subscribe((changes) => this.calendar = changes.first));\n this.calendarSubscriptions.add(this.viewCalendar.changes.subscribe((changes) => this.calendar = changes.first));\n if (isWindowAvailable()) {\n this.zone.runOutsideAngular(() => this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this)));\n }\n }\n ngOnDestroy() {\n this.destroyPopup();\n this.calendarSubscriptions.unsubscribe();\n if (this.activateSubscription) {\n this.activateSubscription.unsubscribe();\n }\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n }\n /**\n * Opens the popup component and focuses the calendar.\n */\n activate() {\n if (this.show === true) {\n return;\n }\n if (this.activateSubscription) {\n this.activateSubscription.unsubscribe();\n }\n this.show = true;\n this.ref.markForCheck();\n this.zone.runOutsideAngular(() => {\n this.activateSubscription = merge(this.contentCalendar.changes, this.viewCalendar.changes)\n .pipe(filter(changes => changes && changes.first), map(changes => changes.first))\n .subscribe((calendar) => setTimeout(() => calendar.focus()));\n });\n }\n /**\n * Focuses the calendar (if available).\n */\n focus() {\n if (this.calendar) {\n this.calendar.focus();\n }\n }\n /**\n * Checks if a focused element ids placed inside the popup.\n *\n * @return boolean;\n */\n hasActiveContent() {\n if (!isDocumentAvailable() || !this.popupRef) {\n return false;\n }\n return this.popupRef.popupElement.contains(document.activeElement);\n }\n /**\n * Toggles the visibility of the popup.\n * If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show The state of the popup.\n */\n toggle(show) {\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * @hidden\n *\n * Closes the popup and triggers the `cancel` event.\n */\n cancelPopup() {\n this.show = false;\n this.cancel.emit();\n }\n handleWindowBlur() {\n if (!this.show) {\n return;\n }\n if (hasObservers(this.close)) {\n this.zone.run(() => this.show = false);\n }\n else {\n this.show = false;\n }\n }\n handleMouseLeave() {\n this.dateRangeService.setRange(this.dateRangeService.selectionRange);\n }\n handleKeydown(event) {\n const { altKey, keyCode } = event;\n if (keyCode === Keys.Escape || (altKey && keyCode === Keys.ArrowUp)) {\n this.zone.run(() => this.cancelPopup());\n }\n }\n subscribeFocusBlur(calendar) {\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n }\n if (!calendar) {\n return;\n }\n const nativeElement = calendar.element.nativeElement;\n this.blurSubscription = fromEvent(nativeElement, 'blur').subscribe(() => this.onBlur.emit());\n this.focusSubscription = fromEvent(nativeElement, 'focus').subscribe(() => this.onFocus.emit());\n }\n addPopupSubscriptions(...subscriptions) {\n if (!isPresent(this.popupSubscriptions)) {\n this.popupSubscriptions = new Subscription();\n }\n subscriptions.map(s => this.popupSubscriptions.add(s));\n }\n get _appendTo() {\n const appendTo = this.appendTo;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n _toggle(show) {\n this._show = show;\n if (this.popupRef) {\n this.destroyPopup();\n }\n if (this._show) {\n const direction = this.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.anchor,\n anchorAlign: this.anchorAlign || { vertical: 'bottom', horizontal: direction },\n animate: this.animate,\n appendTo: this._appendTo,\n collision: this.collision,\n content: (this.contentTemplate || {}).templateRef || this.defaultTemplate,\n margin: this.margin,\n popupAlign: this.popupAlign || { vertical: 'top', horizontal: direction },\n positionMode: 'absolute'\n });\n const { popupElement, popupAnchorViewportLeave } = this.popupRef;\n popupElement.setAttribute('id', this.popupUID);\n this.addPopupSubscriptions(this.zone.runOutsideAngular(() => fromEvent(popupElement, 'keydown').subscribe(this.handleKeydown.bind(this))), fromEvent(popupElement, 'mouseleave').subscribe(this.handleMouseLeave.bind(this)), popupAnchorViewportLeave.subscribe(() => this.cancelPopup()));\n }\n }\n destroyPopup() {\n if (isPresent(this.popupRef)) {\n this.popupRef.close();\n this.popupRef = null;\n }\n if (isPresent(this.popupSubscriptions)) {\n this.popupSubscriptions.unsubscribe();\n }\n }\n}\nDateRangePopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangePopupComponent, deps: [{ token: i2.PopupService }, { token: DateRangeService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nDateRangePopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateRangePopupComponent, selector: \"kendo-daterange-popup\", inputs: { animate: \"animate\", anchor: \"anchor\", anchorAlign: \"anchorAlign\", appendTo: \"appendTo\", collision: \"collision\", popupAlign: \"popupAlign\", margin: \"margin\" }, outputs: { open: \"open\", close: \"close\", onBlur: \"blur\", onFocus: \"focus\", cancel: \"cancel\" }, queries: [{ propertyName: \"contentTemplate\", first: true, predicate: DateRangePopupTemplateDirective, descendants: true }, { propertyName: \"contentCalendar\", predicate: MultiViewCalendarComponent }], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef }, { propertyName: \"defaultTemplate\", first: true, predicate: [\"defaultTemplate\"], descendants: true }, { propertyName: \"viewCalendar\", predicate: MultiViewCalendarComponent, descendants: true }], exportAs: [\"kendo-daterange-popup\"], ngImport: i0, template: `\n \n \n \n \n `, isInline: true, components: [{ type: MultiViewCalendarComponent, selector: \"kendo-multiviewcalendar\", inputs: [\"id\", \"focusedDate\", \"min\", \"max\", \"rangeValidation\", \"disabledDatesRangeValidation\", \"selection\", \"value\", \"disabled\", \"tabindex\", \"tabIndex\", \"isActive\", \"disabledDates\", \"activeView\", \"bottomView\", \"topView\", \"showViewHeader\", \"animateNavigation\", \"weekNumber\", \"activeRangeEnd\", \"selectionRange\", \"views\", \"orientation\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\"], outputs: [\"activeViewChange\", \"navigate\", \"cellEnter\", \"cellLeave\", \"valueChange\", \"blur\"], exportAs: [\"kendo-multiviewcalendar\"] }], directives: [{ type: DateRangeSelectionDirective, selector: \"[kendoDateRangeSelection]\", inputs: [\"autoCorrectOn\", \"selectionRange\", \"activeRangeEnd\"], outputs: [\"activeRangeEndChange\", \"selectionRangeChange\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangePopupComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendo-daterange-popup',\n selector: 'kendo-daterange-popup',\n template: `\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i2.PopupService }, { type: DateRangeService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, propDecorators: { container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: false }]\n }], defaultTemplate: [{\n type: ViewChild,\n args: ['defaultTemplate', { static: false }]\n }], contentTemplate: [{\n type: ContentChild,\n args: [DateRangePopupTemplateDirective, { static: false }]\n }], viewCalendar: [{\n type: ViewChildren,\n args: [MultiViewCalendarComponent]\n }], contentCalendar: [{\n type: ContentChildren,\n args: [MultiViewCalendarComponent]\n }], animate: [{\n type: Input\n }], anchor: [{\n type: Input\n }], anchorAlign: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], collision: [{\n type: Input\n }], popupAlign: [{\n type: Input\n }], margin: [{\n type: Input\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], cancel: [{\n type: Output\n }] } });\n\n/**\n * Represents the Kendo UI DateRange component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public dateRange: any = { start: null, end: null };\n * }\n * ```\n */\nclass DateRangeComponent {\n constructor() {\n this.wrapperClass = true;\n /**\n * @hidden\n */\n this.showDefault = false;\n validatePackage(packageMetadata);\n }\n get hasContentPopup() {\n return this.contentPopup.length > 0;\n }\n ngAfterContentInit() {\n this.showDefault = !this.hasContentPopup;\n this.subscription = this.contentPopup.changes.subscribe(() => {\n this.showDefault = !this.hasContentPopup;\n });\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\nDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateRangeComponent, selector: \"kendo-daterange\", host: { properties: { \"class.k-daterangepicker\": \"this.wrapperClass\" } }, providers: [DateRangeService], queries: [{ propertyName: \"contentPopup\", predicate: DateRangePopupComponent }], ngImport: i0, template: `\n \n \n `, isInline: true, components: [{ type: DateRangePopupComponent, selector: \"kendo-daterange-popup\", inputs: [\"animate\", \"anchor\", \"anchorAlign\", \"appendTo\", \"collision\", \"popupAlign\", \"margin\"], outputs: [\"open\", \"close\", \"blur\", \"focus\", \"cancel\"], exportAs: [\"kendo-daterange-popup\"] }], directives: [{ type: i7.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeComponent, decorators: [{\n type: Component,\n args: [{\n providers: [DateRangeService],\n selector: 'kendo-daterange',\n template: `\n \n \n `\n }]\n }], ctorParameters: function () { return []; }, propDecorators: { wrapperClass: [{\n type: HostBinding,\n args: ['class.k-daterangepicker']\n }], contentPopup: [{\n type: ContentChildren,\n args: [DateRangePopupComponent]\n }] } });\n\n/**\n * @hidden\n */\nclass DateRangeInput {\n constructor(activeRangeEnd, dateRangeService, input, element, renderer, zone) {\n this.activeRangeEnd = activeRangeEnd;\n this.dateRangeService = dateRangeService;\n this.input = input;\n this.element = element;\n this.renderer = renderer;\n this.zone = zone;\n this.navigateCalendarOnFocus = false;\n this.popupSubscriptions = new Subscription();\n this.subscriptions = new Subscription();\n }\n get isActiveEnd() {\n return this.dateRangeService.activeRangeEnd === this.activeRangeEnd;\n }\n get popupCalendarActivated() {\n const popup = this.dateRangeService.dateRangePopup$.value;\n return isPresent(popup) && isPresent(popup.calendar);\n }\n init() {\n if (this.input.value) {\n this.dateRangeService.setRange(this.getRange(this.input.value));\n }\n [\n this.input.onBlur.subscribe(() => this.deactivate()),\n this.input.onFocus.pipe(filter(() => !this.popupCalendarActivated)).subscribe(() => this.activate()),\n this.input.valueUpdate.subscribe(value => this.updateRange(value, 'change')),\n this.dateRangeService.activeRangeEnd$.subscribe(() => {\n if (this.navigateCalendarOnFocus) {\n this.focusActiveDate();\n }\n this.toggleActiveClass(this.isActiveEnd);\n }),\n this.dateRangeService.dateRangePopup$.subscribe(popup => this.initPopup(popup)),\n this.dateRangeService.range$.subscribe(range => this.updateInputValue(range)),\n fromEvent(this.element.nativeElement, 'click').subscribe(() => this.activate()),\n fromEvent(this.element.nativeElement, 'keydown').subscribe((event) => this.togglePopup(event || {}))\n ].map(s => this.subscriptions.add(s));\n }\n destroy() {\n this.subscriptions.unsubscribe();\n this.unsubscribePopup();\n }\n initPopup(popup) {\n if (!popup) {\n this.unsubscribePopup();\n return;\n }\n if (!popup.anchor) {\n popup.anchor = this.element.nativeElement;\n }\n [\n popup.cancel.subscribe(() => this.isActiveEnd && this.input.focus()),\n popup.onFocus.subscribe(() => this.toggleActiveClass(this.isActiveEnd)),\n popup.onBlur.subscribe(() => this.deactivate())\n ].map(s => this.popupSubscriptions.add(s));\n }\n unsubscribePopup() {\n this.popupSubscriptions.unsubscribe();\n this.popupSubscriptions = new Subscription();\n }\n activate() {\n this.dateRangeService.setActiveRangeEnd(this.activeRangeEnd);\n this.dateRangeService.activatePopup();\n }\n deactivate() {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.updateRange(this.input.value, 'blur');\n if (this.dateRangeService.hasActiveComponent()) {\n return;\n }\n this.toggleActiveClass(false);\n this.zone.run(() => this.dateRangeService.deactivatePopup());\n });\n });\n }\n updateRange(value, correctOn) {\n const range = this.getRange(value, correctOn);\n if (range) {\n this.focusActiveDate();\n this.dateRangeService.setRange(range);\n }\n }\n togglePopup({ altKey, keyCode }) {\n if (keyCode === Keys.Escape) {\n this.dateRangeService.cancelPopup();\n }\n else if (altKey && keyCode === Keys.ArrowDown) {\n this.dateRangeService.activatePopup();\n }\n }\n focusActiveDate() {\n if (this.input.value && this.isActiveEnd) {\n this.dateRangeService.setFocusedDate(cloneDate(this.input.value));\n }\n }\n toggleActiveClass(show) {\n const action = show ? 'addClass' : 'removeClass';\n const nativeElement = this.element.nativeElement;\n if (nativeElement && nativeElement.querySelector) {\n this.renderer[action](nativeElement, 'k-focus');\n }\n }\n}\n\n/**\n * A directive which manages the end range selection.\n *\n * > You can use the DateRangeEndInputDirective only with a DateInput component.\n */\nclass DateRangeEndInputDirective extends DateRangeInput {\n constructor(rangeService, dateInput, element, renderer, zone) {\n super('end', rangeService, dateInput, element, renderer, zone);\n this.rangeService = rangeService;\n this.dateInput = dateInput;\n /**\n * Specifies the navigation behavior of the calendar when the active end is changed on input focus. When enabled,\n * the calendar navigates to the value of the focused input. Otherwise, the calendar displays the last picked date.\n *\n * By default, the automatic navigation behavior on input focus is disabled.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
Toggle input focus to see the calendar navigating between range ends.
\n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public start: Date = new Date(2018, 3, 10);\n * public end: Date = new Date(2018, 10, 20);\n * }\n * ```\n */\n this.navigateCalendarOnFocus = false;\n }\n ngOnInit() {\n this.rangeService.registerEndInput(this.dateInput);\n super.init();\n }\n ngOnDestroy() {\n super.destroy();\n }\n getRange(value, correctOn) {\n const { min, max } = this.dateInput;\n if (!isInRange(value, min, max)) {\n return null;\n }\n const { start } = this.rangeService.selectionRange || EMPTY_SELECTIONRANGE;\n const shouldClamp = this.autoCorrectOn === correctOn && isPresent(value) && value < start;\n return shouldClamp ? clampRange(value) : { start, end: cloneDate(value) };\n }\n updateInputValue(range) {\n const { end } = range || EMPTY_SELECTIONRANGE;\n const { min, max } = this.dateInput;\n if (isEqual(this.dateInput.value, end) || !isInRange(end, min, max)) {\n return;\n }\n this.dateInput.writeValue(cloneDate(end));\n this.dateInput.notify();\n }\n}\nDateRangeEndInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeEndInputDirective, deps: [{ token: DateRangeService }, { token: DateInputComponent }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nDateRangeEndInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateRangeEndInputDirective, selector: \"[kendoDateRangeEndInput]\", inputs: { autoCorrectOn: \"autoCorrectOn\", navigateCalendarOnFocus: \"navigateCalendarOnFocus\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeEndInputDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeEndInput]'\n }]\n }], ctorParameters: function () { return [{ type: DateRangeService }, { type: DateInputComponent }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { autoCorrectOn: [{\n type: Input\n }], navigateCalendarOnFocus: [{\n type: Input\n }] } });\n\n/**\n * A directive which manages the start selection range.\n *\n * > You can use the DateRangeStartInputDirective only with a DateInput component.\n */\nclass DateRangeStartInputDirective extends DateRangeInput {\n constructor(rangeService, dateInput, element, renderer, zone) {\n super('start', rangeService, dateInput, element, renderer, zone);\n this.rangeService = rangeService;\n this.dateInput = dateInput;\n /**\n * Specifies the navigation behavior of the calendar when the active end is changed on input focus.\n * When enabled, the calendar navigates to the value of the focused input. Otherwise, the calendar\n * displays the last picked date.\n *\n * By default, the automatic navigation behavior on input focus is disabled.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
Toggle input focus to see the calendar navigating between range ends.
\n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public start: Date = new Date(2018, 3, 10);\n * public end: Date = new Date(2018, 10, 20);\n * }\n * ```\n */\n this.navigateCalendarOnFocus = false;\n }\n ngOnInit() {\n this.rangeService.registerStartInput(this.dateInput);\n super.init();\n }\n ngOnDestroy() {\n super.destroy();\n }\n getRange(value, correctOn) {\n const { min, max } = this.dateInput;\n if (!isInRange(value, min, max)) {\n return null;\n }\n const { end } = this.rangeService.selectionRange || EMPTY_SELECTIONRANGE;\n const shouldClamp = this.autoCorrectOn === correctOn && end && value > end;\n return shouldClamp ? clampRange(value) : { start: cloneDate(value), end };\n }\n updateInputValue(range) {\n const { start } = range || EMPTY_SELECTIONRANGE;\n const { min, max } = this.dateInput;\n if (isEqual(this.dateInput.value, start) || !isInRange(start, min, max)) {\n return;\n }\n this.dateInput.writeValue(cloneDate(start));\n this.dateInput.notify();\n }\n}\nDateRangeStartInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeStartInputDirective, deps: [{ token: DateRangeService }, { token: DateInputComponent }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nDateRangeStartInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateRangeStartInputDirective, selector: \"[kendoDateRangeStartInput]\", inputs: { autoCorrectOn: \"autoCorrectOn\", navigateCalendarOnFocus: \"navigateCalendarOnFocus\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeStartInputDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeStartInput]'\n }]\n }], ctorParameters: function () { return [{ type: DateRangeService }, { type: DateInputComponent }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { autoCorrectOn: [{\n type: Input\n }], navigateCalendarOnFocus: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `HeaderComponent`—The component that renders the UI for vertical navigation.\n * - `ViewComponent`—The component that renders the active Calendar view.\n */\nclass CalendarCommonModule {\n}\nCalendarCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCalendarCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarCommonModule, declarations: [KForOf,\n HeaderComponent,\n ViewComponent], imports: [CommonModule, EventsModule], exports: [KForOf,\n HeaderComponent,\n ViewComponent] });\nCalendarCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarCommonModule, imports: [[CommonModule, EventsModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarCommonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n KForOf,\n HeaderComponent,\n ViewComponent\n ],\n exports: [\n KForOf,\n HeaderComponent,\n ViewComponent\n ],\n imports: [CommonModule, EventsModule]\n }]\n }] });\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n * - `NavigationItemTemplateDirective`—The navigation item template directive.\n */\nclass TemplatesModule {\n}\nTemplatesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplatesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTemplatesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplatesModule, declarations: [CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective], exports: [CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective] });\nTemplatesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplatesModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplatesModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective\n ],\n exports: [\n CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective\n ]\n }]\n }] });\n\n/**\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the MultiViewCalendar module\n * import { MultiViewCalendarModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, MultiViewCalendarModule], // import MultiViewCalendar module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n */\nclass MultiViewCalendarModule {\n}\nMultiViewCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMultiViewCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarModule, declarations: [HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent], imports: [CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n PopupModule,\n EventsModule], exports: [HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent,\n CalendarCommonModule,\n TemplatesModule] });\nMultiViewCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarModule, providers: [\n NavigationService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ], imports: [[\n CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n PopupModule,\n EventsModule\n ], CalendarCommonModule,\n TemplatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiViewCalendarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent\n ],\n exports: [\n HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent,\n CalendarCommonModule,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n PopupModule,\n EventsModule\n ],\n providers: [\n NavigationService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ]\n }]\n }] });\n\nconst COMPONENT_DIRECTIVES$3 = [\n VirtualizationComponent\n];\n/**\n * @hidden\n *\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Virtualization component.\n */\nclass VirtualizationModule {\n}\nVirtualizationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: VirtualizationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nVirtualizationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: VirtualizationModule, declarations: [VirtualizationComponent], imports: [CommonModule], exports: [VirtualizationComponent] });\nVirtualizationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: VirtualizationModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: VirtualizationModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$3],\n exports: [COMPONENT_DIRECTIVES$3],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * The exported package module.\n *\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n * - `NavigationItemTemplateDirective`—The navigation item template directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Calendar module\n * import { CalendarModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CalendarModule], // import Calendar module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CalendarModule {\n}\nCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarModule, declarations: [CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent], imports: [CommonModule,\n CalendarCommonModule,\n MultiViewCalendarModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule], exports: [CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent,\n CalendarCommonModule,\n TemplatesModule] });\nCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarModule, providers: [\n CalendarDOMService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ], imports: [[\n CommonModule,\n CalendarCommonModule,\n MultiViewCalendarModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule\n ], CalendarCommonModule,\n TemplatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent\n ],\n exports: [\n CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent,\n CalendarCommonModule,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n CalendarCommonModule,\n MultiViewCalendarModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule\n ],\n providers: [\n CalendarDOMService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ]\n }]\n }] });\n\n/**\n * The exported package module.\n *\n * The package exports:\n * - `CalendarModule`—The calendar module.\n * - `MultiViewCalendarModule`—The multi-view calendar module.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Calendars module\n * import { CalendarsModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CalendarsModule], // import the Calendars module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CalendarsModule {\n}\nCalendarsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCalendarsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarsModule, imports: [CalendarModule,\n MultiViewCalendarModule], exports: [CalendarModule,\n MultiViewCalendarModule] });\nCalendarsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarsModule, imports: [[\n CalendarModule,\n MultiViewCalendarModule\n ], CalendarModule,\n MultiViewCalendarModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CalendarsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [\n CalendarModule,\n MultiViewCalendarModule\n ],\n imports: [\n CalendarModule,\n MultiViewCalendarModule\n ]\n }]\n }] });\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DateInputCustomMessagesComponent extends DateInputMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDateInputCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputCustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nDateInputCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateInputCustomMessagesComponent, selector: \"kendo-dateinput-messages\", providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputCustomMessagesComponent)\n }\n ],\n selector: 'kendo-dateinput-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DateInput component.\n */\nclass DateInputModule {\n}\nDateInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDateInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputModule, declarations: [DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective], imports: [CommonModule, IntlModule, EventsModule], exports: [DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective] });\nDateInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputModule, imports: [[CommonModule, IntlModule, EventsModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective\n ],\n exports: [\n DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective\n ],\n imports: [CommonModule, IntlModule, EventsModule]\n }]\n }] });\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DatePickerCustomMessagesComponent extends DatePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDatePickerCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerCustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nDatePickerCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DatePickerCustomMessagesComponent, selector: \"kendo-datepicker-messages\", providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerCustomMessagesComponent)\n }\n ],\n selector: 'kendo-datepicker-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DatePicker component.\n */\nclass DatePickerModule {\n}\nDatePickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDatePickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerModule, declarations: [DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective], imports: [CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule], exports: [DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective,\n TemplatesModule] });\nDatePickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerModule, providers: [{ provide: TOUCH_ENABLED, useValue: touchEnabled }], imports: [[\n CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule\n ], TemplatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePickerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective\n ],\n exports: [\n DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule\n ],\n providers: [{ provide: TOUCH_ENABLED, useValue: touchEnabled }]\n }]\n }] });\n\nconst COMPONENT_DIRECTIVES$2 = [\n DateRangeComponent,\n DateRangePopupComponent,\n DateRangePopupTemplateDirective,\n DateRangeSelectionDirective,\n DateRangeStartInputDirective,\n DateRangeEndInputDirective\n];\nconst COMPONENT_MODULES$2 = [\n MultiViewCalendarModule,\n DateInputModule,\n PopupModule,\n EventsModule\n];\n/**\n * The exported package module.\n *\n * The package exports:\n * - `DateRangeComponent`—The DateRange component class.\n * - `DateRangePopupComponent`—The DateRangePopup component class.\n * - `DateRangeSelectionDirective`—The MultiviewCalendar date range selection directive.\n * - `DateRangeEndInputDirective`—The end DateInput date range selection directive.\n * - `DateRangeStartInputDirective`—The start DateInput date range selection directive.\n * - `DateRangePopupTemplateDirective`—The DateRangePopup content template directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the DateRange module\n * import { DateRangeModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, DateRangeModule], // import DateRange module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DateRangeModule {\n}\nDateRangeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDateRangeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeModule, declarations: [DateRangeComponent,\n DateRangePopupComponent,\n DateRangePopupTemplateDirective,\n DateRangeSelectionDirective,\n DateRangeStartInputDirective,\n DateRangeEndInputDirective], imports: [CommonModule, MultiViewCalendarModule,\n DateInputModule,\n PopupModule,\n EventsModule], exports: [DateRangeComponent,\n DateRangePopupComponent,\n DateRangePopupTemplateDirective,\n DateRangeSelectionDirective,\n DateRangeStartInputDirective,\n DateRangeEndInputDirective] });\nDateRangeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeModule, imports: [[CommonModule, COMPONENT_MODULES$2]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateRangeModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$2],\n exports: [COMPONENT_DIRECTIVES$2],\n imports: [CommonModule, COMPONENT_MODULES$2]\n }]\n }] });\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass TimePickerCustomMessagesComponent extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTimePickerCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerCustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nTimePickerCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TimePickerCustomMessagesComponent, selector: \"kendo-timepicker-messages\", providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerCustomMessagesComponent)\n }\n ],\n selector: 'kendo-timepicker-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst COMPONENT_DIRECTIVES$1 = [\n TimePickerLocalizedMessagesDirective,\n TimeListComponent,\n TimePickerCustomMessagesComponent,\n TimePickerComponent,\n TimeSelectorLocalizedMessagesDirective,\n TimeSelectorCustomMessagesComponent,\n TimeSelectorComponent\n];\nconst COMPONENT_MODULES$1 = [\n DateInputModule,\n IntlModule,\n PopupModule,\n VirtualizationModule,\n EventsModule\n];\nconst providers = [\n TimePickerDOMService,\n HoursService,\n MinutesService,\n SecondsService,\n MillisecondsService,\n DayPeriodService,\n {\n provide: TOUCH_ENABLED,\n useValue: touchEnabled\n }\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TimePicker component.\n */\nclass TimePickerModule {\n}\nTimePickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTimePickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerModule, declarations: [TimePickerLocalizedMessagesDirective,\n TimeListComponent,\n TimePickerCustomMessagesComponent,\n TimePickerComponent,\n TimeSelectorLocalizedMessagesDirective,\n TimeSelectorCustomMessagesComponent,\n TimeSelectorComponent], imports: [CommonModule, DateInputModule,\n IntlModule,\n PopupModule,\n VirtualizationModule,\n EventsModule], exports: [TimePickerLocalizedMessagesDirective,\n TimeListComponent,\n TimePickerCustomMessagesComponent,\n TimePickerComponent,\n TimeSelectorLocalizedMessagesDirective,\n TimeSelectorCustomMessagesComponent,\n TimeSelectorComponent] });\nTimePickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerModule, providers: providers, imports: [[CommonModule, ...COMPONENT_MODULES$1]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TimePickerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$1],\n exports: [COMPONENT_DIRECTIVES$1],\n imports: [CommonModule, ...COMPONENT_MODULES$1],\n providers: providers\n }]\n }] });\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DateTimePickerCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDateTimePickerCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerCustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nDateTimePickerCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DateTimePickerCustomMessagesComponent, selector: \"kendo-datetimepicker-messages\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => DateTimePickerCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => DateTimePickerCustomMessagesComponent)\n }\n ],\n selector: 'kendo-datetimepicker-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });\n\nconst COMPONENT_DIRECTIVES = [\n DateTimePickerComponent,\n DateTimePickerCustomMessagesComponent,\n LocalizedMessagesDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DateTimePicker component.\n */\nclass DateTimePickerModule {\n}\nDateTimePickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDateTimePickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerModule, declarations: [DateTimePickerComponent,\n DateTimePickerCustomMessagesComponent,\n LocalizedMessagesDirective], imports: [CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule], exports: [DateTimePickerComponent,\n DateTimePickerCustomMessagesComponent,\n LocalizedMessagesDirective, TemplatesModule] });\nDateTimePickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerModule, providers: [\n { provide: TOUCH_ENABLED, useValue: touchEnabled }\n ], imports: [[\n CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule\n ], TemplatesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateTimePickerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n ...COMPONENT_DIRECTIVES\n ],\n exports: [\n ...COMPONENT_DIRECTIVES,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule\n ],\n providers: [\n { provide: TOUCH_ENABLED, useValue: touchEnabled }\n ]\n }]\n }] });\n\nconst COMPONENT_MODULES = [\n CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Date Inputs components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Date Inputs module\n * import { DateInputsModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare the app component\n * imports: [BrowserModule, DateInputsModule], // import the Date Inputs module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DateInputsModule {\n}\nDateInputsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDateInputsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputsModule, imports: [CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule], exports: [CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule] });\nDateInputsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputsModule, imports: [COMPONENT_MODULES, CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DateInputsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: COMPONENT_MODULES,\n imports: COMPONENT_MODULES\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CalendarCommonModule, CalendarComponent, CalendarCustomMessagesComponent, CalendarLocalizedMessagesDirective, CalendarModule, CalendarsModule, CellTemplateDirective, CenturyCellTemplateDirective, DateInputComponent, DateInputCustomMessagesComponent, DateInputLocalizedMessagesDirective, DateInputModule, DateInputsModule, DatePickerComponent, DatePickerCustomMessagesComponent, DatePickerLocalizedMessagesDirective, DatePickerModule, DateRangeComponent, DateRangeEndInputDirective, DateRangeModule, DateRangePopupComponent, DateRangePopupTemplateDirective, DateRangeSelectionDirective, DateRangeService, DateRangeStartInputDirective, DateTimePickerComponent, DateTimePickerCustomMessagesComponent, DateTimePickerModule, DecadeCellTemplateDirective, HeaderComponent, HeaderTitleTemplateDirective, HorizontalViewListComponent, KForOf, LocalizedMessagesDirective, MonthCellTemplateDirective, MultiViewCalendarComponent, MultiViewCalendarCustomMessagesComponent, MultiViewCalendarLocalizedMessagesDirective, MultiViewCalendarModule, NavigationComponent, NavigationItemTemplateDirective, PreventableEvent, TemplatesModule, TimeListComponent, TimePickerComponent, TimePickerCustomMessagesComponent, TimePickerLocalizedMessagesDirective, TimePickerModule, TimeSelectorComponent, TimeSelectorCustomMessagesComponent, TimeSelectorLocalizedMessagesDirective, ViewComponent, ViewListComponent, WeekNumberCellTemplateDirective, YearCellTemplateDirective };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { EventEmitter, TemplateRef, Component, Input, Output, HostBinding, InjectionToken, Injectable, Inject, Optional, Directive, forwardRef, ContentChildren, ViewChildren, ViewChild, isDevMode, Renderer2, Host, HostListener, ContentChild, NgModule } from '@angular/core';\nimport * as i2 from '@angular/animations';\nimport { style, animate, keyframes, trigger, state, transition } from '@angular/animations';\nimport { of, Subscription, Subject, merge } from 'rxjs';\nimport { delay, takeUntil, take, filter, map, share, tap, switchMap } from 'rxjs/operators';\nimport * as i6 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { LocalizationService, L10N_PREFIX, RTL, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i1$1 from '@progress/kendo-angular-common';\nimport { DraggableDirective, isChanged, isDocumentAvailable, DraggableModule } from '@progress/kendo-angular-common';\nimport { offset, scrollPosition, positionWithScroll, getDocumentElement, getWindowViewPort } from '@progress/kendo-popup-common';\nimport { Button } from '@progress/kendo-angular-buttons';\n\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isTruthy = (value) => !!value;\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\nconst focusableRegex = /^(?:a|input|select|textarea|button|object)$/i;\n/**\n * @hidden\n */\nvar Keys;\n(function (Keys) {\n Keys[Keys[\"esc\"] = 27] = \"esc\";\n Keys[Keys[\"tab\"] = 9] = \"tab\";\n Keys[Keys[\"enter\"] = 13] = \"enter\";\n Keys[Keys[\"space\"] = 32] = \"space\";\n Keys[Keys[\"ctrl\"] = 17] = \"ctrl\";\n Keys[Keys[\"shift\"] = 16] = \"shift\";\n Keys[Keys[\"left\"] = 37] = \"left\";\n Keys[Keys[\"up\"] = 38] = \"up\";\n Keys[Keys[\"right\"] = 39] = \"right\";\n Keys[Keys[\"down\"] = 40] = \"down\";\n})(Keys || (Keys = {}));\n/**\n * @hidden\n */\nconst DIALOG_ELEMENTS_HANDLING_ESC_KEY = 'k-dialog-wrapper k-dialog-buttongroup k-dialog-action';\n/**\n * @hidden\n */\nconst DIALOG_ELEMENTS_HANDLING_ARROWS = 'k-dialog-buttongroup';\n/**\n * @hidden\n */\nconst WINDOW_CLASSES = 'k-window';\n/**\n * @hidden\n */\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n/**\n * @hidden\n */\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n return !!(rect.width && rect.height) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n/**\n * @hidden\n */\nconst isFocusable = (element, checkVisibility = true) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const validTabIndex = tabIndex !== null && !isNaN(tabIndex) && tabIndex > -1;\n let focusable = false;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled;\n }\n else {\n focusable = validTabIndex;\n }\n return focusable && (!checkVisibility || isVisible(element));\n }\n return false;\n};\n/**\n * @hidden\n */\nconst setHTMLAttributes = (attributes, renderer, element) => {\n for (const attribute in attributes) {\n if (attribute) {\n renderer.setAttribute(element, attribute, attributes[attribute]);\n }\n }\n};\n/**\n * Receives CSS class declarations either as an object, string or array and returns an array of the class names.\n *\n * @hidden\n */\nconst parseCSSClassNames = (value) => {\n if (isObject(value)) {\n return parseObjectClassNames(value);\n }\n if (isString(value)) {\n return parseStringClassNames(value);\n }\n if (Array.isArray(value)) {\n return parseArrayClassNames(value);\n }\n};\nconst parseObjectClassNames = (value) => {\n const classes = [];\n Object.keys(value).forEach(className => {\n const currentClassName = splitStringToArray(className);\n if (value[className] && currentClassName[0]) {\n classes.push(...currentClassName);\n }\n });\n return classes;\n};\nconst parseStringClassNames = (value) => {\n const classes = [];\n const classesArray = splitStringToArray(value);\n classesArray.forEach(className => {\n classes.push(className);\n });\n return classes;\n};\nconst parseArrayClassNames = (value) => {\n const classes = [];\n value.forEach((className) => {\n const current = splitStringToArray(className);\n if (current[0]) {\n classes.push(...current);\n }\n });\n return classes;\n};\n/**\n * @hidden\n */\nconst focusableSelector = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '*[tabindex]',\n '*[contenteditable]'\n].join(',');\n/**\n * @hidden\n */\nconst preventDefault = ({ originalEvent: event }) => {\n event.stopPropagation();\n event.preventDefault();\n};\n/**\n * @hidden\n */\nconst isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n/**\n * @hidden\n */\nconst preventOnDblClick = release => (mouseDown) => of(mouseDown).pipe(delay(150), takeUntil(release));\n/**\n * @hidden\n */\nconst RESIZE_DIRECTIONS = ['n', 'e', 's', 'w', 'se', 'sw', 'ne', 'nw'];\n/**\n * @hidden\n */\nconst OFFSET_STYLES = ['top', 'left', 'width', 'height'];\n/**\n * @hidden\n */\nconst isString = (value) => value instanceof String || typeof value === 'string';\n/**\n * @hidden\n */\nconst isObject = (value) => isPresent(value) && !Array.isArray(value) && typeof value === 'object';\n/**\n * @hidden\n */\nconst isNumber = (value) => typeof value === 'number' && isFinite(value);\n/**\n * @hidden\n */\nconst createValueWithUnit = (value) => value + (isNumber(value) ? 'px' : '');\n/**\n * @hidden\n */\nconst splitStringToArray = (value) => value.trim().replace(/\\s+/g, \" \").split(' ');\n/**\n * @hidden\n */\nconst findPrimaryButton = (buttons) => {\n for (let i = buttons.length - 1; i >= 0; i--) {\n const classList = buttons[i].classList;\n for (let j = 0; j < classList.length; j++) {\n if (classList[j].endsWith('-primary')) {\n return buttons[i];\n }\n }\n }\n};\n\n/**\n * Specifies the action buttons of the Dialog\n * ([see example]({% slug actionbuttons_dialog %})).\n */\nclass DialogActionsComponent {\n constructor(el) {\n this.el = el;\n /**\n * Specifies the possible layout of the action buttons.\n */\n this.layout = 'stretched';\n /**\n * Fires when the user clicks an action button.\n */\n this.action = new EventEmitter();\n this.buttonGroupClassName = true;\n }\n /**\n * Allows the declarative specification of the actions.\n */\n set actions(value) {\n if (value instanceof TemplateRef) {\n this.actionsTemplate = value;\n }\n else if (Array.isArray(value)) {\n this.actionsArray = value;\n }\n else {\n throw new Error('\"actions\" must be either TemplateRef or DialogAction[] instance.');\n }\n }\n get className() {\n return this.layout === 'stretched';\n }\n /**\n * @hidden\n */\n onButtonClick(action, _e) {\n this.action.emit(action);\n }\n /**\n * @hidden\n */\n buttonClass(action) {\n let classes = ['k-button k-button-md k-rounded-md'];\n const fillMode = action.fillMode ? action.fillMode : 'solid';\n const themeColor = action.themeColor ? action.themeColor : 'base';\n const cssClasses = action.cssClass ? parseCSSClassNames(action.cssClass) : [];\n classes.push(`k-button-${fillMode} k-button-${fillMode}-${themeColor}`);\n if (cssClasses.length > 0) {\n classes = classes.concat(cssClasses);\n }\n return classes.join(' ');\n }\n}\nDialogActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogActionsComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nDialogActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialogActionsComponent, selector: \"kendo-dialog-actions\", inputs: { actions: \"actions\", layout: \"layout\" }, outputs: { action: \"action\" }, host: { properties: { \"class.k-dialog-buttongroup\": \"this.buttonGroupClassName\", \"class.k-actions\": \"this.buttonGroupClassName\", \"class.k-actions-stretched\": \"this.className\" } }, ngImport: i0, template: `\n \n \n \n {{ action.text }}\n \n \n \n `, isInline: true, directives: [{ type: i6.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i6.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i6.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i6.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogActionsComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-dialog-actions',\n template: `\n \n \n \n {{ action.text }}\n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { actions: [{\n type: Input\n }], layout: [{\n type: Input\n }], action: [{\n type: Output\n }], buttonGroupClassName: [{\n type: HostBinding,\n args: ['class.k-dialog-buttongroup']\n }, {\n type: HostBinding,\n args: ['class.k-actions']\n }], className: [{\n type: HostBinding,\n args: ['class.k-actions-stretched']\n }] } });\n\nclass PreventableEvent {\n /**\n * @hidden\n */\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst DIALOG_LOCALIZATION_SERVICE = new InjectionToken('Dialog LocalizationService');\n\n/**\n * @hidden\n */\nclass TitleBarLocalizationService extends LocalizationService {\n constructor(prefix, messageService, rtl, dialogLocalization) {\n super(prefix, messageService, rtl);\n this.dialogLocalization = dialogLocalization;\n }\n get(shortKey) {\n if (this.dialogLocalization) {\n return this.dialogLocalization.get(shortKey);\n }\n return super.get(shortKey);\n }\n}\nTitleBarLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TitleBarLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }, { token: DIALOG_LOCALIZATION_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nTitleBarLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TitleBarLocalizationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TitleBarLocalizationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [L10N_PREFIX]\n }] }, { type: i1.MessageService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }, { type: i1.LocalizationService, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DIALOG_LOCALIZATION_SERVICE]\n }] }]; } });\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: Messages, selector: \"kendo-dialog-messages-base\", inputs: { closeTitle: \"closeTitle\", restoreTitle: \"restoreTitle\", maximizeTitle: \"maximizeTitle\", minimizeTitle: \"minimizeTitle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-dialog-messages-base'\n }]\n }], propDecorators: { closeTitle: [{\n type: Input\n }], restoreTitle: [{\n type: Input\n }], maximizeTitle: [{\n type: Input\n }], minimizeTitle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedMessagesDirective, selector: \"\\n [kendoDialogLocalizedMessages],\\n [kendoWindowLocalizedMessages],\\n [kendoDialogTitleBarLocalizedMessages]\\n \", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `\n [kendoDialogLocalizedMessages],\n [kendoWindowLocalizedMessages],\n [kendoDialogTitleBarLocalizedMessages]\n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Represents the [Kendo UI DialogTitleBar component for Angular]({% slug api_dialog_dialogtitlebarcomponent %}).\n *\n * It is used as part of the Dialog content when the component is created dynamically by using an [Angular service]({% slug service_dialog %}).\n */\nclass DialogTitleBarComponent {\n constructor(zone, hostElement, localizationService) {\n this.zone = zone;\n this.hostElement = hostElement;\n this.localizationService = localizationService;\n /**\n * Fires when the close button of the title-bar is clicked.\n */\n this.close = new EventEmitter();\n }\n get className() {\n return true;\n }\n get closeButtonTitle() {\n return this.closeTitle || this.localizationService.get('closeTitle');\n }\n ngAfterViewInit() {\n this.zone.onStable.pipe(take(1)).subscribe(() => {\n const element = this.hostElement.nativeElement.querySelector('.k-dialog-title');\n element.setAttribute('id', this.id);\n });\n }\n /**\n * @hidden\n */\n onCloseClick(e) {\n e.preventDefault();\n const eventArgs = new PreventableEvent();\n this.close.emit(eventArgs);\n }\n}\nDialogTitleBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogTitleBarComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nDialogTitleBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialogTitleBarComponent, selector: \"kendo-dialog-titlebar\", inputs: { id: \"id\", closeTitle: \"closeTitle\" }, outputs: { close: \"close\" }, host: { properties: { \"class.k-window-titlebar\": \"this.className\", \"class.k-dialog-titlebar\": \"this.className\" } }, providers: [\n TitleBarLocalizationService,\n {\n provide: LocalizationService,\n useExisting: TitleBarLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ], ngImport: i0, template: `\n \n
\n \n
\n\n
\n \n \n \n
\n \n `, isInline: true, directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDialogLocalizedMessages],\\n [kendoWindowLocalizedMessages],\\n [kendoDialogTitleBarLocalizedMessages]\\n \" }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogTitleBarComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-dialog-titlebar',\n providers: [\n TitleBarLocalizationService,\n {\n provide: LocalizationService,\n useExisting: TitleBarLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ],\n template: `\n \n
\n \n
\n\n
\n \n \n \n
\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.LocalizationService, decorators: [{\n type: Optional\n }] }]; }, propDecorators: { close: [{\n type: Output\n }], id: [{\n type: Input\n }], closeTitle: [{\n type: Input\n }], className: [{\n type: HostBinding,\n args: ['class.k-window-titlebar']\n }, {\n type: HostBinding,\n args: ['class.k-dialog-titlebar']\n }] } });\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-dialog',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1654175123,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * Indicates that the **Close** button is clicked. Used when the results from\n * the Dialogs that are opened through `DialogService` are filtered\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogCloseResult {\n}\n\n/**\n * @hidden\n */\nfunction animations(duration, direction, animationType) {\n switch (animationType) {\n case 'slide':\n const translate = direction === 'left' || direction === 'right' ? 'translateX' : 'translateY';\n const start = direction === 'right' || direction === 'down' ? -100 : 100;\n const end = 0;\n return [\n style({ transform: `${translate}(${start}%)` }),\n animate(`${duration}ms ease-in`, style({ transform: `${translate}(${end}%)` }))\n ];\n case 'expand':\n const scale = direction === 'up' || direction === 'down' ? 'scaleY' : 'scaleX';\n const startScale = 0;\n const endScale = 1;\n let origin;\n if (direction === 'down') {\n origin = 'top';\n }\n else if (direction === 'left') {\n origin = 'right';\n }\n else if (direction === 'right') {\n origin = 'left';\n }\n else {\n origin = 'bottom';\n }\n return [\n style({ transform: `${scale}(${startScale})`, transformOrigin: origin }),\n animate(`${duration}ms ease-in`, style({ transform: `${scale}(${endScale})` }))\n ];\n case 'zoom':\n const startZoom = 0;\n const endZoom = 1;\n return [\n animate(duration, keyframes([\n style({ transform: `scale(${startZoom})` }),\n style({ transform: `scale(${endZoom})` })\n ]))\n ];\n case 'fade':\n const startFade = 0;\n const endFade = 1;\n return [\n animate(duration, keyframes([\n style({ opacity: `${startFade}` }),\n style({ opacity: `${endFade}` })\n ]))\n ];\n case 'translate':\n return [\n style({ transform: 'translate(0, -10%)' }),\n animate(`${duration}ms cubic-bezier(.2, 1, .2, 1)`)\n ];\n default:\n return [\n style({ transform: 'translate(0, -10%)' }),\n animate(`${duration}ms cubic-bezier(.2, 1, .2, 1)`)\n ];\n }\n}\n\n/**\n * @hidden\n */\nconst createPlayer = (builder, animation, animatedElement) => {\n const factory = builder.build(animation);\n let player = factory.create(animatedElement);\n player.onDone(() => {\n if (player) {\n player.destroy();\n player = null;\n }\n });\n return player;\n};\n\n/**\n * @hidden\n */\nconst animateContent = (animation, defAnimationConfig, animatedElement, builder) => {\n let animationConfig = defAnimationConfig;\n if (typeof animation !== 'boolean') {\n animationConfig = animation;\n animationConfig.duration = animationConfig.duration ? animationConfig.duration : defAnimationConfig.duration;\n }\n const animationSpecs = animations(animationConfig.duration, animationConfig.direction, animationConfig.type);\n const player = createPlayer(builder, animationSpecs, animatedElement);\n player.play();\n};\n\nconst DEFAULT_ANIMATION_CONFIG = { duration: 300, type: 'translate' };\n/**\n * Represents the [Kendo UI Dialog component for Angular]({% slug overview_dialog_dialogs %}).\n */\nclass DialogComponent {\n constructor(wrapper, renderer, localization, cdr, ngZone, builder) {\n this.wrapper = wrapper;\n this.renderer = renderer;\n this.cdr = cdr;\n this.ngZone = ngZone;\n this.builder = builder;\n /**\n * Specifies the layout of the action buttons in the Dialog.\n * This option is only applicable if the action buttons are specified through the `actions` options.\n *\n * @default 'stretched'\n */\n this.actionsLayout = 'stretched';\n /**\n * Configures the Dialog opening animation ([see example]({% slug animations_dialog %})).\n * By default the animation type is set to `translate` and its duration is `300ms`.\n *\n * @default true\n */\n this.animation = true;\n /**\n * @hidden\n */\n this.titleId = null;\n /**\n * @hidden\n */\n this.contentId = null;\n /**\n * Fires when the user clicks an action button of the Dialog.\n * The event is fired only when the action buttons are specified through the `actions` options.\n */\n this.action = new EventEmitter();\n /**\n * Fires when the user clicks the **Close** button of the Dialog or the **ESC** key.\n */\n this.close = new EventEmitter();\n this.tabIndex = 0;\n this.subscriptions = [];\n this.domSubs = new Subscription();\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subscriptions.push(localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));\n this.titleId = this.generateTitleId();\n this.contentId = this.generateContentId();\n }\n /**\n * @hidden\n */\n set htmlAttributes(attributes) {\n setHTMLAttributes(attributes, this.renderer, this.wrapper.nativeElement);\n const el = this.wrapper.nativeElement;\n const dir = el.getAttribute('dir');\n const tIndex = el.getAttribute('tabindex');\n if (this.direction !== dir && dir) {\n this.direction = dir;\n }\n if (this.tabIndex !== tIndex && tIndex) {\n this.tabIndex = tIndex;\n }\n this._htmlAttributes = attributes;\n }\n get htmlAttributes() {\n return this._htmlAttributes;\n }\n /**\n * @hidden\n */\n set cssClass(classes) {\n this.setServiceClasses(this._cssClass, classes);\n this._cssClass = classes;\n }\n get cssClass() {\n return this._cssClass;\n }\n get dir() {\n return this.direction;\n }\n ngAfterContentInit() {\n this.bubble('close', this.titlebarContent.first);\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-describedby', this.contentId);\n if (this.titlebarContent.first) {\n this.titlebarContent.first.id = this.titleId;\n }\n else {\n this.subscriptions.push(this.titlebarContent.changes.subscribe(() => {\n if (isPresent(this.titlebarContent.first)) {\n this.titlebarContent.first.id = this.titleId;\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.bubble('close', this.titlebarContent.first);\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-labelledby', this.titleId);\n });\n }\n }));\n }\n }\n ngAfterViewInit() {\n this.handleInitialFocus();\n this.bubble('close', this.titlebarView.first);\n this.bubble('action', this.actionsView);\n if (this.titlebarView.first || this.titlebarContent.first) {\n //Needed for Dialogs created via service\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-labelledby', this.titleId);\n }\n else {\n this.subscriptions.push(this.titlebarView.changes.subscribe(() => {\n if (isPresent(this.titlebarView.first)) {\n this.titlebarView.first.id = this.titleId;\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.bubble('close', this.titlebarView.first);\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-labelledby', this.titleId);\n });\n }\n }));\n }\n this.initDomEvents();\n }\n ngOnInit() {\n if (this.animation) {\n animateContent(this.animation, DEFAULT_ANIMATION_CONFIG, this.dialog.nativeElement, this.builder);\n }\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'title');\n this.cdr.detectChanges();\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.subscriptions = [];\n if (this.domSubs) {\n this.domSubs.unsubscribe();\n }\n }\n /**\n * Focuses the wrapper of the Dialog component.\n */\n focus() {\n const wrapper = this.wrapper.nativeElement;\n if (isPresent(wrapper)) {\n wrapper.focus();\n }\n }\n initDomEvents() {\n if (!this.wrapper) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.domSubs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', (ev) => {\n this.onKeyDown(ev);\n }));\n });\n }\n onKeyDown(event) {\n const target = event.target;\n const parent = target.parentElement;\n if (hasClasses(target, DIALOG_ELEMENTS_HANDLING_ESC_KEY) || hasClasses(parent, DIALOG_ELEMENTS_HANDLING_ESC_KEY)) {\n if (event.keyCode === Keys.esc) {\n this.ngZone.run(() => {\n this.close.emit(new DialogCloseResult());\n });\n }\n }\n if (hasClasses(target, 'k-button') && hasClasses(parent, DIALOG_ELEMENTS_HANDLING_ARROWS) &&\n (event.keyCode === Keys.left || event.keyCode === Keys.right)) {\n this.ngZone.run(() => {\n this.handleActionButtonFocus(parent, event.keyCode);\n });\n }\n if (event.keyCode === Keys.tab) {\n this.ngZone.run(() => {\n this.keepFocusWithinComponent(target, event);\n });\n }\n }\n setServiceClasses(prevValue, value) {\n const el = this.wrapper.nativeElement;\n if (prevValue) {\n parseCSSClassNames(prevValue).forEach(className => {\n this.renderer.removeClass(el, className);\n });\n }\n if (value) {\n parseCSSClassNames(value).forEach(className => {\n this.renderer.addClass(el, className);\n });\n }\n }\n /**\n * @hidden\n */\n handleInitialFocus() {\n const wrapper = this.wrapper.nativeElement;\n const primaryButton = this.findPrimary(wrapper);\n if (this.autoFocusedElement) {\n const initiallyFocusedElement = wrapper.querySelector(this.autoFocusedElement);\n if (initiallyFocusedElement) {\n initiallyFocusedElement.focus();\n }\n }\n else if (this.shouldFocusPrimary(primaryButton)) {\n primaryButton.focus();\n }\n else {\n wrapper.focus();\n }\n }\n /**\n * @hidden\n */\n findPrimary(wrapper) {\n const actionBtns = wrapper.querySelectorAll('.k-actions .k-button');\n return findPrimaryButton(actionBtns);\n }\n /**\n * @hidden\n */\n handleActionButtonFocus(parent, key) {\n const focusableActionButtons = this.getAllFocusableChildren(parent);\n for (let i = 0; i < focusableActionButtons.length; i++) {\n const current = focusableActionButtons[i];\n if (current === document.activeElement) {\n if (key === Keys.left && i > 0) {\n focusableActionButtons[i - 1].focus();\n break;\n }\n if (key === Keys.right && i < focusableActionButtons.length - 1) {\n focusableActionButtons[i + 1].focus();\n break;\n }\n }\n }\n }\n /**\n * @hidden\n */\n keepFocusWithinComponent(target, event) {\n const wrapper = this.wrapper.nativeElement;\n const [firstFocusable, lastFocusable] = this.getFirstAndLastFocusable(wrapper);\n const tabAfterLastFocusable = !event.shiftKey && target === lastFocusable;\n const shiftTabAfterFirstFocusable = event.shiftKey && target === firstFocusable;\n if (tabAfterLastFocusable) {\n event.preventDefault();\n firstFocusable.focus();\n }\n if (shiftTabAfterFirstFocusable) {\n event.preventDefault();\n lastFocusable.focus();\n }\n }\n /**\n * @hidden\n */\n shouldFocusPrimary(el) {\n return isPresent(el) && isFocusable(el);\n }\n /**\n * @hidden\n */\n getAllFocusableChildren(parent) {\n return parent.querySelectorAll(focusableSelector);\n }\n /**\n * @hidden\n */\n getFirstAndLastFocusable(parent) {\n const all = this.getAllFocusableChildren(parent);\n const firstFocusable = all.length > 0 ? all[0] : parent;\n const lastFocusable = all.length > 0 ? all[all.length - 1] : parent;\n return [firstFocusable, lastFocusable];\n }\n /**\n * @hidden\n */\n generateTitleId() {\n return 'kendo-dialog-title-' + Math.ceil(Math.random() * 1000000).toString();\n }\n /**\n * @hidden\n */\n generateContentId() {\n return 'kendo-dialog-content-' + Math.ceil(Math.random() * 1000000).toString();\n }\n get wrapperClass() {\n return true;\n }\n get styles() {\n const styles = {};\n if (this.width) {\n styles.width = createValueWithUnit(this.width);\n }\n if (this.height) {\n styles.height = createValueWithUnit(this.height);\n }\n if (this.minWidth) {\n styles.minWidth = createValueWithUnit(this.minWidth);\n }\n if (this.maxWidth) {\n styles.maxWidth = createValueWithUnit(this.maxWidth);\n }\n if (this.minHeight) {\n styles.minHeight = createValueWithUnit(this.minHeight);\n }\n if (this.maxHeight) {\n styles.maxHeight = createValueWithUnit(this.maxHeight);\n }\n return styles;\n }\n bubble(eventName, component) {\n if (component) {\n const emit = e => this[eventName].emit(e);\n const s = component[eventName].subscribe(emit);\n this.subscriptions.push(s);\n }\n }\n}\nDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i2.AnimationBuilder }], target: i0.ɵɵFactoryTarget.Component });\nDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialogComponent, selector: \"kendo-dialog\", inputs: { actions: \"actions\", actionsLayout: \"actionsLayout\", autoFocusedElement: \"autoFocusedElement\", title: \"title\", width: \"width\", minWidth: \"minWidth\", maxWidth: \"maxWidth\", height: \"height\", minHeight: \"minHeight\", maxHeight: \"maxHeight\", animation: \"animation\" }, outputs: { action: \"action\", close: \"close\" }, host: { properties: { \"attr.dir\": \"this.dir\", \"attr.tabIndex\": \"this.tabIndex\", \"class.k-dialog-wrapper\": \"this.wrapperClass\" } }, providers: [\n LocalizationService,\n {\n provide: DIALOG_LOCALIZATION_SERVICE,\n useExisting: LocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ], queries: [{ propertyName: \"titlebarContent\", predicate: DialogTitleBarComponent }], viewQueries: [{ propertyName: \"actionsView\", first: true, predicate: DialogActionsComponent, descendants: true }, { propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true, static: true }, { propertyName: \"titlebarView\", predicate: DialogTitleBarComponent, descendants: true }], exportAs: [\"kendoDialog\"], ngImport: i0, template: `\n \n
\n\n
\n {{ title }}\n \n\n
\n \n \n
\n\n \n \n
\n \n `, isInline: true, components: [{ type: DialogTitleBarComponent, selector: \"kendo-dialog-titlebar\", inputs: [\"id\", \"closeTitle\"], outputs: [\"close\"] }, { type: DialogActionsComponent, selector: \"kendo-dialog-actions\", inputs: [\"actions\", \"layout\"], outputs: [\"action\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDialogLocalizedMessages],\\n [kendoWindowLocalizedMessages],\\n [kendoDialogTitleBarLocalizedMessages]\\n \" }, { type: i6.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i6.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i6.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }], animations: [\n trigger('overlayAppear', [\n state('in', style({ opacity: 1 })),\n transition('void => *', [style({ opacity: 0.1 }), animate('.3s cubic-bezier(.2, .6, .4, 1)')])\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogComponent, decorators: [{\n type: Component,\n args: [{\n animations: [\n trigger('overlayAppear', [\n state('in', style({ opacity: 1 })),\n transition('void => *', [style({ opacity: 0.1 }), animate('.3s cubic-bezier(.2, .6, .4, 1)')])\n ])\n ],\n exportAs: 'kendoDialog',\n providers: [\n LocalizationService,\n {\n provide: DIALOG_LOCALIZATION_SERVICE,\n useExisting: LocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ],\n selector: 'kendo-dialog',\n template: `\n \n
\n\n
\n {{ title }}\n \n\n
\n \n \n
\n\n \n \n
\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i2.AnimationBuilder }]; }, propDecorators: { actions: [{\n type: Input\n }], actionsLayout: [{\n type: Input\n }], autoFocusedElement: [{\n type: Input\n }], title: [{\n type: Input\n }], width: [{\n type: Input\n }], minWidth: [{\n type: Input\n }], maxWidth: [{\n type: Input\n }], height: [{\n type: Input\n }], minHeight: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], animation: [{\n type: Input\n }], action: [{\n type: Output\n }], close: [{\n type: Output\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], titlebarContent: [{\n type: ContentChildren,\n args: [DialogTitleBarComponent, { descendants: false }]\n }], titlebarView: [{\n type: ViewChildren,\n args: [DialogTitleBarComponent]\n }], actionsView: [{\n type: ViewChild,\n args: [DialogActionsComponent, { static: false }]\n }], dialog: [{\n type: ViewChild,\n args: ['dialog', { static: true }]\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-dialog-wrapper']\n }] } });\n\n/**\n * Holds references to the object instance and published events of the Dialog.\n * Controls the Dialogs that were opened through the `DialogService`\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogRef {\n}\n\n/**\n * The base class which will be extended by a component that is provided as content through `content`\n * ([see example]({% slug service_dialog %}#toc-passing-title-content-and-actions-as-a-single-component)).\n */\nclass DialogContentBase {\n constructor(dialog) {\n this.dialog = dialog;\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n if (this.dialogTitleBar) {\n // when opening component inside dialog with service AND the component has defined its own titlebar\n this.dialogTitleBar.close.pipe(filter((e) => !e.isDefaultPrevented())).subscribe(() => {\n this.dialog.close();\n });\n }\n if (this.dialogActions) {\n if (this.dialogActions.actions) {\n this.dialogActions.action.subscribe(action => this.dialog.dialog.instance.action.emit(action));\n }\n }\n }\n}\nDialogContentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogContentBase, deps: [{ token: DialogRef }], target: i0.ɵɵFactoryTarget.Directive });\nDialogContentBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialogContentBase, viewQueries: [{ propertyName: \"dialogTitleBar\", first: true, predicate: DialogTitleBarComponent, descendants: true }, { propertyName: \"dialogActions\", first: true, predicate: DialogActionsComponent, descendants: true }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogContentBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: DialogRef }]; }, propDecorators: { dialogTitleBar: [{\n type: ViewChild,\n args: [DialogTitleBarComponent, { static: false }]\n }], dialogActions: [{\n type: ViewChild,\n args: [DialogActionsComponent, { static: false }]\n }] } });\n\n/**\n * @hidden\n */\nclass DialogContainerService {\n set container(container) {\n DialogContainerService.container = container;\n }\n get container() {\n return DialogContainerService.container;\n }\n}\nDialogContainerService.container = null;\nDialogContainerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogContainerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDialogContainerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogContainerService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogContainerService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * The settings for the Dialog actions when the Dialog is opened through `DialogService`\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogAction {\n}\n\n/**\n * The settings that can be used when the Dialog is opened through `DialogService`.\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogSettings {\n}\n\n// eslint-disable max-line-length\nconst isNotComponent$1 = (component) => isString(component) || component instanceof TemplateRef;\nclass DialogInjector {\n constructor(getDialogRef, parentInjector) {\n this.getDialogRef = getDialogRef;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue) {\n if (token === DialogRef) {\n return this.getDialogRef();\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}\n/**\n * A service for opening Dialog windows dynamically\n * ([see example]({% slug service_dialog %})).\n */\nclass DialogService {\n constructor(\n /**\n * @hidden\n */\n resolver, containerService) {\n this.resolver = resolver;\n this.containerService = containerService;\n }\n /**\n * Opens a Dialog window. Requires an element in the application that uses the\n * [`kendoDialogContainer`]({% slug api_dialog_dialogcontainerdirective %}) directive.\n * Created Dialogs will be mounted in the DOM directly after that element.\n *\n * @param {DialogAction} options - The options that define the Dialog.\n * @returns {DialogRef} - A reference to the Dialog object and the convenience properties.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n *
\n * `\n * })\n * export class AppComponent {\n * constructor( private dialogService: DialogService ) {}\n *\n * public open() {\n * var dialog = this.dialogService.open({\n * title: \"Please confirm\",\n * content: \"Are you sure?\",\n * actions: [\n * { text: \"No\" },\n * { text: \"Yes\", themeColor: 'primary' }\n * ]\n * });\n *\n * dialog.result.subscribe((result) => {\n * if (result instanceof DialogCloseResult) {\n * console.log(\"close\");\n * } else {\n * console.log(\"action\", result);\n * }\n * });\n * }\n * }\n * ```\n *\n */\n open(options) {\n const factory = this.resolver.resolveComponentFactory(DialogComponent);\n const container = options.appendTo || this.containerService.container;\n if (!container) {\n throw new Error(`\nCannot attach dialog to the page.\nAdd an element that uses the kendoDialogContainer directive, or set the 'appendTo' property.\nSee https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/.\n `);\n }\n // create DialogRef to (1) pass as result, (2) provide through injector\n const dialogRef = {\n close: () => {\n /* noop */\n },\n content: null,\n dialog: null,\n result: null\n };\n return this.initializeDialog(options.content, factory, container, dialogRef, options);\n }\n initializeDialog(component, factory, container, dialogRef, options) {\n const content = this.contentFrom(component, container, dialogRef);\n const dialog = container.createComponent(factory, undefined, undefined, content.nodes);\n dialogRef.dialog = dialog;\n dialog.changeDetectorRef.markForCheck();\n // copy @Input options to dialog instance\n this.applyOptions(dialog.instance, options);\n // create close handler and result stream\n const apiClose = new Subject();\n const close = (e) => {\n if (e instanceof PreventableEvent) {\n e = new DialogCloseResult();\n }\n apiClose.next(e || new DialogCloseResult());\n if (content.componentRef) {\n content.componentRef.destroy();\n }\n dialog.destroy();\n };\n const result = merge(apiClose, \n // triggered when the titlebar or actions are defined in DialogSettings\n merge(dialog.instance.close, dialog.instance.action).pipe(map(e => (e instanceof PreventableEvent ? new DialogCloseResult() : e)), filter(e => {\n if (options.preventAction) {\n // add dialogRef only when using component\n const dialogRefParameter = isNotComponent$1(component) ? undefined : dialogRef;\n return !options.preventAction(e, dialogRefParameter);\n }\n return true;\n }))).pipe(take(1), \n // Takes care for multiple subscriptions:\n // We subscribe internaly and the user may subscribe to get a close result - dialog.result.subscribe().\n // This causes multiple subscriptions to the same source and thus multiple emissions. share() solves that.\n share());\n result.subscribe(close);\n dialogRef.close = close;\n dialogRef.result = result;\n if (component && isDevMode()) {\n const hasContentTitle = content.nodes[0] && content.nodes[0].length > 0;\n const hasContentActions = content.nodes[2] && content.nodes[2].length > 0;\n const multipleTitles = options.title && hasContentTitle;\n const multipleActions = options.actions && hasContentActions;\n if (component.prototype instanceof DialogContentBase) {\n // content component extends DialogContentBase\n if (multipleTitles || multipleActions) {\n console.warn(`\n Multiple Title and/or Actions configurations detected.\n When using a component as content, provide the title and actions either in the component's markup\n or via the title and actions properties of the DialogSettings object, but not both.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/#toc-passing-title-content-and-actions-as-a-single-component'`);\n }\n }\n else {\n if (hasContentTitle || hasContentActions) {\n console.warn(`\n When Title and/or Actions markup is provided in content component's template,\n the component needs to inherit the DialogContentBase class to ensure that close and result events are properly hooked.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/#toc-passing-title-content-and-actions-as-a-single-component'`);\n }\n }\n }\n return dialogRef;\n }\n applyOptions(instance, options) {\n instance.title = options.title;\n instance.actions = options.actions;\n instance.actionsLayout = options.actionsLayout || 'stretched';\n instance.width = options.width;\n instance.minWidth = options.minWidth;\n instance.maxWidth = options.maxWidth;\n instance.height = options.height;\n instance.minHeight = options.minHeight;\n instance.maxHeight = options.maxHeight;\n instance.autoFocusedElement = options.autoFocusedElement;\n instance.closeTitle = options.closeTitle;\n instance.cssClass = options.cssClass;\n instance.htmlAttributes = options.htmlAttributes;\n instance.animation = options.animation !== undefined ? options.animation : true;\n if (options.content instanceof TemplateRef) {\n instance.contentTemplate = options.content;\n }\n }\n contentFrom(content, container, dialogRef) {\n const renderer = container.injector.get(Renderer2);\n let nodes = [];\n let titleNodes = [];\n let actionNodes = [];\n let componentRef = null;\n if (typeof content === 'string') {\n nodes = [renderer.createText(content)];\n }\n else if (content && !(content instanceof TemplateRef)) {\n // Component\n const injector = new DialogInjector(() => dialogRef, container.injector);\n const factory = this.resolver.resolveComponentFactory(content);\n componentRef = container.createComponent(factory, undefined, injector);\n titleNodes = Array.from(componentRef.location.nativeElement.querySelectorAll('kendo-dialog-titlebar'));\n nodes = [componentRef.location.nativeElement];\n actionNodes = Array.from(componentRef.location.nativeElement.querySelectorAll('kendo-dialog-actions'));\n dialogRef.content = componentRef;\n }\n return {\n componentRef,\n nodes: [\n titleNodes,\n nodes,\n actionNodes // \n ]\n };\n }\n}\nDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogService, deps: [{ token: i0.ComponentFactoryResolver }, { token: DialogContainerService }], target: i0.ɵɵFactoryTarget.Injectable });\nDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: DialogContainerService, decorators: [{\n type: Inject,\n args: [DialogContainerService]\n }] }]; } });\n\n/**\n * @hidden\n */\nlet newZIndex = 10002;\n/**\n * @hidden\n */\nconst DEFAULT_OPTIONS = {\n draggable: true,\n height: null,\n left: null,\n minHeight: 100,\n minWidth: 120,\n position: 'absolute',\n resizable: true,\n state: 'default',\n top: null,\n width: null\n};\n/**\n * @hidden\n */\nconst createMoveStream = (el, ev) => mouseDown => {\n return el.kendoDrag\n .pipe(takeUntil(el.kendoRelease.pipe(tap(() => { ev.emit(); }))), map(({ pageX, pageY }) => ({\n originalX: mouseDown.pageX,\n originalY: mouseDown.pageY,\n pageX,\n pageY\n })));\n};\n/**\n * @hidden\n */\nclass DragResizeService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.close = new EventEmitter();\n this.focus = new EventEmitter();\n this.change = new EventEmitter();\n this.stateChange = new EventEmitter();\n this.dragStart = new EventEmitter();\n this.dragEnd = new EventEmitter();\n this.resizeStart = new EventEmitter();\n this.resizeEnd = new EventEmitter();\n this.options = Object.assign({}, DEFAULT_OPTIONS);\n this.lastAction = null;\n this.subscriptions = new Subscription();\n this.dragSubscription = new Subscription();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.dragSubscription) {\n this.dragSubscription.unsubscribe();\n }\n }\n init(el) {\n const state = this.options.state;\n let options = this.options;\n this.window = el;\n if (state !== 'default') {\n this.restoreOptions = Object.assign({}, options);\n }\n if (state === 'minimized') {\n options.height = 0;\n options.minHeight = 0;\n }\n if (state === 'maximized') {\n options.position = 'fixed';\n }\n }\n onDrag(el) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => {\n let startPosition;\n let dragStarted;\n this.dragSubscription = el.kendoPress\n .pipe(tap((ev) => {\n if (!ev.isTouch) {\n preventDefault(ev);\n }\n this.focus.emit();\n startPosition = this.currentPosition();\n dragStarted = false;\n }), switchMap(createMoveStream(el, this.dragEnd)))\n .subscribe(({ pageX, pageY, originalX, originalY }) => {\n if (!dragStarted) {\n this.ensureWidth();\n this.dragStart.emit();\n dragStarted = true;\n }\n this.handleDrag({\n originalX, originalY,\n pageX, pageY, startPosition\n });\n });\n }));\n }\n handleDrag({ originalX, originalY, pageX, pageY, startPosition }) {\n this.options.left = startPosition.x + pageX - originalX;\n this.options.top = startPosition.y + pageY - originalY;\n if (this.options.state === 'minimized' && isPresent(this.restoreOptions)) {\n this.restoreOptions.left = this.options.left;\n this.restoreOptions.top = this.options.top;\n }\n this.change.emit({\n left: startPosition.x + pageX - originalX,\n top: startPosition.y + pageY - originalY\n });\n }\n onResize(handle, direction) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => {\n let startOffsetAndPosition;\n let resizeStarted = false;\n handle.kendoPress.pipe(tap((ev) => {\n preventDefault(ev);\n this.focus.emit();\n startOffsetAndPosition = this.currentOffsetAndPosition();\n resizeStarted = false;\n }), switchMap(createMoveStream(handle, this.resizeEnd)))\n .subscribe(({ pageX, pageY, originalX, originalY }) => {\n if (!resizeStarted) {\n this.resizeStart.emit(direction);\n resizeStarted = true;\n }\n let deltaX = pageX - originalX;\n let deltaY = pageY - originalY;\n this.handleResize(startOffsetAndPosition, direction, deltaX, deltaY);\n });\n }));\n }\n handleResize(initial, dir, deltaX, deltaY) {\n const old = this.options;\n let ev = {};\n if (dir.indexOf('e') >= 0) {\n const newWidth = initial.width + deltaX;\n if (newWidth !== old.width && newWidth >= old.minWidth) {\n ev.width = newWidth;\n }\n }\n if (dir.indexOf('n') >= 0) {\n const newHeight = initial.height - deltaY;\n const newTop = initial.y + deltaY;\n if (newHeight !== old.height && newHeight >= old.minHeight && newTop !== old.top) {\n ev.height = newHeight;\n ev.top = newTop;\n }\n }\n if (dir.indexOf('s') >= 0) {\n const newHeight = initial.height + deltaY;\n if (newHeight !== old.height && newHeight >= old.minHeight) {\n ev.height = newHeight;\n }\n }\n if (dir.indexOf('w') >= 0) {\n const newLeft = initial.x + deltaX;\n const newWidth = initial.width - deltaX;\n if (newWidth !== old.width && newWidth >= old.minWidth && newLeft !== old.left) {\n ev.width = newWidth;\n ev.left = newLeft;\n }\n }\n if (isPresent(ev.width) || isPresent(ev.height)) {\n OFFSET_STYLES.forEach((style) => {\n if (isPresent(ev[style])) {\n this.options[style] = ev[style];\n }\n });\n this.change.emit(ev);\n }\n }\n restoreAction() {\n this.lastAction = 'restore';\n this.defaultState();\n }\n defaultState() {\n if (isPresent(this.restoreOptions)) {\n this.options = Object.assign({}, this.restoreOptions);\n }\n this.options.state = 'default';\n this.stateChange.emit('default');\n }\n storeOptions() {\n this.restoreOptions = Object.assign({}, this.options);\n }\n maximizeAction() {\n this.lastAction = 'maximize';\n this.maximizeState();\n }\n maximizeState() {\n this.storeOptions();\n const wnd = this.windowViewPort;\n this.options = Object.assign({}, this.options, {\n height: wnd.height,\n left: 0,\n position: 'fixed',\n state: 'maximized',\n top: 0,\n width: wnd.width\n });\n this.stateChange.emit('maximized');\n }\n minimizeAction() {\n this.lastAction = 'minimize';\n this.minimizeState();\n }\n minimizeState() {\n this.storeOptions();\n this.options = Object.assign({}, this.options, {\n height: null,\n minHeight: 0,\n state: 'minimized'\n });\n this.stateChange.emit('minimized');\n }\n /**\n * Handles manual changes of the 'state' property.\n * Required to distinguish them from action clicks.\n */\n applyManualState() {\n const state = this.options.state;\n switch (state) {\n case 'default':\n this.clearHeight();\n this.defaultState();\n break;\n case 'maximized':\n this.clearHeight();\n this.maximizeState();\n break;\n case 'minimized':\n this.minimizeState();\n break;\n default:\n break;\n }\n }\n closeAction() {\n this.close.emit();\n }\n ensureWidth() {\n const windowOffset = offset(this.window.nativeElement);\n if (!isPresent(this.options.width)) {\n this.options.width = windowOffset.width;\n this.change.emit({ width: windowOffset.width });\n }\n }\n clearHeight() {\n if (this.options.height === 0) {\n delete this.options.height;\n }\n if (this.options.minHeight === 0) {\n delete this.options.minHeight;\n }\n }\n center() {\n if (this.options.state === 'maximized') {\n return;\n }\n let scroll = scrollPosition(this.window.nativeElement);\n let wnd = this.windowViewPort;\n let wrapper = offset(this.window.nativeElement);\n let ev = {};\n if (!isPresent(this.options.left)) {\n this.options.left = scroll.x + Math.max(0, (wnd.width - wrapper.width) / 2);\n ev.left = this.options.left;\n }\n if (!isPresent(this.options.top)) {\n this.options.top = scroll.y + Math.max(0, (wnd.height - wrapper.height) / 2);\n ev.top = this.options.top;\n }\n this.change.emit(ev);\n }\n currentOffsetAndPosition() {\n const o = this.options;\n const off = offset(this.window.nativeElement);\n return Object.assign({}, this.currentPosition(), {\n height: o.height ? o.height : off.height,\n width: o.width ? o.width : off.width\n });\n }\n currentPosition() {\n const o = this.options;\n if (!o.top || !o.left) {\n this.setPosition();\n }\n return {\n x: this.options.left,\n y: this.options.top\n };\n }\n setPosition() {\n const wrapper = positionWithScroll(this.window.nativeElement, getDocumentElement(this.window.nativeElement));\n this.options.left = wrapper.left;\n this.options.top = wrapper.top;\n }\n setRestoreOption(style, value) {\n if (isPresent(this.restoreOptions)) {\n this.restoreOptions[style] = value;\n }\n }\n get nextPossibleZIndex() {\n return newZIndex;\n }\n get nextZIndex() {\n return newZIndex++;\n }\n get windowViewPort() {\n return getWindowViewPort(this.window.nativeElement);\n }\n}\nDragResizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragResizeService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nDragResizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragResizeService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragResizeService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\n/**\n * @hidden\n */\nclass ResizeHandleDirective {\n constructor(draggable, el, renderer, service) {\n this.draggable = draggable;\n this.el = el;\n this.renderer = renderer;\n this.service = service;\n this.subscriptions = new Subscription();\n }\n get hostClass() {\n return true;\n }\n ngOnInit() {\n this.setDisplay();\n this.renderer.addClass(this.el.nativeElement, 'k-resize-' + this.direction);\n this.subscriptions.add(of(this.draggable).subscribe(handle => {\n this.service.onResize(handle, this.direction);\n }));\n this.subscriptions.add(this.service.resizeStart.subscribe((dir) => {\n if (dir !== this.direction) {\n this.setDisplay('none');\n }\n }));\n this.subscriptions.add(this.service.dragStart.subscribe(() => {\n this.setDisplay('none');\n }));\n this.subscriptions.add(merge(this.service.resizeEnd, this.service.dragEnd).subscribe(() => {\n this.setDisplay('block');\n }));\n this.subscriptions.add(this.service.stateChange.subscribe((state) => {\n this.setDisplay(state === 'default' ? 'block' : 'none');\n }));\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n setDisplay(value = 'block') {\n this.renderer.setStyle(this.el.nativeElement, 'display', this.service.options.state === 'default' ? value : 'none');\n }\n}\nResizeHandleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeHandleDirective, deps: [{ token: i1$1.DraggableDirective, host: true }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DragResizeService }], target: i0.ɵɵFactoryTarget.Directive });\nResizeHandleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ResizeHandleDirective, selector: \"[kendoWindowResizeHandle]\", inputs: { direction: \"direction\" }, host: { properties: { \"class.k-resize-handle\": \"this.hostClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeHandleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoWindowResizeHandle]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DragResizeService }]; }, propDecorators: { direction: [{\n type: Input\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-resize-handle']\n }] } });\n\nclass WindowTitleBarComponent {\n constructor(el, service, ngZone) {\n this.el = el;\n this.ngZone = ngZone;\n this.service = service;\n }\n ngOnInit() {\n this.dragDirective = new DraggableDirective(this.el, this.ngZone);\n this.dragDirective.ngOnInit();\n if (this.isDraggable) {\n this.subscribeDrag();\n }\n this.subscribeStateChange();\n }\n ngOnDestroy() {\n this.dragDirective.ngOnDestroy();\n this.unsubscribeDrag();\n this.unsubscribeState();\n }\n /**\n * @hidden\n */\n subscribeDrag() {\n this.unsubscribeDrag();\n this.dragSubscription = of(this.dragDirective).subscribe(titleBar => {\n this.service.onDrag(titleBar);\n });\n }\n /**\n * @hidden\n */\n subscribeStateChange() {\n this.stateSubscription = this.service.stateChange.subscribe((state) => {\n if (this.service.options.draggable) {\n if (state === 'maximized') {\n this.unsubscribeDrag();\n }\n else {\n this.subscribeDrag();\n }\n }\n });\n }\n /**\n * @hidden\n */\n unsubscribeDrag() {\n if (this.dragSubscription) {\n this.service.dragSubscription.unsubscribe();\n this.dragSubscription.unsubscribe();\n this.dragSubscription = null;\n }\n }\n /**\n * @hidden\n */\n unsubscribeState() {\n if (this.stateSubscription) {\n this.stateSubscription.unsubscribe();\n this.stateSubscription = null;\n }\n }\n get className() {\n return true;\n }\n get touchAction() {\n if (this.isDraggable) {\n return 'none';\n }\n }\n /**\n * @hidden\n */\n handle(ev) {\n const target = ev.target;\n const state = this.service.options.state;\n if (!hasClasses(target, 'k-icon') && !isFocusable(target, false) && this.service.options.resizable) {\n if (state === 'default') {\n this.service.maximizeAction();\n }\n else if (state === 'maximized') {\n this.service.restoreAction();\n }\n }\n }\n get isDraggable() {\n const options = this.service.options;\n return options.draggable && options.state !== 'maximized';\n }\n}\nWindowTitleBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowTitleBarComponent, deps: [{ token: i0.ElementRef }, { token: DragResizeService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nWindowTitleBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WindowTitleBarComponent, selector: \"kendo-window-titlebar\", inputs: { template: \"template\" }, host: { listeners: { \"dblclick\": \"handle($event)\" }, properties: { \"class.k-window-titlebar\": \"this.className\", \"class.k-dialog-titlebar\": \"this.className\", \"style.touch-action\": \"this.touchAction\" } }, ngImport: i0, template: `\n \n \n
\n `, isInline: true, directives: [{ type: i6.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i6.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowTitleBarComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-window-titlebar',\n template: `\n \n \n
\n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragResizeService }, { type: i0.NgZone }]; }, propDecorators: { template: [{\n type: Input\n }], className: [{\n type: HostBinding,\n args: ['class.k-window-titlebar']\n }, {\n type: HostBinding,\n args: ['class.k-dialog-titlebar']\n }], touchAction: [{\n type: HostBinding,\n args: ['style.touch-action']\n }], handle: [{\n type: HostListener,\n args: ['dblclick', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(window, ngZone) {\n this.window = window;\n this.ngZone = ngZone;\n }\n process(ev) {\n const key = ev.keyCode;\n switch (key) {\n case Keys.up:\n case Keys.down:\n case Keys.left:\n case Keys.right: {\n ev.preventDefault();\n this.ngZone.run(() => {\n this.handleArrow(key, ev);\n });\n break;\n }\n case Keys.esc:\n this.ngZone.run(() => {\n this.handleEscape();\n });\n break;\n default:\n break;\n }\n }\n handleArrow(key, ev) {\n const options = this.window.options;\n if (ev.altKey) {\n this.handleStateChange(key, options.state);\n return;\n }\n if ((ev.ctrlKey || ev.metaKey) && options.state === 'default') {\n this.handleResize(key);\n }\n else {\n this.handleDrag(key);\n }\n }\n handleEscape() {\n this.window.closeAction();\n }\n handleDrag(key) {\n let options = this.window.options;\n if (!options.draggable) {\n return;\n }\n const offset = this.window.currentOffsetAndPosition();\n let restoreOptions = this.window.restoreOptions;\n let ev = {};\n let delta = 10;\n if (key === Keys.left || key === Keys.up) {\n delta *= -1;\n }\n switch (key) {\n case Keys.left:\n case Keys.right: {\n ev.left = offset.x + delta;\n options.left = ev.left;\n break;\n }\n case Keys.up:\n case Keys.down: {\n ev.top = offset.y + delta;\n options.top = ev.top;\n break;\n }\n default:\n break;\n }\n if (options.state === 'minimized' && isPresent(restoreOptions)) {\n restoreOptions.left = options.left;\n restoreOptions.top = options.top;\n }\n this.window.change.emit(ev);\n }\n handleResize(key) {\n const options = this.window.options;\n if (!options.resizable) {\n return;\n }\n const offset = this.window.currentOffsetAndPosition();\n let newWidth;\n let newHeight;\n let ev = {};\n let delta = 10;\n if (key === Keys.left || key === Keys.up) {\n delta *= -1;\n }\n switch (key) {\n case Keys.left:\n case Keys.right: {\n newWidth = offset.width + delta;\n if (newWidth !== options.width && newWidth >= options.minWidth) {\n ev.width = newWidth;\n }\n break;\n }\n case Keys.up:\n case Keys.down: {\n newHeight = offset.height + delta;\n if (newHeight !== options.height && newHeight >= options.minHeight) {\n ev.height = newHeight;\n }\n break;\n }\n default:\n break;\n }\n if (isPresent(ev.width) || isPresent(ev.height)) {\n OFFSET_STYLES.forEach((style) => {\n if (isPresent(ev[style])) {\n this.window.options[style] = ev[style];\n }\n });\n this.window.change.emit(ev);\n }\n }\n handleStateChange(key, state) {\n if ((state === 'minimized' && key === Keys.up) ||\n (state === 'maximized' && key === Keys.down)) {\n this.window.restoreAction();\n return;\n }\n if (state === 'default') {\n if (key === Keys.up) {\n this.window.maximizeAction();\n }\n else if (key === Keys.down) {\n this.window.minimizeAction();\n }\n }\n }\n}\nNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, deps: [{ token: DragResizeService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: DragResizeService }, { type: i0.NgZone }]; } });\n\nclass WindowMinimizeActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.fillMode = 'flat';\n this.icon = 'window-minimize';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.minimizeAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'inline-flex' : 'none';\n }\n}\nWindowMinimizeActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowMinimizeActionDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DragResizeService, optional: true }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nWindowMinimizeActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WindowMinimizeActionDirective, selector: \"button[kendoWindowMinimizeAction]\", inputs: { window: \"window\" }, host: { listeners: { \"click\": \"onClick()\" }, properties: { \"attr.type\": \"this.buttonType\", \"style.display\": \"this.visible\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ], exportAs: [\"kendoWindowMinimizeAction\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowMinimizeActionDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowMinimizeAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowMinimizeAction]' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: i1.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { window: [{\n type: Input\n }], buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] } });\n\nclass WindowMaximizeActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.fillMode = 'flat';\n this.icon = 'window-maximize';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.maximizeAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'inline-flex' : 'none';\n }\n}\nWindowMaximizeActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowMaximizeActionDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DragResizeService, optional: true }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nWindowMaximizeActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WindowMaximizeActionDirective, selector: \"button[kendoWindowMaximizeAction]\", inputs: { window: \"window\" }, host: { listeners: { \"click\": \"onClick()\" }, properties: { \"attr.type\": \"this.buttonType\", \"style.display\": \"this.visible\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ], exportAs: [\"kendoWindowMaximizeAction\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowMaximizeActionDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowMaximizeAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowMaximizeAction]' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: i1.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { window: [{\n type: Input\n }], buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] } });\n\nclass WindowRestoreActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.fillMode = 'flat';\n this.icon = 'window-restore';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.restoreAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'none' : 'inline-flex';\n }\n}\nWindowRestoreActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowRestoreActionDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DragResizeService, optional: true }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nWindowRestoreActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WindowRestoreActionDirective, selector: \"button[kendoWindowRestoreAction]\", inputs: { window: \"window\" }, host: { listeners: { \"click\": \"onClick()\" }, properties: { \"attr.type\": \"this.buttonType\", \"style.display\": \"this.visible\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ], exportAs: [\"kendoWindowRestoreAction\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowRestoreActionDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowRestoreAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowRestoreAction]' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: i1.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { window: [{\n type: Input\n }], buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] } });\n\nclass WindowCloseActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.fillMode = 'flat';\n this.icon = 'close';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.closeAction();\n }\n }\n}\nWindowCloseActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowCloseActionDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DragResizeService, optional: true }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nWindowCloseActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WindowCloseActionDirective, selector: \"button[kendoWindowCloseAction]\", inputs: { window: \"window\" }, host: { listeners: { \"click\": \"onClick()\" }, properties: { \"attr.type\": \"this.buttonType\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ], exportAs: [\"kendoWindowCloseAction\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowCloseActionDirective, decorators: [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowCloseAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowCloseAction]' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: i1.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { window: [{\n type: Input\n }], buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] } });\n\n/**\n * Represents the [Kendo UI Window component for Angular]({% slug overview_window_dialogs %}).\n */\nclass WindowComponent {\n constructor(el, renderer, service, navigation, ngZone, localization) {\n this.el = el;\n this.renderer = renderer;\n this.service = service;\n this.navigation = navigation;\n this.ngZone = ngZone;\n this.localization = localization;\n /**\n * Specifies if the content of the component is persisted in the DOM when minimized.\n * @default false\n */\n this.keepContent = false;\n /**\n * Fires when the user starts to move the Window.\n */\n this.dragStart = new EventEmitter();\n /**\n * Fires when the Window was moved by the user.\n */\n this.dragEnd = new EventEmitter();\n /**\n * Fires when the user starts to resize the Window.\n */\n this.resizeStart = new EventEmitter();\n /**\n * Fires when the Window was resized by the user.\n */\n this.resizeEnd = new EventEmitter();\n /**\n * Fires when the user closes the Window.\n */\n this.close = new EventEmitter();\n /**\n * Fires when the `width` property of the component was updated. The event is triggered only after the resizing\n * has ended. The event data contains the new width. Allows a two-way binding of the `width` property.\n */\n this.widthChange = new EventEmitter();\n /**\n * Fires when the `height` property of the component was updated. The event is triggered only after the resizing\n * has ended. The event data contains the new height. Allows a two-way binding of the `height` property.\n */\n this.heightChange = new EventEmitter();\n /**\n * Fires when the `top` property of the component was updated. The event is triggered only after the dragging\n * and resizing have ended. The event data contains the new top offset. Allows a two-way binding of the `top` property.\n */\n this.topChange = new EventEmitter();\n /**\n * Fires when the `left` property of the component was updated. The event is triggered only after the dragging\n * and resizing have ended. The event data contains the new left offset. Allows a two-way binding of the `left` property.\n */\n this.leftChange = new EventEmitter();\n /**\n * Fires when the `state` property of the component was updated. The event data contains the new state. Allows a\n * two-way binding of the `state` property.\n */\n this.stateChange = new EventEmitter();\n /**\n * @hidden\n */\n this.messages = {};\n this.tabIndex = 0;\n this.draged = false;\n this.resized = false;\n this.windowSubscription = new Subscription();\n this.domSubs = new Subscription();\n validatePackage(packageMetadata);\n this.direction = this.localization.rtl ? 'rtl' : 'ltr';\n this.localizationChangeSubscription = this.localization.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n this.resizeDirections = RESIZE_DIRECTIONS;\n this.subscribeEvents();\n }\n /**\n * Specifies whether the user will be able to drag the component.\n * @default true\n */\n set draggable(value) {\n this.options.draggable = value;\n }\n get draggable() {\n return this.options.draggable;\n }\n /**\n * Specifies whether the user will be able to resize the component.\n * @default true\n */\n set resizable(value) {\n this.options.resizable = value;\n }\n get resizable() {\n return this.options.resizable;\n }\n /**\n * @hidden\n */\n set cssClass(classes) {\n this.setServiceClasses(this._cssClass, classes);\n this._cssClass = classes;\n }\n get cssClass() {\n return this._cssClass;\n }\n /**\n * @hidden\n */\n set htmlAttributes(attributes) {\n setHTMLAttributes(attributes, this.renderer, this.el.nativeElement);\n const el = this.el.nativeElement;\n const dir = el.getAttribute('dir');\n const tIndex = el.getAttribute('tabindex');\n if (this.direction !== dir) {\n this.direction = dir;\n }\n if (this.tabIndex !== tIndex) {\n this.tabIndex = tIndex;\n }\n this._htmlAttributes = attributes;\n }\n get htmlAttributes() {\n return this._htmlAttributes;\n }\n /**\n * Specifies the initial state of the component.\n * If not specified, the value is set to `default`.\n *\n * The possible values are:\n * * `minimized`\n * * `maximized`\n * * `default`\n */\n set state(value) {\n this.options.state = value;\n }\n get state() {\n return this.options.state;\n }\n /**\n * Specifies the minimum width of the component.\n * The `minWidth` property has to be set in pixels.\n * @default 120\n */\n set minWidth(value) {\n this.setOption('minWidth', value);\n }\n get minWidth() {\n return this.options.minWidth;\n }\n /**\n * Specifies the minimum height of the Window.\n * The `minHeight` property has to be set in pixels.\n * @default 100\n */\n set minHeight(value) {\n this.setOption('minHeight', value);\n }\n get minHeight() {\n return this.options.minHeight;\n }\n /**\n * Specifies the width of the Window.\n * The `width` property has to be set in pixels.\n */\n set width(value) {\n this.setOption('width', value);\n }\n get width() {\n return this.options.width;\n }\n /**\n * Specifies the height of the Window.\n * The `height` property has to be set in pixels.\n */\n set height(value) {\n this.setOption('height', value);\n }\n get height() {\n return this.options.height;\n }\n /**\n * Specifies the initial top offset of the Window.\n * The `top` property has to be set in pixels.\n */\n set top(value) {\n this.setOption('top', value);\n }\n get top() {\n return this.options.top;\n }\n /**\n * Specifies the initial left offset of the Window.\n * Numeric values are treated as pixels.\n */\n set left(value) {\n this.setOption('left', value);\n }\n get left() {\n return this.options.left;\n }\n get closeButtonTitle() {\n if (this.messages && this.messages.closeTitle) {\n return this.messages.closeTitle;\n }\n return this.localization.get('closeTitle');\n }\n get restoreButtonTitle() {\n if (this.messages && this.messages.restoreTitle) {\n return this.messages.restoreTitle;\n }\n return this.localization.get('restoreTitle');\n }\n get maximizeButtonTitle() {\n if (this.messages && this.messages.maximizeTitle) {\n return this.messages.maximizeTitle;\n }\n return this.localization.get('maximizeTitle');\n }\n get minimizeButtonTitle() {\n if (this.messages && this.messages.minimizeTitle) {\n return this.messages.minimizeTitle;\n }\n return this.localization.get('minimizeTitle');\n }\n get hostClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n ngAfterViewInit() {\n this.setNextZIndex();\n this.handleInitialFocus();\n this.ngZone.runOutsideAngular(() => Promise.resolve(null).then(() => this.setInitialOffset()));\n this.initDomEvents();\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.el.nativeElement, 'title');\n this.service.init(this.el);\n }\n ngOnChanges(changes) {\n OFFSET_STYLES.forEach((style) => {\n if (isChanged(style, changes)) {\n this.setStyle(style, this.options[style]);\n }\n });\n if (isChanged('draggable', changes)) {\n const titleBar = isPresent(this.titleBarContent) ? this.titleBarContent : this.titleBarView;\n if (isTruthy(changes.draggable.currentValue)) {\n titleBar.subscribeDrag();\n }\n else {\n titleBar.unsubscribeDrag();\n }\n }\n if (isChanged('state', changes)) {\n if (isPresent(this.service.lastAction)) {\n this.service.lastAction = null;\n }\n else {\n this.service.applyManualState();\n this.updateAllOffset();\n }\n }\n }\n ngOnDestroy() {\n if (this.windowSubscription) {\n this.windowSubscription.unsubscribe();\n }\n if (this.domSubs) {\n this.domSubs.unsubscribe();\n }\n this.localizationChangeSubscription.unsubscribe();\n }\n /**\n * Focuses the wrapper of the Window component.\n */\n focus() {\n const wrapper = this.el.nativeElement;\n if (isPresent(wrapper)) {\n wrapper.focus();\n }\n }\n /**\n * Brings the current Window component on top of other Window components on the page.\n */\n bringToFront() {\n this.setNextZIndex();\n }\n /**\n * Manually updates the `width` or `height` option of the Window.\n * The required style will be applied to the Window wrapper element and the\n * corresponding property of the component instance will be updated.\n * This method is intended to be used for sizing dynamically created components using the\n * [`WindowService`]({% slug api_dialog_windowservice %})\n * @param {WindowDimensionSetting} dimension - The option that will be updated\n * @param {number} value - The value set in pixels\n */\n setDimension(dimension, value) {\n this.setOption(dimension, value);\n this.setStyle(dimension, value);\n }\n /**\n * Manually updates the `top` or `left` offset of the Window.\n * The required style will be applied to the Window wrapper element and the\n * corresponding property of the component instance will be updated.\n * This method is intended to be used for positioning dynamically created components using the\n * [`WindowService`]({% slug api_dialog_windowservice %})\n * @param {WindowOffsetSetting} offset - The option that will be updated\n * @param {number} value - The value set in pixels\n */\n setOffset(offset, value) {\n this.setOption(offset, value);\n this.setStyle(offset, value);\n }\n get showDefaultTitleBar() {\n return !isPresent(this.titleBarContent);\n }\n get styleMinWidth() {\n return this.minWidth + 'px';\n }\n get styleMinHeight() {\n return this.minHeight + 'px';\n }\n get stylePosition() {\n return this.options.position;\n }\n get wrapperMaximizedClass() {\n return this.state === 'maximized';\n }\n get wrapperMinimizedClass() {\n return this.state === 'minimized';\n }\n /**\n * @hidden\n */\n onComponentFocus() {\n this.renderer.addClass(this.el.nativeElement, 'k-focus');\n this.setNextZIndex();\n }\n /**\n * @hidden\n */\n onComponentBlur() {\n this.renderer.removeClass(this.el.nativeElement, 'k-focus');\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.windowSubscription.add(this.service.focus.subscribe(() => {\n this.el.nativeElement.focus();\n }));\n this.windowSubscription.add(this.service.dragStart.subscribe(() => {\n this.draged = true;\n this.ngZone.run(() => {\n this.dragStart.emit();\n });\n }));\n this.windowSubscription.add(this.service.dragEnd.subscribe(() => {\n if (this.draged) {\n this.draged = false;\n this.ngZone.run(() => {\n this.dragEnd.emit();\n });\n }\n }));\n this.windowSubscription.add(this.service.close.subscribe(() => {\n this.close.emit();\n }));\n this.windowSubscription.add(this.service.resizeStart.subscribe(() => {\n this.resized = true;\n this.ngZone.run(() => {\n this.resizeStart.emit();\n });\n }));\n this.windowSubscription.add(this.service.resizeEnd.subscribe(() => {\n if (this.resized) {\n this.resized = false;\n this.ngZone.run(() => {\n this.resizeEnd.emit();\n });\n }\n }));\n this.windowSubscription.add(this.service.change.subscribe((ev) => {\n OFFSET_STYLES.forEach((style) => {\n if (isPresent(ev[style])) {\n this.setStyle(style, ev[style]);\n if (this.state !== 'maximized') {\n const emitter = this[style + 'Change'];\n if (emitter.observers.length) {\n this.ngZone.run(() => {\n emitter.emit(ev[style]);\n });\n }\n }\n }\n });\n }));\n this.windowSubscription.add(this.service.stateChange.subscribe((state) => {\n if (isPresent(this.service.lastAction)) {\n this.updateAllOffset();\n this.stateChange.emit(state);\n }\n }));\n }\n initDomEvents() {\n if (!this.el) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.domSubs.add(this.renderer.listen(this.el.nativeElement, 'keydown', (ev) => {\n this.onKeyDown(ev);\n }));\n });\n }\n onKeyDown(event) {\n if (hasClasses(event.target, WINDOW_CLASSES)) {\n this.navigation.process(event);\n }\n }\n setServiceClasses(prevValue, value) {\n const el = this.el.nativeElement;\n if (prevValue) {\n parseCSSClassNames(prevValue).forEach(className => {\n this.renderer.removeClass(el, className);\n });\n }\n if (value) {\n parseCSSClassNames(value).forEach(className => {\n this.renderer.addClass(el, className);\n });\n }\n }\n setNextZIndex() {\n const currentZIndex = this.el.nativeElement.style['z-index'];\n const nextPossibleZIndex = this.service.nextPossibleZIndex;\n if (!currentZIndex || (nextPossibleZIndex - currentZIndex > 1)) {\n this.renderer.setStyle(this.el.nativeElement, \"z-index\", this.service.nextZIndex);\n }\n }\n setInitialOffset() {\n if (this.state !== 'maximized') {\n this.updateAllOffset();\n if (!isPresent(this.left) || !isPresent(this.top)) {\n this.service.center();\n }\n }\n else {\n const viewPort = this.service.windowViewPort;\n this.setStyle('width', viewPort.width);\n this.setStyle('height', viewPort.height);\n this.setStyle('top', 0);\n this.setStyle('left', 0);\n }\n }\n updateAllOffset() {\n OFFSET_STYLES.forEach((style) => {\n if (isPresent(this[style])) {\n this.setStyle(style, this[style]);\n }\n else {\n this.removeStyle(style);\n }\n });\n }\n setStyle(style, value) {\n this.renderer.setStyle(this.el.nativeElement, style, value + 'px');\n }\n removeStyle(style) {\n this.renderer.removeStyle(this.el.nativeElement, style);\n }\n get options() {\n return this.service.options;\n }\n setOption(style, value) {\n if (typeof value !== 'number' && typeof value !== 'string') {\n return;\n }\n const parsedValue = (typeof value === 'number') ? value : parseInt(value, 10);\n this.options[style] = parsedValue;\n this.service.setRestoreOption(style, parsedValue);\n }\n handleInitialFocus() {\n const wrapper = this.el.nativeElement;\n if (this.autoFocusedElement) {\n const initiallyFocusedElement = wrapper.querySelector(this.autoFocusedElement);\n if (initiallyFocusedElement) {\n initiallyFocusedElement.focus();\n }\n }\n else {\n this.focus();\n }\n }\n}\nWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DragResizeService }, { token: NavigationService }, { token: i0.NgZone }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WindowComponent, selector: \"kendo-window\", inputs: { autoFocusedElement: \"autoFocusedElement\", title: \"title\", draggable: \"draggable\", resizable: \"resizable\", keepContent: \"keepContent\", state: \"state\", minWidth: \"minWidth\", minHeight: \"minHeight\", width: \"width\", height: \"height\", top: \"top\", left: \"left\" }, outputs: { dragStart: \"dragStart\", dragEnd: \"dragEnd\", resizeStart: \"resizeStart\", resizeEnd: \"resizeEnd\", close: \"close\", widthChange: \"widthChange\", heightChange: \"heightChange\", topChange: \"topChange\", leftChange: \"leftChange\", stateChange: \"stateChange\" }, host: { listeners: { \"focus\": \"onComponentFocus()\", \"blur\": \"onComponentBlur()\" }, properties: { \"attr.tabIndex\": \"this.tabIndex\", \"class.k-window\": \"this.hostClasses\", \"attr.dir\": \"this.dir\", \"style.minWidth\": \"this.styleMinWidth\", \"style.minHeight\": \"this.styleMinHeight\", \"style.position\": \"this.stylePosition\", \"class.k-window-maximized\": \"this.wrapperMaximizedClass\", \"class.k-window-minimized\": \"this.wrapperMinimizedClass\" } }, providers: [\n DragResizeService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.window'\n }\n ], queries: [{ propertyName: \"titleBarContent\", first: true, predicate: WindowTitleBarComponent, descendants: true }], viewQueries: [{ propertyName: \"titleBarView\", first: true, predicate: WindowTitleBarComponent, descendants: true }, { propertyName: \"resizeHandles\", predicate: ResizeHandleDirective, descendants: true }], exportAs: [\"kendoWindow\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n\n \n
{{ title }}
\n
\n \n \n \n \n
\n
\n \n\n
\n \n \n
\n\n \n
\n
\n
\n `, isInline: true, components: [{ type: WindowTitleBarComponent, selector: \"kendo-window-titlebar\", inputs: [\"template\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDialogLocalizedMessages],\\n [kendoWindowLocalizedMessages],\\n [kendoDialogTitleBarLocalizedMessages]\\n \" }, { type: i6.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: WindowMinimizeActionDirective, selector: \"button[kendoWindowMinimizeAction]\", inputs: [\"window\"], exportAs: [\"kendoWindowMinimizeAction\"] }, { type: WindowMaximizeActionDirective, selector: \"button[kendoWindowMaximizeAction]\", inputs: [\"window\"], exportAs: [\"kendoWindowMaximizeAction\"] }, { type: WindowRestoreActionDirective, selector: \"button[kendoWindowRestoreAction]\", inputs: [\"window\"], exportAs: [\"kendoWindowRestoreAction\"] }, { type: WindowCloseActionDirective, selector: \"button[kendoWindowCloseAction]\", inputs: [\"window\"], exportAs: [\"kendoWindowCloseAction\"] }, { type: i6.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i6.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: ResizeHandleDirective, selector: \"[kendoWindowResizeHandle]\", inputs: [\"direction\"] }, { type: i1$1.DraggableDirective, selector: \"[kendoDraggable]\", inputs: [\"enableDrag\"], outputs: [\"kendoPress\", \"kendoDrag\", \"kendoRelease\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoWindow',\n providers: [\n DragResizeService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.window'\n }\n ],\n selector: 'kendo-window',\n template: `\n \n \n\n \n
{{ title }}
\n
\n \n \n \n \n
\n
\n \n\n
\n \n \n
\n\n \n
\n
\n
\n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DragResizeService }, { type: NavigationService }, { type: i0.NgZone }, { type: i1.LocalizationService }]; }, propDecorators: { autoFocusedElement: [{\n type: Input\n }], title: [{\n type: Input\n }], draggable: [{\n type: Input\n }], resizable: [{\n type: Input\n }], keepContent: [{\n type: Input\n }], state: [{\n type: Input\n }], minWidth: [{\n type: Input\n }], minHeight: [{\n type: Input\n }], width: [{\n type: Input\n }], height: [{\n type: Input\n }], top: [{\n type: Input\n }], left: [{\n type: Input\n }], dragStart: [{\n type: Output\n }], dragEnd: [{\n type: Output\n }], resizeStart: [{\n type: Output\n }], resizeEnd: [{\n type: Output\n }], close: [{\n type: Output\n }], widthChange: [{\n type: Output\n }], heightChange: [{\n type: Output\n }], topChange: [{\n type: Output\n }], leftChange: [{\n type: Output\n }], stateChange: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-window']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], titleBarView: [{\n type: ViewChild,\n args: [WindowTitleBarComponent, { static: false }]\n }], titleBarContent: [{\n type: ContentChild,\n args: [WindowTitleBarComponent, { static: false }]\n }], resizeHandles: [{\n type: ViewChildren,\n args: [ResizeHandleDirective]\n }], styleMinWidth: [{\n type: HostBinding,\n args: ['style.minWidth']\n }], styleMinHeight: [{\n type: HostBinding,\n args: ['style.minHeight']\n }], stylePosition: [{\n type: HostBinding,\n args: ['style.position']\n }], wrapperMaximizedClass: [{\n type: HostBinding,\n args: ['class.k-window-maximized']\n }], wrapperMinimizedClass: [{\n type: HostBinding,\n args: ['class.k-window-minimized']\n }], onComponentFocus: [{\n type: HostListener,\n args: ['focus']\n }], onComponentBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\n\n/**\n * Indicates that the **Close** button of a Window that is opened through `WindowService` is clicked.\n */\nclass WindowCloseResult {\n}\n\n/**\n * Holds references to the object instance of the Window.\n * Controls the Windows that were opened through `WindowService`\n * ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n */\nclass WindowRef {\n}\n\n/**\n * The settings for the Window actions when the Window is opened through `WindowService`\n * ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n */\nclass WindowSettings {\n}\n\n/**\n * @hidden\n */\nclass WindowContainerService {\n set container(container) {\n WindowContainerService.container = container;\n }\n get container() {\n return WindowContainerService.container;\n }\n}\nWindowContainerService.container = null;\nWindowContainerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowContainerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nWindowContainerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowContainerService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowContainerService, decorators: [{\n type: Injectable\n }] });\n\nconst isNotComponent = (component) => isString(component) || component instanceof TemplateRef;\nclass WindowInjector {\n constructor(getWindowRef, parentInjector) {\n this.getWindowRef = getWindowRef;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue) {\n if (token === WindowRef) {\n return this.getWindowRef();\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}\n/**\n * A service for opening Windows dynamically\n * ([see example]({% slug service_window %})).\n */\nclass WindowService {\n constructor(\n /**\n * @hidden\n */\n resolver, containerService) {\n this.resolver = resolver;\n this.containerService = containerService;\n }\n /**\n * Opens a Window component.\n *\n * @param {WindowSettings} settings - The settings that define the Window.\n * @returns {WindowRef} - A reference to the Window object.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n *
\n * `\n * })\n * export class AppComponent {\n * constructor( private windowService: WindowService ) {}\n *\n * public open() {\n * var window = this.windowService.open({\n * title: \"My window\",\n * content: \"My content!\"\n * });\n *\n * window.result.subscribe((result) => {\n * if (result instanceof WindowCloseResult) {\n * console.log(\"Window was closed\");\n * }\n * });\n * }\n * }\n * ```\n *\n */\n open(settings) {\n const factory = this.resolver.resolveComponentFactory(WindowComponent);\n const container = settings.appendTo || this.containerService.container;\n if (!container) {\n throw new Error(`Cannot attach window to the page.\n Add an element that uses the kendoWindowContainer directive, or set the 'appendTo' property.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/window/service/\n `);\n }\n const windowRef = {\n close: () => { },\n content: null,\n result: null,\n window: null\n };\n const content = this.contentFrom(settings.content, container, windowRef);\n const window = container.createComponent(factory, undefined, undefined, content.nodes);\n windowRef.window = window;\n this.applyOptions(window.instance, settings);\n const apiClose = new Subject();\n const close = (e) => {\n apiClose.next(e || new WindowCloseResult());\n if (content.componentRef) {\n content.componentRef.destroy();\n }\n window.destroy();\n };\n const result = merge(apiClose, window.instance.close.pipe(map(e => (e ? e : new WindowCloseResult())), filter((e) => {\n if (settings.preventClose) {\n // add windowRef only when using component\n const windowRefParameter = isNotComponent(settings.content) ? undefined : windowRef;\n return !settings.preventClose(e, windowRefParameter);\n }\n return true;\n }))).pipe(take(1), \n // Takes care for multiple subscriptions:\n // We subscribe internally and the user may subscribe to get a close result - window.result.subscribe().\n // This causes multiple subscriptions to the same source and thus multiple emissions. share() solves that.\n share());\n result.subscribe(close);\n windowRef.close = close;\n windowRef.result = result;\n window.changeDetectorRef.markForCheck();\n return windowRef;\n }\n applyOptions(instance, options) {\n if (isPresent(options.htmlAttributes)) {\n instance.htmlAttributes = options.htmlAttributes;\n }\n if (isPresent(options.cssClass)) {\n instance.cssClass = options.cssClass;\n }\n if (isPresent(options.title)) {\n instance.title = options.title;\n }\n if (isPresent(options.keepContent)) {\n instance.keepContent = options.keepContent;\n }\n if (isPresent(options.width)) {\n instance.width = options.width;\n }\n if (isPresent(options.minWidth)) {\n instance.minWidth = options.minWidth;\n }\n if (isPresent(options.height)) {\n instance.height = options.height;\n }\n if (isPresent(options.minHeight)) {\n instance.minHeight = options.minHeight;\n }\n if (isPresent(options.left)) {\n instance.left = options.left;\n }\n if (isPresent(options.top)) {\n instance.top = options.top;\n }\n if (isPresent(options.draggable)) {\n instance.draggable = options.draggable;\n }\n if (isPresent(options.resizable)) {\n instance.resizable = options.resizable;\n }\n if (isPresent(options.messages && options.messages.closeTitle)) {\n instance.messages.closeTitle = options.messages.closeTitle;\n }\n if (isPresent(options.messages && options.messages.restoreTitle)) {\n instance.messages.restoreTitle = options.messages.restoreTitle;\n }\n if (isPresent(options.messages && options.messages.maximizeTitle)) {\n instance.messages.maximizeTitle = options.messages.maximizeTitle;\n }\n if (isPresent(options.messages && options.messages.minimizeTitle)) {\n instance.messages.minimizeTitle = options.messages.minimizeTitle;\n }\n if (isPresent(options.autoFocusedElement)) {\n instance.autoFocusedElement = options.autoFocusedElement;\n }\n if (isPresent(options.state)) {\n instance.state = options.state;\n if (options.state === 'minimized') {\n instance.keepContent = true;\n }\n }\n if (options.content instanceof TemplateRef) {\n instance.contentTemplate = options.content;\n }\n if (options.titleBarContent instanceof TemplateRef) {\n instance.titleBarTemplate = options.titleBarContent;\n }\n }\n contentFrom(content, container, windowRef) {\n const renderer = container.injector.get(Renderer2);\n let nodes = [];\n let componentRef = null;\n if (typeof content === 'string') {\n nodes = [renderer.createText(content)];\n }\n else if (content && !(content instanceof TemplateRef)) {\n const injector = new WindowInjector(() => windowRef, container.injector);\n const factory = this.resolver.resolveComponentFactory(content);\n componentRef = container.createComponent(factory, undefined, injector);\n nodes = [componentRef.location.nativeElement];\n windowRef.content = componentRef;\n }\n return {\n componentRef,\n nodes: [\n [],\n nodes // Content\n ]\n };\n }\n}\nWindowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowService, deps: [{ token: i0.ComponentFactoryResolver }, { token: WindowContainerService }], target: i0.ɵɵFactoryTarget.Injectable });\nWindowService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: WindowContainerService, decorators: [{\n type: Inject,\n args: [WindowContainerService]\n }] }]; } });\n\n/**\n * Provides an insertion point for the Dialogs which are created through the\n * Dialog service ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n * Created Dialogs will be mounted after that element.\n *\n * @example\n * ```html-no-run\n *
\n * ```\n */\nclass DialogContainerDirective {\n constructor(container, service) {\n service.container = container;\n }\n}\nDialogContainerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogContainerDirective, deps: [{ token: i0.ViewContainerRef }, { token: DialogContainerService }], target: i0.ɵɵFactoryTarget.Directive });\nDialogContainerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DialogContainerDirective, selector: \"[kendoDialogContainer]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogContainerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDialogContainer]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: DialogContainerService }]; } });\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug globalization_dialogs %}#toc-localization)).\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nCustomMessagesComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CustomMessagesComponent, selector: \"kendo-dialog-messages, kendo-window-messages\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CustomMessagesComponent, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ],\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-dialog-messages, kendo-window-messages'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * @hidden\n */\nconst SHARED_DIRECTIVES = [\n DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective\n];\n/**\n * @hidden\n */\nclass SharedModule {\n}\nSharedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, declarations: [DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective], imports: [CommonModule], exports: [DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective, CommonModule] });\nSharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, imports: [[CommonModule], CommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES, CommonModule],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * @hidden\n */\nconst DIALOG_DIRECTIVES = [\n DialogComponent,\n DialogTitleBarComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dialog component that includes all Dialog components and directives.\n * Imports `DialogModule` into the [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity)\n * of your application or into any other sub-module that will use the Dialog component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { DialogModule } from '@progress/kendo-angular-dialog';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, DialogModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass DialogModule {\n}\nDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogModule, declarations: [DialogComponent,\n DialogTitleBarComponent, DialogContainerDirective], imports: [SharedModule], exports: [DialogComponent,\n DialogTitleBarComponent, DialogActionsComponent, CustomMessagesComponent, LocalizedMessagesDirective, DialogContainerDirective] });\nDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogModule, providers: [DialogContainerService, DialogService], imports: [[SharedModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [DIALOG_DIRECTIVES, DialogContainerDirective],\n entryComponents: [DIALOG_DIRECTIVES],\n exports: [DIALOG_DIRECTIVES, SHARED_DIRECTIVES, DialogContainerDirective],\n imports: [SharedModule],\n providers: [DialogContainerService, DialogService]\n }]\n }] });\n\n/**\n * Provides an insertion point for the Windows which are created through the\n * Window service ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n * Created Windows will be mounted after that element.\n *\n * @example\n * ```html-no-run\n *
\n * ```\n */\nclass WindowContainerDirective {\n constructor(container, service) {\n service.container = container;\n }\n}\nWindowContainerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowContainerDirective, deps: [{ token: i0.ViewContainerRef }, { token: WindowContainerService }], target: i0.ɵɵFactoryTarget.Directive });\nWindowContainerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: WindowContainerDirective, selector: \"[kendoWindowContainer]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowContainerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoWindowContainer]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: WindowContainerService }]; } });\n\nconst WINDOW_DIRECTIVES = [\n ResizeHandleDirective,\n WindowComponent,\n WindowTitleBarComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective\n];\nconst ENTRY_COMPONENTS = [\n WindowComponent,\n WindowTitleBarComponent\n];\nconst exportedModules = [\n WindowComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective,\n WindowTitleBarComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Window component. Imports `WindowModule` into the\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity)\n * of your application or into any other sub-module that will use the Window component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { WindowModule } from '@progress/kendo-angular-window';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, WindowModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass WindowModule {\n}\nWindowModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nWindowModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowModule, declarations: [ResizeHandleDirective,\n WindowComponent,\n WindowTitleBarComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective, WindowContainerDirective], imports: [SharedModule, DraggableModule], exports: [WindowComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective,\n WindowTitleBarComponent, DialogActionsComponent, CustomMessagesComponent, LocalizedMessagesDirective, WindowContainerDirective] });\nWindowModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowModule, providers: [WindowContainerService, WindowService], imports: [[SharedModule, DraggableModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: WindowModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [WINDOW_DIRECTIVES, WindowContainerDirective],\n entryComponents: [ENTRY_COMPONENTS],\n exports: [exportedModules, SHARED_DIRECTIVES, WindowContainerDirective],\n imports: [SharedModule, DraggableModule],\n providers: [WindowContainerService, WindowService]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dialogs components.\n *\n * @example\n *\n * ```ts-no-run\n * import { DialogsModule } from '@progress/kendo-angular-dialog';\n *\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { NgModule } from '@angular/core';\n *\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * declarations: [AppComponent],\n * imports: [BrowserModule, DialogsModule],\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DialogsModule {\n}\nDialogsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDialogsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogsModule, exports: [DialogModule, WindowModule] });\nDialogsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogsModule, imports: [DialogModule, WindowModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DialogsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [DialogModule, WindowModule]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CustomMessagesComponent, DialogAction, DialogActionsComponent, DialogCloseResult, DialogComponent, DialogContainerDirective, DialogContentBase, DialogModule, DialogRef, DialogService, DialogSettings, DialogTitleBarComponent, DialogsModule, LocalizedMessagesDirective, Messages, PreventableEvent, WindowCloseActionDirective, WindowCloseResult, WindowComponent, WindowContainerDirective, WindowMaximizeActionDirective, WindowMinimizeActionDirective, WindowModule, WindowRef, WindowRestoreActionDirective, WindowService, WindowSettings, WindowTitleBarComponent };\n\n","export function not(pred, thisArg) {\n return (value, index) => !pred.call(thisArg, value, index);\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function skipWhile(predicate) {\n return operate((source, subscriber) => {\n let taking = false;\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, (value) => (taking || (taking = !predicate(value, index++))) && subscriber.next(value)));\n });\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { EventEmitter, Component, Input, Output, ViewChild, HostBinding, Directive, Injectable, InjectionToken, HostListener, ViewChildren, forwardRef, isDevMode, ViewContainerRef, Optional, Inject, ContentChild, ContentChildren, ChangeDetectionStrategy, NgModule } from '@angular/core';\nimport * as i9 from '@progress/kendo-angular-common';\nimport { isDocumentAvailable, Keys, isChanged, hasObservers, KendoInput, anyChanged, guid as guid$1, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';\nimport * as i12 from '@angular/forms';\nimport { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { getter as getter$1, pointers, touchEnabled } from '@progress/kendo-common';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { merge, fromEvent, Subject, Subscription, of, interval } from 'rxjs';\nimport * as i2 from '@progress/kendo-angular-popup';\nimport { PopupModule } from '@progress/kendo-angular-popup';\nexport { PopupComponent } from '@progress/kendo-angular-popup';\nimport { map, switchMap, take, auditTime, tap, filter, partition, throttleTime, catchError, skipWhile, concatMap, takeUntil } from 'rxjs/operators';\nimport * as i11 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i1$1 from '@progress/kendo-angular-treeview';\nimport { DataBoundComponent, ExpandableComponent, FlatDataBindingDirective, HierarchyBindingDirective, ExpandDirective, TreeViewModule } from '@progress/kendo-angular-treeview';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-dropdowns',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1659511295,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/* eslint-disable no-bitwise */\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isNumber = (value) => !isNaN(value);\n/**\n * @hidden\n */\nconst guid = () => {\n let id = \"\";\n let i;\n let random;\n for (i = 0; i < 32; i++) {\n random = Math.random() * 16 | 0;\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n id += \"-\";\n }\n id += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16);\n }\n return id;\n};\n/**\n * @hidden\n */\nconst combineStr = (begin, end) => {\n return begin.concat(end.substr(end.toLowerCase().indexOf(begin.toLowerCase()) + begin.length));\n};\n/**\n * @hidden\n */\nconst isWindowAvailable = () => typeof window !== 'undefined';\n/**\n * @hidden\n */\nconst isArray = (value) => Array.isArray(value);\n/**\n * @hidden\n */\nconst isObject = (value) => isPresent(value) && typeof value === 'object';\n/**\n * @hidden\n */\nconst isEmptyString = (value) => typeof value === 'string' && value.length === 0;\n/**\n * @hidden\n */\nconst resolveValuesInArray = (values, data = [], valueField) => values\n .map(value => {\n return data.find(item => getter(item, valueField) === value);\n})\n .filter(value => value !== undefined);\n/**\n * @hidden\n */\nconst validateComplexValues = (values, valueField) => isArray(values) && values.filter(item => {\n return isObject(item) && isPresent(getter(item, valueField));\n});\n/**\n * @hidden\n */\nconst resolveAllValues = (value, data, valueField) => {\n const customValues = validateComplexValues(value, valueField) || [];\n const resolvedValues = resolveValuesInArray(value, data, valueField) || [];\n return resolvedValues.concat(customValues);\n};\n/**\n * @hidden\n */\nconst isObjectArray = (values) => {\n return isArray(values) && values.every(item => isObject(item));\n};\n/**\n * @hidden\n */\nconst selectedIndices = (values, data, valueField) => {\n const extractedValues = data.map(item => {\n return isPresent(item) && isPresent(getter(item, valueField)) ? getter(item, valueField) : item;\n });\n return values.reduce((arr, item) => {\n const value = isPresent(item) && isPresent(getter(item, valueField)) ? getter(item, valueField) : item;\n const index = extractedValues.indexOf(value);\n if (index !== -1) {\n arr.push(index);\n }\n return arr;\n }, []);\n};\n/**\n * @hidden\n */\nconst getter = (dataItem, field) => {\n if (!isPresent(dataItem)) {\n return null;\n }\n if (!isPresent(field) || !isObject(dataItem)) {\n return dataItem;\n }\n // creates a field accessor supporting nested fields processing\n const valueFrom = getter$1(field);\n return valueFrom(dataItem);\n};\n/**\n * @hidden\n */\nconst resolveValue = (args) => {\n let dataItem;\n if (isPresent(args.value)) {\n const data = [args.defaultItem, ...args.data];\n dataItem = data.find(element => getter(element, args.valueField) === args.value);\n return {\n dataItem: dataItem,\n focused: args.data.indexOf(dataItem),\n selected: args.data.indexOf(dataItem)\n };\n }\n else if (args.index) {\n dataItem = args.data[args.index];\n return {\n dataItem: args.data[args.index],\n focused: args.index,\n selected: args.index\n };\n }\n return {\n dataItem: args.defaultItem,\n focused: -1,\n selected: -1\n };\n};\n/**\n * @hidden\n */\nconst sameCharsOnly = (word, character) => {\n for (let idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n};\n/**\n * @hidden\n */\nconst shuffleData = (data, splitIndex, defaultItem) => {\n let result = data;\n if (defaultItem) {\n result = [defaultItem].concat(result);\n }\n return result.slice(splitIndex).concat(result.slice(0, splitIndex));\n};\n/**\n * @hidden\n */\nconst matchText = (text, word, ignoreCase) => {\n if (!isPresent(text)) {\n return false;\n }\n let temp = String(text);\n if (ignoreCase) {\n temp = temp.toLowerCase();\n }\n return temp.indexOf(word) === 0;\n};\n/**\n * @hidden\n */\nconst elementFromPoint = (x, y) => {\n if (!isDocumentAvailable()) {\n return;\n }\n return document.elementFromPoint(x, y);\n};\n/**\n * @hidden\n *\n * Checks whether the passed object has all of the listed properties.\n */\nconst hasProps = (obj, props) => {\n if (!isPresent(obj)) {\n return false;\n }\n return props.every(prop => obj.hasOwnProperty(prop));\n};\n/**\n * @hidden\n *\n * Checks whether an element is untouched by looking for the ng-untouched css class\n */\nconst isUntouched = (element) => element.className.includes('ng-untouched');\n/**\n * @hidden\n */\nconst noop = (_) => { };\n/**\n * IE element `matches` polyfill.\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\nconst matches = (element, selector) => {\n const matcher = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (!matcher) {\n return false;\n }\n return matcher.call(element, selector);\n};\n/**\n * @hidden\n *\n * IE element `closest` polyfill.\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n */\nconst closest = (element, selector) => {\n let parent = element;\n while (parent !== null && parent.nodeType === 1) {\n if (matches(parent, selector)) {\n return parent;\n }\n parent = parent.parentElement || parent.parentNode;\n }\n return null;\n};\n/**\n * @hidden\n *\n * Parses a provided value to its type 'number' representation.\n * If the parsed value (via Number(value)) is NaN, the provided default value is returned.\n * Uses 0 as default value if a second param is not provided.\n */\nconst parseNumber = (num, defaultValue = 0) => {\n const normalizedValue = Number(num);\n return isNaN(normalizedValue) ? defaultValue : normalizedValue;\n};\n/**\n * @hidden\n *\n * Checks whether the passed target element is inside the provided host or popupRef.\n */\nconst inDropDown = (host, target, popupRef) => {\n return host.nativeElement.contains(target) || (popupRef && popupRef.popupElement.contains(target));\n};\n/**\n * @hidden\n *\n * Calculates the hierarchical level of an item, based on the provided index.\n * The result level is zero-based (starts from 0).\n */\nconst getHierarchicalItemLevel = (index) => {\n return (index || '').split('_').length - 1;\n};\n/**\n * @hidden\n *\n * Retrieves all descendant nodes' lookups which are currently registered in the provided lookup item as a flat array.\n */\nconst fetchDescendentNodes = (lookup, filterExpression) => {\n if (!isPresent(lookup) || lookup.children.length === 0) {\n return [];\n }\n let descendants = lookup.children;\n if (isPresent(filterExpression)) {\n descendants = descendants.filter(descendent => filterExpression(descendent.item));\n }\n descendants.forEach(child => descendants = descendants.concat(fetchDescendentNodes(child, filterExpression)));\n return descendants;\n};\n/**\n * @hidden\n *\n * Retrieves the correct value based on the item's level and the provided value field/s.\n * Used in the MultiSelectTree component.\n */\nconst valueFrom = ({ dataItem, index, level }, valueField) => {\n const fields = Array.isArray(valueField) ? valueField : [valueField];\n // either use the explicitly provided value level, or infer it from the item index\n const valueLevel = isPresent(level) ? level : getHierarchicalItemLevel(index);\n // fall-back to the last available one, if the current node is in a deeper level\n const normalizedLevel = Math.min(valueLevel, fields.length - 1);\n const field = fields[normalizedLevel];\n return getter$1(field)(dataItem);\n};\n/**\n * @hidden\n * Returns the size class based on the component and size input.\n */\nconst getSizeClass = (component, size) => {\n const SIZE_CLASSES = {\n 'small': `k-${component}-sm`,\n 'medium': `k-${component}-md`,\n 'large': `k-${component}-lg`\n };\n return SIZE_CLASSES[size];\n};\n/**\n * @hidden\n * Returns the rounded class based on the rounded input.\n */\nconst getRoundedClass = (rounded) => {\n const ROUNDED_CLASSES = {\n 'small': 'k-rounded-sm',\n 'medium': 'k-rounded-md',\n 'large': 'k-rounded-lg',\n 'full': 'k-rounded-full'\n };\n return ROUNDED_CLASSES[rounded];\n};\n/**\n * @hidden\n * Return the fillMode class based on the component and fillMode input.\n */\nconst getFillModeClass = (component, fillMode) => {\n const FILLMODE_CLASSES = {\n 'solid': `k-${component}-solid`,\n 'flat': `k-${component}-flat`,\n 'outline': `k-${component}-outline`\n };\n return FILLMODE_CLASSES[fillMode];\n};\n\n/**\n * @hidden\n */\nclass SearchBarComponent {\n constructor(localization, renderer) {\n this.localization = localization;\n this.valueChange = new EventEmitter();\n this.onBlur = new EventEmitter();\n this.onFocus = new EventEmitter();\n this.onClick = new EventEmitter();\n this.onNavigate = new EventEmitter();\n this.searchBarClass = true;\n this._userInput = \"\";\n this._previousValue = \"\";\n this._placeholder = \"\";\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.renderer = renderer;\n }\n get userInput() {\n return this._userInput;\n }\n set userInput(userInput) {\n this._userInput = userInput || \"\";\n }\n get value() {\n return this.input.nativeElement.value;\n }\n set placeholder(text) {\n this._placeholder = text || '';\n this.setInputSize();\n }\n get placeholder() {\n return this._placeholder;\n }\n get ariaExpanded() {\n return this.role === 'combobox' ? this.popupOpen : null;\n }\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnChanges(changes) {\n let previousUserInput;\n if (this.input && (changes.userInput || changes.suggestedText)) {\n if (changes.userInput && changes.userInput.previousValue) {\n if (this._previousValue === changes.userInput.previousValue) {\n previousUserInput = this._previousValue;\n }\n else {\n previousUserInput = changes.userInput.currentValue || \"\";\n }\n }\n else {\n previousUserInput = this._previousValue;\n }\n const caretIndex = this.input.nativeElement.selectionStart;\n const caretAtEnd = previousUserInput.length === caretIndex;\n this.writeInputValue(this.suggestedText ? combineStr(this.userInput, this.suggestedText) : this.userInput);\n if (this.suggestedText) {\n this.setInputSelection(this.userInput.length, this.suggestedText.length);\n }\n else if (caretAtEnd) {\n this.setInputSelection(this.userInput.length, this.userInput.length);\n }\n else {\n this.setInputSelection(caretIndex, caretIndex);\n }\n this._previousValue = this.userInput;\n }\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n writeInputValue(text) {\n if (isDocumentAvailable()) {\n this.renderer.setProperty(this.input.nativeElement, 'value', text);\n }\n }\n setInputSelection(start, end) {\n if (isDocumentAvailable() && this.input.nativeElement === document.activeElement) {\n try {\n this.input.nativeElement.setSelectionRange(start, end);\n }\n catch (e) {\n //Make sure that the element is in the DOM before you invoke its methods\n }\n }\n }\n handleInput(event) {\n const value = event.target.value;\n if (value !== this.userInput) {\n this._previousValue = value;\n this.valueChange.emit(value);\n }\n }\n handleFocus(event) {\n this.onFocus.emit(event);\n }\n handleBlur(event) {\n this.onBlur.emit(event);\n }\n handleKeydown(event) {\n const keyCode = event.keyCode;\n const keys = [Keys.ArrowUp, Keys.ArrowDown, Keys.ArrowLeft, Keys.ArrowRight, Keys.Enter,\n Keys.Escape, Keys.Delete, Keys.Backspace, Keys.Home, Keys.End];\n if (keys.indexOf(keyCode) > -1) {\n this.onNavigate.emit(event);\n }\n }\n focus() {\n if (isDocumentAvailable()) {\n this.input.nativeElement.focus();\n }\n }\n blur() {\n if (isDocumentAvailable()) {\n this.input.nativeElement.blur();\n }\n }\n setInputSize() {\n const lengthOf = x => x ? x.length : 0;\n const input = this.input.nativeElement;\n const placeholderLength = lengthOf(this.placeholder);\n const textLength = lengthOf(this.value);\n const size = Math.max(placeholderLength, textLength, 1);\n this.renderer.setAttribute(input, 'size', size.toString());\n }\n}\nSearchBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SearchBarComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nSearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SearchBarComponent, selector: \"kendo-searchbar\", inputs: { id: \"id\", listId: \"listId\", tagListId: \"tagListId\", activeDescendant: \"activeDescendant\", noDataLabel: \"noDataLabel\", disabled: \"disabled\", readonly: \"readonly\", tabIndex: \"tabIndex\", popupOpen: \"popupOpen\", role: \"role\", userInput: \"userInput\", suggestedText: \"suggestedText\", placeholder: \"placeholder\" }, outputs: { valueChange: \"valueChange\", onBlur: \"onBlur\", onFocus: \"onFocus\", onClick: \"onClick\", onNavigate: \"onNavigate\" }, host: { properties: { \"class.k-searchbar\": \"this.searchBarClass\" } }, viewQueries: [{ propertyName: \"input\", first: true, predicate: [\"input\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `\n \n `, isInline: true, directives: [{ type: i9.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SearchBarComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-searchbar',\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Renderer2 }]; }, propDecorators: { id: [{\n type: Input\n }], listId: [{\n type: Input\n }], tagListId: [{\n type: Input\n }], activeDescendant: [{\n type: Input\n }], noDataLabel: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], popupOpen: [{\n type: Input\n }], role: [{\n type: Input\n }], userInput: [{\n type: Input\n }], suggestedText: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onBlur: [{\n type: Output\n }], onFocus: [{\n type: Output\n }], onClick: [{\n type: Output\n }], onNavigate: [{\n type: Output\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }], searchBarClass: [{\n type: HostBinding,\n args: ['class.k-searchbar']\n }], placeholder: [{\n type: Input\n }] } });\n\n/**\n * Renders the list item content. To define the item template, nest an `` tag\n * with the `kendoItemTemplate` directive inside the component tag. The template context is\n * set to the current component. To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * - [Using `ItemTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-item-template)\n * - [Using `ItemTemplate` with the ComboBox]({% slug templates_combobox %}#toc-item-template)\n * - [Using `ItemTemplate` with the DropDownList]({% slug templates_ddl %}#toc-item-template)\n * - [Using `ItemTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-item-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass ItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ItemTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ItemTemplateDirective, selector: \"[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Renders the header content of the list. To define the header template, nest an `` tag\n * with the `kendoHeaderTemplate` directive inside the component tag.\n *\n * - [Using `HeaderTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-header-template)\n * - [Using `HeaderTemplate` with the ComboBox]({% slug templates_combobox %}#toc-header-template)\n * - [Using `HeaderTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-header-template)\n * - [Using `HeaderTemplate` with the DropDownList]({% slug templates_ddl %}#toc-header-template)\n * - [Using `HeaderTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-header-template)\n * - [Using `HeaderTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-header-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

Header template

\n *
\n *
\n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass HeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HeaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: HeaderTemplateDirective, selector: \"[kendoDropDownListHeaderTemplate],[kendoComboBoxHeaderTemplate],[kendoDropDownTreeHeaderTemplate],[kendoMultiColumnComboBoxHeaderTemplate],[kendoAutoCompleteHeaderTemplate],[kendoMultiSelectHeaderTemplate],[kendoMultiSelectTreeHeaderTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HeaderTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListHeaderTemplate],[kendoComboBoxHeaderTemplate],[kendoDropDownTreeHeaderTemplate],[kendoMultiColumnComboBoxHeaderTemplate],[kendoAutoCompleteHeaderTemplate],[kendoMultiSelectHeaderTemplate],[kendoMultiSelectTreeHeaderTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Renders the footer content of the list. To define the footer template, nest an `` tag\n * with the `kendoFooterTemplate` directive inside the component tag.\n *\n * - [Using `FooterTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-footer-template)\n * - [Using `FooterTemplate` with the ComboBox]({% slug templates_combobox %}#toc-footer-template)\n * - [Using `FooterTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-footer-template)\n * - [Using `FooterTemplate` with the DropDownList]({% slug templates_ddl %}#toc-footer-template)\n * - [Using `FooterTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-footer-template)\n * - [Using `FooterTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-footer-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

Footer template

\n *
\n *
\n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass FooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFooterTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FooterTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nFooterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FooterTemplateDirective, selector: \"[kendoDropDownListFooterTemplate],[kendoComboBoxFooterTemplate],[kendoDropDownTreeFooterTemplate],[kendoMultiColumnComboBoxFooterTemplate],[kendoAutoCompleteFooterTemplate],[kendoMultiSelectFooterTemplate],[kendoMultiSelectTreeFooterTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FooterTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListFooterTemplate],[kendoComboBoxFooterTemplate],[kendoDropDownTreeFooterTemplate],[kendoMultiColumnComboBoxFooterTemplate],[kendoAutoCompleteFooterTemplate],[kendoMultiSelectFooterTemplate],[kendoMultiSelectTreeFooterTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Renders the group header content. To define the group template, nest an `` tag\n * with the `kendoGroupTemplate` directive inside the component tag. The template context is\n * set to the current component. To get a reference to the current data item, use the `let-groupName` directive.\n *\n * - [Using `GroupTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-group-template)\n * - [Using `GroupTemplate` with the ComboBox]({% slug templates_combobox %}#toc-group-template)\n * - [Using `GroupTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-group-template)\n * - [Using `GroupTemplate` with the DropDownList]({% slug templates_ddl %}#toc-group-template)\n * - [Using `GroupTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-group-template)\n *\n * @example\n * ```ts\n * import { groupBy } from '@progress/kendo-data-query';\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * Food type: {{groupName}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n * public groupedData = groupBy(this.data, [{field: \"subcategory\"}]);\n * }\n * ```\n */\nclass GroupTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GroupTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nGroupTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: GroupTemplateDirective, selector: \"[kendoDropDownListGroupTemplate],[kendoComboBoxGroupTemplate],[kendoMultiColumnComboBoxGroupTemplate],[kendoAutoCompleteGroupTemplate],[kendoMultiSelectGroupTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GroupTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListGroupTemplate],[kendoComboBoxGroupTemplate],[kendoMultiColumnComboBoxGroupTemplate],[kendoAutoCompleteGroupTemplate],[kendoMultiSelectGroupTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Renders the fixed group header content. To define the fixed group template, nest an `` tag\n * with the `kendoFixedGroupTemplate` directive inside the component tag. The template context is\n * set to the current component. To get a reference to the current data item, use the `let-groupName` directive.\n *\n * - [Using `FixedGroupTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the ComboBox]({% slug templates_combobox %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the DropDownList]({% slug templates_ddl %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-fixed-group-template)\n *\n * @example\n * ```ts\n * import { groupBy } from '@progress/kendo-data-query';\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * Food type: {{groupName}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n * public groupedData = groupBy(this.data, [{field: \"subcategory\"}]);\n * }\n * ```\n */\nclass FixedGroupTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFixedGroupTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FixedGroupTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nFixedGroupTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FixedGroupTemplateDirective, selector: \"[kendoDropDownListFixedGroupTemplate],[kendoComboBoxFixedGroupTemplate],[kendoMultiColumnComboBoxFixedGroupTemplate],[kendoAutoCompleteFixedGroupTemplate],[kendoMultiSelectFixedGroupTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FixedGroupTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListFixedGroupTemplate],[kendoComboBoxFixedGroupTemplate],[kendoMultiColumnComboBoxFixedGroupTemplate],[kendoAutoCompleteFixedGroupTemplate],[kendoMultiSelectFixedGroupTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @hidden\n */\nclass SelectionService {\n constructor() {\n this.onSelect = new EventEmitter();\n this.onChange = new EventEmitter();\n this.onFocus = new EventEmitter();\n this.total = 0;\n this.selectedIndices = [];\n }\n getTotal() {\n return this.total;\n }\n isSelected(index) {\n return isPresent(this.selectedIndices.find(current => current === index));\n }\n isFocused(index) {\n return index === this.focused;\n }\n focus(index) {\n if (this.isFocused(index)) {\n return;\n }\n this.focused = index;\n this.onFocus.emit(index);\n }\n select(index) {\n if (this.isSelected(index)) {\n return;\n }\n this.selectedIndices = [index];\n this.focused = index;\n this.onSelect.emit({\n indices: [index],\n newSelection: isPresent(index)\n });\n }\n add(index) {\n if (this.isSelected(index)) {\n return;\n }\n this.selectedIndices.push(index);\n this.focused = index;\n this.onChange.emit({\n added: index,\n indices: this.selectedIndices.slice()\n });\n }\n unselect(index) {\n if (!this.isSelected(index)) {\n return;\n }\n const position = this.selectedIndices.indexOf(index);\n this.selectedIndices.splice(position, 1);\n this.focused = index;\n this.onChange.emit({\n indices: this.selectedIndices.slice(),\n removed: index\n });\n }\n change(index) {\n const newSelection = isPresent(index) && !this.isSelected(index);\n this.selectedIndices = [index];\n this.focused = index;\n this.onChange.emit({\n indices: [index],\n newSelection: newSelection\n });\n }\n resetSelection(index) {\n this.selectedIndices = index instanceof Array ? index : [index];\n this.focused = this.selectedIndices[this.selectedIndices.length - 1];\n }\n get selected() {\n return this.selectedIndices.slice();\n }\n get focused() {\n return this.focusedIndex;\n }\n set focused(index) {\n if (this.focusedIndex !== index) {\n this.focusedIndex = index;\n this.onFocus.emit(index);\n }\n }\n}\nSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nvar NavigationAction;\n(function (NavigationAction) {\n // eslint-disable-next-line id-denylist\n NavigationAction[NavigationAction[\"Undefined\"] = 0] = \"Undefined\";\n NavigationAction[NavigationAction[\"Open\"] = 1] = \"Open\";\n NavigationAction[NavigationAction[\"Close\"] = 2] = \"Close\";\n NavigationAction[NavigationAction[\"Enter\"] = 3] = \"Enter\";\n NavigationAction[NavigationAction[\"Tab\"] = 4] = \"Tab\";\n NavigationAction[NavigationAction[\"Esc\"] = 5] = \"Esc\";\n NavigationAction[NavigationAction[\"Delete\"] = 6] = \"Delete\";\n NavigationAction[NavigationAction[\"Backspace\"] = 7] = \"Backspace\";\n NavigationAction[NavigationAction[\"Home\"] = 8] = \"Home\";\n NavigationAction[NavigationAction[\"End\"] = 9] = \"End\";\n NavigationAction[NavigationAction[\"Up\"] = 10] = \"Up\";\n NavigationAction[NavigationAction[\"Down\"] = 11] = \"Down\";\n NavigationAction[NavigationAction[\"Left\"] = 12] = \"Left\";\n NavigationAction[NavigationAction[\"Right\"] = 13] = \"Right\";\n})(NavigationAction || (NavigationAction = {}));\n\n/**\n * @hidden\n */\nclass DataService {\n constructor() {\n this.grouped = false;\n this.groupIndices = [];\n }\n set data(data) {\n this._data = data;\n this.grouped = this.isGrouped(data);\n if (this.grouped) {\n this.groupIndices = this.getGroupIndices(data);\n this._flatData = this.flatten(data);\n }\n }\n get data() {\n if (this.grouped) {\n return this._flatData;\n }\n return this._data;\n }\n /**\n * @hidden\n * Used to get the actual items count, i.e. excluding the header items in case of grouping.\n */\n get itemsCount() {\n if (!isPresent(this.data) || this.data.length === 0) {\n return 0;\n }\n const items = this.grouped ? this._flatData.filter(item => !item.header) : this.data;\n return items.length;\n }\n /**\n * @hidden\n * Used to determine if the component received grouped data.\n */\n isGrouped(data) {\n // GroupResult { aggregates: AggregateResult, field: string, items: object[], value: any }\n // https://www.telerik.com/kendo-angular-ui/components/dataquery/api/GroupResult/\n return (isPresent(data) && data.length !== 0) && isPresent(data[0]) && hasProps(data[0], ['aggregates', 'field', 'items', 'value']);\n }\n /**\n * @hidden\n * Used to calculate the last item index of each group.\n */\n getGroupIndices(data) {\n let groupIndices = [];\n for (let i = 0; i <= data.length - 1; i++) {\n groupIndices[i] = (groupIndices[i - 1] || 0) + data[i].items.length;\n }\n return groupIndices;\n }\n /**\n * @hidden\n * Used to get a flat array containing all items matching certain criteria.\n */\n filter(predicate) {\n let result = [];\n if (this.isGrouped(this.data)) {\n for (let i = 0; i <= this.groupIndices.length - 1; i++) {\n const matches = this.data[i].items.filter(predicate);\n if (matches) {\n result = result.concat(matches);\n }\n }\n }\n else {\n result = this.data.filter(predicate);\n }\n return result;\n }\n /**\n * @hidden\n * Used to get the index of a given data item.\n */\n indexOf(item, startFrom = 0) {\n let predicate = (element) => {\n return element === item;\n };\n if (this.grouped) {\n predicate = (element) => {\n return element.value === item;\n };\n }\n return this.findIndex(predicate, startFrom);\n }\n /**\n * @hidden\n * Used to get the index of a data item based on an expression.\n */\n findIndex(predicate, startFrom = 0) {\n let index = -1;\n if (this.grouped) {\n const data = this._flatData.filter(item => !item.header && item.offsetIndex >= startFrom);\n index = data.findIndex(predicate);\n index = data[index] ? data[index].offsetIndex : -1;\n }\n else {\n const data = this.data.slice(startFrom);\n const itemIndex = data.findIndex(predicate);\n index = itemIndex !== -1 ? itemIndex + startFrom : -1;\n }\n return index;\n }\n /**\n * @hidden\n * Used to get the closest group header prior to an item index.\n */\n closestGroup(index) {\n for (let i = index; i >= 0; i--) {\n if (this._flatData[i].header) {\n return this._flatData[i];\n }\n }\n }\n /**\n * @hidden\n * Used to get the first item matching the criteria.\n */\n find(predicate) {\n const index = this.findIndex(predicate);\n return this.itemAt(index);\n }\n /**\n * @hidden\n * Used to get the true index in a flattened data array.\n */\n flatIndex(index) {\n if (this.itemsCount === 0) {\n return -1;\n }\n if (this.grouped) {\n const match = this._flatData.find((item) => !item.header && item.offsetIndex === index);\n if (match) {\n return match.index;\n }\n }\n else {\n return index;\n }\n return -1;\n }\n /**\n * @hidden\n * Used to get the item at the provided index.\n */\n itemAt(index) {\n let dataItem;\n if (this.itemsCount === 0) {\n return dataItem;\n }\n if (this.grouped) {\n const match = this._flatData.find((item) => !item.header && item.offsetIndex === index);\n if (match) {\n dataItem = match.value;\n }\n }\n else {\n dataItem = this.data[index];\n }\n return dataItem;\n }\n /**\n * @hidden\n * Used to get the group at the provided index.\n */\n groupAt(index) {\n if (this.itemsCount === 0 || !this.isGrouped) {\n return;\n }\n return this._flatData.find((item) => item.header && item.index === index);\n }\n /**\n * @hidden\n * Used to get the field by which the data is grouped.\n */\n groupField() {\n if (this.itemsCount === 0 || !this.isGrouped) {\n return null;\n }\n return this._data[0].field;\n }\n /**\n * @hidden\n * Used to get the group to which a dataItem belongs.\n */\n itemGroup(item) {\n if (!item || this.itemsCount === 0 || !this.isGrouped) {\n return;\n }\n const fieldName = this.groupField();\n if (fieldName) {\n return getter(item, fieldName);\n }\n }\n flatten(data, group = undefined, offset = 0, groupIndex = 0) {\n let flat = [];\n if (isPresent(group)) {\n flat.push({\n header: true,\n index: groupIndex + offset,\n offsetIndex: groupIndex,\n value: group\n });\n }\n for (let i = 0; i < data.length; i++) {\n let result = [];\n if (data[i].items) {\n result = this.flatten(data[i].items, data[i].value, offset, i);\n offset = offset + data[i].items.length;\n }\n else {\n result.push({\n header: false,\n index: groupIndex + offset + i + 1,\n offsetIndex: offset + i,\n value: data[i]\n });\n }\n flat = flat.concat(result);\n }\n return flat;\n }\n}\nDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDataService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DataService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DataService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass DisabledItemsService {\n constructor(dataService) {\n this.dataService = dataService;\n this.itemDisabled = null;\n }\n isIndexDisabled(index) {\n if (this.itemDisabled) {\n const item = this.dataService.itemAt(index);\n if (isPresent(item)) {\n return this.itemDisabled({ dataItem: item, index });\n }\n else if (isPresent(this.defaultItem)) {\n return this.itemDisabled({ dataItem: this.defaultItem, index: -1 });\n }\n }\n }\n isItemDisabled(item) {\n if (this.itemDisabled) {\n const index = this.dataService.indexOf(item);\n if (index !== -1) {\n return this.itemDisabled({ dataItem: item, index });\n }\n else if (isPresent(this.defaultItem)) {\n return this.itemDisabled({ dataItem: this.defaultItem, index: -1 });\n }\n }\n }\n}\nDisabledItemsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisabledItemsService, deps: [{ token: DataService }], target: i0.ɵɵFactoryTarget.Injectable });\nDisabledItemsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisabledItemsService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisabledItemsService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: DataService }]; } });\n\nconst MIN_INDEX = 0;\n/**\n * @hidden\n */\nclass NavigationEvent {\n /**\n * The index of the item to which the user navigated.\n */\n constructor(index, originalEvent) {\n this.index = index;\n this.originalEvent = originalEvent;\n }\n}\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(disabledItemsService, selectionService) {\n this.disabledItemsService = disabledItemsService;\n this.selectionService = selectionService;\n this.open = new EventEmitter();\n this.close = new EventEmitter();\n this.enter = new EventEmitter();\n this.tab = new EventEmitter();\n this.esc = new EventEmitter();\n this.up = new EventEmitter();\n this.right = new EventEmitter();\n this.down = new EventEmitter();\n this.left = new EventEmitter();\n this.delete = new EventEmitter();\n this.backspace = new EventEmitter();\n this.home = new EventEmitter();\n this.end = new EventEmitter();\n }\n process(args) {\n const keyCode = args.originalEvent.keyCode;\n const altKey = args.originalEvent.altKey;\n let index;\n let action = NavigationAction.Undefined;\n if (altKey && keyCode === Keys.ArrowDown) {\n action = NavigationAction.Open;\n }\n else if (altKey && keyCode === Keys.ArrowUp) {\n action = NavigationAction.Close;\n }\n else if (keyCode === Keys.Enter) {\n action = NavigationAction.Enter;\n }\n else if (keyCode === Keys.Escape) {\n action = NavigationAction.Esc;\n }\n else if (keyCode === Keys.Tab) {\n action = NavigationAction.Tab;\n }\n else if (keyCode === Keys.ArrowUp) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: -1 });\n action = NavigationAction.Up;\n }\n else if (keyCode === Keys.ArrowLeft) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: -1 });\n action = NavigationAction.Left;\n }\n else if (keyCode === Keys.ArrowDown) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: 1 });\n action = NavigationAction.Down;\n }\n else if (keyCode === Keys.ArrowRight) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: 1 });\n action = NavigationAction.Right;\n }\n else if (keyCode === Keys.Home) {\n index = this.isDisabled(MIN_INDEX) ? args.current : MIN_INDEX;\n action = NavigationAction.Home;\n }\n else if (keyCode === Keys.End) {\n index = this.isDisabled(args.max) ? args.current : args.max;\n action = NavigationAction.End;\n }\n else if (keyCode === Keys.Delete) {\n action = NavigationAction.Delete;\n }\n else if (keyCode === Keys.Backspace) {\n action = NavigationAction.Backspace;\n }\n const eventData = new NavigationEvent(index, args.originalEvent);\n if (action !== NavigationAction.Undefined) {\n this[NavigationAction[action].toLowerCase()].emit(eventData);\n }\n return action;\n }\n next(args) {\n const { current, start, end, step } = args;\n const nextIndex = !isPresent(current) ? start : this.clampIndex(current + step, start, end);\n const firstFocusableIndex = this.firstFocusableIndex(nextIndex, start, end, step);\n if (isPresent(firstFocusableIndex)) {\n return firstFocusableIndex;\n }\n if (this.selectionService.isSelected(current) && current >= start) {\n return current;\n }\n const inversedStep = -1 * step;\n return this.firstFocusableIndex(nextIndex, start, end, inversedStep);\n }\n clampIndex(index, min, max) {\n if (!isPresent(index) || index < min) {\n return min;\n }\n if (index > max) {\n return max;\n }\n return index;\n }\n firstFocusableIndex(startIndex, min, max, step) {\n while (min <= startIndex && startIndex <= max) {\n if (!this.isDisabled(startIndex)) {\n return startIndex;\n }\n startIndex += step;\n }\n return undefined;\n }\n isDisabled(index) {\n if (this.disabledItemsService) {\n return this.disabledItemsService.isIndexDisabled(index);\n }\n }\n}\nNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, deps: [{ token: DisabledItemsService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Injectable });\nNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: DisabledItemsService }, { type: SelectionService }]; } });\n\n/**\n * Renders content when no data is available. To define the no-data template, nest a `` tag\n * with the `kendoNoDataTemplate` directive inside the component tag.\n *\n * - [Using `NoDataTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the ComboBox]({% slug templates_combobox %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the DropDownList]({% slug templates_ddl %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-no-data-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

No data!

\n *
\n *
\n * `\n * })\n * class AppComponent {\n * public listItems: Array = [];\n * }\n * ```\n */\nclass NoDataTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNoDataTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NoDataTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nNoDataTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NoDataTemplateDirective, selector: \"[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NoDataTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Defines the mandatory properties of the `kendoDropDownFilter` directive\n * so that `kendoDropDownFilter` can be used with any of the DropDowns components\n * which implement the `FilterableDropDownComponentBase` class.\n *\n * @hidden\n */\nclass FilterableComponent {\n}\n\n/**\n * @hidden\n */\nconst DEFAULTS = {\n pageSize: 50,\n itemHeight: 28\n};\n/**\n * @hidden\n */\nconst normalizeVirtualizationSettings = (settings, defaultOverrides) => {\n const defaults = Object.assign({}, DEFAULTS, defaultOverrides);\n if (settings === true) {\n return defaults;\n }\n if (!settings) {\n return null;\n }\n return Object.assign({ pageSize: DEFAULTS.pageSize }, settings);\n};\n\n/**\n * @hidden\n */\nconst TOUCH_ENABLED = new InjectionToken('dropdowns-touch-enabled');\n\n/**\n * @hidden\n */\nclass ListItemDirective {\n constructor(element) {\n this.element = element;\n }\n}\nListItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListItemDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nListItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ListItemDirective, selector: \"\\\"li[role=option], li[role=group]\\\"\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '\"li[role=option], li[role=group]\"' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n\n/**\n * @hidden\n */\nclass TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n}\nTemplateContextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplateContextDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nTemplateContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TemplateContextDirective, selector: \"[templateContext]\", inputs: { templateContext: \"templateContext\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TemplateContextDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[templateContext]' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { templateContext: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass SelectableDirective {\n constructor(selectionService) {\n this.checkboxes = { enabled: false };\n // @HostBinding('attr.offset-index')\n // @Input() public offsetIndex: number;\n this.multipleSelection = false;\n this.selectionService = selectionService;\n }\n get focusedClassName() {\n return this.selectionService.isFocused(this.index);\n }\n get selectedClassName() {\n return !this.checkboxes.enabled && this.selectionService.isSelected(this.index);\n }\n onClick(event) {\n event.stopPropagation();\n if (this.checkboxes.enabled && !this.checkboxes.checkOnClick) {\n return;\n }\n if (this.multipleSelection) {\n if (this.selectionService.isSelected(this.index)) {\n this.selectionService.unselect(this.index);\n }\n else {\n this.selectionService.add(this.index);\n }\n }\n else {\n this.selectionService.change(this.index);\n }\n }\n}\nSelectableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectableDirective, deps: [{ token: SelectionService }], target: i0.ɵɵFactoryTarget.Directive });\nSelectableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SelectableDirective, selector: \"[kendoDropDownsSelectable]\", inputs: { index: \"index\", checkboxes: \"checkboxes\", height: \"height\", multipleSelection: \"multipleSelection\" }, host: { listeners: { \"click\": \"onClick($event)\" }, properties: { \"attr.index\": \"this.index\", \"style.height.px\": \"this.height\", \"style.minHeight.px\": \"this.height\", \"class.k-focus\": \"this.focusedClassName\", \"class.k-selected\": \"this.selectedClassName\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectableDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownsSelectable]'\n }]\n }], ctorParameters: function () { return [{ type: SelectionService }]; }, propDecorators: { index: [{\n type: HostBinding,\n args: ['attr.index']\n }, {\n type: Input\n }], checkboxes: [{\n type: Input\n }], height: [{\n type: HostBinding,\n args: ['style.height.px']\n }, {\n type: HostBinding,\n args: ['style.minHeight.px']\n }, {\n type: Input\n }], multipleSelection: [{\n type: Input\n }], focusedClassName: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], selectedClassName: [{\n type: HostBinding,\n args: ['class.k-selected']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass ListComponent {\n /* tslint:disable:member-ordering */\n constructor(dataService, wrapper, selectionService, disabledItemsService, cdr, zone, renderer) {\n this.dataService = dataService;\n this.wrapper = wrapper;\n this.selectionService = selectionService;\n this.disabledItemsService = disabledItemsService;\n this.cdr = cdr;\n this.zone = zone;\n this.renderer = renderer;\n this.selected = [];\n this.focused = -1;\n this.show = true;\n this.multipleSelection = false;\n this.type = 'list';\n this.checkboxes = { enabled: false };\n this.rounded = 'medium';\n this.onClick = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.listResize = new EventEmitter();\n this.startFrom = 0;\n this.lastLoaded = 0;\n this.lastScrollTop = 0;\n this.scrollToFocused = false;\n this._size = 'medium';\n this.selectSubscription = merge(this.selectionService.onSelect.pipe(map((args) => args.indices[0])), this.selectionService.onFocus)\n .pipe(\n // handle only the very last onSelect/onFocus emission\n switchMap(event => this.zone.onStable.pipe(take(1), map(() => event))))\n .subscribe(this.scrollToItem.bind(this));\n this.prepareClasses();\n }\n set data(data) {\n this._data = data[0] && data[0].header ? data.slice(0) : data;\n }\n get data() {\n return this._data;\n }\n set size(size) {\n if (this.type === 'list') {\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('list', this.size));\n if (size) {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('list', size));\n }\n this._size = size;\n }\n }\n get size() {\n return this._size;\n }\n get pageSize() {\n if (this.virtual.pageSize) {\n return this.virtual.pageSize;\n }\n let size = Math.round(this.height / this.virtual.itemHeight);\n return size;\n }\n get scrollHeight() {\n return (this.dataService.grouped ? this.virtual.total - 1 : this.virtual.total) * this.virtual.itemHeight;\n }\n get overflowY() {\n if (isPresent(this.virtual)) {\n const overflow = this.hasVirtualScrollbar() ? 'scroll' : 'hidden';\n return overflow;\n }\n }\n /**\n * @hidden\n */\n get checkboxClasses() {\n return `${this.size ? getSizeClass('checkbox', this.size) : ''} ${this.rounded ? getRoundedClass(this.rounded) : ''}`;\n }\n ngOnChanges(changes) {\n if (isChanged('data', changes, false)) {\n if (this.lastLoaded <= 0) {\n this.lastLoaded = this.data.length - 1;\n this.scrollToFocused = !changes.data.isFirstChange();\n }\n this.setOverflow();\n }\n if (isChanged('virtual', changes, false)) {\n this.setOverflow();\n }\n if (isChanged('type', changes, false)) {\n this.prepareClasses();\n }\n }\n ngAfterViewInit() {\n this.setComponentClasses();\n this.zone.runOutsideAngular(() => {\n this.scrollSubscription = fromEvent(this.content.nativeElement, \"scroll\").pipe(auditTime(100), tap(this.prefetchData.bind(this)), tap(this.findCurrentGroup.bind(this))).subscribe(() => {\n this.lastScrollTop = this.content.nativeElement.scrollTop;\n });\n });\n this.setOverflow();\n }\n ngAfterViewChecked() {\n if (this.virtual) {\n this.positionItems();\n }\n if (this.items && this.scrollToFocused) {\n this.scrollToFocused = false;\n const scrollTarget = this.items.length && this.selectionService.focused === -1 ? 0 : this.selectionService.focused;\n this.scrollToItem(scrollTarget);\n }\n if (this.dataService.grouped) {\n this.findCurrentGroup();\n }\n }\n ngOnDestroy() {\n this.selectSubscription.unsubscribe();\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n }\n onCheckedChange(e, index) {\n const isChecked = e.target['checked'];\n if (isChecked && !this.selectionService.isSelected(index)) {\n this.selectionService.add(index);\n }\n if (!isChecked && this.selectionService.isSelected(index)) {\n this.selectionService.unselect(index);\n }\n }\n prepareClasses() {\n if (this.type === 'list') {\n this.listContentClass = 'k-list-content';\n this.listClass = 'k-list-ul';\n this.listItemClass = 'k-list-item';\n this.listVirtualClass = 'k-virtual-list';\n this.listGroupStickyHeaderClass = 'k-list-group-sticky-header';\n this.listGroupStickyHeaderTextClass = 'k-list-header-text';\n this.listGroupItemClass = 'k-list-group-item';\n this.listGroupItemTextClass = 'k-list-item-text';\n }\n else {\n this.listContentClass = 'k-table-body k-table-scroller';\n this.listClass = 'k-table k-table-list';\n this.listItemClass = 'k-table-row';\n this.listVirtualClass = 'k-virtual-table';\n this.listGroupStickyHeaderClass = 'k-table-group-sticky-header';\n this.listGroupStickyHeaderTextClass = 'k-table-th';\n this.listGroupItemClass = 'k-table-group-row';\n this.listGroupItemTextClass = 'k-table-th';\n }\n }\n isChecked(index) {\n const normalizedIndex = this.virtual ? index + this.virtual.skip : index;\n return this.selectionService.isSelected(normalizedIndex);\n }\n firstVisibleItem() {\n const content = this.content.nativeElement;\n const rect = content.getBoundingClientRect();\n // IE9 hack\n const disabled = Array.prototype.slice.call(content.querySelectorAll(\".k-disabled\"));\n // This is a workaround for finding elements with pointer-events: none;\n disabled.forEach((el) => this.renderer.setStyle(el, \"pointer-events\", \"auto\"));\n const item = document.elementFromPoint(rect.left + 1, rect.top + 1);\n disabled.forEach((el) => this.renderer.setStyle(el, \"pointer-events\", \"none\"));\n // return the closest `li` item to cover the custom template scenario\n return closest(item, 'li');\n }\n findCurrentGroup() {\n if (!this.dataService.grouped) {\n this.currentGroup = undefined;\n return;\n }\n const item = this.firstVisibleItem();\n if (item) {\n let index;\n if (item.getAttribute(\"role\") === \"group\") {\n index = parseInt(item.getAttribute(\"group-index\"), 10);\n this.currentGroup = this.dataService.groupAt(index).value;\n }\n else {\n index = parseInt(item.getAttribute(\"index\"), 10);\n this.currentGroup = this.dataService.itemGroup(this.dataService.itemAt(index));\n }\n }\n else {\n this.currentGroup = undefined;\n }\n this.cdr.detectChanges();\n }\n prefetchData() {\n if (!this.virtual) {\n return;\n }\n const visibleItems = Math.trunc(this.content.nativeElement.clientHeight / this.virtual.itemHeight);\n const offsetY = this.content.nativeElement.scrollTop;\n const start = Math.trunc(offsetY / this.virtual.itemHeight);\n const down = offsetY > this.lastScrollTop;\n const nextPage = (start + visibleItems >= this.lastLoaded) && this.lastLoaded < this.virtual.total - 1;\n const leftOver = this.pageSize - (this.lastLoaded - this.startFrom);\n const prevPage = this.lastLoaded - this.pageSize + visibleItems >= start - leftOver;\n if (down && nextPage) {\n this.changePage(start);\n }\n if (!down && prevPage) {\n this.changePage(start - this.pageSize + visibleItems + 1);\n }\n }\n changePage(start) {\n this.zone.run(() => {\n let end = this.pageSize + start;\n if (end > this.virtual.total) {\n start--;\n end = this.virtual.total;\n }\n if (start < 0) {\n start = 0;\n }\n this.startFrom = start;\n this.lastLoaded = end;\n this.pageChange.emit({ skip: start, take: this.pageSize });\n });\n }\n index(groupIndex, itemIndex) {\n return groupIndex > 0 ? (this.dataService.groupIndices[groupIndex - 1] + itemIndex) : itemIndex;\n }\n getText(dataItem) {\n return getter(dataItem, this.textField);\n }\n getValue(dataItem) {\n return getter(dataItem, this.valueField);\n }\n isDisabled(index) {\n if (isPresent(this.virtual)) {\n index += this.virtual.skip;\n }\n return this.disabledItemsService.isIndexDisabled(index);\n }\n isAltRow(index) {\n return this.type === 'dropdowngrid' && index % 2 !== 0;\n }\n scrollToItem(index) {\n let flatIndex = index;\n if (this.dataService.grouped) {\n // takes into account the group header items\n flatIndex = this.dataService.flatIndex(index);\n /* The first group header item is not rendered in the list (see template), so subtract 1 when calulating the flat index.\n With virtualization enabled, the first group header could be in a previous page, in which case don't subtract anything. */\n const groupHeaderOffset = this.firstGroupHeaderInTargetedPage(flatIndex) ? -1 : 0;\n flatIndex += groupHeaderOffset;\n }\n if (this.virtual && flatIndex > -1) {\n this.scrollToIndex(flatIndex);\n return;\n }\n const items = this.items.toArray();\n if (isPresent(items[flatIndex]) && flatIndex !== -1) {\n this.scroll(items[flatIndex].element);\n }\n }\n scrollToIndex(index) {\n let content = this.content.nativeElement;\n let contentScrollTop = content.scrollTop;\n const itemOffsetTop = index * this.virtual.itemHeight;\n const itemOffsetHeight = this.virtual.itemHeight;\n const contentOffsetHeight = content.clientHeight;\n const bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n }\n else if (bottomDistance > (contentScrollTop + contentOffsetHeight)) {\n contentScrollTop = (bottomDistance - contentOffsetHeight);\n }\n content.scrollTop = contentScrollTop;\n }\n scroll(item) {\n if (!item) {\n return;\n }\n const nativeElement = item.nativeElement;\n let content = this.content.nativeElement, itemOffsetTop = nativeElement.offsetTop, itemOffsetHeight = nativeElement.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n }\n else if (bottomDistance > (contentScrollTop + contentOffsetHeight)) {\n contentScrollTop = (bottomDistance - contentOffsetHeight);\n }\n content.scrollTop = contentScrollTop;\n }\n /**\n * Indicates whether a scrollbar is currently rendered in the list.\n */\n hasScrollbar() {\n if (!(isPresent(this.items) && this.items.length && isPresent(this.list) && isPresent(this.content))) {\n return false;\n }\n const hasVirtualScroll = isPresent(this.virtual) && this.hasVirtualScrollbar();\n return hasVirtualScroll || this.list.nativeElement.scrollHeight > this.content.nativeElement.offsetHeight;\n }\n /**\n * Sets the list's content overflow (hides/shows scrollbar)\n */\n setOverflow() {\n if (this.virtual) {\n const overflow = this.hasVirtualScrollbar() ? 'scroll' : 'hidden';\n this.renderer.setStyle(this.content.nativeElement, 'overflow-y', overflow);\n }\n }\n /**\n * Indicates whether the scrollbar should be visible in virtual mode.\n */\n hasVirtualScrollbar() {\n const contentOffsetHeight = this.content.nativeElement.offsetHeight;\n const virtualOffsetHeight = this.virtualContainer && this.virtualContainer.nativeElement.offsetHeight;\n return this.virtualContainer && virtualOffsetHeight > contentOffsetHeight;\n }\n positionItems() {\n this.items.forEach((item, index) => {\n const offsetY = (index + this.startFrom) * this.virtual.itemHeight;\n this.renderer.setStyle(item.element.nativeElement, \"transform\", `translateY(${offsetY}px`);\n });\n }\n /**\n * Indicates whether the first group header from the data set is in the targeted virtual page.\n */\n firstGroupHeaderInTargetedPage(itemIndex) {\n if (!isPresent(this.virtual)) {\n return true;\n }\n return this.virtual.skip === 0 && (this.virtual.pageSize > itemIndex);\n }\n setComponentClasses() {\n if (this.type === 'list') {\n this.renderer.addClass(this.wrapper.nativeElement, 'k-list');\n if (this.size) {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('list', this.size));\n }\n }\n if (isPresent(this.virtual)) {\n this.renderer.addClass(this.wrapper.nativeElement, this.listVirtualClass);\n }\n }\n}\nListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListComponent, deps: [{ token: DataService }, { token: i0.ElementRef }, { token: SelectionService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ListComponent, selector: \"kendo-list\", inputs: { selected: \"selected\", focused: \"focused\", textField: \"textField\", valueField: \"valueField\", height: \"height\", template: \"template\", groupTemplate: \"groupTemplate\", fixedGroupTemplate: \"fixedGroupTemplate\", show: \"show\", id: \"id\", optionPrefix: \"optionPrefix\", multipleSelection: \"multipleSelection\", virtual: \"virtual\", type: \"type\", checkboxes: \"checkboxes\", data: \"data\", size: \"size\", rounded: \"rounded\" }, outputs: { onClick: \"onClick\", pageChange: \"pageChange\", listResize: \"listResize\" }, viewQueries: [{ propertyName: \"content\", first: true, predicate: [\"content\"], descendants: true, static: true }, { propertyName: \"list\", first: true, predicate: [\"list\"], descendants: true, static: true }, { propertyName: \"virtualContainer\", first: true, predicate: [\"virtualContainer\"], descendants: true }, { propertyName: \"items\", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `\n
\n \n \n {{ currentGroup }}\n
\n
\n
    \n \n \n \n \n \n {{ getText(dataItem) }}\n \n \n \n 0\"\n role=\"group\"\n [class]=\"listGroupItemClass\"\n [class.k-table-alt-row]=\"isAltRow(itemIndex - 1)\"\n [ngStyle]=\"{\n 'height.px': virtual?.itemHeight,\n 'minHeight.px' : virtual?.itemHeight,\n 'boxSizing' : virtual ? 'border-box' : 'inherit'}\"\n [attr.group-index]=\"dataItem.index\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem.value)\"\n [attr.tabIndex]=\"-1\">\n \n \n \n {{ dataItem.value }}\n \n \n \n \n \n {{ getText(dataItem.value) }}\n \n \n \n \n
\n
\n
\n \n
\n
\n
\n `, isInline: true, components: [{ type: i9.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i11.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }, { type: i11.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: ListItemDirective, selector: \"\\\"li[role=option], li[role=group]\\\"\" }, { type: SelectableDirective, selector: \"[kendoDropDownsSelectable]\", inputs: [\"index\", \"checkboxes\", \"height\", \"multipleSelection\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ListComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-list',\n template: `\n
\n \n \n {{ currentGroup }}\n
\n
\n
    \n \n \n \n \n \n {{ getText(dataItem) }}\n \n \n \n 0\"\n role=\"group\"\n [class]=\"listGroupItemClass\"\n [class.k-table-alt-row]=\"isAltRow(itemIndex - 1)\"\n [ngStyle]=\"{\n 'height.px': virtual?.itemHeight,\n 'minHeight.px' : virtual?.itemHeight,\n 'boxSizing' : virtual ? 'border-box' : 'inherit'}\"\n [attr.group-index]=\"dataItem.index\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem.value)\"\n [attr.tabIndex]=\"-1\">\n \n \n \n {{ dataItem.value }}\n \n \n \n \n \n {{ getText(dataItem.value) }}\n \n \n \n \n
\n
\n
\n \n
\n
\n
\n `\n }]\n }], ctorParameters: function () { return [{ type: DataService }, { type: i0.ElementRef }, { type: SelectionService }, { type: DisabledItemsService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { selected: [{\n type: Input\n }], focused: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], height: [{\n type: Input\n }], template: [{\n type: Input\n }], groupTemplate: [{\n type: Input\n }], fixedGroupTemplate: [{\n type: Input\n }], show: [{\n type: Input\n }], id: [{\n type: Input\n }], optionPrefix: [{\n type: Input\n }], multipleSelection: [{\n type: Input\n }], virtual: [{\n type: Input\n }], type: [{\n type: Input\n }], checkboxes: [{\n type: Input\n }], data: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], onClick: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], listResize: [{\n type: Output\n }], items: [{\n type: ViewChildren,\n args: [ListItemDirective]\n }], content: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }], virtualContainer: [{\n type: ViewChild,\n args: ['virtualContainer', { static: false }]\n }] } });\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: Messages, inputs: { noDataText: \"noDataText\", clearTitle: \"clearTitle\", checkAllText: \"checkAllText\", selectButtonText: \"selectButtonText\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, decorators: [{\n type: Directive\n }], propDecorators: { noDataText: [{\n type: Input\n }], clearTitle: [{\n type: Input\n }], checkAllText: [{\n type: Input\n }], selectButtonText: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst NO_VALUE = \"\";\nconst DEFAULT_SIZE$5 = 'medium';\nconst DEFAULT_ROUNDED$5 = 'medium';\nconst DEFAULT_FILL_MODE$5 = 'solid';\n/**\n * @hidden\n */\nconst AUTOCOMPLETE_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteComponent)\n};\n/**\n * Represents the [Kendo UI AutoComplete component for Angular]({% slug overview_autocomplete %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public placeholder: string = 'Type \"it\" for suggestions';\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass AutoCompleteComponent {\n constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled) {\n this.localization = localization;\n this.dataService = dataService;\n this.popupService = popupService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this._zone = _zone;\n this.cdr = cdr;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.touchEnabled = touchEnabled;\n /**\n * Defines whether the first match from the suggestions list will be automatically focused.\n * By default, `highlightFirst` is set to `true`.\n */\n this.highlightFirst = true;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * The hint which is displayed when the component is empty.\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the suggestions list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of suggestions and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * @hidden\n *\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Enables the [filtering]({% slug filtering_autocomplete %}) functionality.\n * If set to `true`, the component emits the `filterChange` event.\n */\n this.filterable = false;\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_autocomplete %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user types in the input field.\n * You can filter the source based on the passed filtration value\n * ([see example]({% slug overview_autocomplete %}#toc-events)).\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the AutoComplete.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the AutoComplete gets blurred.\n */\n this.onBlur = new EventEmitter();\n this.widgetClasses = true;\n this.listBoxId = guid();\n this.optionPrefix = guid();\n this.onChangeCallback = noop;\n this.onTouchedCallback = noop;\n this.popupMouseDownHandler = (event) => event.preventDefault();\n this._popupSettings = { animate: true };\n this._open = false;\n this._value = \"\";\n this.valueChangeSubject = new Subject();\n this._isFocused = false;\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.wrapper = this.hostElement.nativeElement;\n this.data = [];\n this.subscribeEvents();\n this.subscribeTouchEvents();\n this.selectionService.resetSelection([-1]);\n }\n get width() {\n let wrapperOffsetWidth = 0;\n if (isDocumentAvailable()) {\n wrapperOffsetWidth = this.wrapper.offsetWidth;\n }\n const width = this.popupSettings.width || wrapperOffsetWidth;\n const minWidth = isNaN(wrapperOffsetWidth) ? wrapperOffsetWidth : `${wrapperOffsetWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get listContainerClasses() {\n const containerClasses = ['k-list-container', 'k-reset'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n get suggestion() {\n if (!this.text || !this.suggestedText) {\n this.suggestedText = undefined;\n return;\n }\n const hasMatch = this.suggestedText.toLowerCase().startsWith(this.text.toLowerCase());\n const shouldSuggest = this.suggest && !this.backspacePressed;\n if (shouldSuggest && hasMatch) {\n return this.suggestedText;\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n /**\n * Toggles the visibility of the popup.\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n this._toggle(open);\n }\n }\n get activeDescendant() {\n if (!this.isOpen || !isPresent(this.selectionService.focused) || this.selectionService.focused === -1) {\n return null;\n }\n const dataItem = this.dataService.itemAt(this.selectionService.focused);\n return this.optionPrefix + \"-\" + getter(dataItem, this.valueField);\n }\n get noDataLabel() {\n if (this.data.length === 0) {\n return this.messageFor('noDataText');\n }\n }\n /**\n * Sets the data of the AutoComplete.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n if (this.filterable) {\n this.selectionService.focused = this.isOpen && this.data.length && this.highlightFirst ? this.firstFocusableIndex(0) : -1;\n }\n if (this.suggest && this.dataService.itemsCount > 0) {\n this.suggestedText = getter(this.dataService.itemAt(0), this.valueField);\n }\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n // Use length instead of itemsCount because of the grouping.\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the AutoComplete.\n */\n set value(newValue) {\n this.verifySettings(newValue);\n this._value = newValue || NO_VALUE;\n this.text = this.value;\n this.cdr.markForCheck();\n }\n get value() {\n return this._value || NO_VALUE;\n }\n /**\n * Configures the popup of the AutoComplete.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_autocomplete %})).\n * Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_autocomplete %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings);\n }\n get virtual() {\n return this._virtualSettings;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$5;\n this.renderer.removeClass(this.wrapper, getSizeClass('input', this.size));\n if (size !== 'none') {\n this.renderer.addClass(this.wrapper, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$5;\n this.renderer.removeClass(this.wrapper, getRoundedClass(this.rounded));\n if (rounded !== 'none') {\n this.renderer.addClass(this.wrapper, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$5;\n this.renderer.removeClass(this.wrapper, getFillModeClass('input', this.fillMode));\n if (fillMode !== 'none') {\n this.renderer.addClass(this.wrapper, getFillModeClass('input', newFillMode));\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper, \"k-focus\");\n this._isFocused = isFocused;\n }\n get isDisabled() {\n return this.disabled;\n }\n get isLoading() {\n return this.loading;\n }\n get dir() {\n return this.direction;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper, \"tabindex\");\n this.localizationChangeSubscription = this.localization\n .changes\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.detectChanges();\n });\n this.setComponentClasses();\n }\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n }\n /**\n * Resets the value of the AutoComplete.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.value = NO_VALUE;\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n clearValue(event) {\n event.stopImmediatePropagation();\n this.focus();\n this.change(NO_VALUE);\n if (this.filterable) {\n this.filterChange.emit('');\n }\n this.selectionService.resetSelection([]);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * Focuses a specific item of the AutoComplete based on a provided index.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const isInRange = index >= 0 && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n /**\n * Focuses the AutoComplete.\n */\n focus() {\n if (!this.disabled) {\n this.searchbar.focus();\n }\n }\n /**\n * Blurs the AutoComplete.\n */\n blur() {\n if (!this.disabled) {\n this.searchbar.blur();\n }\n }\n /**\n * @hidden\n */\n onResize() {\n if (this._open) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n emitChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n verifySettings(newValue) {\n if (!isDevMode()) {\n return;\n }\n if (isPresent(newValue) && typeof newValue !== \"string\") {\n throw new Error(\"Expected value of type string. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/autocomplete/value-binding/\");\n }\n }\n search(text, startFrom = 0) {\n let index;\n if (text.length && this.dataService.itemsCount) {\n index = this.dataService.findIndex(this.findIndexPredicate(text), startFrom);\n }\n else {\n index = -1;\n }\n if (this.disabledItemsService.isIndexDisabled(index)) {\n if (index + 1 < this.dataService.itemsCount) {\n this.search(text, index + 1);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n else {\n this.selectionService.focus(index);\n if (this.suggest) {\n this.suggestedText = getter(this.dataService.itemAt(index), this.valueField);\n }\n }\n }\n navigate(index) {\n if (!this.isOpen) {\n return;\n }\n this.selectionService.focus(index);\n }\n /**\n * @hidden\n */\n handleNavigate(event) {\n const focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(0) : this.selectionService.focused;\n if (this.disabled || this.readonly || isNaN(focused)) {\n return;\n }\n const action = this.navigationService.process({\n current: focused,\n max: this.dataService.itemsCount - 1,\n min: 0,\n originalEvent: event\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Backspace &&\n action !== NavigationAction.Delete &&\n action !== NavigationAction.Home &&\n action !== NavigationAction.End &&\n action !== NavigationAction.Left &&\n action !== NavigationAction.Right &&\n ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {\n event.preventDefault();\n }\n }\n handleEnter(event) {\n const focused = this.selectionService.focused;\n let value;\n if (this.isOpen) {\n event.originalEvent.preventDefault();\n }\n if (focused >= 0) {\n value = getter(this.dataService.itemAt(focused), this.valueField);\n }\n else {\n const match = this.suggest && this.suggestedText && this.data.length &&\n getter(this.dataService.itemAt(0), this.valueField).toLowerCase() === this.searchbar.value.toLowerCase();\n if (this.isOpen && match) {\n value = this.suggestedText;\n }\n else {\n value = this.searchbar.value;\n }\n }\n this.change(value);\n }\n handleEscape() {\n this.togglePopup(false);\n this.selectionService.focused = -1;\n this.suggestedText = null;\n }\n /**\n * @hidden\n */\n searchBarChange(text) {\n const currentTextLength = isPresent(this.text) ? this.text.length : 0;\n this.backspacePressed = (text.length < currentTextLength) ? true : false;\n this.text = text;\n this.togglePopup(text.length > 0);\n if (!this.highlightFirst) {\n this.selectionService.focused = -1;\n }\n if (this.filterable) {\n this.filterChange.emit(text);\n }\n else if (this.highlightFirst) {\n this.search(text);\n }\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n /**\n * @hidden\n */\n handleBlur() {\n const focused = this.filterable ? this.selectionService.focused : -1;\n this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers\n let dataItem;\n let text;\n if (focused !== -1) {\n dataItem = this.dataService.itemAt(focused);\n text = getter(dataItem, this.valueField) || \"\";\n }\n else {\n text = this.searchbar.value;\n }\n const exactMatch = text === this.searchbar.value;\n const insensitiveMatch = text.toLowerCase() === this.searchbar.value.toLowerCase();\n if (!exactMatch && insensitiveMatch) {\n this.selectionService.resetSelection([]);\n }\n this.isFocused = false;\n const valueHasChanged = this.value !== this.text;\n const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;\n if (runInZone) {\n this._zone.run(() => {\n if (valueHasChanged) {\n this.change(this.searchbar.value);\n }\n this.onBlur.emit();\n this.onTouchedCallback();\n this.togglePopup(false);\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n change(value) {\n this.togglePopup(false);\n this.valueChangeSubject.next(value);\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.valueChangeSubscription = this.valueChangeSubject\n .subscribe(value => {\n const hasChange = this.value !== value;\n this.value = value;\n this.text = value;\n // emit change after assigning `this.value` => allows the user to modify the component value on `valueChange`\n if (hasChange) {\n this.emitChange(value);\n }\n });\n this.changeSubscription = this.selectionService.onChange.subscribe(this.handleItemChange.bind(this));\n this.focusSubscription = this.selectionService.onFocus.subscribe(this.handleItemFocus.bind(this));\n this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down).subscribe((event) => this.navigate(event.index));\n this.closeSubscription = this.navigationService.close.subscribe(() => this.togglePopup(false));\n this.enterSubscription = this.navigationService.enter.subscribe(this.handleEnter.bind(this));\n this.escSubscription = this.navigationService.esc.subscribe(this.handleEscape.bind(this));\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up AutoComplete on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if (this.isFocused && !inDropDown(this.hostElement, target, this.popupRef)) {\n this._zone.run(() => this.blur());\n }\n }));\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.changeSubscription.unsubscribe();\n this.navigationSubscription.unsubscribe();\n this.closeSubscription.unsubscribe();\n this.enterSubscription.unsubscribe();\n this.escSubscription.unsubscribe();\n this.valueChangeSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n }\n handleItemChange(event) {\n const index = event.indices.length ? event.indices[0] : undefined;\n this.selectionService.resetSelection([-1]);\n if (!isPresent(index)) {\n return;\n }\n let text = getter(this.dataService.itemAt(index), this.valueField);\n this.change(text);\n }\n handleItemFocus(_event) {\n const focused = this.selectionService.focused;\n const shouldSuggest = Boolean(this.suggest && this.data && this.data.length && focused >= 0);\n if (shouldSuggest) {\n this.suggestedText = getter(this.dataService.itemAt(focused), this.valueField);\n }\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute',\n popupAlign: popupPosition,\n anchorAlign: anchorPosition\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n firstFocusableIndex(index) {\n const maxIndex = this.data.length - 1;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index < maxIndex) ? this.firstFocusableIndex(index + 1) : undefined;\n }\n else {\n return index;\n }\n }\n findIndexPredicate(text) {\n if (this.dataService.grouped) {\n return (item) => {\n let itemText = getter(item.value, this.valueField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n else {\n return (item) => {\n let itemText = getter(item, this.valueField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n }\n setComponentClasses() {\n if (this.size !== 'none') {\n this.renderer.addClass(this.wrapper, getSizeClass('input', this.size));\n }\n if (this.rounded !== 'none') {\n this.renderer.addClass(this.wrapper, getRoundedClass(this.rounded));\n }\n if (this.fillMode !== 'none') {\n this.renderer.addClass(this.wrapper, getFillModeClass('input', this.fillMode));\n }\n }\n}\nAutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: DataService }, { token: i2.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nAutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: AutoCompleteComponent, selector: \"kendo-autocomplete\", inputs: { highlightFirst: \"highlightFirst\", focusableId: \"focusableId\", data: \"data\", value: \"value\", valueField: \"valueField\", placeholder: \"placeholder\", popupSettings: \"popupSettings\", listHeight: \"listHeight\", loading: \"loading\", clearButton: \"clearButton\", suggest: \"suggest\", disabled: \"disabled\", itemDisabled: \"itemDisabled\", readonly: \"readonly\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", filterable: \"filterable\", virtual: \"virtual\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", filterChange: \"filterChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\" }, host: { properties: { \"class.k-autocomplete\": \"this.widgetClasses\", \"class.k-input\": \"this.widgetClasses\", \"class.k-disabled\": \"this.isDisabled\", \"class.k-loading\": \"this.isLoading\", \"attr.dir\": \"this.dir\" } }, providers: [\n AUTOCOMPLETE_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.autocomplete'\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => AutoCompleteComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => AutoCompleteComponent)\n }\n ], queries: [{ propertyName: \"template\", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: \"footerTemplate\", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: \"noDataTemplate\", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: \"groupTemplate\", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: \"fixedGroupTemplate\", first: true, predicate: FixedGroupTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"searchbar\", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: \"optionsList\", first: true, predicate: [\"optionsList\"], descendants: true }], exportAs: [\"kendoAutoComplete\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `, isInline: true, components: [{ type: SearchBarComponent, selector: \"kendo-searchbar\", inputs: [\"id\", \"listId\", \"tagListId\", \"activeDescendant\", \"noDataLabel\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"role\", \"userInput\", \"suggestedText\", \"placeholder\"], outputs: [\"valueChange\", \"onBlur\", \"onFocus\", \"onClick\", \"onNavigate\"] }, { type: ListComponent, selector: \"kendo-list\", inputs: [\"selected\", \"focused\", \"textField\", \"valueField\", \"height\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"show\", \"id\", \"optionPrefix\", \"multipleSelection\", \"virtual\", \"type\", \"checkboxes\", \"data\", \"size\", \"rounded\"], outputs: [\"onClick\", \"pageChange\", \"listResize\"] }, { type: i9.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \" }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AutoCompleteComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoAutoComplete',\n providers: [\n AUTOCOMPLETE_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.autocomplete'\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => AutoCompleteComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => AutoCompleteComponent)\n }\n ],\n selector: 'kendo-autocomplete',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: DataService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { highlightFirst: [{\n type: Input\n }], focusableId: [{\n type: Input\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], valueField: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], loading: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], suggest: [{\n type: Input\n }], disabled: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], filterable: [{\n type: Input\n }], virtual: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], template: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], searchbar: [{\n type: ViewChild,\n args: [SearchBarComponent, { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-autocomplete']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], isLoading: [{\n type: HostBinding,\n args: ['class.k-loading']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }] } });\n\n/**\n * @hidden\n */\nconst MultiselectMessages = {\n 'array': 'Expected values of array type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#value-selection',\n 'object': 'Expected values of Object type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#value-selection',\n 'primitive': 'Expected values of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#value-selection',\n 'textAndValue': 'Expected textField and valueField options to be set. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#toc-bind-to-arrays-of-complex-data'\n};\n/**\n * @hidden\n */\nconst MultiSelectTreeMessages = {\n 'array': 'Expected values of array type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/#value-selection',\n 'primitive': 'Expected values of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/value-binding/#toc-primitive-values',\n 'object': 'Expected values of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/value-binding/#toc-object-values',\n 'dataItems': 'Expected dataItems of type Object[] to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/api/MultiSelectTreeComponent/#toc-dataitems',\n 'dataItemsLength': 'Expected dataItems length to match the number of provided values. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/api/MultiSelectTreeComponent/#toc-dataitems',\n 'textAndValue': 'Expected textField and valueField options to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/value-binding',\n 'valueDepth': 'Expected valueDepth of type number[] to be set. See https://www.telerik.com/kendo-angular-ui-develop/components/dropdowns/api/MultiSelectTreeComponent/#toc-valuedepth',\n 'valueDepthLength': 'Expected valueDepth length to match the number of provided values. See https://www.telerik.com/kendo-angular-ui-develop/components/dropdowns/api/MultiSelectTreeComponent/#toc-valuedepth'\n};\n/**\n * @hidden\n */\nconst ComboBoxMessages = {\n 'object': 'Expected value of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/combobox/#toc-value-selection',\n 'primitive': 'Expected value of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/combobox/#toc-value-selection',\n 'textAndValue': 'Expected textField and valueField options to be set. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/combobox/#toc-bind-to-arrays-of-complex-data',\n 'noItemHeight': 'Expected virtual.itemHeight of type number.'\n};\n/**\n * @hidden\n */\nconst MultiColumnComboBoxMessages = {\n 'data': 'Provided data must consist only of objects. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/multicolumncombobox/data-binding/',\n 'textAndValue': 'Expected textField and valueField options to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/multicolumncombobox/data-binding/#toc-fields-configuration'\n};\n/**\n * @hidden\n */\nconst DropDownListMessages = {\n 'defaultItem': 'defaultItem and data items must be of same type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/api/DropDownListComponent/#toc-defaultitem',\n 'object': 'Expected value of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-value-selection',\n 'primitive': 'Expected value of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-value-selection',\n 'textAndValue': 'Expected textField and valueField options to be set. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-bind-to-arrays-of-complex-data'\n};\n/**\n * @hidden\n */\nconst DropDownTreeMessages = {\n 'primitive': 'Expected value of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdowntree/value-binding/#toc-primitive-values',\n 'object': 'Expected value of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdowntree/value-binding/#toc-object-values',\n 'dataItem': 'Expected dataItem of type Object to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/api/DropDownTreeComponent/#toc-dataitem',\n 'textAndValue': 'Expected textField and valueField options to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdowntree/value-binding',\n 'valueDepth': 'Expected valueDepth to be set. See https://www.telerik.com/kendo-angular-ui-develop/components/dropdowns/api/DropDownTreeComponent/#toc-valuedepth'\n};\n\n/**\n * @hidden\n */\nconst COMBOBOX_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboBoxComponent)\n};\nconst DEFAULT_SIZE$4 = 'medium';\nconst DEFAULT_ROUNDED$4 = 'medium';\nconst DEFAULT_FILL_MODE$4 = 'solid';\n/**\n * Represents the [Kendo UI ComboBox component for Angular]({% slug overview_combobox %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass ComboBoxComponent {\n constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, touchEnabled) {\n this.wrapper = wrapper;\n this.localization = localization;\n this.popupService = popupService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this.dataService = dataService;\n this.zone = zone;\n this.cdr = cdr;\n this.renderer = renderer;\n this.touchEnabled = touchEnabled;\n this.selected = [];\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Specifies whether the ComboBox allows user-defined values that are not present in the dataset\n * ([more information and examples]({% slug custom_values_combobox %})).\n * Defaults to `false`.\n */\n this.allowCustom = false;\n /**\n * A user-defined callback which returns normalized custom values.\n * Typically used when the data items are different from type `string`.\n * @param { Any } value - The custom value defined by the user.\n * @returns { Any }\n *\n * @example\n * ```ts\n * import { map } from 'rxjs/operators';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public listItems: Array<{ text: string, value: number }> = [\n * { text: \"Small\", value: 1 },\n * { text: \"Medium\", value: 2 },\n * { text: \"Large\", value: 3 }\n * ];\n *\n * public onValueChange(value) {\n * console.log(\"valueChange : \", value);\n * }\n *\n * public valueNormalizer = (text$: Observable) => text$.pipe(map((text: string) => {\n * return { ProductID: null, ProductName: text };\n * }));\n *\n * }\n * ```\n */\n this.valueNormalizer = (text) => text.pipe(map((userInput) => userInput));\n /**\n * The hint that is displayed when the component is empty.\n *\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the suggestions list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of suggestions and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Enables the auto-completion of the text based on the first data item.\n */\n this.suggest = false;\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Enables the [filtering]({% slug filtering_combobox %}) functionality.\n * If set to `true`, the component emits the `filterChange` event.\n */\n this.filterable = false;\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_combobox %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time an item selection is changed\n * ([see example]({% slug overview_combobox %}#toc-events)).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires each time the user types in the input field.\n * You can filter the source based on the passed filtration value\n * ([see example]({% slug overview_combobox %}#toc-events)).\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the ComboBox.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the ComboBox gets blurred.\n */\n this.onBlur = new EventEmitter();\n this.widgetClasses = true;\n this._isFocused = false;\n this.listBoxId = guid();\n this.optionPrefix = guid();\n this.onChangeCallback = (_) => { };\n this.onTouchedCallback = (_) => { };\n /**\n * Used for the default virtualization settings config.\n */\n this.defaultVirtualItemHeight = 28;\n /**\n * Used for the default virtualization settings config.\n */\n this.defaultVirtualPageSize = 50;\n this._filtering = false;\n this._text = '';\n this.filterText = '';\n this._open = false;\n this._popupSettings = { animate: true };\n this.popupMouseDownHandler = (event) => event.preventDefault();\n this.customValueSubject = new Subject();\n this.valueSubject = new Subject();\n this.clearValueSubject = new Subject();\n this.subs = new Subscription();\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.data = [];\n }\n set text(text) {\n this._text = isPresent(text) ? text.toString() : \"\";\n }\n get text() {\n return this._text;\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n this._toggle(open);\n }\n }\n get activeDescendant() {\n if (!this.isOpen || !isPresent(this.selectionService.focused) || this.selectionService.focused === -1) {\n return null;\n }\n const dataItem = this.dataService.itemAt(this.selectionService.focused);\n return this.optionPrefix + \"-\" + (dataItem ? getter(dataItem, this.valueField) : \"\");\n }\n get noDataLabel() {\n if (this.data.length === 0) {\n return this.messageFor('noDataText');\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * Sets the data of the ComboBox.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n this.setState();\n if (this._filtering) {\n const queryAndDataPresent = this.text.length > 0 && this.dataService.itemsCount > 0;\n const index = queryAndDataPresent ? this.firstFocusableIndex(0) : -1;\n this.selectionService.focused = index;\n }\n if (this.suggest && this.dataService.itemsCount && this.text) {\n this.suggestedText = getter(this.dataService.itemAt(0), this.textField);\n }\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n // Use length instead of itemsCount because of the grouping.\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the ComboBox.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n * > All selected values which are not present in the dataset are considered custom values.\n * > When the `Enter` key is pressed or the component loses focus, custom values get dismissed unless `allowCustom` is set to `true`.\n */\n set value(newValue) {\n this._value = newValue;\n this.setState();\n this.cdr.markForCheck();\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the type of the selected value.\n * If set to `true`, the selected value has to be of the primitive type\n * ([more information and example]({% slug valuebinding_combobox %}#toc-primitive-values-from-object-fields)).\n */\n set valuePrimitive(isPrimitive) {\n this._valuePrimitive = isPrimitive;\n }\n get valuePrimitive() {\n if (!isPresent(this._valuePrimitive)) {\n return !isPresent(this.valueField);\n }\n return this._valuePrimitive;\n }\n /**\n * Configures the popup of the ComboBox.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_combobox %})). Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_combobox %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings, {\n itemHeight: this.defaultVirtualItemHeight,\n pageSize: this.defaultVirtualPageSize\n });\n }\n get virtual() {\n return this._virtualSettings;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$4;\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n if (size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$4;\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n if (rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$4;\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n if (fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', newFillMode));\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n get isDisabled() {\n return this.disabled;\n }\n get isLoading() {\n return this.loading;\n }\n get dir() {\n return this.direction;\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(value) {\n this.renderer[value ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, \"k-focus\");\n this._isFocused = value;\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n get popupWidth() {\n let wrapperOffsetWidth = 0;\n if (isDocumentAvailable()) {\n wrapperOffsetWidth = this.wrapper.nativeElement.offsetWidth;\n }\n const width = this.popupSettings.width || wrapperOffsetWidth;\n const minWidth = isNaN(wrapperOffsetWidth) ? wrapperOffsetWidth : `${wrapperOffsetWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get popupHeight() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'tabindex');\n this.attachStreams();\n this.createValueStream();\n this.subscribeTouchEvents();\n this.attachSelectClickHandler();\n this.setComponentClasses();\n }\n createValueStream() {\n const valueStream = this.valueSubject.pipe(filter((candidate) => {\n const current = getter(this.value, this.valueField);\n const newValue = getter(candidate, this.valueField);\n let newText = getter(candidate, this.textField);\n if (!isPresent(this.value) && !isPresent(newValue)) {\n return false;\n }\n if (isPresent(newText)) {\n newText = newText.toString();\n }\n if (current === newValue && this.text === newText) {\n this.clearFilter();\n return false;\n }\n else {\n return true;\n }\n }), map((candidate) => {\n const newValue = getter(candidate, this.valueField);\n const newText = getter(candidate, this.textField);\n return {\n dataItem: candidate,\n text: newText,\n value: this.valuePrimitive ? newValue : candidate\n };\n }));\n const customValueStreams = partition(() => this.allowCustom)(this.customValueSubject.pipe(throttleTime(300)));\n const allowCustomValueStream = customValueStreams[0].pipe(tap(() => {\n this.loading = true;\n this.disabled = true;\n this.cdr.detectChanges();\n }), filter(() => {\n const hasChange = this.text !== getter(this.value, this.valueField);\n this.loading = hasChange;\n this.disabled = hasChange;\n if (!hasChange) {\n this.clearFilter();\n }\n return hasChange;\n }), this.valueNormalizer, map((normalizedValue) => {\n return {\n custom: true,\n dataItem: normalizedValue,\n text: this.text,\n value: normalizedValue\n };\n }));\n const disableCustomValueStream = customValueStreams[1].pipe(map(() => {\n return {\n custom: true,\n dataItem: undefined,\n text: undefined,\n value: undefined\n };\n }));\n const clearValueStream = this.clearValueSubject.pipe(map(() => ({\n dataItem: undefined,\n text: undefined,\n value: undefined\n })));\n if (this.valueSubscription) {\n this.valueSubscription.unsubscribe();\n }\n const merged = merge(valueStream, allowCustomValueStream, disableCustomValueStream, clearValueStream);\n this.valueSubscription = merged.pipe(catchError(() => {\n const selectionChanged = getter(this.dataItem, this.valueField) !== undefined;\n this.dataItem = undefined;\n this.value = undefined;\n this.text = undefined;\n this.loading = false;\n this.disabled = false;\n if (selectionChanged) {\n this.selectionChange.emit(undefined);\n }\n this.emitValueChange();\n this.createValueStream();\n return of(null);\n }))\n .subscribe((state) => {\n const selectionChanged = getter(this.dataItem, this.valueField) !== getter(state.dataItem, this.valueField);\n this.dataItem = state.dataItem;\n this.value = state.value;\n this.text = state.text;\n this.loading = false;\n this.disabled = false;\n this.clearFilter();\n if (state.custom) {\n this.selectionService.focused = -1;\n }\n if (selectionChanged) {\n const selectionArgs = state.custom ? undefined : this.dataItem;\n this.selectionChange.emit(selectionArgs);\n }\n this.emitValueChange();\n });\n }\n attachStreams() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.subs.add(this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.detectChanges();\n }));\n this.subs.add(merge(this.navigationService.up, this.navigationService.down, this.navigationService.home, this.navigationService.end)\n .pipe(filter((event) => isPresent(event.index)))\n .subscribe((event) => this.navigate(event.index)));\n this.subs.add(this.navigationService.open.subscribe(this.handleNavigationOpen.bind(this)));\n this.subs.add(this.navigationService.close.subscribe(() => this.togglePopup(false)));\n this.subs.add(this.navigationService.esc.subscribe(this.handleEscape.bind(this)));\n this.subs.add(this.navigationService.enter.pipe(tap((event) => {\n if (this.isOpen) {\n event.originalEvent.preventDefault();\n }\n }))\n .subscribe(this.handleEnter.bind(this)));\n this.subs.add(merge(this.selectionService.onChange, this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)))\n .pipe(tap(_ => {\n this._filtering = false;\n this.togglePopup(false);\n }), map((event) => this.dataService.itemAt(event.indices[0])))\n .subscribe(dataItem => {\n this.change(dataItem);\n }));\n this.subs.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), tap(_ => this._filtering = false), map((event) => this.dataService.itemAt(event.indices[0])))\n .subscribe(dataItem => {\n const selectionChanged = getter(dataItem, this.valueField) !== getter(this.dataItem, this.valueField);\n this.updateState({ dataItem });\n if (selectionChanged) {\n this.selectionChange.emit(dataItem);\n }\n }));\n }\n ngOnDestroy() {\n this.destroyPopup();\n this.subs.unsubscribe();\n if (isPresent(this.valueSubscription)) {\n this.valueSubscription.unsubscribe();\n }\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n if (this.selectClickDisposeHandler) {\n this.selectClickDisposeHandler();\n }\n }\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n if (isChanged('valueNormalizer', changes)) {\n this.createValueStream();\n }\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes, false)) {\n this.setState();\n }\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n /**\n * Focuses a specific item of the ComboBox based on a provided index.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const isInRange = index >= 0 && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n /**\n * Focuses the ComboBox.\n */\n focus() {\n if (!this.disabled) {\n this.searchbar.focus();\n }\n }\n /**\n * Blurs the ComboBox.\n */\n blur() {\n if (!this.disabled) {\n this.searchbar.blur();\n }\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to open or close the popup,\n * the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n this.cdr.markForCheck();\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * Resets the value of the ComboBox.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.value = undefined;\n this.clearState();\n this.resetSelection();\n }\n /**\n * @hidden\n *\n * Used by the TextBoxContainer to determine if the floating label\n * should be rendered in the input when the component is not focused.\n */\n isEmpty() {\n const textEmpty = !isPresent(this.text) || isEmptyString(this.text);\n const valueEmpty = !isPresent(this.value) || isEmptyString(this.value);\n return textEmpty && valueEmpty;\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n clearValue(event) {\n event.stopImmediatePropagation();\n this.focus();\n this._filtering = true;\n this._previousDataItem = undefined;\n this.selectionService.resetSelection([]);\n this.clearValueSubject.next();\n this._filtering = false;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value === null ? undefined : value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n get buttonClasses() {\n return this.loading ? 'k-i-loading k-input-loading-icon' : this.iconClass || 'k-i-arrow-s';\n }\n /**\n * @hidden\n */\n get selectButtonClasses() {\n return `${this.size ? getSizeClass('button', this.size) : ''} ${this.fillMode ? 'k-button-' + this.fillMode : ''} ${this.fillMode ? 'k-button-' + this.fillMode + '-base' : ''}\n `;\n }\n /**\n * @hidden\n */\n onResize() {\n if (this.isOpen) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.popupWidth;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.value === \"object\") {\n throw new Error(ComboBoxMessages.primitive);\n }\n if (this.valuePrimitive === false && isPresent(this.value) && typeof this.value !== \"object\") {\n throw new Error(ComboBoxMessages.object);\n }\n const valueOrText = !isPresent(this.valueField) !== !isPresent(this.textField);\n if (valueOrText) {\n throw new Error(ComboBoxMessages.textAndValue);\n }\n if (this.virtual && isNaN(this.virtual.itemHeight)) {\n throw new Error(ComboBoxMessages.noItemHeight);\n }\n }\n setState() {\n // Filtering in process, do nothing.\n if (this._filtering) {\n return;\n }\n const value = this.value;\n const valueField = this.valueField;\n const resolved = this.findDataItem({ valueField, value });\n if (isPresent(resolved.index) && resolved.index !== -1) {\n this.updateState({ dataItem: resolved.dataItem, confirm: true });\n this.resetSelection(resolved.index);\n }\n else if (isPresent(value) && this.allowCustom) {\n this.updateState({ dataItem: value });\n this.resetSelection(-1);\n }\n else if (this._previousDataItem && this.value) {\n this.updateState({ dataItem: this._previousDataItem });\n this.resetSelection();\n }\n else {\n this.clearState();\n this.resetSelection(-1);\n }\n }\n updateState({ dataItem, confirm = false }) {\n this.dataItem = dataItem;\n this.text = getter(dataItem, this.textField);\n if (confirm) {\n this._previousDataItem = dataItem;\n }\n }\n clearState() {\n this.text = undefined;\n this.dataItem = undefined;\n }\n resetSelection(index) {\n const clear = !isPresent(index) || index < 0;\n this.selectionService.resetSelection(clear ? [] : [index]);\n this.selectionService.focused = index;\n }\n firstFocusableIndex(index) {\n const maxIndex = this.data.length - 1;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index < maxIndex) ? this.firstFocusableIndex(index + 1) : undefined;\n }\n else {\n return index;\n }\n }\n findIndexPredicate(text) {\n if (this.dataService.grouped) {\n return (item) => {\n let itemText = getter(item.value, this.textField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n else {\n return (item) => {\n let itemText = getter(item, this.textField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n }\n findDataItem({ valueField, value }) {\n const result = {\n dataItem: null,\n index: -1\n };\n const comparer = (element) => {\n const dataItem = this.dataService.grouped ? element.value : element;\n return getter(dataItem, valueField) === getter(value, valueField);\n };\n const index = this.dataService.findIndex(comparer);\n result.dataItem = this.dataService.itemAt(index);\n result.index = index;\n return result;\n }\n search(text, startFrom = 0) {\n let index;\n if (text.length && this.dataService.itemsCount) {\n index = this.dataService.findIndex(this.findIndexPredicate(text), startFrom);\n }\n else {\n index = -1;\n }\n if (this.disabledItemsService.isIndexDisabled(index)) {\n if (index + 1 < this.dataService.itemsCount) {\n this.search(text, index + 1);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n else {\n this.selectionService.focus(index);\n if (this.suggest) {\n this.suggestedText = getter(this.dataService.itemAt(index), this.textField);\n }\n }\n }\n /**\n * @hidden\n */\n getSuggestion() {\n const hasSelected = !!this.selectionService.selected.length;\n const shouldSuggest = this.suggest && !this.backspacePressed && this.suggestedText && this.text;\n if (!hasSelected && shouldSuggest && this.suggestedText.toLowerCase().startsWith(this.text.toLowerCase())) {\n return this.suggestedText;\n }\n else {\n this.suggestedText = undefined;\n }\n }\n navigate(index) {\n if (this.dataService.itemsCount === 0) {\n return;\n }\n this.text = getter(this.dataService.itemAt(index), this.textField);\n this.selectionService.select(index);\n }\n /**\n * @hidden\n */\n handleNavigate(event) {\n const hasSelected = isPresent(this.selectionService.selected[0]);\n const focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(0) : this.selectionService.focused;\n let offset = 0;\n if (this.disabled || this.readonly) {\n return;\n }\n if (event.keyCode === Keys.Home || event.keyCode === Keys.End) {\n return;\n }\n if (!hasSelected) {\n if (event.keyCode === Keys.ArrowDown) {\n offset = -1;\n }\n else if (event.keyCode === Keys.ArrowUp) {\n offset = 1;\n }\n }\n const action = this.navigationService.process({\n current: offset + focused,\n max: this.dataService.itemsCount - 1,\n min: 0,\n originalEvent: event\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Left &&\n action !== NavigationAction.Right &&\n action !== NavigationAction.Backspace &&\n action !== NavigationAction.Delete &&\n ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {\n event.preventDefault();\n }\n }\n handleEnter() {\n const text = this.text;\n const focused = this.selectionService.focused;\n const hasFocused = isPresent(focused) && focused !== -1;\n const previousText = getter(this._previousDataItem, this.textField) || \"\";\n const focusedItemText = getter(this.dataService.itemAt(focused), this.textField);\n const textHasChanged = text !== previousText;\n this.togglePopup(false);\n this._filtering = false;\n if (this.allowCustom && textHasChanged) {\n if (text === focusedItemText || this.useSuggestion()) {\n this.selectionService.change(focused);\n }\n else {\n this.change(text, true);\n }\n }\n if (!this.allowCustom) {\n if (hasFocused) {\n this.selectionService.change(focused);\n }\n else if (textHasChanged) {\n this.change(text, true);\n }\n }\n }\n /**\n * @hidden\n */\n handleBlur() {\n this._filtering = false;\n this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers\n this.isFocused = false;\n const unresolvedSelection = getter(this.dataItem, this.valueField) !== getter(this.value, this.valueField);\n const currentText = this.searchbar.value;\n const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');\n const valueHasChanged = unresolvedSelection || textHasChanged;\n const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);\n if (runInZone) {\n this.zone.run(() => {\n if (valueHasChanged) {\n const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();\n if (lowerCaseMatch || unresolvedSelection) {\n this.selectionService.change(this.selectionService.focused);\n }\n else {\n this.change(currentText, true);\n }\n }\n this.onBlur.emit();\n this.onTouchedCallback();\n this.togglePopup(false);\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n handleEscape() {\n this.togglePopup(false);\n // clear the focus only if the focused item is not selected\n const hasSelected = this.selectionService.selected.length > 0;\n if (!hasSelected) {\n this.suggestedText = null;\n this.selectionService.focused = -1;\n }\n }\n /**\n * @hidden\n */\n handleNavigationOpen() {\n this.restoreItemFocus();\n this.togglePopup(true);\n }\n /**\n * @hidden\n */\n searchBarChange(text) {\n const currentTextLength = this.text ? this.text.length : 0;\n this.backspacePressed = (text.length < currentTextLength) ? true : false;\n this.text = text;\n // Reset the selection prior to filter. If a match is present, it will be resolved. If a match is not present, it is not needed.\n this.selectionService.resetSelection([]);\n this.togglePopup(true);\n this._filtering = true;\n if (this.filterable && this.filterText !== text) {\n this.filterText = text;\n this.filterChange.emit(text);\n }\n else {\n this.search(text);\n }\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => this.onFocus.emit());\n }\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n change(candidate, isCustom = false) {\n if (isCustom) {\n this.customValueSubject.next(candidate);\n }\n else {\n this.valueSubject.next(candidate);\n }\n }\n emitValueChange() {\n this.onChangeCallback(this.value);\n this.valueChange.emit(this.value);\n this._previousDataItem = this.dataItem;\n }\n /**\n * @hidden\n */\n selectClick() {\n if (!this.touchEnabled) {\n this.searchbar.focus();\n }\n if (!this.isOpen) {\n this.restoreItemFocus();\n }\n this.togglePopup(!this.isOpen);\n }\n get listContainerClasses() {\n return ['k-list-container', 'k-reset'].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n preventEventDefault(event) {\n event.preventDefault();\n }\n get focusedItemText() {\n const focused = this.selectionService.focused;\n if (!isPresent(focused) || focused === -1) {\n return null;\n }\n const itemText = getter(this.dataService.itemAt(focused), this.textField);\n return !isPresent(itemText) ? \"\" : itemText.toString();\n }\n /**\n * Focuses the first match when there's text in the input field, but no focused item.\n */\n restoreItemFocus() {\n const hasFocus = isPresent(this.selectionService.focused) && this.selectionService.focused > -1;\n if (!hasFocus && this.text && this.dataService.itemsCount) {\n if (this.filterable) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n else {\n this.search(this.text);\n }\n }\n }\n useSuggestion() {\n if (!(this.suggest && isPresent(this.searchbar.value))) {\n return false;\n }\n const focusedDataItem = this.dataService.itemAt(this.selectionService.focused);\n const focusedItemText = getter(focusedDataItem, this.textField);\n if (!isPresent(focusedItemText)) {\n return false;\n }\n return this.searchbar.value.toLowerCase() === focusedItemText.toLowerCase();\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute',\n anchorAlign: anchorPosition,\n popupAlign: popupPosition\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.popupWidth;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.popupHeight;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n clearFilter() {\n if (!(this.filterable && this.filterText)) {\n return;\n }\n this.filterText = '';\n this.filterChange.emit(this.filterText);\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this.zone.runOutsideAngular(() => \n // Roll up ComboBox on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n const isInDropDown = inDropDown(this.wrapper, target, this.popupRef);\n if (this.isFocused && !isInDropDown) {\n // Close popup and mobile keyboard if searchbar is focused\n this.zone.run(() => this.blur());\n }\n else if (this.isOpen && !isInDropDown) {\n // Close popup if the popup is opened via the select click\n this.zone.run(() => this.togglePopup(false));\n }\n }));\n }\n attachSelectClickHandler() {\n const selectElement = this.select.nativeElement;\n const event = pointers ? 'pointerdown' : 'click';\n this.selectClickDisposeHandler = this.renderer.listen(selectElement, event, this.selectClick.bind(this));\n }\n setComponentClasses() {\n if (this.size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n }\n if (this.rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n }\n }\n}\nComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ComboBoxComponent, selector: \"kendo-combobox\", inputs: { focusableId: \"focusableId\", allowCustom: \"allowCustom\", data: \"data\", value: \"value\", textField: \"textField\", valueField: \"valueField\", valuePrimitive: \"valuePrimitive\", valueNormalizer: \"valueNormalizer\", placeholder: \"placeholder\", popupSettings: \"popupSettings\", listHeight: \"listHeight\", iconClass: \"iconClass\", loading: \"loading\", suggest: \"suggest\", clearButton: \"clearButton\", disabled: \"disabled\", itemDisabled: \"itemDisabled\", readonly: \"readonly\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", filterable: \"filterable\", virtual: \"virtual\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", selectionChange: \"selectionChange\", filterChange: \"filterChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\" }, host: { properties: { \"class.k-combobox\": \"this.widgetClasses\", \"class.k-input\": \"this.widgetClasses\", \"class.k-disabled\": \"this.isDisabled\", \"class.k-loading\": \"this.isLoading\", \"attr.dir\": \"this.dir\" } }, providers: [\n COMBOBOX_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.combobox'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => ComboBoxComponent)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => ComboBoxComponent)\n }\n ], queries: [{ propertyName: \"template\", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: \"footerTemplate\", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: \"noDataTemplate\", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: \"groupTemplate\", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: \"fixedGroupTemplate\", first: true, predicate: FixedGroupTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"searchbar\", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: \"optionsList\", first: true, predicate: [\"optionsList\"], descendants: true }, { propertyName: \"select\", first: true, predicate: [\"select\"], descendants: true, static: true }], exportAs: [\"kendoComboBox\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `, isInline: true, components: [{ type: SearchBarComponent, selector: \"kendo-searchbar\", inputs: [\"id\", \"listId\", \"tagListId\", \"activeDescendant\", \"noDataLabel\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"role\", \"userInput\", \"suggestedText\", \"placeholder\"], outputs: [\"valueChange\", \"onBlur\", \"onFocus\", \"onClick\", \"onNavigate\"] }, { type: ListComponent, selector: \"kendo-list\", inputs: [\"selected\", \"focused\", \"textField\", \"valueField\", \"height\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"show\", \"id\", \"optionPrefix\", \"multipleSelection\", \"virtual\", \"type\", \"checkboxes\", \"data\", \"size\", \"rounded\"], outputs: [\"onClick\", \"pageChange\", \"listResize\"] }, { type: i9.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \" }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i9.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoComboBox',\n providers: [\n COMBOBOX_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.combobox'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => ComboBoxComponent)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => ComboBoxComponent)\n }\n ],\n selector: 'kendo-combobox',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { focusableId: [{\n type: Input\n }], allowCustom: [{\n type: Input\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], valueNormalizer: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], loading: [{\n type: Input\n }], suggest: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], disabled: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], filterable: [{\n type: Input\n }], virtual: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], template: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], searchbar: [{\n type: ViewChild,\n args: [SearchBarComponent, { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }], select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-combobox']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], isLoading: [{\n type: HostBinding,\n args: ['class.k-loading']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }] } });\n\n/**\n * Renders the selected value of the dropdown. To define the header template, nest an `` tag\n * with the `kendoValueTemplate` directive inside the component tag.\n *\n * The template context is set to the current component.\n * To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * > The `ValueTemplate` directive can only be used with the DropDownList and DropDownTree components.\n *\n * - [Using `ValueTemplate` with the DropDownList]({% slug templates_ddl %}#toc-value-template)\n * - [Using `ValueTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-value-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass ValueTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nValueTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nValueTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ValueTemplateDirective, selector: \"[kendoDropDownListValueTemplate],[kendoDropDownTreeValueTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ValueTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListValueTemplate],[kendoDropDownTreeValueTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @hidden\n */\nclass FilterInputDirective {\n constructor(element, zone) {\n this.element = element;\n this.zone = zone;\n }\n ngOnChanges() {\n if (this.focused) {\n this.nextTick(() => this.element.nativeElement.focus());\n }\n }\n nextTick(fn) {\n this.zone.runOutsideAngular(() => setTimeout(fn));\n }\n}\nFilterInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FilterInputDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nFilterInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FilterInputDirective, selector: \"[filterInput]\", inputs: { focused: [\"filterInput\", \"focused\"] }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FilterInputDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[filterInput]' // eslint-disable-line\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { focused: [{\n type: Input,\n args: ['filterInput']\n }] } });\n\n/**\n * @hidden\n */\nconst DROPDOWNLIST_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropDownListComponent)\n};\nconst DEFAULT_SIZE$3 = 'medium';\nconst DEFAULT_ROUNDED$3 = 'medium';\nconst DEFAULT_FILL_MODE$3 = 'solid';\n/**\n * Represents the [Kendo UI DropDownList component for Angular]({% slug overview_ddl %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass DropDownListComponent {\n constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, _zone, renderer, cdr, touchEnabled) {\n this.wrapper = wrapper;\n this.localization = localization;\n this.popupService = popupService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this.dataService = dataService;\n this._zone = _zone;\n this.renderer = renderer;\n this.cdr = cdr;\n this.touchEnabled = touchEnabled;\n /**\n * Sets the height of the options list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of options and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Enables the [filtering]({% slug filtering_ddl %}) functionality of the DropDownList.\n */\n this.filterable = false;\n /**\n * Enables a case-insensitive search. When filtration is disabled, use this option.\n */\n this.ignoreCase = true;\n /**\n * Sets the delay before an item search is performed. When filtration is disabled, use this option.\n */\n this.delay = 500;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Fires each time the value is changed ([see example]({% slug overview_ddl %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user types in the input field\n * ([see example]({% slug overview_ddl %}#toc-events)).\n * You can filter the source based on the passed filtration value.\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the item selection is changed\n * ([see example]({% slug overview_ddl %}#toc-events)).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_ddl %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_ddl %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the DropDownList.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the DropDownList gets blurred.\n */\n this.onBlur = new EventEmitter();\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n this.role = 'listbox';\n this.groupIndices = [];\n this.listBoxId = guid();\n this.optionPrefix = guid();\n this.filterText = \"\";\n this._isFocused = false;\n this.onTouchedCallback = (_) => { };\n this.onChangeCallback = (_) => { };\n this.word = \"\";\n this.last = \"\";\n this.filterFocused = new EventEmitter();\n this.filterBlurred = new EventEmitter();\n this.hostElementFocused = new EventEmitter();\n this.hostElementBlurred = new EventEmitter();\n this.selectionSubscription = new Subscription();\n this._open = false;\n this._popupSettings = { animate: true };\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.data = [];\n this.subscribeEvents();\n this.subscribeTouchEvents();\n this.subscribeFocusEvents();\n this.popupMouseDownHandler = this.onMouseDown.bind(this);\n }\n get width() {\n const wrapperWidth = isDocumentAvailable() ? this.wrapper.nativeElement.offsetWidth : 0;\n const width = this.popupSettings.width || wrapperWidth;\n const minWidth = isNaN(wrapperWidth) ? wrapperWidth : `${wrapperWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get widgetTabIndex() {\n if (this.disabled) {\n return undefined;\n }\n const providedTabIndex = Number(this.tabIndex);\n const defaultTabIndex = 0;\n return !isNaN(providedTabIndex) ? providedTabIndex : defaultTabIndex;\n }\n get ariaExpanded() {\n return this.isOpen;\n }\n get ariaOwns() {\n if (!this.isOpen) {\n return;\n }\n return this.listBoxId;\n }\n get ariaActivedescendant() {\n if (!isPresent(this.dataItem) || !this.isOpen) {\n return;\n }\n return this.optionPrefix + \"-\" + getter(this.dataItem, this.valueField);\n }\n get noDataLabel() {\n if (this.dataService.itemsCount === 0) {\n return this.messageFor('noDataText');\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * Sets the data of the DropDownList.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n this.setState();\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n // Use length instead of itemsCount because of the grouping.\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the DropDownList.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n * > All selected values which are not present in the source are ignored.\n */\n set value(newValue) {\n if (!isPresent(newValue)) {\n this._previousDataItem = undefined;\n }\n this._value = newValue;\n this.setState();\n this.cdr.markForCheck();\n }\n get value() {\n return this._value;\n }\n /**\n * Configures the popup of the DropDownList.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_ddl %})). Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_ddl %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings);\n }\n get virtual() {\n return this._virtualSettings;\n }\n /**\n * Specifies the type of the selected value\n * ([more information and example]({% slug valuebinding_ddl %}#toc-primitive-values-from-object-fields)).\n * If set to `true`, the selected value has to be of a primitive value.\n */\n set valuePrimitive(isPrimitive) {\n this._valuePrimitive = isPrimitive;\n }\n get valuePrimitive() {\n if (!isPresent(this._valuePrimitive)) {\n return !isPresent(this.valueField);\n }\n return this._valuePrimitive;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$3;\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('picker', this.size));\n if (size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('picker', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$3;\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n if (rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = rounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$3;\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('picker', this.fillMode));\n if (fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('picker', newFillMode));\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * @hidden\n */\n blurComponent(event) {\n if (event.target !== this.wrapper.nativeElement) {\n return;\n }\n event.stopImmediatePropagation();\n this.hostElementBlurred.emit();\n }\n /**\n * @hidden\n */\n blurFilterInput() {\n this.filterBlurred.emit();\n }\n /**\n * @hidden\n */\n focusComponent(event) {\n if (event.target !== this.wrapper.nativeElement) {\n return;\n }\n event.stopImmediatePropagation();\n this.hostElementFocused.emit();\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n }\n /**\n * @hidden\n */\n onResize() {\n if (this._open) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n get isDisabled() {\n return this.disabled;\n }\n get isLoading() {\n return this.loading;\n }\n get dir() {\n return this.direction;\n }\n get hostTabIndex() {\n return this.widgetTabIndex;\n }\n get isReadonly() {\n return this.readonly;\n }\n get isAriaExpanded() {\n return this.ariaExpanded;\n }\n get hostAriaOwns() {\n return this.ariaOwns;\n }\n get hostAriaActivedescendant() {\n return this.ariaActivedescendant;\n }\n get hostNoDataLabel() {\n return this.noDataLabel;\n }\n /**\n * @hidden\n */\n keydown(event) {\n const firstIndex = isPresent(this.defaultItem) ? -1 : 0;\n let focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(firstIndex) : this.selectionService.focused;\n let offset = 0;\n if (this.disabled || this.readonly) {\n return;\n }\n const isHomeEnd = event.keyCode === Keys.Home || event.keyCode === Keys.End;\n const isFilterFocused = this.filterable && this.isFocused && this.isOpen;\n if (isFilterFocused && isHomeEnd) {\n return;\n }\n const hasSelected = isPresent(this.selectionService.selected[0]);\n const focusedItemNotSelected = isPresent(this.selectionService.focused) && !this.selectionService.isSelected(this.selectionService.focused);\n if (!hasSelected || focusedItemNotSelected) {\n if (event.keyCode === Keys.ArrowDown || event.keyCode === Keys.ArrowRight) {\n offset = -1;\n }\n else if (event.keyCode === Keys.ArrowUp || event.keyCode === Keys.ArrowLeft) {\n offset = 1;\n }\n }\n const eventData = event;\n const action = this.navigationService.process({\n current: focused + offset,\n max: this.dataService.itemsCount - 1,\n min: this.defaultItem ? -1 : 0,\n originalEvent: eventData\n });\n const leftRightKeys = (action === NavigationAction.Left) || (action === NavigationAction.Right);\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab &&\n action !== NavigationAction.Backspace &&\n action !== NavigationAction.Delete &&\n !(leftRightKeys && this.filterable) &&\n action !== NavigationAction.Enter //enter when popup is opened is handled before `handleEnter`\n ) {\n eventData.preventDefault();\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n if (this.disabled || this.readonly || this.filterable) {\n return;\n }\n this.onKeyPress(event);\n }\n /**\n * @hidden\n */\n click(event) {\n event.preventDefault();\n this.focus();\n this.togglePopup(!this.isOpen);\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper.nativeElement, \"tabindex\");\n this.localizationChangesSubscription = this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.detectChanges();\n });\n this.assignAriaDescribedBy();\n this.setComponentClasses();\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n const value = this.value;\n return !(value === 0 || value === false || value || this.defaultItem);\n }\n /**\n * @hidden\n */\n onFilterFocus() {\n this.filterFocused.emit();\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n if (this.localizationChangesSubscription) {\n this.localizationChangesSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n if (isChanged('defaultItem', changes, false)) {\n this.disabledItemsService.defaultItem = this.defaultItem;\n }\n if (anyChanged(['textField', 'valueField', 'valuePrimitive', 'defaultItem', 'itemDisabled'], changes, false)) {\n this.setState();\n }\n }\n /**\n * @hidden\n */\n ngAfterContentChecked() {\n this.verifySettings();\n }\n /**\n * Focuses a specific item of the DropDownList based on a provided index.\n * If there is a default item it is positioned at index -1.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const minIndex = isPresent(this.defaultItem) ? -1 : 0;\n const isInRange = minIndex <= index && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(null);\n }\n }\n /**\n * Focuses the DropDownList.\n */\n focus() {\n if (!this.disabled) {\n this.wrapper.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownList.\n */\n blur() {\n if (!this.disabled) {\n this.wrapper.nativeElement.blur();\n }\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_ddl %}#toc-setting-the-initially-opened-component)).\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required to open the popup on load.\n // Otherwise, the \"Expression has changed...\" type error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n });\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n if (!open && this.filterable && this.isFocused) {\n this.focus();\n }\n this._toggle(open);\n }\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * Resets the value of the DropDownList.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.value = undefined;\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value === null ? undefined : value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n get buttonClasses() {\n return this.loading ? 'k-i-loading k-input-loading-icon' : this.iconClass || 'k-i-arrow-s';\n }\n /**\n * @hidden\n */\n get selectButtonClasses() {\n return `${this.size ? getSizeClass('button', this.size) : ''} ${this.fillMode ? 'k-button-' + this.fillMode : ''} ${this.fillMode ? 'k-button-' + this.fillMode + '-base' : ''}`;\n }\n /**\n * @hidden\n */\n get filterInputClasses() {\n return `${this.size ? getSizeClass('input', this.size) : ''} ${this.fillMode ? 'k-input-' + this.fillMode : ''} ${this.rounded ? getRoundedClass(this.rounded) : ''}`;\n }\n /**\n * @hidden\n */\n get optionLabelSizeClass() {\n return `${this.size ? getSizeClass('list', this.size) : ''}`;\n }\n /**\n * @hidden\n */\n get listContainerClasses() {\n const containerClasses = ['k-list-container', 'k-reset'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n /**\n * @hidden\n */\n get isDisabledDefaultItem() {\n return this.disabledItemsService.isItemDisabled(this.defaultItem);\n }\n /**\n * @hidden\n */\n getText() {\n return this.text;\n }\n /**\n * @hidden\n */\n getDefaultItemText() {\n return getter(this.defaultItem, this.textField);\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: anchorPosition,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute'\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n if (!this.filterable) {\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));\n }\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n updateState({ dataItem, confirm = false }) {\n this.dataItem = dataItem;\n this.text = getter(dataItem, this.textField);\n if (confirm) {\n this._previousDataItem = dataItem;\n }\n }\n clearState() {\n this.text = undefined;\n this.dataItem = undefined;\n }\n resetSelection(index) {\n const clear = !isPresent(index);\n this.selectionService.resetSelection(clear ? [] : [index]);\n this.selectionService.focused = clear ? this.firstFocusableIndex(0) : index;\n }\n onSelectionChange({ dataItem }) {\n this.updateState({ dataItem });\n this.selectionChange.emit(dataItem);\n // reassigning the value label ID as aria-deascibedby forces firefox/nvda, forefox/jaws to read\n // the new value when the popup is closed and the value is changed with the arrow keys (up/down)\n this.assignAriaDescribedBy();\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n // Item selection when the popup is open.\n this.selectionSubscription.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), map(this.itemFromEvent.bind(this)))\n .subscribe(this.onSelectionChange.bind(this)));\n // Item selection when the popup is closed | clicked | enter, and so on.\n this.selectionSubscription.add(merge(this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)), this.selectionService.onChange).pipe(map(this.itemFromEvent.bind(this)), tap(_ => this.togglePopup(false)))\n .subscribe(({ dataItem, value: newValue, newSelection }) => {\n if (newSelection) {\n this.onSelectionChange({ dataItem });\n }\n const shouldUsePrevious = !isPresent(dataItem) && this._previousDataItem;\n const shouldUseNewValue = newValue !== getter(this.value, this.valueField);\n if (shouldUsePrevious) {\n this.updateState({ dataItem: this._previousDataItem });\n this.resetSelection();\n }\n else if (shouldUseNewValue) {\n this.value = this.valuePrimitive ? newValue : dataItem;\n this._previousDataItem = dataItem;\n this.emitChange(this.value);\n }\n this.clearFilter();\n }));\n this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down, this.navigationService.left.pipe(skipWhile(() => this.filterable)), this.navigationService.right.pipe(skipWhile(() => this.filterable)), this.navigationService.home, this.navigationService.end)\n .pipe(filter((event) => !isNaN(event.index)))\n .subscribe((event) => this.selectionService.select(event.index));\n this.openSubscription = this.navigationService.open.subscribe(() => this.togglePopup(true));\n this.closeSubscription = this.navigationService.close.subscribe(() => {\n this.togglePopup(false);\n this.focus();\n });\n this.enterSubscription = this.navigationService.enter\n .pipe(tap((event) => event.originalEvent.preventDefault()))\n .subscribe(this.handleEnter.bind(this));\n this.escSubscription = this.navigationService.esc\n .subscribe(this.handleEscape.bind(this));\n this.filterBlurredSubscription = this.filterBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.hostElementFocused))))\n .subscribe(() => {\n this.hostElementBlurred.emit();\n });\n this._zone.runOutsideAngular(() => {\n this.componentBlurredSubscription =\n merge(this.hostElementBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.filterFocused)))), this.navigationService.tab).pipe(tap(event => event instanceof NavigationEvent && this.focus()), filter(() => this.isFocused))\n .subscribe(() => this.componentBlur());\n });\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up DropDownList on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if (this.isFocused && !inDropDown(this.wrapper, target, this.popupRef)) {\n this._zone.run(() => {\n if (this.filterFocused) {\n // Close popup if filter is focused\n this.togglePopup(false);\n }\n this.blur();\n });\n }\n }));\n }\n subscribeFocusEvents() {\n if (isDocumentAvailable()) {\n this.focusComponent = this.focusComponent.bind(this);\n this.blurComponent = this.blurComponent.bind(this);\n this._zone.runOutsideAngular(() => {\n const useCapture = true;\n document.addEventListener('focus', this.focusComponent, useCapture);\n document.addEventListener('blur', this.blurComponent, useCapture);\n });\n }\n }\n unSubscribeFocusEvents() {\n if (isDocumentAvailable()) {\n const useCapture = true;\n document.removeEventListener('focus', this.focusComponent, useCapture);\n document.removeEventListener('blur', this.blurComponent, useCapture);\n }\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.navigationSubscription.unsubscribe();\n this.openSubscription.unsubscribe();\n this.closeSubscription.unsubscribe();\n this.enterSubscription.unsubscribe();\n this.escSubscription.unsubscribe();\n this.componentBlurredSubscription.unsubscribe();\n this.filterBlurredSubscription.unsubscribe();\n this.unSubscribeFocusEvents();\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n if (this.selectionSubscription) {\n this.selectionSubscription.unsubscribe();\n }\n }\n itemFromEvent(event) {\n const index = event.indices[0];\n let dataItem = this.dataService.itemAt(index);\n dataItem = isPresent(dataItem) ? dataItem : this.currentOrDefault(index);\n const value = getter(dataItem, this.valueField);\n const newSelection = event.newSelection;\n return {\n dataItem,\n index,\n newSelection,\n value\n };\n }\n currentOrDefault(selectedIndex) {\n const defaultItemIndex = -1;\n if (isPresent(this.dataItem) && selectedIndex !== defaultItemIndex) {\n return this.dataItem;\n }\n else {\n return this.defaultItem;\n }\n }\n firstFocusableIndex(index) {\n const maxIndex = this.dataService.itemsCount - 1;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index < maxIndex) ? this.firstFocusableIndex(index + 1) : undefined;\n }\n else {\n return index;\n }\n }\n handleEnter() {\n if (this.isOpen) {\n this.selectionService.change(this.selectionService.focused);\n this.focus();\n }\n else {\n this.togglePopup(true);\n }\n }\n handleEscape() {\n if (isPresent(this.selectionService.selected[0])) {\n this.selectionService.change(this.selectionService.selected[0]);\n }\n else {\n this.togglePopup(false);\n this.clearFilter();\n }\n this.focus();\n }\n clearFilter() {\n if (!(this.filterable && this.filterText)) {\n return;\n }\n this.filterText = \"\";\n this.cdr.markForCheck();\n this.filterChange.emit(this.filterText);\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.defaultItem && this.valueField && typeof this.defaultItem !== \"object\") {\n throw new Error(DropDownListMessages.defaultItem);\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.value === \"object\") {\n throw new Error(DropDownListMessages.primitive);\n }\n if (this.valuePrimitive === false && isPresent(this.value) && typeof this.value !== \"object\") {\n throw new Error(DropDownListMessages.object);\n }\n const valueOrText = !isPresent(this.valueField) !== !isPresent(this.textField);\n if (valueOrText) {\n throw new Error(DropDownListMessages.textAndValue);\n }\n }\n componentBlur() {\n this.isFocused = false;\n const selectionPresent = isPresent(this.selectionService.selected[0]);\n const valueHasChanged = selectionPresent && getter(this.value, this.valueField) !== getter(this.dataService.itemAt(this.selectionService.selected[0]), this.valueField);\n if (valueHasChanged ||\n hasObservers(this.close) ||\n hasObservers(this.onBlur) ||\n hasObservers(this.filterChange) ||\n isUntouched(this.wrapper.nativeElement)) {\n this._zone.run(() => {\n if (valueHasChanged) {\n this.selectionService.change(this.selectionService.selected[0]);\n }\n this.togglePopup(false);\n this.clearFilter();\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n onMouseDown(event) {\n const tagName = event.target.tagName.toLowerCase();\n if (tagName !== \"input\") {\n event.preventDefault();\n }\n }\n onKeyPress(event) {\n if (event.which === 0 || event.keyCode === Keys.Enter) {\n return;\n }\n let character = String.fromCharCode(event.charCode || event.keyCode);\n if (this.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === \" \") {\n event.preventDefault();\n }\n this.word += character;\n this.last = character;\n this.search();\n }\n search() {\n clearTimeout(this.typingTimeout);\n if (!this.filterable) {\n this.typingTimeout = setTimeout(() => {\n this.word = \"\";\n }, this.delay);\n this.selectNext();\n }\n }\n selectNext() {\n let data = this.dataService\n .filter((item) => isPresent(item) && !item.header && !this.disabledItemsService.isItemDisabled(item))\n .map((item) => {\n if (this.dataService.grouped) {\n return { item: item.value, itemIndex: item.offsetIndex };\n }\n return { item: item, itemIndex: this.dataService.indexOf(item) };\n });\n const isInLoop = sameCharsOnly(this.word, this.last);\n let dataLength = data.length;\n let hasSelected = !isNaN(this.selectionService.selected[0]);\n let startIndex = !hasSelected ? 0 : this.selectionService.selected[0];\n let text, index, defaultItem;\n if (this.defaultItem && !this.disabledItemsService.isItemDisabled(this.defaultItem)) {\n defaultItem = { item: this.defaultItem, itemIndex: -1 };\n dataLength += 1;\n startIndex += 1;\n }\n startIndex += isInLoop && hasSelected ? 1 : 0;\n data = shuffleData(data, startIndex, defaultItem);\n index = 0;\n for (; index < dataLength; index++) {\n text = getter(data[index].item, this.textField);\n const loopMatch = Boolean(isInLoop && matchText(text, this.last, this.ignoreCase));\n const nextMatch = Boolean(matchText(text, this.word, this.ignoreCase));\n if (loopMatch || nextMatch) {\n index = data[index].itemIndex;\n break;\n }\n }\n if (index !== dataLength) {\n this.navigate(index);\n }\n }\n emitChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n navigate(index) {\n this.selectionService.select(index);\n }\n findDataItem({ valueField, value }) {\n const result = {\n dataItem: null,\n index: -1\n };\n const prop = dataItem => getter(dataItem, valueField);\n let comparer;\n if (this.dataService.grouped) {\n comparer = (element) => {\n return prop(element.value) === prop(value);\n };\n }\n else {\n comparer = (element) => {\n return prop(element) === prop(value);\n };\n }\n const index = this.dataService.findIndex(comparer);\n result.dataItem = this.dataService.itemAt(index);\n result.index = index;\n return result;\n }\n setState() {\n const value = this.value;\n const valueField = this.valueField;\n const textField = this.textField;\n const primitive = this.valuePrimitive;\n if (this.defaultItem) {\n const defaultValue = getter(this.defaultItem, valueField);\n const currentValue = getter(value, valueField);\n if (!isPresent(value) || (currentValue === defaultValue)) {\n this.updateState({ dataItem: this.defaultItem, confirm: true });\n this.resetSelection(-1);\n if (this.filterable && this.filterText && this.dataService.itemsCount) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n return;\n }\n }\n const resolved = this.findDataItem({ valueField, value });\n // The data and value are of same shape,\n // for example, value: 'foo', data: ['foo', 'bar']\n // or value: { value: 1, text: 'foo' }, data: [{ value: 1, text: 'foo' }].\n const ofSameType = !(primitive && textField);\n if (resolved.dataItem) {\n this.updateState({ dataItem: resolved.dataItem, confirm: true });\n this.resetSelection(resolved.index);\n }\n else if (isPresent(value) && ofSameType) {\n this.updateState({ dataItem: value });\n this.resetSelection();\n }\n else if (this._previousDataItem) {\n this.updateState({ dataItem: this._previousDataItem });\n this.resetSelection();\n }\n else {\n this.clearState();\n this.resetSelection();\n }\n }\n /**\n * @hidden\n */\n handleFilter(event) {\n this.filterChange.emit(event.target.value);\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n assignAriaDescribedBy() {\n const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';\n const trimmed = currentValue.replace(this.valueLabelId, '').trim();\n // reset the value label ID to force readers to read the new value\n this.valueLabelId = guid();\n // add to the current value - don't replace it\n const newValue = `${this.valueLabelId} ${trimmed}`.trim();\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);\n }\n setComponentClasses() {\n if (this.size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('picker', this.size));\n }\n if (this.rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('picker', this.fillMode));\n }\n }\n}\nDropDownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownListComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nDropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropDownListComponent, selector: \"kendo-dropdownlist\", inputs: { iconClass: \"iconClass\", loading: \"loading\", data: \"data\", value: \"value\", textField: \"textField\", valueField: \"valueField\", popupSettings: \"popupSettings\", listHeight: \"listHeight\", defaultItem: \"defaultItem\", disabled: \"disabled\", itemDisabled: \"itemDisabled\", readonly: \"readonly\", filterable: \"filterable\", virtual: \"virtual\", ignoreCase: \"ignoreCase\", delay: \"delay\", valuePrimitive: \"valuePrimitive\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", focusableId: [\"id\", \"focusableId\"] }, outputs: { valueChange: \"valueChange\", filterChange: \"filterChange\", selectionChange: \"selectionChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\" }, host: { listeners: { \"keydown\": \"keydown($event)\", \"keypress\": \"keypress($event)\", \"click\": \"click($event)\" }, properties: { \"class.k-dropdownlist\": \"this.hostClasses\", \"class.k-picker\": \"this.hostClasses\", \"class.k-disabled\": \"this.isDisabled\", \"attr.aria-disabled\": \"this.isDisabled\", \"class.k-loading\": \"this.isLoading\", \"attr.id\": \"this.focusableId\", \"attr.dir\": \"this.dir\", \"attr.tabindex\": \"this.hostTabIndex\", \"attr.readonly\": \"this.isReadonly\", \"attr.aria-readonly\": \"this.isReadonly\", \"attr.role\": \"this.role\", \"attr.aria-haspopup\": \"this.role\", \"attr.aria-expanded\": \"this.isAriaExpanded\", \"attr.aria-owns\": \"this.hostAriaOwns\", \"attr.aria-activedescendant\": \"this.hostAriaActivedescendant\", \"attr.aria-label\": \"this.hostNoDataLabel\" } }, providers: [\n DROPDOWNLIST_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownlist'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => DropDownListComponent)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => DropDownListComponent)\n }\n ], queries: [{ propertyName: \"itemTemplate\", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: \"groupTemplate\", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: \"fixedGroupTemplate\", first: true, predicate: FixedGroupTemplateDirective, descendants: true }, { propertyName: \"valueTemplate\", first: true, predicate: ValueTemplateDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: \"footerTemplate\", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: \"noDataTemplate\", first: true, predicate: NoDataTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"optionsList\", first: true, predicate: [\"optionsList\"], descendants: true }], exportAs: [\"kendoDropDownList\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n {{ getText() }}\n \n \n \n \n \n \n \n\n \n
\n \n \n \n \n
\n
\n \n \n \n
\n {{ getDefaultItemText() }}\n
\n \n
\n \n \n
\n \n \n
\n \n
\n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `, isInline: true, components: [{ type: ListComponent, selector: \"kendo-list\", inputs: [\"selected\", \"focused\", \"textField\", \"valueField\", \"height\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"show\", \"id\", \"optionPrefix\", \"multipleSelection\", \"virtual\", \"type\", \"checkboxes\", \"data\", \"size\", \"rounded\"], outputs: [\"onClick\", \"pageChange\", \"listResize\"] }, { type: i9.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \" }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i9.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i12.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { type: FilterInputDirective, selector: \"[filterInput]\", inputs: [\"filterInput\"] }, { type: i12.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { type: i12.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { type: SelectableDirective, selector: \"[kendoDropDownsSelectable]\", inputs: [\"index\", \"checkboxes\", \"height\", \"multipleSelection\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownListComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownList',\n providers: [\n DROPDOWNLIST_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownlist'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => DropDownListComponent)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => DropDownListComponent)\n }\n ],\n selector: 'kendo-dropdownlist',\n template: `\n \n \n \n \n \n \n {{ getText() }}\n \n \n \n \n \n \n \n\n \n
\n \n \n \n \n
\n
\n \n \n \n
\n {{ getDefaultItemText() }}\n
\n \n
\n \n \n
\n \n \n
\n \n
\n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { iconClass: [{\n type: Input\n }], loading: [{\n type: Input\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], defaultItem: [{\n type: Input\n }], disabled: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], filterable: [{\n type: Input\n }], virtual: [{\n type: Input\n }], ignoreCase: [{\n type: Input\n }], delay: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], itemTemplate: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], valueTemplate: [{\n type: ContentChild,\n args: [ValueTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-dropdownlist']\n }, {\n type: HostBinding,\n args: ['class.k-picker']\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }, {\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], isLoading: [{\n type: HostBinding,\n args: ['class.k-loading']\n }], focusableId: [{\n type: Input,\n args: ['id']\n }, {\n type: HostBinding,\n args: ['attr.id']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], isReadonly: [{\n type: HostBinding,\n args: ['attr.readonly']\n }, {\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }, {\n type: HostBinding,\n args: ['attr.aria-haspopup']\n }], isAriaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], hostAriaOwns: [{\n type: HostBinding,\n args: ['attr.aria-owns']\n }], hostAriaActivedescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], hostNoDataLabel: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }], keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], click: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] } });\n\n/**\n * Renders the content of the custom list item in the MultiSelect\n * ([see example]({% slug templates_multiselect %}#toc-customizing-the-item-content)).\n * The template context is set to the current component.\n * To get a reference to the current text that is typed by the\n * user, use the `let-customItem` directive.\n *\n * > The `CustomItemTemplate` directive can only be used with the MultiSelect component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * New Item: {{customItem}}\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n *\n */\nclass CustomItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCustomItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CustomItemTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCustomItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CustomItemTemplateDirective, selector: \"[kendoMultiSelectCustomItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CustomItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectCustomItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Renders the selected tag value of the MultiSelect\n * ([see example]({% slug templates_multiselect %}#toc-tag-template)).\n * The template context is set to the current component.\n * To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * > The `TagTemplate` directive can only be used with the MultiSelect and MultiSelectTree components.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public items: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass TagTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTagTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TagTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nTagTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TagTemplateDirective, selector: \"[kendoMultiSelectTagTemplate],[kendoMultiSelectTreeTagTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TagTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTagTemplate],[kendoMultiSelectTreeTagTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Renders the grouped tag values in the MultiSelect\n * ([see example]({% slug summarytagmode_multiselect %})).\n * The template context is set to the current component.\n * To get a reference to the current grouped\n * data items collection, use the `let-dataItems` directive.\n *\n * > The `GroupTagTemplate` directive can only be used with the MultiSelect and MultiSelectTree components.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItems.length}} item(s) selected\n * \n * \n * `\n * })\n * class AppComponent {\n * public items: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass GroupTagTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupTagTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GroupTagTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nGroupTagTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: GroupTagTemplateDirective, selector: \"[kendoMultiSelectGroupTagTemplate],[kendoMultiSelectTreeGroupTagTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GroupTagTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectGroupTagTemplate],[kendoMultiSelectTreeGroupTagTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Arguments for the `removeTag` event. The `removeTag` event fires when a tag is about\n * to the removed. If you cancel the event, the removal is prevented.\n */\nclass RemoveTagEvent extends PreventableEvent {\n /**\n * Constructs the event arguments for the `remove` event.\n * @param dataItem - The data item or an array of data items that will be removed.\n */\n constructor(dataItem) {\n super();\n this.dataItem = dataItem;\n }\n}\n\n/**\n * @hidden\n */\nconst normalizeCheckboxesSettings = (settings) => {\n if (isObject(settings)) {\n const defaultSettings = { enabled: true, checkOnClick: true };\n return Object.assign({}, defaultSettings, settings);\n }\n return { enabled: Boolean(settings), checkOnClick: true };\n};\n\n/**\n * @hidden\n */\nclass TagListComponent {\n constructor(renderer, hostElement) {\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.rounded = 'medium';\n this.fillMode = 'solid';\n /**\n * A collection with the disabled tags' indices.\n */\n this.disabledIndices = new Set();\n this.removeTag = new EventEmitter();\n this.hostClasses = true;\n this._size = 'medium';\n }\n set size(size) {\n this.renderer.removeClass(this.hostElement.nativeElement, getSizeClass('chip-list', this.size));\n if (size) {\n this.renderer.addClass(this.hostElement.nativeElement, getSizeClass('chip-list', size));\n }\n this._size = size;\n }\n get size() {\n return this._size;\n }\n get hostId() {\n return this.id;\n }\n tagProp(tag, prop, index) {\n const propField = prop && this.getPropField(tag, prop, index);\n return getter(tag, propField);\n }\n isTagDisabled(tag, positionIndex) {\n if (this.isGroupTag(tag)) {\n /** The `positionIndex` is used to determine after how many single tags is the group tag displayed =>\n * => it is used to increment the indices inside the group tag so that we determine the actual position index\n * of each group tag item as they appear in the `value` (important to check against `disabledIndices`)\n * e.g. `disabledIndices = [0, 1]` && `tags = ['Small', ['Medium', 'Large']]` => without the incrementation with\n * `positionIndex`, the group tag would yield [0, 1] as indices, while it should yield [1, 2]\n */\n return tag.every((_tag, index) => this.disabledIndices.has(index + positionIndex));\n }\n return this.disabledIndices.has(positionIndex);\n }\n deleteTag(event, tag, index) {\n event.preventDefault();\n event.stopImmediatePropagation();\n if (!this.disabled && event.which === 1) {\n this.removeTag.emit({ tag, index });\n }\n }\n itemId(tag, index) {\n if (tag) { //because of custom values\n return this.tagPrefix + \"-\" + this.tagProp(tag, this.valueField, index);\n }\n }\n isGroupTag(tag) {\n return tag instanceof Array;\n }\n tagAriaHidden(index) {\n return isPresent(this.focused) && this.focused !== index;\n }\n getPropField(tag, prop, index) {\n // Needed for MultiSelectTree value binding (Heterogeneous Data)\n const fieldsCount = prop.length - 1;\n if (typeof prop === 'string') {\n return prop;\n }\n else if (this.valueDepth) {\n const depth = this.valueDepth[index];\n return fieldsCount < depth ? prop[fieldsCount] : prop[depth];\n }\n else {\n return prop.find(item => item in tag);\n }\n }\n}\nTagListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TagListComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nTagListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TagListComponent, selector: \"kendo-taglist\", inputs: { tags: \"tags\", textField: \"textField\", valueField: \"valueField\", valueDepth: \"valueDepth\", focused: \"focused\", template: \"template\", groupTemplate: \"groupTemplate\", disabled: \"disabled\", tagPrefix: \"tagPrefix\", id: \"id\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", disabledIndices: \"disabledIndices\" }, outputs: { removeTag: \"removeTag\" }, host: { properties: { \"class.k-input-values\": \"this.hostClasses\", \"class.k-chip-list\": \"this.hostClasses\", \"class.k-selection-multiple\": \"this.hostClasses\", \"attr.id\": \"this.hostId\" } }, ngImport: i0, template: `\n \n \n \n \n \n \n \n {{ tag.length }} {{ tag.length === 1 ? 'item' : 'items' }} selected\n \n \n \n \n \n \n {{ tagProp(tag, textField, index) }}\n \n \n \n\n \n \n \n \n \n \n \n \n `, isInline: true, directives: [{ type: i11.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TagListComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-taglist',\n template: `\n \n \n \n \n \n \n \n {{ tag.length }} {{ tag.length === 1 ? 'item' : 'items' }} selected\n \n \n \n \n \n \n {{ tagProp(tag, textField, index) }}\n \n \n \n\n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { tags: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], valueDepth: [{\n type: Input\n }], focused: [{\n type: Input\n }], template: [{\n type: Input\n }], groupTemplate: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tagPrefix: [{\n type: Input\n }], id: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], disabledIndices: [{\n type: Input\n }], removeTag: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-input-values']\n }, {\n type: HostBinding,\n args: ['class.k-chip-list']\n }, {\n type: HostBinding,\n args: ['class.k-selection-multiple']\n }], hostId: [{\n type: HostBinding,\n args: ['attr.id']\n }] } });\n\nconst MULTISELECT_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectComponent)\n};\nconst DEFAULT_SIZE$2 = 'medium';\nconst DEFAULT_ROUNDED$2 = 'medium';\nconst DEFAULT_FILL_MODE$2 = 'solid';\n/**\n * Represents the [Kendo UI MultiSelect component for Angular]({% slug overview_multiselect %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nclass MultiSelectComponent {\n constructor(wrapper, localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, _zone, touchEnabled) {\n this.wrapper = wrapper;\n this.localization = localization;\n this.popupService = popupService;\n this.dataService = dataService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this.cdr = cdr;\n this.differs = differs;\n this.renderer = renderer;\n this._zone = _zone;\n this.touchEnabled = touchEnabled;\n this.listBoxId = guid();\n this.tagListId = guid();\n this.tagPrefix = \"tag-\" + guid();\n this.optionPrefix = \"option-\" + guid();\n this.focusedTagIndex = undefined;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether to close the options list of the MultiSelect after the item selection is finished\n * ([see example]({% slug openstate_multiselect %}#toc-keeping-the-options-list-open-while-on-focus)).\n * @default true\n */\n this.autoClose = true;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Enables the [filtering]({% slug filtering_multiselect %}) functionality of the MultiSelect.\n */\n this.filterable = false;\n /**\n * Sets the height of the suggestions list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of suggestions and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to an empty array and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * A user-defined callback function which receives an array of selected data items and maps them to an array of tags\n * ([see examples]({% slug summarytagmode_multiselect %}#toc-rendering-of-tags)).\n *\n * @param { Any[] } dataItems - The selected data items from the list.\n * @returns { Any[] } - The tags that will be rendered by the component.\n */\n this.tagMapper = (tags) => tags || [];\n /**\n * Specifies whether the MultiSelect allows user-defined values that are not present in the dataset\n * ([more information and examples]({% slug custom_values_multiselect %})).\n * Defaults to `false`.\n */\n this.allowCustom = false;\n /**\n * A user-defined callback function which returns normalized custom values.\n * Typically used when the data items are different from type `string`.\n *\n * @param { Any } value - The custom value that is defined by the user.\n * @returns { Any }\n *\n * @example\n * ```ts\n * import { map } from 'rxjs/operators';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public listItems: Array<{ text: string, value: number }> = [\n * { text: \"Small\", value: 1 },\n * { text: \"Medium\", value: 2 },\n * { text: \"Large\", value: 3 }\n * ];\n *\n * public onValueChange(value) {\n * console.log(\"valueChange : \", value);\n * }\n *\n * public valueNormalizer = (text$: Observable) => text$.pipe(map((text: string) => {\n * return {\n * value: Math.floor(Math.random() * (1000 - 100) + 1000), //generate unique valueField\n * text: text };\n * }));\n *\n * }\n * ```\n */\n this.valueNormalizer = (text) => text.pipe(map((userInput) => {\n const comparer = (item) => typeof item === 'string' && userInput.toLowerCase() === item.toLowerCase();\n const matchingValue = this.value.find(comparer);\n if (matchingValue) {\n return matchingValue;\n }\n const matchingItem = this.dataService.find(comparer);\n return matchingItem ? matchingItem : userInput;\n }));\n /**\n * Fires each time the user types in the input field.\n * You can filter the source based on the passed filtration value.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_multiselect %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_multiselect %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_multiselect %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the MultiSelect.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the MultiSelect gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time a tag is about to be removed([see examples]({% slug summarytagmode_multiselecttree %}#toc-notifying-on-removing-group-tags)).\n * This event is preventable. If you cancel it, the tag will not be removed.\n */\n this.removeTag = new EventEmitter();\n this.hostClasses = true;\n this.role = 'combobox';\n this.initialized = false;\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n this.onChangeCallback = (_) => { };\n this.onTouchedCallback = (_) => { };\n this._placeholder = '';\n this._open = false;\n this._value = [];\n this._popupSettings = { animate: true };\n this._checkboxes = { enabled: false };\n this._isFocused = false;\n this.selectedDataItems = [];\n this.customValueSubject = new Subject();\n this.observableSubscriptions = new Subscription();\n validatePackage(packageMetadata);\n this.popupMouseDownHandler = this.onMouseDown.bind(this);\n this.data = [];\n this.direction = this.localization.rtl ? 'rtl' : 'ltr';\n this.subscribeEvents();\n this.subscribeTouchEvents();\n }\n /**\n * Focuses a specific item of the MultiSelect based on a provided index.\n * If there is a custom item it is positioned at index -1.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const minIndex = this.allowCustom ? -1 : 0;\n const isInRange = minIndex <= 0 && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(null);\n }\n }\n /**\n * Focuses the MultiSelect.\n */\n focus() {\n if (!this.disabled) {\n this.searchbar.focus();\n }\n }\n /**\n * @hidden\n */\n onSearchBarFocus() {\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n }\n /**\n * Blurs the MultiSelect.\n */\n blur() {\n if (!this.disabled) {\n this.searchbar.blur();\n }\n }\n /**\n * @hidden\n */\n onSearchBarBlur() {\n if (!this.isFocused) {\n return;\n }\n this.isFocused = false;\n if (hasObservers(this.onBlur) ||\n hasObservers(this.filterChange) ||\n hasObservers(this.close) ||\n isUntouched(this.wrapper.nativeElement)) {\n this._zone.run(() => {\n this.closePopup();\n if (!(this.isOpen && this.allowCustom)) {\n this.clearFilter();\n }\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n else {\n if (!this.allowCustom) {\n this.clearFilter();\n }\n this.closePopup();\n }\n }\n /**\n * @hidden\n */\n onMouseDown(event) {\n event.preventDefault();\n }\n /**\n * @hidden\n */\n onResize() {\n if (this._open) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * Sets the data of the MultiSelect.\n *\n * > The data has to be provided in an array-like list of items.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n if (this.initialized) {\n this.setState(this.value);\n }\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n //Use length instead of itemsCount because of grouping\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the MultiSelect. It can be either of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n * > All selected values which are not present in the source are ignored.\n */\n set value(values) {\n this._value = values ? values : [];\n if (!this.differ && this.value) {\n this.differ = this.differs.find(this.value).create();\n }\n this.valueChangeDetected = true;\n if (this.initialized) {\n this.setState(this.value);\n }\n }\n get value() {\n return this._value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$2;\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n if (size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$2;\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n if (rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$2;\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n if (fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', newFillMode));\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * The hint which is displayed when the component is empty.\n * When the values are selected, it disappears.\n */\n set placeholder(text) {\n this._placeholder = text || '';\n }\n get placeholder() {\n return this.selectedDataItems.length ? '' : this._placeholder;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_multiselect %})). Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * Specifies whether checkboxes will be rendered before each item in the popup list.\n */\n set checkboxes(settings) {\n this._checkboxes = normalizeCheckboxesSettings(settings);\n }\n get checkboxes() {\n return this._checkboxes;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_multiselect %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings);\n }\n get virtual() {\n return this._virtualSettings;\n }\n /**\n * Configures the popup of the MultiSelect.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the type of the selected value.\n * If set to `true`, the selected value has to be of the primitive type\n * ([more information and example]({% slug valuebinding_multiselect %}#toc-primitive-values-from-object-fields)).\n */\n set valuePrimitive(isPrimitive) {\n this._valuePrimitive = isPrimitive;\n }\n get valuePrimitive() {\n if (!isPresent(this._valuePrimitive)) {\n return !isPresent(this.valueField);\n }\n return this._valuePrimitive;\n }\n get dir() {\n return this.direction;\n }\n get disabledClass() {\n return this.disabled;\n }\n get isLoading() {\n return this.loading;\n }\n get isAriaExpanded() {\n return this.isOpen;\n }\n /**\n * @hidden\n */\n hostMousedown(event) {\n const inputElement = this.searchbar.input.nativeElement;\n if (event.button === 0) {\n if (this.isFocused && this.isOpen && event.target === inputElement) {\n return;\n }\n if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {\n this.searchbar.focus();\n }\n this.togglePopup(!this.isOpen);\n event.preventDefault();\n }\n }\n get listContainerClasses() {\n const containerClasses = ['k-list-container', 'k-reset'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n /**\n * @hidden\n */\n get customItemSizeClass() {\n return `${this.size ? getSizeClass('list', this.size) : ''}`;\n }\n get width() {\n let wrapperOffsetWidth = 0;\n if (isDocumentAvailable()) {\n wrapperOffsetWidth = this.wrapper.nativeElement.offsetWidth;\n }\n const width = this.popupSettings.width || wrapperOffsetWidth;\n const minWidth = isNaN(wrapperOffsetWidth) ? wrapperOffsetWidth : `${wrapperOffsetWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get activeDescendant() {\n const focusedTagIndex = this.focusedTagIndex;\n const focusedListIndex = this.selectionService.focused;\n let prefix;\n let item;\n if (isPresent(focusedTagIndex) && !this.isOpen) {\n item = this.tags[focusedTagIndex];\n prefix = this.tagPrefix;\n }\n else if (isPresent(focusedListIndex) && focusedListIndex !== -1 && this.isOpen) {\n item = this.dataService.itemAt(focusedListIndex);\n prefix = this.optionPrefix;\n }\n else {\n return null;\n }\n return prefix + \"-\" + getter(item, this.valueField);\n }\n get noDataLabel() {\n if (this.dataService.itemsCount === 0) {\n return this.messageFor('noDataText');\n }\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n /**\n * @hidden\n */\n verifySettings() {\n if (!isDevMode() || this.value.length === 0) {\n return;\n }\n if (!isArray(this.value)) {\n throw new Error(MultiselectMessages.array);\n }\n if (this.valuePrimitive === true && isObjectArray(this.value)) {\n throw new Error(MultiselectMessages.primitive);\n }\n if (this.valuePrimitive === false && !isObjectArray(this.value)) {\n throw new Error(MultiselectMessages.object);\n }\n const valueOrText = !isPresent(this.valueField) !== !isPresent(this.textField);\n if (valueOrText) {\n throw new Error(MultiselectMessages.textAndValue);\n }\n }\n /**\n * @hidden\n */\n change(event) {\n const isCustomItem = (isPresent(event.added) || isPresent(event.removed)) && (event.added === -1 || event.removed === -1);\n if (isCustomItem) {\n this.addCustomValue(this.text);\n return; // The change is emited asynchronosly.\n }\n // Existing items.\n if (isPresent(event.added)) {\n const dataItem = this.dataService.itemAt(event.added);\n const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;\n this.value = [...this.value, newItem];\n }\n if (isPresent(event.removed)) {\n const dataItem = this.dataService.itemAt(event.removed);\n const filter = (item) => getter(item, this.valueField) !== getter(dataItem, this.valueField);\n this.value = this.value.filter(filter);\n this.selectionService.focused = event.removed;\n this.cdr.detectChanges();\n }\n this.emitValueChange();\n }\n /**\n * @hidden\n */\n setState(value) {\n let data = this.dataService.data;\n if (this.dataService.grouped) {\n data = data.filter(item => !item.header).map(item => item.value);\n }\n const selection = selectedIndices(this.value, data, this.valueField);\n this.selectionService.resetSelection(selection);\n if (this.disabledItemsService.isIndexDisabled(this.selectionService.focused)) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n if (this.isOpen && this.selectionService.focused === undefined) {\n if (this.dataService.itemsCount > 0) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n else if (this.allowCustom) {\n this.selectionService.focused = -1;\n }\n }\n if (this.valuePrimitive && !this.valueField) {\n this.selectedDataItems = value.slice();\n }\n if (isObjectArray(value) || this.valuePrimitive && this.valueField) {\n this.selectedDataItems = resolveAllValues(value, data, this.valueField);\n }\n if (this.selectedDataItems.length < value.length) {\n this.selectedDataItems = value\n .map(current => {\n const dataItem = this.selectedDataItems.find(item => getter(item, this.valueField) === getter(current, this.valueField));\n return isPresent(dataItem) ? dataItem : this.resolveDataItemFromTags(current);\n })\n .filter(dataItem => isPresent(dataItem));\n }\n this.tags = this.tagMapper(this.selectedDataItems.slice(0));\n this.disabledIndices = this.disabledItemsMapper();\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleFilter(text) {\n this.text = text;\n if (text && !this.isOpen) {\n this.openPopup();\n }\n if (this.filterable) {\n this.filterChange.emit(text);\n }\n else {\n this.searchTextAndFocus(text);\n }\n this.searchbar.setInputSize();\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n /**\n * @hidden\n */\n clearFilter() {\n if (this.filterable && this.text) {\n this.filterChange.emit(\"\");\n }\n this.text = \"\";\n /* Clearing the value from the input as the setInputSize calculation will be incorrect otherwise.\n Calling cdr.detectChanges to clear the input value as a result of property binding\n causes JAWS to read outdated tag values in IE upon tag selection for some reason. */\n this.searchbar.input.nativeElement.value = \"\";\n this.searchbar.setInputSize();\n }\n /**\n * @hidden\n */\n handleNavigate(event) {\n const navigateInput = this.text && event.keyCode !== Keys.ArrowDown && event.keyCode !== Keys.ArrowUp;\n const selectValue = this.text && event.keyCode === Keys.Enter || event.keyCode === Keys.Escape;\n const deleteTag = !this.text && event.keyCode === Keys.Backspace && this.tags.length > 0;\n if (deleteTag) {\n this.handleBackspace();\n return;\n }\n if (this.disabled || navigateInput && !selectValue) {\n return;\n }\n const eventData = event;\n const focused = isNaN(this.selectionService.focused) ? -1 : this.selectionService.focused;\n const action = this.navigationService.process({\n current: focused,\n max: this.dataService.itemsCount - 1,\n min: this.allowCustom && this.text ? -1 : 0,\n open: this.isOpen,\n originalEvent: eventData\n });\n if (action !== NavigationAction.Undefined &&\n ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {\n event.preventDefault();\n }\n }\n /**\n * @hidden\n */\n handleRemoveTag({ tag }) {\n const eventArgs = new RemoveTagEvent(tag);\n if (this.disabled || this.readonly) {\n return;\n }\n this.focus();\n this.removeTag.emit(eventArgs);\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n if (tag instanceof Array) {\n this.removeGroupTag(tag);\n }\n else {\n this.removeSingleTag(tag);\n }\n this.cdr.detectChanges();\n }\n /**\n * @hidden\n */\n clearAll(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n this.focus();\n this.clearFilter();\n const selected = this.selectionService.selected;\n this.value = this.value.filter((_item, index) => this.disabledItemsService.isIndexDisabled(selected[index]));\n this.emitValueChange();\n }\n /**\n * @hidden\n */\n addCustomValue(text) {\n this.customValueSubject.next(text);\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n ngDoCheck() {\n const valueChanges = this.differ && this.differ.diff(this.value);\n if (valueChanges && !this.valueChangeDetected) {\n this.setState(this.value);\n }\n this.valueChangeDetected = false;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper.nativeElement, \"tabindex\");\n this.createCustomValueStream();\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.markForCheck();\n });\n this.setState(this.value);\n this.setComponentClasses();\n this.initialized = true;\n }\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n if (isChanged('valueNormalizer', changes)) {\n this.createCustomValueStream();\n }\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes)) {\n this.setState(this.value);\n }\n }\n ngAfterViewInit() {\n this.searchbar.setInputSize();\n }\n ngOnDestroy() {\n this._toggle(false);\n this.unsubscribeEvents();\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_multiselect %}#toc-setting-the-initially-opened-component)).\n * If you use the `toggle` method to open or close the popup, the respective `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required for opening the popup on load.\n // Otherwise, the \"Expression has changed...\" type error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n this.cdr.markForCheck();\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * Resets the value of the MultiSelect.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.text = \"\";\n this.value = [];\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n // NG MODEL BINDINGS\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value || [];\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n onTagMapperChange() {\n this.tags = this.tagMapper(this.selectedDataItems.slice(0));\n this.cdr.markForCheck();\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n const isOpen = () => this.isOpen;\n const isClosed = () => !this.isOpen;\n const isTagFocused = () => !this.isOpen && this.focusedTagIndex !== undefined;\n [\n this.selectionService.onChange.subscribe(this.handleItemChange.bind(this)),\n this.navigationService.esc.subscribe(this.closePopup.bind(this)),\n this.navigationService.enter.pipe(filter(isOpen)).subscribe(this.handleEnter.bind(this)),\n this.navigationService.open.subscribe(this.openPopup.bind(this)),\n this.navigationService.close.subscribe(this.handleClose.bind(this)),\n this.navigationService.up.pipe(filter(isOpen)).subscribe((event) => this.handleUp(event.index)),\n this.navigationService.home.pipe(filter(() => isClosed)).subscribe(this.handleHome.bind(this)),\n this.navigationService.end.pipe(filter(() => isClosed)).subscribe(this.handleEnd.bind(this)),\n this.navigationService.backspace.pipe(filter(isTagFocused)).subscribe(this.handleBackspace.bind(this)),\n this.navigationService.delete.pipe(filter(isTagFocused)).subscribe(this.handleDelete.bind(this)),\n this.navigationService.left.subscribe(this.direction === 'rtl' ? this.handleRightKey.bind(this) : this.handleLeftKey.bind(this)),\n this.navigationService.right.subscribe(this.direction === 'rtl' ? this.handleLeftKey.bind(this) : this.handleRightKey.bind(this)),\n this.navigationService.down.subscribe((event) => this.handleDownKey(event.index))\n ].forEach(s => this.observableSubscriptions.add(s));\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up MultiSelect on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if ((this.isFocused || this.isOpen) && !inDropDown(this.wrapper, target, this.popupRef)) {\n this._zone.run(() => {\n this.blur();\n if (this.isOpen) {\n this.togglePopup(false);\n }\n });\n }\n }));\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.observableSubscriptions.unsubscribe();\n if (this.customValueSubscription) {\n this.customValueSubscription.unsubscribe();\n }\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n }\n removeGroupTag(dataItems) {\n let data = this.dataService.data;\n if (this.dataService.grouped) {\n data = data.filter(item => !item.header).map(item => item.value);\n }\n const dataItemValues = new Set(dataItems.map(item => getter(item, this.valueField)));\n this.value = this.value.filter(value => {\n const index = selectedIndices([value], data, this.valueField)[0];\n const isDataItemDisabled = this.disabledItemsService.isIndexDisabled(index);\n return !dataItemValues.has(getter(value, this.valueField)) || isDataItemDisabled;\n });\n this.emitValueChange();\n }\n removeSingleTag(dataItem) {\n let data = this.dataService.data;\n if (this.dataService.grouped) {\n data = data.filter(item => !item.header).map(item => item.value);\n }\n const index = selectedIndices([dataItem], data, this.valueField)[0];\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return;\n }\n if (isNumber(index)) {\n this.selectionService.unselect(index);\n this.selectionService.focused = index;\n this.togglePopup(false);\n }\n else { // the deleted item is not present in the source\n const filter = item => getter(item, this.valueField) !== getter(dataItem, this.valueField);\n this.value = this.value.filter(filter);\n this.emitValueChange();\n }\n }\n /**\n * @hidden\n *\n * Determines which of the provided tags should be disabled and stores their position indices\n */\n disabledItemsMapper() {\n const { selected } = this.selectionService;\n return new Set(this.selectedDataItems.reduce((indices, _item, index) => {\n if (this.disabledItemsService.isIndexDisabled(selected[index])) {\n indices.push(index);\n }\n return indices;\n }, []));\n }\n createCustomValueStream() {\n if (this.customValueSubscription) {\n this.customValueSubscription.unsubscribe();\n }\n this.customValueSubscription = this.customValueSubject.pipe(tap(() => {\n this.loading = true;\n this.disabled = true;\n this.cdr.detectChanges();\n }), this.valueNormalizer, catchError(() => {\n this.loading = false;\n this.disabled = false;\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n this.nextTick(() => {\n this.searchbar.focus();\n });\n this.createCustomValueStream();\n return of(null);\n }))\n .subscribe((normalizedValue) => {\n this.loading = false;\n this.disabled = false;\n if (isPresent(normalizedValue)) { // if valueNormalizer returns `null` or `undefined` custom value is discarded\n const newValue = this.valuePrimitive ? getter(normalizedValue, this.valueField) : normalizedValue;\n const itemIndex = this.dataService.indexOf(newValue);\n const customItem = itemIndex === -1;\n if (this.value.indexOf(newValue) === -1) {\n this.tags = this.tagMapper([...this.selectedDataItems, normalizedValue]);\n if (!customItem) {\n this.selectionService.add(itemIndex);\n }\n else {\n this.value = [...this.value, newValue];\n }\n }\n else {\n if (!customItem && this.selectionService.isSelected(itemIndex)) {\n this.selectionService.unselect(itemIndex);\n this.selectionService.focused = itemIndex;\n }\n else {\n this.value = this.value.filter(item => getter(item, this.valueField) !== newValue);\n }\n }\n this.emitValueChange();\n }\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n this.nextTick(() => {\n this.searchbar.focus();\n });\n });\n }\n handleItemChange(event) {\n this.change(event);\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n }\n handleEnter(event) {\n const service = this.selectionService;\n const focusedIndex = this.selectionService.focused;\n if (this.isOpen) {\n event.originalEvent.preventDefault();\n }\n if (focusedIndex === -1) {\n if (this.allowCustom && this.text) {\n this.addCustomValue(this.text);\n }\n return; // Clear filter & close are done at customValueSubscription due to race conditions.\n }\n if (service.isSelected(focusedIndex)) {\n service.unselect(focusedIndex);\n service.focused = focusedIndex;\n }\n else {\n service.add(focusedIndex);\n }\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n }\n handleClose() {\n this.closePopup();\n this.searchbar.focus();\n }\n handleEnd() {\n this.focusedTagIndex = this.tags.length - 1;\n }\n handleHome() {\n this.focusedTagIndex = 0;\n }\n handleUp(index) {\n this.selectionService.focused = index;\n }\n handleBackspace() {\n if (this.focusedTagIndex !== undefined) {\n this.handleDelete();\n }\n else {\n this.handleRemoveTag({ tag: this.tags[this.tags.length - 1] });\n this.searchbar.focus();\n }\n }\n handleDelete() {\n this.handleRemoveTag({ tag: this.tags[this.focusedTagIndex] });\n if (this.focusedTagIndex === this.tags.length) {\n this.focusedTagIndex = undefined;\n }\n }\n handleLeftKey() {\n if (this.focusedTagIndex === undefined || this.focusedTagIndex < 0) {\n this.focusedTagIndex = this.tags.length - 1;\n }\n else if (this.focusedTagIndex !== 0) {\n this.focusedTagIndex--;\n }\n }\n handleDownKey(index) {\n if (this.isOpen) {\n this.selectionService.focused = index || this.firstFocusableIndex(0);\n }\n else {\n this.openPopup();\n }\n }\n handleRightKey() {\n const last = this.tags.length - 1;\n if (this.focusedTagIndex === last) {\n this.focusedTagIndex = undefined;\n }\n else if (this.focusedTagIndex < last) {\n this.focusedTagIndex++;\n }\n }\n findIndex(text, startsFrom = 0) {\n let itemText;\n text = text.toLowerCase();\n let index = this.dataService.findIndex(item => {\n if (this.dataService.grouped) {\n itemText = getter(item.value, this.textField);\n }\n else {\n itemText = getter(item, this.textField);\n }\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return text && itemText.startsWith(text);\n }, startsFrom);\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index + 1 > this.dataService.itemsCount) ? -1 : this.findIndex(text, index + 1);\n }\n else {\n return index;\n }\n }\n searchTextAndFocus(text) {\n const index = this.findIndex(text);\n this.selectionService.focused = index;\n }\n closePopup() {\n this.togglePopup(false);\n this.focusedTagIndex = undefined;\n }\n openPopup() {\n this.togglePopup(true);\n this.focusedTagIndex = undefined;\n }\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n this._toggle(open);\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: anchorPosition,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute'\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => {\n this.togglePopup(false);\n });\n }\n emitValueChange() {\n this.onChangeCallback(this.value);\n this.valueChange.emit(this.value);\n }\n resolveDataItemFromTags(value) {\n if (!(this.tags && this.tags.length && isPresent(value))) {\n return undefined;\n }\n // Flattening the tags array in case of a summary tag occurrence.\n const tags = this.tags.reduce((acc, tag) => {\n const items = isArray(tag) ? tag : [tag];\n acc.push(...items);\n return acc;\n }, []);\n return tags.find(tag => getter(tag, this.valueField) === getter(value, this.valueField));\n }\n firstFocusableIndex(index) {\n const maxIndex = this.dataService.itemsCount;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n const nextIndex = index + 1;\n return (nextIndex < maxIndex) ? this.firstFocusableIndex(nextIndex) : undefined;\n }\n else {\n return index;\n }\n }\n nextTick(f) {\n this._zone.runOutsideAngular(() => {\n // Use `setTimeout` instead of a resolved promise\n // because the latter does not wait long enough.\n setTimeout(() => this._zone.run(f));\n });\n }\n setComponentClasses() {\n if (this.size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n }\n if (this.rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n }\n }\n}\nMultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: DataService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiSelectComponent, selector: \"kendo-multiselect\", inputs: { focusableId: \"focusableId\", autoClose: \"autoClose\", loading: \"loading\", data: \"data\", value: \"value\", valueField: \"valueField\", textField: \"textField\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", placeholder: \"placeholder\", disabled: \"disabled\", itemDisabled: \"itemDisabled\", checkboxes: \"checkboxes\", readonly: \"readonly\", filterable: \"filterable\", virtual: \"virtual\", popupSettings: \"popupSettings\", listHeight: \"listHeight\", valuePrimitive: \"valuePrimitive\", clearButton: \"clearButton\", tagMapper: \"tagMapper\", allowCustom: \"allowCustom\", valueNormalizer: \"valueNormalizer\" }, outputs: { filterChange: \"filterChange\", valueChange: \"valueChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\", removeTag: \"removeTag\" }, host: { listeners: { \"mousedown\": \"hostMousedown($event)\" }, properties: { \"class.k-multiselect\": \"this.hostClasses\", \"class.k-input\": \"this.hostClasses\", \"attr.dir\": \"this.dir\", \"class.k-disabled\": \"this.disabledClass\", \"class.k-loading\": \"this.isLoading\", \"attr.role\": \"this.role\", \"attr.aria-expanded\": \"this.isAriaExpanded\" } }, providers: [\n MULTISELECT_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselect'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => MultiSelectComponent)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => MultiSelectComponent)\n }\n ], queries: [{ propertyName: \"template\", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: \"customItemTemplate\", first: true, predicate: CustomItemTemplateDirective, descendants: true }, { propertyName: \"groupTemplate\", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: \"fixedGroupTemplate\", first: true, predicate: FixedGroupTemplateDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: \"footerTemplate\", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: \"tagTemplate\", first: true, predicate: TagTemplateDirective, descendants: true }, { propertyName: \"groupTagTemplate\", first: true, predicate: GroupTagTemplateDirective, descendants: true }, { propertyName: \"noDataTemplate\", first: true, predicate: NoDataTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"searchbar\", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"optionsList\", first: true, predicate: [\"optionsList\"], descendants: true }], exportAs: [\"kendoMultiSelect\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{ text }}\n \n
\n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `, isInline: true, components: [{ type: TagListComponent, selector: \"kendo-taglist\", inputs: [\"tags\", \"textField\", \"valueField\", \"valueDepth\", \"focused\", \"template\", \"groupTemplate\", \"disabled\", \"tagPrefix\", \"id\", \"size\", \"rounded\", \"fillMode\", \"disabledIndices\"], outputs: [\"removeTag\"] }, { type: SearchBarComponent, selector: \"kendo-searchbar\", inputs: [\"id\", \"listId\", \"tagListId\", \"activeDescendant\", \"noDataLabel\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"role\", \"userInput\", \"suggestedText\", \"placeholder\"], outputs: [\"valueChange\", \"onBlur\", \"onFocus\", \"onClick\", \"onNavigate\"] }, { type: ListComponent, selector: \"kendo-list\", inputs: [\"selected\", \"focused\", \"textField\", \"valueField\", \"height\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"show\", \"id\", \"optionPrefix\", \"multipleSelection\", \"virtual\", \"type\", \"checkboxes\", \"data\", \"size\", \"rounded\"], outputs: [\"onClick\", \"pageChange\", \"listResize\"] }, { type: i9.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \" }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: SelectableDirective, selector: \"[kendoDropDownsSelectable]\", inputs: [\"index\", \"checkboxes\", \"height\", \"multipleSelection\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoMultiSelect',\n providers: [\n MULTISELECT_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselect'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => MultiSelectComponent)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => MultiSelectComponent)\n }\n ],\n selector: 'kendo-multiselect',\n template: `\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{ text }}\n \n
\n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n \n
\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2.PopupService }, { type: DataService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: i0.ChangeDetectorRef }, { type: i0.KeyValueDiffers }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { focusableId: [{\n type: Input\n }], autoClose: [{\n type: Input\n }], loading: [{\n type: Input\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], valueField: [{\n type: Input\n }], textField: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], disabled: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], checkboxes: [{\n type: Input\n }], readonly: [{\n type: Input\n }], filterable: [{\n type: Input\n }], virtual: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], tagMapper: [{\n type: Input\n }], allowCustom: [{\n type: Input\n }], valueNormalizer: [{\n type: Input\n }], filterChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], removeTag: [{\n type: Output\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], searchbar: [{\n type: ViewChild,\n args: [SearchBarComponent, { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }], template: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], customItemTemplate: [{\n type: ContentChild,\n args: [CustomItemTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], tagTemplate: [{\n type: ContentChild,\n args: [TagTemplateDirective, { static: false }]\n }], groupTagTemplate: [{\n type: ContentChild,\n args: [GroupTagTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-multiselect']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], isLoading: [{\n type: HostBinding,\n args: ['class.k-loading']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], isAriaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], hostMousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }] } });\n\n/**\n * Renders the column cell content of the MultiColumnComboBox. To define a column cell template, nest an `` tag\n * with the `kendoMultiColumnComboBoxColumnCellTemplate` directive inside the [``]({% slug api_dropdowns_comboboxcolumncomponent %}) tag\n * ([see example]({% slug templates_multicolumncombobox %})).\n *\n * The current [`column`]({% slug api_dropdowns_comboboxcolumncomponent %}) and data item are available as context variables:\n *\n * - `let-dataItem=\"dataItem\"` (`any`) - The current data item. Also available as implicit context variable.\n * - `let-column=\"column\"` ([`ColumnComponent`]({% slug api_dropdowns_comboboxcolumncomponent %})) - The current column configuration obejct.\n */\nclass ColumnCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nColumnCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColumnCellTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nColumnCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColumnCellTemplateDirective, selector: \"[kendoMultiColumnComboBoxColumnCellTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColumnCellTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiColumnComboBoxColumnCellTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Renders the column header content of the MultiColumnComboBox. To define a column header template, nest an `` tag\n * with the `kendoMultiColumnComboBoxColumnHeaderTemplate` directive inside the [``]({% slug api_dropdowns_comboboxcolumncomponent %}) tag\n * ([see example]({% slug templates_multicolumncombobox %})).\n *\n * The current [`column`]({% slug api_dropdowns_comboboxcolumncomponent %}) is available as implicit context variable.\n */\nclass ColumnHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nColumnHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColumnHeaderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nColumnHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColumnHeaderTemplateDirective, selector: \"[kendoMultiColumnComboBoxColumnHeaderTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColumnHeaderTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiColumnComboBoxColumnHeaderTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Represents the column definition of the [MultiColumnComboBox]({% slug overview_multicolumncombobox %})\n * ([see example]({% slug columns_multicolumncombobox %})).\n */\nclass ComboBoxColumnComponent {\n constructor() {\n /**\n * Sets the visibility of the column.\n *\n * @default false\n */\n this.hidden = false;\n /**\n * @hidden\n */\n this.matchesMedia = true;\n }\n}\nComboBoxColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nComboBoxColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ComboBoxColumnComponent, selector: \"kendo-combobox-column\", inputs: { field: \"field\", title: \"title\", width: \"width\", hidden: \"hidden\", style: \"style\", headerStyle: \"headerStyle\", class: \"class\", headerClass: \"headerClass\", media: \"media\" }, queries: [{ propertyName: \"cellTemplate\", first: true, predicate: ColumnCellTemplateDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: ColumnHeaderTemplateDirective, descendants: true }], ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxColumnComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-combobox-column',\n template: ''\n }]\n }], propDecorators: { cellTemplate: [{\n type: ContentChild,\n args: [ColumnCellTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [ColumnHeaderTemplateDirective, { static: false }]\n }], field: [{\n type: Input\n }], title: [{\n type: Input\n }], width: [{\n type: Input\n }], hidden: [{\n type: Input\n }], style: [{\n type: Input\n }], headerStyle: [{\n type: Input\n }], class: [{\n type: Input\n }], headerClass: [{\n type: Input\n }], media: [{\n type: Input\n }] } });\n\n/**\n * Persists the intially resolved scrollbar width value.\n */\nlet SCROLLBAR_WIDTH;\n/**\n * @hidden\n *\n * Gets the default scrollbar width accoring to the current environment.\n */\nconst scrollbarWidth = () => {\n // calculate scrollbar width only once, then return the memoized value\n if (isNaN(SCROLLBAR_WIDTH)) {\n const div = document.createElement('div');\n div.style.cssText = 'overflow: scroll; overflow-x: hidden; zoom: 1; clear: both; display: block;';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n SCROLLBAR_WIDTH = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n }\n return SCROLLBAR_WIDTH;\n};\n/**\n * Checks if all columns have a valid user-defined width.\n */\nconst allColumnsWidthsSet = (columns) => {\n if (!isPresent(columns) || columns.length === 0) {\n return false;\n }\n return columns.toArray().every(column => !isNaN(column.width) && column.width > 0);\n};\n/**\n * @hidden\n *\n * Calculates the row width according to the passed columns width configuration.\n * Hidden columns and such that don't match the provided media query are ignored.\n * If some of the columns don't have a preset width or have an invalid width value, the function returns `null`.\n */\nconst getRowWidthFromColumnsMeta = (columns) => {\n if (!allColumnsWidthsSet(columns)) {\n return null;\n }\n const bordersWidth = 2;\n const initialRowWidht = scrollbarWidth() + bordersWidth;\n return columns.reduce((totalWidth, column) => {\n if (!column.hidden && column.matchesMedia) {\n totalWidth += parseInt(column.width, 10);\n }\n return totalWidth;\n }, initialRowWidht);\n};\n\n/**\n * Represents the [Kendo UI MultiColumnComboBox component for Angular]({% slug overview_multicolumncombobox %}).\n */\nclass MultiColumnComboBoxComponent extends ComboBoxComponent {\n constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled) {\n super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled);\n /**\n * @hidden\n */\n this.hostClasses = true;\n this.removeWindowResizeListener = noop;\n // the row height in @progress/kendo-theme-default\n this.defaultVirtualItemHeight = 36;\n // use a smaller virtual page size as columns with multiple cells can cause poor performance\n this.defaultVirtualPageSize = 30;\n }\n /**\n * @hidden\n */\n get isDisabled() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n set header(header) {\n // updates the header padding on initial render as the resize senzor doesn't kick in as early\n this.updateHeaderPadding(header && header.nativeElement);\n }\n get popupWidth() {\n const wrapperOffsetWidth = this.wrapper.nativeElement.offsetWidth;\n const min = `${wrapperOffsetWidth}px`;\n const width = this.popupSettings.width || getRowWidthFromColumnsMeta(this.columns) || wrapperOffsetWidth;\n const max = isNaN(width) ? width : `${width}px`;\n return { min, max };\n }\n /**\n * @hidden\n */\n get tableSizeClass() {\n return `${this.size ? getSizeClass('table', this.size) : ''}`;\n }\n /**\n * @hidden\n */\n get listContainerClasses() {\n return [\n 'k-popup',\n 'k-dropdowngrid-popup'\n ].concat(this.popupSettings.popupClass || []);\n }\n ngAfterViewInit() {\n this.updateColumnsMediaState();\n this.addWindowResizeListener();\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.removeWindowResizeListener();\n }\n /**\n * @hidden\n */\n textFrom(dataItem, field) {\n return getter(dataItem, field);\n }\n /**\n * @hidden\n *\n * Adds or removes a padding value at the end of the header container equal to the size of the scrollbar.\n * As when the items container has a scrollbar, the column headers and the cells are misaligned.\n * When the container has a scrollbar, the padding style is added, and when there is none - it is removed.\n */\n updateHeaderPadding(header) {\n if (!isPresent(header)) {\n return;\n }\n // the scrollbar is rendered on the left in rtl\n const headerPaddingPosition = this.localization.rtl ? 'padding-left' : 'padding-right';\n if (this.optionsList.hasScrollbar() && scrollbarWidth() > 0) {\n this.renderer.setStyle(header, headerPaddingPosition, `${scrollbarWidth()}px`);\n }\n else {\n this.renderer.removeStyle(header, headerPaddingPosition);\n }\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (isPresent(this.data) && this.data.length > 0 && this.data.some(item => !isObject(item))) {\n throw new Error(MultiColumnComboBoxMessages.data);\n }\n if (!isPresent(this.valueField) || !isPresent(this.textField)) {\n throw new Error(MultiColumnComboBoxMessages.textAndValue);\n }\n super.verifySettings();\n }\n addWindowResizeListener() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.zone.runOutsideAngular(() => this.removeWindowResizeListener = this.renderer.listen(window, 'resize', this.updateColumnsMediaState.bind(this)));\n }\n updateColumnsMediaState() {\n if (!(isPresent(this.columns) && isDocumentAvailable())) {\n return;\n }\n this.columns.forEach(column => {\n const matchesMedia = !column.media || window.matchMedia(column.media).matches;\n if (column.matchesMedia !== matchesMedia) {\n column.matchesMedia = matchesMedia;\n if (this.isOpen) {\n // enter the zone only if the popup is actually open\n // update its width in case it's dependent on the columns' width\n this.zone.run(() => this.popupRef.popupElement.style.width = this.popupWidth.max);\n }\n }\n });\n }\n}\nMultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }], target: i0.ɵɵFactoryTarget.Component });\nMultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiColumnComboBoxComponent, selector: \"kendo-multicolumncombobox\", host: { properties: { \"class.k-dropdowngrid\": \"this.hostClasses\", \"class.k-disabled\": \"this.isDisabled\" } }, providers: [\n SelectionService,\n DataService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multicolumncombobox'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent)\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent)\n }\n ], queries: [{ propertyName: \"columns\", predicate: ComboBoxColumnComponent }], viewQueries: [{ propertyName: \"header\", first: true, predicate: [\"header\"], descendants: true }], usesInheritance: true, ngImport: i0, template: `\n \n
\n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n\n \n
\n\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n {{ column.title || column.field }}\n \n \n \n \n \n \n \n
\n
\n
\n\n \n \n \n \n \n {{ textFrom(dataItem, column.field) }}\n \n \n \n \n
\n
\n\n \n \n \n\n \n \n \n
\n \n
{{ messageFor('noDataText') }}
\n
\n \n\n \n \n
\n \n \n \n \n \n \n
\n \n \n
\n
\n
\n\n \n\n
\n\n \n \n\n \n \n `, isInline: true, components: [{ type: SearchBarComponent, selector: \"kendo-searchbar\", inputs: [\"id\", \"listId\", \"tagListId\", \"activeDescendant\", \"noDataLabel\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"role\", \"userInput\", \"suggestedText\", \"placeholder\"], outputs: [\"valueChange\", \"onBlur\", \"onFocus\", \"onClick\", \"onNavigate\"] }, { type: ListComponent, selector: \"kendo-list\", inputs: [\"selected\", \"focused\", \"textField\", \"valueField\", \"height\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"show\", \"id\", \"optionPrefix\", \"multipleSelection\", \"virtual\", \"type\", \"checkboxes\", \"data\", \"size\", \"rounded\"], outputs: [\"onClick\", \"pageChange\", \"listResize\"] }, { type: i9.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \" }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i9.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }, { type: i11.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i11.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n SelectionService,\n DataService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multicolumncombobox'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent)\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent)\n }\n ],\n selector: 'kendo-multicolumncombobox',\n template: `\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n\n \n
\n\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n {{ column.title || column.field }}\n \n \n \n \n \n \n \n
\n
\n
\n\n \n \n \n \n \n {{ textFrom(dataItem, column.field) }}\n \n \n \n \n \n
\n\n \n \n \n\n \n \n \n
\n \n
{{ messageFor('noDataText') }}
\n
\n \n\n \n \n
\n \n \n \n \n \n \n
\n \n \n
\n
\n
\n\n \n\n
\n\n \n \n\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-dropdowngrid']\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], columns: [{\n type: ContentChildren,\n args: [ComboBoxColumnComponent]\n }], header: [{\n type: ViewChild,\n args: ['header', { static: false }]\n }] } });\n\n/**\n * Renders the content of each node in the DropDownTree. To define a node template, nest an `` tag\n * with the `kendoDropDownTreeNodeTemplate` directive inside the `` tag.\n *\n * The current data item and hierarchical index are available as context variables:\n *\n * - `let-dataItem` (`any`) - The current data item. Available as implicit context variable.\n * - `let-index=\"index\"` (`string`) - The current item hierarchical index.\n */\nclass NodeTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNodeTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NodeTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nNodeTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NodeTemplateDirective, selector: \"[kendoDropDownTreeNodeTemplate], [kendoMultiSelectTreeNodeTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NodeTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeNodeTemplate], [kendoMultiSelectTreeNodeTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst DEFAULT_POPUP_SETTINGS$1 = { animate: true };\nconst hasChildren$1 = () => false;\nconst fetchChildren$1 = () => of([]);\nconst itemDisabled$1 = () => false;\nconst isNodeVisible$1 = () => true;\nconst DEFAULT_SIZE$1 = 'medium';\nconst DEFAULT_ROUNDED$1 = 'medium';\nconst DEFAULT_FILL_MODE$1 = 'solid';\n/**\n * Represents the [Kendo UI DropDownTree component for Angular]({% slug overview_ddt %}).\n */\nclass DropDownTreeComponent {\n constructor(wrapper, popupService, navigationService, renderer, _zone, cdr, localization, touchEnabled) {\n this.wrapper = wrapper;\n this.popupService = popupService;\n this.navigationService = navigationService;\n this.renderer = renderer;\n this._zone = _zone;\n this.cdr = cdr;\n this.localization = localization;\n this.touchEnabled = touchEnabled;\n this.hostClasses = true;\n this.role = 'listbox';\n this.ariaHasPopup = 'tree';\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_ddt %})).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_ddt %})).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires when the user expands a node in the popup TreeView.\n */\n this.nodeExpand = new EventEmitter();\n /**\n * Fires when the user collapses a node in the popup TreeView.\n */\n this.nodeCollapse = new EventEmitter();\n /**\n * Fires each time the user focuses the DropDownTree.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the DropDownTree gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the value is changed\n * ([see example]({% slug overview_ddt %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires when the value of the built-in filter input element changes.\n */\n this.filterChange = new EventEmitter();\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * A function which determines if a specific node has child nodes.\n */\n this.hasChildren = hasChildren$1;\n /**\n * A function which provides the child nodes for a given parent node.\n */\n this.fetchChildren = fetchChildren$1;\n /**\n * The hint which is displayed when the component is empty.\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the options list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of options and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the type of the selected value\n * ([more information and example]({% slug valuebinding_ddt %}#toc-primitive-values)).\n * If set to `true`, the selected value has to be of a primitive value.\n */\n this.valuePrimitive = false;\n /**\n * A function that is executed for each data item and determines if a specific item is disabled.\n */\n this.itemDisabled = itemDisabled$1;\n /**\n * A callback which determines whether a tree node should be rendered as hidden. The utility .k-display-none class is used to hide the nodes.\n * Useful for custom filtering implementations.\n */\n this.isNodeVisible = isNodeVisible$1;\n /**\n * Indicates whether the child nodes will be fetched on node expand or will be initially prefetched.\n * @default true\n */\n this.loadOnDemand = true;\n /**\n * Renders the built-in input element for filtering the DropDownTree.\n * If set to `true`, the component emits the `filterChange` event, which can be used to [filter the DropDownTree manually]({% slug filtering_ddt %}#toc-manual-filtering).\n * A built-in filtering implementation is available to use with the [`kendoDropDownTreeHierarchyBinding`]({% slug api_dropdowns_dropdowntreehierarchybindingdirective %}) and [`kendoDropDownTreeFlatBinding`]({% slug api_dropdowns_dropdowntreeflatbindingdirective %}) directives.\n */\n this.filterable = false;\n /**\n * @hidden\n */\n this.filter = '';\n /**\n * @hidden\n *\n * Used by the kendo-label and kendo-floatinglabel to access and associate the focusable element with the provided label via aria-labelledby.\n */\n this.focusableId = `k-${guid$1()}`;\n /**\n * @hidden\n */\n this.selectedKeys = [];\n /**\n * @hidden\n */\n this.filterStateChange = new EventEmitter();\n /**\n * @hidden\n */\n this.allNodesHidden = false;\n /**\n * @hidden\n *\n * Used to associate the value label with the wrapper via aria-describedby.\n */\n this.valueLabelId = `k-${guid$1()}`;\n this._popupSettings = DEFAULT_POPUP_SETTINGS$1;\n this._tabindex = 0;\n this._isFocused = false;\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n this.subscriptions = [];\n this.onTouchedCallback = noop;\n this.onChangeCallback = noop;\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subscribeEvents();\n this.subscribeTouchEvents();\n this.subscribeFocusEvents();\n }\n get isDisabled() {\n return this.disabled;\n }\n get isLoading() {\n return this.loading;\n }\n get id() {\n return this.focusableId;\n }\n get hostTabIndex() {\n return this.tabindex;\n }\n get isAriaExpanded() {\n return this.isOpen;\n }\n get isReadonly() {\n return this.readonly;\n }\n /**\n * @hidden\n */\n handleClick() {\n this.togglePopup(!this.isOpen);\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n const eventData = event;\n this.navigationService.process({\n originalEvent: eventData\n });\n }\n set treeview(treeview) {\n if (treeview) {\n if (this.isFocused && !this.filterable || this.touchEnabled) {\n treeview.focus();\n }\n // the treeview animations are initially disabled (we don't want expand animations during popup opening)\n // re-enables the animations for user interaction\n treeview.animate = true;\n this._treeview = treeview;\n }\n }\n get treeview() {\n return this._treeview;\n }\n /**\n * Sets the data of the DropDownTree.\n *\n * > The data has to be provided in an array-like list with objects.\n */\n set data(data) {\n this._nodes = data;\n this.setState();\n }\n get data() {\n return this._nodes;\n }\n /**\n * Sets the value of the DropDownTree.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n */\n set value(newValue) {\n this._value = newValue;\n this.setState();\n }\n get value() {\n return this._value;\n }\n /**\n * Configures the popup of the DropDownTree.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, DEFAULT_POPUP_SETTINGS$1, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Keeps the current `dataItem` object in order to resolve selection.\n * Needs to be provided when `value` is bound in and `valuePrimitive` is set to true.\n */\n set dataItem(item) {\n this._dataItem = item;\n this.setState();\n }\n get dataItem() {\n return this._dataItem ? this._dataItem : this.value;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const providedTabIndex = Number(value);\n const defaultTabIndex = 0;\n this._tabindex = !isNaN(providedTabIndex) ? providedTabIndex : defaultTabIndex;\n }\n get tabindex() {\n return this.disabled ? -1 : this._tabindex;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$1;\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('picker', this.size));\n if (size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('picker', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$1;\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n if (rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$1;\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('picker', this.fillMode));\n if (fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('picker', newFillMode));\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n get width() {\n const wrapperWidth = this.wrapper.nativeElement.offsetWidth;\n const width = this.popupSettings.width || wrapperWidth;\n const minWidth = isNaN(wrapperWidth) ? wrapperWidth : `${wrapperWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n /**\n * @hidden\n *\n * Alias for `isNodeExpanded`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n set isExpanded(callback) {\n this.isNodeExpanded = callback;\n }\n get isExpanded() {\n return this.isNodeExpanded;\n }\n /**\n * @hidden\n *\n * Alias for `nodeExpand`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get expand() {\n return this.nodeExpand;\n }\n /**\n * @hidden\n *\n * Alias for `nodeCollapse`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get collapse() {\n return this.nodeCollapse;\n }\n /**\n * @hidden\n *\n * Alias for `data`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives.\n */\n set nodes(nodes) {\n this.data = nodes;\n }\n get nodes() {\n return this.data;\n }\n /**\n * @hidden\n *\n * Alias for `fetchChildren`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives\n */\n set children(callback) {\n this.fetchChildren = callback;\n }\n get children() {\n return this.fetchChildren;\n }\n /**\n * @hidden\n *\n * Alias for `isNodeVisible`. Used for compatibility with the `DataBoundComponent` interface.\n * The `DataBoundComponent` interface is used in the data-binding directives.\n */\n set isVisible(callback) {\n this.isNodeVisible = callback;\n }\n get isVisible() {\n return this.isNodeVisible;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'tabindex');\n this.assignAriaDescribedBy();\n this.subscriptions.push(this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.markForCheck();\n }));\n this.setComponentClasses();\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes, false)) {\n this.setState();\n }\n }\n /**\n * @hidden\n */\n ngAfterContentChecked() {\n this.verifySettings();\n }\n /**\n * @hidden\n *\n * Used by the kendo-floatinglabel component to determine if the floating label\n * should be rendered inside the input when the component is not focused.\n */\n isEmpty() {\n return !this.text && !this.placeholder;\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const togglePrevented = this.triggerPopupEvents(open);\n if (!togglePrevented) {\n if (open) {\n this.createPopup();\n }\n else {\n this.destroyPopup();\n }\n }\n }\n /**\n * @hidden\n */\n handleFocus(event) {\n if (event.target !== this.wrapper.nativeElement) {\n return;\n }\n event.stopImmediatePropagation();\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n }\n /**\n * @hidden\n */\n handleBlur(e) {\n const relatedTarget = e && e.relatedTarget;\n if (this.wrapper.nativeElement.contains(relatedTarget) ||\n (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {\n return;\n }\n this.isFocused = false;\n if (hasObservers(this.onBlur) ||\n isUntouched(this.wrapper.nativeElement)) {\n this._zone.run(() => {\n this.togglePopup(false);\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * Focuses a specific item of the DropDownTree based on a provided index in the format of `1_1`.\n * The targeted item should be expanded in order for it to be focused.\n * If null or invalid index is provided the focus will be set on the first item.\n */\n focusItemAt(index) {\n if (this.treeview) {\n const lookup = this.treeview.itemLookup(index);\n let isItemDisabled = !isPresent(lookup) || this.treeview.isDisabled(lookup.item.dataItem, lookup.item.index);\n if (!isItemDisabled) {\n this.treeview.focus(index);\n }\n }\n }\n /**\n * Focuses the DropDownTree.\n */\n focus() {\n if (!this.disabled) {\n this.wrapper.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownTree.\n */\n blur() {\n if (!this.disabled) {\n this.wrapper.nativeElement.blur();\n }\n }\n /**\n * Resets the value of the DropDownTree.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `valueChange` event will not be fired.\n */\n reset() {\n this.value = undefined;\n this.dataItem = undefined;\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_ddt %})).\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required to open the popup on load.\n // Otherwise, the \"ViewContainerRef not found...\" error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !isPresent(this.popupRef);\n this.destroyPopup();\n if (shouldOpen) {\n this.createPopup();\n }\n });\n }\n /**\n * @hidden\n */\n get popupContainerClasses() {\n const containerClasses = ['k-popup-dropdowntree'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n /**\n * @hidden\n */\n onSelectionChange({ dataItem, index }) {\n this.valueDepth = index.split('_').length - 1;\n const valueField = this.getField(this.valueField, dataItem);\n const newValue = this.valuePrimitive ?\n getter$1(valueField)(dataItem) :\n dataItem;\n const shouldUpdateValue = newValue !== this.value;\n if (shouldUpdateValue) {\n this.value = newValue;\n this.dataItem = dataItem;\n this.emitValueChange(this.value);\n }\n this.togglePopup(false);\n this.focus();\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n clearValue(event) {\n event.stopImmediatePropagation();\n this.focus();\n this.value = undefined;\n this.dataItem = undefined;\n this.clearState();\n this.valueChange.emit(undefined);\n this.emitValueChange();\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * @hidden\n */\n preventEventDefault(event) {\n event.preventDefault();\n }\n /**\n * @hidden\n */\n writeValue(value) {\n // If the user resets the value by providing null/undefined we need to reset the `dataItem`\n // Because upon initialization of the component the `writeValue` is being called twice -\n // first time with `null` value regardless of sync/async value - an extra check is added to\n // distinguish between client reset and initial phanotm 'null' value\n if (!isPresent(value) && isPresent(this.value)) {\n this.dataItem = null;\n }\n this.value = value === null ? undefined : value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleFilterInputChange(input) {\n this.filterChange.next(input.value);\n this.allNodesHidden = this.nodes.every((node, index) => !this.isVisible(node, String(index)));\n }\n /**\n * @hidden\n */\n get buttonClasses() {\n return this.loading ? 'k-i-loading k-input-loading-icon' : 'k-i-arrow-s';\n }\n /**\n * @hidden\n */\n get selectButtonClasses() {\n return `${this.size ? getSizeClass('button', this.size) : ''} ${this.fillMode ? 'k-button-' + this.fillMode : ''} ${this.fillMode ? 'k-button-' + this.fillMode + '-base' : ''}`;\n }\n /**\n * @hidden\n */\n get filterInputClasses() {\n return `${this.size ? getSizeClass('input', this.size) : ''} ${this.fillMode ? 'k-input-' + this.fillMode : ''} ${this.rounded ? getRoundedClass(this.rounded) : ''}`;\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.value === \"object\") {\n throw new Error(DropDownTreeMessages.primitive);\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.dataItem !== \"object\") {\n throw new Error(DropDownTreeMessages.dataItem);\n }\n if (this.valuePrimitive === false && isPresent(this.value) && typeof this.value !== \"object\") {\n throw new Error(DropDownTreeMessages.object);\n }\n if (!isPresent(this.valueField) || !isPresent(this.textField)) {\n throw new Error(DropDownTreeMessages.textAndValue);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && isPresent(this.value) && !isPresent(this.valueDepth)) {\n throw new Error(DropDownTreeMessages.valueDepth);\n }\n }\n emitValueChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n getText(textField, dataItem) {\n if (isPresent(dataItem) && isPresent(textField)) {\n const field = this.getField(textField, dataItem);\n return getter$1(field)(dataItem);\n }\n return null;\n }\n /**\n * @hidden\n *\n * Determines the `valueField` and `textField` for a specific level in the data set\n * @param field - the field value (string | string[])\n * @param value - current value\n */\n getField(field, value) {\n const fieldsCount = field.length - 1;\n if (typeof field === 'string') {\n // If the `valueField` | `textField` is the same for all levels\n return field;\n }\n else if (isPresent(this.valueDepth)) {\n // When `valueDepth` can be defined from the index on selectionChange or provided by the user\n return fieldsCount < this.valueDepth ? field[fieldsCount] : field[this.valueDepth];\n }\n else {\n // Fallback: Look to find a match of each field in the current data item\n // Side effect may occur if all of the listed fields are present in the data item\n return field.find(item => item in value);\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n createPopup() {\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };\n const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n appendTo: this.appendTo,\n anchorAlign: anchorPosition,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n positionMode: 'absolute',\n popupClass: this.popupContainerClasses\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n if (this.filter !== \"\") {\n this.filter = \"\";\n this.allNodesHidden = false;\n if (hasObservers(this.filterChange)) {\n this._zone.run(() => {\n this.filterChange.emit(\"\");\n });\n }\n }\n }\n }\n handleEscape() {\n this.togglePopup(false);\n this.focus();\n }\n setState() {\n if (isPresent(this.value) && isPresent(this.dataItem) && isPresent(this.valueField)) {\n this.text = this.getText(this.textField, this.dataItem);\n const valueField = this.getField(this.valueField, this.dataItem);\n this.selectBy = valueField;\n this.selectedKeys = [getter$1(valueField)(this.dataItem)];\n }\n else {\n this.clearState();\n }\n this.cdr.markForCheck();\n }\n clearState() {\n this.text = undefined;\n this.selectedKeys = [];\n }\n subscribeEvents() {\n this.subscriptions.push(this.navigationService.open.subscribe(() => this.togglePopup(true)), this.navigationService.close.subscribe(() => {\n this.togglePopup(false);\n this.focus();\n }), this.navigationService.enter\n .pipe(tap((event) => event.originalEvent.preventDefault()))\n .subscribe(() => this.togglePopup(true)), this.navigationService.esc\n .subscribe(() => this.handleEscape()), this.navigationService.tab.subscribe(() => this.focus()), this.navigationService.down.subscribe((event) => {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n if (!this.treeview.isActive) {\n this.treeview.focus();\n }\n }), this.navigationService.up.subscribe((event) => {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n if (this.filterable && this.treeview['navigationService']['activeIndex'] === '0') {\n this.filterInput.nativeElement.focus();\n }\n }));\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up DropDownTree on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if (this.isFocused && !inDropDown(this.wrapper, target, this.popupRef)) {\n this._zone.run(() => {\n if (this.isOpen) {\n this.treeview.blur();\n }\n this.blur();\n });\n }\n }));\n }\n subscribeFocusEvents() {\n if (isDocumentAvailable()) {\n this.handleFocus = this.handleFocus.bind(this);\n this.handleDocumentBlur = this.handleDocumentBlur.bind(this);\n this._zone.runOutsideAngular(() => {\n const useCapture = true;\n document.addEventListener('focus', this.handleFocus, useCapture);\n document.addEventListener('blur', this.handleDocumentBlur, useCapture);\n });\n }\n }\n unSubscribeFocusEvents() {\n if (isDocumentAvailable()) {\n const useCapture = true;\n document.removeEventListener('focus', this.handleFocus, useCapture);\n document.removeEventListener('blur', this.handleDocumentBlur, useCapture);\n }\n }\n unsubscribeEvents() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.unSubscribeFocusEvents();\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n }\n handleDocumentBlur(event) {\n if (event.target !== this.wrapper.nativeElement) {\n return;\n }\n event.stopImmediatePropagation();\n this.handleBlur(event);\n }\n assignAriaDescribedBy() {\n const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';\n // add to the current value - don't replace it (the aria-describedby is used by the FormField component as well)\n const newValue = `${this.valueLabelId} ${currentValue.trim()}`.trim();\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);\n }\n setComponentClasses() {\n if (this.size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('picker', this.size));\n }\n if (this.rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('picker', this.fillMode));\n }\n }\n}\nDropDownTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreeComponent, deps: [{ token: i0.ElementRef }, { token: i2.PopupService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nDropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropDownTreeComponent, selector: \"kendo-dropdowntree\", inputs: { loading: \"loading\", clearButton: \"clearButton\", data: \"data\", value: \"value\", textField: \"textField\", valueField: \"valueField\", valueDepth: \"valueDepth\", hasChildren: \"hasChildren\", fetchChildren: \"fetchChildren\", placeholder: \"placeholder\", popupSettings: \"popupSettings\", dataItem: \"dataItem\", listHeight: \"listHeight\", disabled: \"disabled\", readonly: \"readonly\", valuePrimitive: \"valuePrimitive\", tabindex: \"tabindex\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", itemDisabled: \"itemDisabled\", isNodeExpanded: \"isNodeExpanded\", isNodeVisible: \"isNodeVisible\", loadOnDemand: \"loadOnDemand\", filterable: \"filterable\", filter: \"filter\", focusableId: \"focusableId\" }, outputs: { open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", nodeExpand: \"nodeExpand\", nodeCollapse: \"nodeCollapse\", onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\", filterChange: \"filterChange\" }, host: { listeners: { \"click\": \"handleClick()\", \"keydown\": \"handleKeydown($event)\" }, properties: { \"class.k-dropdowntree\": \"this.hostClasses\", \"class.k-picker\": \"this.hostClasses\", \"class.k-disabled\": \"this.isDisabled\", \"attr.aria-disabled\": \"this.isDisabled\", \"class.k-loading\": \"this.isLoading\", \"attr.id\": \"this.id\", \"attr.dir\": \"this.direction\", \"attr.tabindex\": \"this.hostTabIndex\", \"attr.role\": \"this.role\", \"attr.aria-haspopup\": \"this.ariaHasPopup\", \"attr.aria-expanded\": \"this.isAriaExpanded\", \"attr.readonly\": \"this.isReadonly\", \"attr.aria-readonly\": \"this.isReadonly\" } }, providers: [\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdowntree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropDownTreeComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => DropDownTreeComponent)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => DropDownTreeComponent)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => DropDownTreeComponent)\n }\n ], queries: [{ propertyName: \"noDataTemplate\", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: \"footerTemplate\", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: \"nodeTemplate\", first: true, predicate: NodeTemplateDirective, descendants: true }, { propertyName: \"valueTemplate\", first: true, predicate: ValueTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"treeview\", first: true, predicate: [\"treeview\"], descendants: true }, { propertyName: \"filterInput\", first: true, predicate: [\"filterInput\"], descendants: true }], exportAs: [\"kendoDropDownTree\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n {{ text || placeholder }} \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n
\n \n `, isInline: true, components: [{ type: i1$1.TreeViewComponent, selector: \"kendo-treeview\", inputs: [\"filterInputPlaceholder\", \"expandDisabledNodes\", \"animate\", \"nodeTemplate\", \"loadMoreButtonTemplate\", \"trackBy\", \"nodes\", \"textField\", \"hasChildren\", \"isChecked\", \"isDisabled\", \"isExpanded\", \"isSelected\", \"isVisible\", \"navigable\", \"children\", \"loadOnDemand\", \"filterable\", \"filter\", \"size\", \"disableParentNodesOnly\"], outputs: [\"childrenLoaded\", \"blur\", \"focus\", \"expand\", \"collapse\", \"nodeDragStart\", \"nodeDrag\", \"filterStateChange\", \"nodeDrop\", \"nodeDragEnd\", \"addItem\", \"removeItem\", \"checkedChange\", \"selectionChange\", \"filterChange\", \"nodeClick\", \"nodeDblClick\"], exportAs: [\"kendoTreeView\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \" }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i12.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { type: FilterInputDirective, selector: \"[filterInput]\", inputs: [\"filterInput\"] }, { type: i12.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { type: i12.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { type: i9.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i1$1.SelectDirective, selector: \"[kendoTreeViewSelectable]\", inputs: [\"isSelected\", \"selectBy\", \"kendoTreeViewSelectable\", \"selectedKeys\"], outputs: [\"selectedKeysChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreeComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownTree',\n providers: [\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdowntree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropDownTreeComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => DropDownTreeComponent)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => DropDownTreeComponent)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => DropDownTreeComponent)\n }\n ],\n selector: 'kendo-dropdowntree',\n template: `\n \n \n \n \n \n \n {{ text || placeholder }} \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n
\n \n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i2.PopupService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-dropdowntree']\n }, {\n type: HostBinding,\n args: ['class.k-picker']\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }, {\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], isLoading: [{\n type: HostBinding,\n args: ['class.k-loading']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], ariaHasPopup: [{\n type: HostBinding,\n args: ['attr.aria-haspopup']\n }], isAriaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], isReadonly: [{\n type: HostBinding,\n args: ['attr.readonly']\n }, {\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], handleClick: [{\n type: HostListener,\n args: ['click']\n }], handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], nodeTemplate: [{\n type: ContentChild,\n args: [NodeTemplateDirective, { static: false }]\n }], valueTemplate: [{\n type: ContentChild,\n args: [ValueTemplateDirective, { static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], treeview: [{\n type: ViewChild,\n args: ['treeview', { static: false }]\n }], filterInput: [{\n type: ViewChild,\n args: ['filterInput', { static: false }]\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], nodeExpand: [{\n type: Output\n }], nodeCollapse: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], loading: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], valueDepth: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }], fetchChildren: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], dataItem: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], isNodeExpanded: [{\n type: Input\n }], isNodeVisible: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], filterable: [{\n type: Input\n }], filter: [{\n type: Input\n }], focusableId: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nconst nodeIndex$1 = (item) => (item || {}).key;\n/**\n * @hidden\n */\nconst buildTreeIndex = (parentIndex, itemIndex) => {\n return [parentIndex, itemIndex].filter(part => isPresent(part)).join('_');\n};\n/**\n * @hidden\n */\nconst buildTreeItem = (dataItem, valueField, currentLevelIndex) => {\n if (!isPresent(dataItem)) {\n return null;\n }\n return {\n dataItem,\n key: valueFrom({ dataItem, level: currentLevelIndex }, valueField) + '_' + currentLevelIndex\n };\n};\n/**\n * @hidden\n */\nclass MultiSelectTreeLookupService {\n constructor() {\n this.map = new Map();\n }\n reset() {\n this.map.clear();\n }\n registerChildren(index, children) {\n const item = this.item(index);\n if (!item) {\n return;\n }\n item.children = children;\n }\n item(index) {\n return this.map.get(index) || null;\n }\n registerItem(item, parent) {\n const currentLookup = {\n children: [],\n item,\n parent: this.item(nodeIndex$1(parent))\n };\n this.map.set(item.key, currentLookup);\n }\n itemLookup(index) {\n const item = this.item(index);\n if (!item) {\n return null;\n }\n return {\n children: this.mapChildren(item.children),\n item: item.item,\n parent: item.parent\n };\n }\n mapChildren(children = []) {\n return children.map(c => {\n const { item, parent, children } = this.item(c.key);\n return {\n children: this.mapChildren(children),\n item,\n parent\n };\n });\n }\n}\nMultiSelectTreeLookupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeLookupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMultiSelectTreeLookupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeLookupService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeLookupService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n *\n * A directive which manages the in-memory checked state of the MultiSelectTree nodes.\n */\nclass BaseCheckDirective {\n addItem(item) {\n if (this.isItemChecked(item)) {\n return;\n }\n const level = getHierarchicalItemLevel(item.index);\n const key = this.getKey(item, level);\n const candidate = Object.assign(Object.assign({}, item), { level, key });\n this.checkedItems.push(candidate);\n this.checkedKeys.add(key);\n }\n removeItem(item) {\n if (!this.isItemChecked(item)) {\n return;\n }\n const level = getHierarchicalItemLevel(item.index);\n const key = this.getKey(item, level);\n const candidate = Object.assign(Object.assign({}, item), { level, key });\n this.checkedItems = this.checkedItems\n .filter(item => valueFrom(item, this.valueField) !== valueFrom(candidate, this.valueField));\n this.checkedKeys.delete(key);\n }\n isItemChecked(item) {\n const level = item.index.split('_').length - 1;\n item.level = level;\n const key = this.getKey(item, level);\n return this.checkedKeys.has(key);\n }\n updateItems() {\n this.checkedItems = this.checkedItems || [];\n this.checkedKeys = new Set(this.checkedItems.map(item => item.key));\n }\n /**\n * Adds the item's depth to the item's value to allow duplicate values on different levels.\n *\n * @param item - The checked key.\n * @returns { string } - A string key consisting of the item's `valueField` value and its depth (depth is 0 if data is homogeneous).\n */\n getKey(item, level) {\n return valueFrom(item, this.valueField) + '_' + (this.isHeterogeneous ? level : 0);\n }\n}\nBaseCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BaseCheckDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nBaseCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: BaseCheckDirective, inputs: { valueField: \"valueField\", checkedItems: \"checkedItems\", isHeterogeneous: \"isHeterogeneous\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: BaseCheckDirective, decorators: [{\n type: Directive\n }], propDecorators: { valueField: [{\n type: Input\n }], checkedItems: [{\n type: Input\n }], isHeterogeneous: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n *\n * A directive which manages the in-memory checked state of the MultiSelectTree nodes.\n */\nclass CheckAllDirective extends BaseCheckDirective {\n constructor(element, zone, cdr, renderer) {\n super();\n this.element = element;\n this.zone = zone;\n this.cdr = cdr;\n this.renderer = renderer;\n /**\n * Fires when the `checkedItems` collection was updated.\n */\n this.checkedItemsChange = new EventEmitter();\n /**\n * Holds a Set with just the checked item keys.\n *\n * Should be updated each time the `checkedItems` value or content is changed.\n * Can be used for efficient look-up of whether an item is checked or not (O(1) access time).\n */\n this.checkedKeys = new Set();\n }\n handleChange(event) {\n // Need to store the current checkbox state at the moment of click\n this.currentCheckedState = event.checked;\n this.currentIndeterminateState = this.isIndeterminate;\n this.treeview.nodes.map((_value, index) => {\n const itemIndex = String(index);\n const itemLookup = this.treeview.itemLookup(itemIndex);\n this.checkNode(itemLookup);\n });\n this.checkedItemsChange.emit(this.checkedItems.slice());\n }\n get isIndeterminate() {\n const isIndeterminate = this.treeview.nodes.some((_node, index) => {\n const itemIndex = String(index);\n const itemLookup = this.treeview.itemLookup(itemIndex);\n return this.someChecked(itemLookup);\n });\n return this.isChecked ? false : isIndeterminate;\n }\n get isChecked() {\n const isChecked = this.treeview.nodes.every((_node, index) => {\n const itemIndex = String(index);\n const itemLookup = this.treeview.itemLookup(itemIndex);\n return this.allChecked(itemLookup);\n });\n return isChecked;\n }\n ngOnChanges(changes) {\n if (isPresent(changes.checkedItems)) {\n this.updateItems();\n this.renderer.setProperty(this.element.nativeElement, 'checked', this.isChecked);\n this.renderer.setProperty(this.element.nativeElement, 'indeterminate', this.isIndeterminate);\n }\n }\n ngOnInit() {\n if (this.focused) {\n this.nextTick(() => this.element.nativeElement.focus());\n }\n }\n nextTick(fn) {\n this.zone.runOutsideAngular(() => setTimeout(fn));\n }\n checkNode(itemLookup) {\n if (this.treeview.isDisabled(itemLookup.item.dataItem, itemLookup.item.index)) {\n return;\n }\n const pendingCheck = [];\n const filter = (item) => this.treeview.isVisible(item.dataItem, item.index) &&\n !this.treeview.isDisabled(item.dataItem, item.index);\n pendingCheck.push(itemLookup.item);\n fetchDescendentNodes(itemLookup, filter)\n .forEach(lookup => pendingCheck.push(lookup.item));\n pendingCheck.forEach(item => {\n if (this.currentIndeterminateState) {\n if (this.lastAction === 'check') {\n this.addItem(item);\n }\n else {\n this.removeItem(item);\n }\n return;\n }\n if (this.currentCheckedState) {\n this.addItem(item);\n }\n else {\n this.removeItem(item);\n }\n });\n }\n allChecked(lookup) {\n const children = lookup && lookup.children;\n if (!Array.isArray(children)) {\n return;\n }\n const childrenChecked = children.every(child => {\n if (child.children.length) {\n return this.isItemChecked(child.item) && this.allChecked(child);\n }\n return this.isItemChecked(child.item);\n });\n return childrenChecked && this.isItemChecked(lookup.item);\n }\n someChecked(lookup) {\n const children = lookup && lookup.children;\n if (!Array.isArray(children)) {\n return;\n }\n const childrenChecked = children.some(child => {\n if (child.children.length) {\n return this.isItemChecked(child.item) || this.someChecked(child);\n }\n return this.isItemChecked(child.item);\n });\n return childrenChecked || this.isItemChecked(lookup.item);\n }\n}\nCheckAllDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckAllDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nCheckAllDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CheckAllDirective, selector: \"[checkAll]\", inputs: { lastAction: \"lastAction\", treeview: \"treeview\", checkedItems: \"checkedItems\", valueField: \"valueField\", focused: [\"checkAll\", \"focused\"] }, outputs: { checkedItemsChange: \"checkedItemsChange\" }, host: { listeners: { \"change\": \"handleChange($event.target)\" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckAllDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line\n selector: '[checkAll]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { lastAction: [{\n type: Input\n }], treeview: [{\n type: Input\n }], checkedItems: [{\n type: Input\n }], valueField: [{\n type: Input\n }], focused: [{\n type: Input,\n args: ['checkAll']\n }], checkedItemsChange: [{\n type: Output\n }], handleChange: [{\n type: HostListener,\n args: ['change', ['$event.target']]\n }] } });\n\n/**\n * @hidden\n *\n * A directive which manages the in-memory checked state of the MultiSelectTree nodes.\n */\nclass CheckDirective extends BaseCheckDirective {\n constructor(treeView) {\n super();\n this.treeView = treeView;\n /**\n * Fires when the `checkedItems` collection was updated.\n */\n this.checkedItemsChange = new EventEmitter();\n /**\n * Holds a Set with just the checked item keys.\n *\n * Should be updated each time the `checkedItems` value or content is changed.\n * Can be used for efficient look-up of whether an item is checked or not (O(1) access time).\n */\n this.checkedKeys = new Set();\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.treeView.checkedChange\n .subscribe(this.handleCheckedChange.bind(this)));\n this.treeView.isChecked = this.getCheckedState.bind(this);\n }\n ngOnChanges(changes) {\n if (isPresent(changes.checkable)) {\n this.toggleCheckOnClick();\n }\n if (isPresent(changes.checkedItems)) {\n this.updateItems();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.unsubscribeClick();\n }\n getCheckedState(dataItem, index) {\n if (this.isItemChecked({ dataItem, index })) {\n return 'checked';\n }\n else if (this.checkable.checkChildren && this.isItemIndeterminate(this.treeView.itemLookup(index))) {\n return 'indeterminate';\n }\n else {\n return 'none';\n }\n }\n handleCheckedChange(node) {\n this.checkNode(node);\n // parents should be checked if `checkChildren` is set to `true` (single config option for both)\n const checkParents = this.checkable.checkChildren;\n if (checkParents) {\n this.checkParents(node.parent);\n }\n this.checkedItemsChange.emit(this.checkedItems.slice());\n }\n toggleCheckOnClick() {\n this.unsubscribeClick();\n if (this.checkable.checkOnClick) {\n this.clickSubscription = this.treeView.nodeClick\n .pipe(filter(event => event.type === 'click'))\n .subscribe(event => {\n const lookup = this.treeView.itemLookup(event.item.index);\n this.handleCheckedChange(lookup);\n });\n }\n }\n unsubscribeClick() {\n if (this.clickSubscription) {\n this.clickSubscription.unsubscribe();\n this.clickSubscription = null;\n }\n }\n checkNode(lookup) {\n if (this.treeView.isDisabled(lookup.item.dataItem, lookup.item.index)) {\n return;\n }\n const target = lookup.item;\n const pendingCheck = [target];\n // TODO: extract in a separate `checkChildren` method?\n if (this.checkable.checkChildren) {\n const filter = (item) => this.treeView.isVisible(item.dataItem, item.index) &&\n !this.treeView.isDisabled(item.dataItem, item.index);\n fetchDescendentNodes(lookup, filter)\n .forEach(lookup => pendingCheck.push(lookup.item));\n }\n const shouldCheck = !this.isItemChecked(target);\n pendingCheck.forEach(item => {\n if (shouldCheck) {\n this.addItem(item);\n }\n else {\n this.removeItem(item);\n }\n });\n }\n checkParents(parent) {\n let currentParent = parent;\n while (currentParent) {\n const allChildrenSelected = currentParent.children.every(item => this.isItemChecked(item));\n if (allChildrenSelected) {\n this.addItem(currentParent.item);\n }\n else {\n this.removeItem(currentParent.item);\n }\n currentParent = currentParent.parent;\n }\n }\n isItemIndeterminate(lookup) {\n const children = lookup.children;\n if (!Array.isArray(children) || children.length === 0) {\n return false;\n }\n let index = 0;\n let child = children[index];\n while (isPresent(child)) {\n if (this.isItemChecked(child.item) || this.isItemIndeterminate(child)) {\n return true;\n }\n index += 1;\n child = children[index];\n }\n return false;\n }\n}\nCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckDirective, deps: [{ token: i1$1.TreeViewComponent }], target: i0.ɵɵFactoryTarget.Directive });\nCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CheckDirective, selector: \"[kendoMultiSelectTreeCheckable]\", inputs: { checkable: \"checkable\", valueField: \"valueField\", checkedItems: \"checkedItems\" }, outputs: { checkedItemsChange: \"checkedItemsChange\" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeCheckable]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.TreeViewComponent }]; }, propDecorators: { checkable: [{\n type: Input\n }], valueField: [{\n type: Input\n }], checkedItems: [{\n type: Input\n }], checkedItemsChange: [{\n type: Output\n }] } });\n\nconst DEFAULT_POPUP_SETTINGS = { animate: true };\nconst DEFAULT_CHECKABLE_SETTINGS = { checkChildren: true, checkOnClick: true };\nconst hasChildren = () => false;\nconst fetchChildren = () => of([]);\nconst itemDisabled = () => false;\nconst isNodeVisible = () => true;\nconst DEFAULT_SIZE = 'medium';\nconst DEFAULT_ROUNDED = 'medium';\nconst DEFAULT_FILL_MODE = 'solid';\n/**\n * Represents the [Kendo UI MultiSelectTree component for Angular]({% slug overview_multiselecttree %}).\n */\nclass MultiSelectTreeComponent {\n constructor(wrapper, popupService, renderer, navigationService, _zone, localization, cdr, lookup, touchEnabled) {\n this.wrapper = wrapper;\n this.popupService = popupService;\n this.renderer = renderer;\n this.navigationService = navigationService;\n this._zone = _zone;\n this.localization = localization;\n this.cdr = cdr;\n this.lookup = lookup;\n this.touchEnabled = touchEnabled;\n this.hostClasses = true;\n this.role = 'combobox';\n this.ariaHasPopup = 'tree';\n /**\n * Sets the levels in the data set where the values can be found when `valueField` is an Array.\n * The field serves to correctly allocate a data item used when the MultiSelectTree is initialized with a value.\n */\n this.valueDepth = [];\n /**\n * The hint which is displayed when the component is empty.\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the options list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of options and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the type of the selected value\n * ([more information and example]({% slug valuebinding_multiselecttree %}#toc-primitive-values)).\n * If set to `true`, the selected value has to be a primitive one.\n */\n this.valuePrimitive = false;\n /**\n * Indicates whether the child nodes will be fetched on node expand or will be initially prefetched.\n * @default false\n */\n this.loadOnDemand = false;\n /**\n * @hidden\n *\n * Used by the kendo-label and kendo-floatinglabel to access and associate the focusable element with the provided label via aria-labelledby.\n */\n this.focusableId = `k-${guid$1()}`;\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n * @default true\n */\n this.clearButton = true;\n /**\n * Renders the built-in input element for filtering the MultiSelectTree.\n * If set to `true`, the component emits the `filterChange` event, which can be used to [filter the MultiSelectTree manually]({% slug filtering_multiselecttree %}#toc-manual-filtering).\n * A built-in filtering implementation is available to use with the [`kendoMultiSelectTreeHierarchyBinding`]({% slug api_dropdowns_multiselecttreehierarchybindingdirective %}) and [`kendoMultiSelectTreeFlatBinding`]({% slug api_dropdowns_multiselecttreeflatbindingdirective %}) directives.\n * @default false\n */\n this.filterable = false;\n /**\n * If `checkАll` is set to `true` and the checkboxes are enabled, a tri-state checkbox appears above the embedded treeview.\n * Clicking the checkbox checks or unchecks all enabled items of the treeview that are loaded.\n * @default false\n */\n this.checkAll = false;\n /**\n * A function which determines if a specific node has child nodes.\n */\n this.hasChildren = hasChildren;\n /**\n * A function which provides the child nodes for a given parent node.\n */\n this.fetchChildren = fetchChildren;\n /**\n * A callback which determines whether a tree node should be rendered as hidden. The utility .k-display-none class is used to hide the nodes.\n * Useful for custom filtering implementations.\n */\n this.isNodeVisible = isNodeVisible;\n /**\n * A function that is executed for each data item and determines if a specific item is disabled.\n */\n this.itemDisabled = itemDisabled;\n /**\n * A user-defined callback function which receives an array of selected data items and maps them to an array of tags.\n *\n * @param { Any[] } dataItems - The selected data items from the list.\n * @returns { Any[] } - The tags that will be rendered by the component.\n */\n this.tagMapper = (tags) => tags || [];\n /**\n * Fires each time the user focuses the MultiSelectTree.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the MultiSelectTree gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_multiselecttree %})).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_multiselecttree %})).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires when the user expands a node in the popup TreeView.\n */\n this.nodeExpand = new EventEmitter();\n /**\n * Fires when the user collapses a node in the popup TreeView.\n */\n this.nodeCollapse = new EventEmitter();\n /**\n * Fires each time the value is changed\n * ([see example]({% slug overview_multiselecttree %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time a tag is about to be removed([see examples]({% slug summarytagmode_multiselect %}#toc-notifying-on-removing-group-tags)).\n * This event is preventable. If you cancel it, the tag will not be removed.\n */\n this.removeTag = new EventEmitter();\n /**\n * Fires when the value of the built-in filter input element changes.\n */\n this.filterChange = new EventEmitter();\n /**\n * @hidden\n */\n this.filterStateChange = new EventEmitter();\n /**\n * @hidden\n */\n this.checkedItems = [];\n /**\n * @hidden\n */\n this.showAfter = 0;\n /**\n * @hidden\n */\n this.allNodesHidden = false;\n this.tagListId = guid$1();\n this.tagPrefix = \"tag-\" + guid$1();\n this.focusedTagIndex = undefined;\n this._value = [];\n this._tabindex = 0;\n this._popupSettings = DEFAULT_POPUP_SETTINGS;\n this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;\n this._isFocused = false;\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n this.subscriptions = [];\n this.lastAction = 'check';\n this.onTouchedCallback = noop;\n this.onChangeCallback = noop;\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subscribeEvents();\n this.subscribeFocusEvents();\n }\n get isDisabled() {\n return this.disabled;\n }\n get isLoading() {\n return this.loading;\n }\n get id() {\n return this.focusableId;\n }\n get hostTabIndex() {\n return this.tabindex;\n }\n get isAriaExpanded() {\n return this.isOpen;\n }\n get isReadonly() {\n return this.readonly;\n }\n get ariaDescribedBy() {\n return this.tagListId;\n }\n get ariaActiveDescendant() {\n return this.focusedTagId;\n }\n /**\n * @hidden\n */\n handleClick() {\n this.togglePopup(!this.isOpen);\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const deleteTag = this.isWrapperActive && event.keyCode === Keys.Backspace && this.tags.length > 0;\n if (deleteTag) {\n this.handleBackspace();\n return;\n }\n if (this.disabled || this.readonly) {\n return;\n }\n const eventData = event;\n const action = this.navigationService.process({\n originalEvent: eventData\n });\n if (action === NavigationAction.Open) {\n eventData.preventDefault();\n }\n }\n set treeview(treeview) {\n this._treeview = treeview;\n if (treeview) {\n // If filtering is enabled, focus the TreeView on mobile devices instead of the filter input\n if (this.isFocused && !this.filterable && !this.checkAll || this.touchEnabled) {\n treeview.focus();\n }\n /**\n * the treeview animations are initially disabled (we don't want expand animations during popup opening)\n * re-enables the animations for user interaction\n * The Promise is required to properly change the `animate` property when\n * the popup is appended to a container and opened upon initialization.\n * Otherwise, the \"Expression has changed...\" type error will be thrown.\n */\n Promise.resolve(null).then(() => this.treeview.animate = true);\n }\n }\n get treeview() {\n return this._treeview;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const providedTabIndex = parseNumber(value);\n const defaultTabIndex = 0;\n this._tabindex = !isNaN(providedTabIndex) ? providedTabIndex : defaultTabIndex;\n }\n get tabindex() {\n return this.disabled ? -1 : this._tabindex;\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n *\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE;\n this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n if (size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', newSize));\n }\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Sets the border radius of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n *\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n this.renderer.removeClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n if (rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(newRounded));\n }\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Sets the fillMode of the component.\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n *\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE;\n this.renderer.removeClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n if (fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', newFillMode));\n }\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * Configures the popup of the MultiSelectTree.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, DEFAULT_POPUP_SETTINGS, settings);\n // `detectChanges` needed, otherwise upon value initialization and `appendTo` property\n // an error is thrown => ExpressionChangedAfterItHasBeenCheckedError\n this.cdr.detectChanges();\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines the checkable settings of the MultiSelecTree nodes.\n * If no value is provided, the default [`CheckableSettings`]({% slug api_dropdowns_multiselecttreecheckablesettings %}) are applied.\n */\n set checkableSettings(settings) {\n this._checkableSettings = Object.assign({}, DEFAULT_CHECKABLE_SETTINGS, settings);\n }\n get checkableSettings() {\n return this._checkableSettings;\n }\n /**\n * Sets the data of the MultiSelectTree.\n *\n * > The data has to be provided in an array-like list with objects.\n */\n set data(data) {\n this._nodes = data;\n this.setState();\n }\n get data() {\n return this._nodes;\n }\n /**\n * Sets the value of the MultiSelectTree.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n */\n set value(value) {\n this._value = value ? value : [];\n this.setState();\n }\n get value() {\n return this._value;\n }\n /**\n * Keeps the current `dataItems` object in order to resolve selection.\n * Needs to be provided when when programmatically setting a `value` and `valuePrimitive` is set to `true`.\n */\n set dataItems(items) {\n this._dataItems = (items || []).map((item, index) => {\n if (hasProps(item, ['dataItem', 'index', 'level'])) {\n return item;\n }\n return {\n dataItem: item,\n index: null,\n level: this.valueDepth[index] || 0,\n key: valueFrom({ dataItem: item }, this.valueField) + '_' + (this.isHeterogeneous ? this.valueDepth[index] : 0)\n };\n });\n this.setState();\n }\n get dataItems() {\n return this._dataItems || this.value.map((value, index) => ({\n dataItem: value,\n index: null,\n level: this.valueDepth[index] || 0,\n key: valueFrom({ dataItem: value }, this.valueField) + '_' + (this.isHeterogeneous ? this.valueDepth[index] : 0)\n }));\n }\n /**\n * @hidden\n */\n get focusedTagId() {\n if (!isPresent(this.focusedTagIndex) || this.isOpen) {\n return null;\n }\n const dataItem = this.tags[this.focusedTagIndex];\n return `${this.tagPrefix}-${valueFrom({ dataItem }, this.valueField)}`;\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n get width() {\n const wrapperWidth = this.wrapper.nativeElement.offsetWidth;\n const width = this.popupSettings.width || wrapperWidth;\n const minWidth = isNaN(wrapperWidth) ? wrapperWidth : `${wrapperWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * @hidden\n */\n get popupContainerClasses() {\n const containerClasses = ['k-popup-dropdowntree'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n /**\n * @hidden\n *\n * Alias for `data`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives.\n */\n set nodes(nodes) {\n this.data = nodes;\n }\n get nodes() {\n return this.data;\n }\n /**\n * @hidden\n *\n * Alias for `fetchChildren`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives\n */\n set children(callback) {\n this.fetchChildren = callback;\n }\n get children() {\n return this.fetchChildren;\n }\n /**\n * @hidden\n *\n * Alias for `nodeExpand`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get expand() {\n return this.nodeExpand;\n }\n /**\n * @hidden\n *\n * Alias for `nodeCollapse`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get collapse() {\n return this.nodeCollapse;\n }\n /**\n * @hidden\n *\n * Alias for `isNodeExpanded`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n set isExpanded(callback) {\n this.isNodeExpanded = callback;\n }\n get isExpanded() {\n return this.isNodeExpanded;\n }\n /**\n * @hidden\n *\n * Alias for `isNodeVisible`. Used for compatibility with the `DataBoundComponent` interface.\n * The `DataBoundComponent` interface is used in the data-binding directives.\n */\n set isVisible(callback) {\n this.isNodeVisible = callback;\n }\n get isVisible() {\n return this.isNodeVisible;\n }\n get isTagFocused() {\n return !this.isOpen && this.focusedTagIndex !== undefined;\n }\n get isTreeViewActive() {\n return this.treeview && this.treeview.isActive;\n }\n get isWrapperActive() {\n return document.activeElement === this.wrapper.nativeElement;\n }\n get isFilterActive() {\n return this.filterInput && document.activeElement === this.filterInput.nativeElement;\n }\n get isCheckAllActive() {\n return this.checkAllInput && document.activeElement === this.checkAllInput.nativeElement;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'tabindex');\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', String(this.isOpen));\n this.subscriptions.push(this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.markForCheck();\n }));\n this.setComponentClasses();\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes, false)) {\n this.isHeterogeneous = this.valueField && isArray(this.valueField);\n this.setState();\n }\n if (anyChanged(['valueDepth', 'value', 'dataItems'], changes, false)) {\n if (changes.value && !changes.dataItems && !this.valuePrimitive) {\n // Update the dataItems if the value is updated programmatically (non-primitive values only)\n // In the primitive case, the client should update the dataItems as well\n this.dataItems = this.value;\n }\n else {\n // Re-map the dataItems because `valueDepth` is not yet available when the check directive parses the items\n this.dataItems = this.dataItems.map((item, index) => (Object.assign(Object.assign({}, item), { level: this.valueDepth[index] || 0 })));\n }\n }\n if (anyChanged(['data', 'children', 'hasChildren', 'loadOnDemand', 'valueField'], changes, true) && !this.loadOnDemand) {\n this.lookup.reset();\n this.registerLookupItems(this.data);\n }\n }\n /**\n * @hidden\n */\n ngAfterContentChecked() {\n this.verifySettings();\n }\n ngAfterContentInit() {\n this.registerLookupItems(this.data);\n }\n /**\n * @hidden\n *\n * Used by the kendo-floatinglabel component to determine if the floating label\n * should be rendered inside the input when the component is not focused.\n */\n isEmpty() {\n return !Boolean(this.placeholder) && (!isPresent(this.value) || this.value.length === 0);\n }\n /**\n * Focuses the MultiSelectTree.\n */\n focus() {\n if (!this.disabled) {\n this.wrapper.nativeElement.focus();\n }\n }\n /**\n * Blurs the MultiSelectTree.\n */\n blur() {\n if (!this.disabled) {\n this.wrapper.nativeElement.blur();\n }\n }\n /**\n * Focuses a specific item of the MultiSelectTree based on a provided index in the format of `1_1`.\n * The targeted item should be expanded in order for it to be focused.\n * If null or invalid index is provided the focus will be set on the first item.\n */\n focusItemAt(index) {\n if (this.treeview) {\n const lookup = this.treeview.itemLookup(index);\n const isItemDisabled = !isPresent(lookup) || this.treeview.isDisabled(lookup.item.dataItem, lookup.item.index);\n if (!isItemDisabled) {\n this.treeview.focus(index);\n }\n }\n }\n /**\n * Resets the value of the MultiSelectTree.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `valueChange` event will not be fired.\n */\n reset() {\n this.value = [];\n this.dataItems = [];\n this.valueDepth = [];\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_multiselecttree %})).\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required to open the popup on load.\n // Otherwise, the \"ViewContainerRef not found...\" error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !isPresent(this.popupRef);\n this.destroyPopup();\n if (shouldOpen) {\n this.createPopup();\n }\n });\n }\n /**\n * @hidden\n */\n handleFocus(event) {\n if (event.target !== this.wrapper.nativeElement) {\n return;\n }\n event.stopImmediatePropagation();\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n // Re-focus the treeview if `close` is prevented\n if (this.isOpen && this.treeview) {\n if (this.lastNodeOnFocus) {\n this.lastNodeOnFocus.setAttribute('tabindex', '0');\n }\n this.treeview.focus();\n }\n }\n }\n /**\n * @hidden\n */\n handleBlur(e) {\n const relatedTarget = e && e.relatedTarget;\n if (this.wrapper.nativeElement.contains(relatedTarget) ||\n (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {\n return;\n }\n this.isFocused = false;\n this.togglePopup(false);\n if (hasObservers(this.onBlur) ||\n isUntouched(this.wrapper.nativeElement)) {\n this._zone.run(() => {\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n }\n /**\n * @hidden\n */\n handleNodeClick(node) {\n if (!this.isFocused) {\n // Re-focus the MultiSelectTree when popup close is prevented and a node is clicked\n // On click the focus should be on the clicked element which is why we need to update the lastNodeOnFocus\n const parent = node.originalEvent.target.parentElement.parentElement;\n this.lastNodeOnFocus = parent;\n this.focus();\n }\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n this._zone.run(() => {\n this.focusedTagIndex = undefined;\n });\n if (isDisabled || sameState) {\n return;\n }\n const togglePrevented = this.triggerPopupEvents(open);\n if (!togglePrevented) {\n if (open) {\n this.createPopup();\n }\n else {\n this.destroyPopup();\n }\n }\n else {\n this.removeTreeViewFromTabOrder();\n }\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n handleCheckedItemsChange(items) {\n this.valueDepth = items.map(item => item.level);\n this.lastAction = items.length > this.dataItems.length ? 'check' : 'uncheck';\n this.dataItems = items.slice();\n this.updateValue(this.dataItems);\n }\n /**\n * @hidden\n */\n handleRemoveTag({ tag, index }) {\n if (this.disabled || this.readonly) {\n return;\n }\n const eventArgs = new RemoveTagEvent(tag);\n this.removeTag.emit(eventArgs);\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n // Remove tags based on their position index\n if (tag instanceof Array) {\n // Remove group tag\n this.dataItems = this.dataItems.filter((_item, i) => i < this.showAfter || this.disabledIndices.has(i));\n this.valueDepth = this.valueDepth.filter((_item, i) => i < this.showAfter || this.disabledIndices.has(i));\n }\n else {\n // Remove single tag\n const dataItem = this.dataItems[index];\n const itemKey = dataItem.key;\n const lookup = this.lookup.itemLookup(itemKey);\n const pendingCheck = [lookup.item];\n if (this.checkableSettings.checkChildren) {\n fetchDescendentNodes(lookup)\n .forEach(lookup => pendingCheck.push(lookup.item));\n pendingCheck.push(...this.removeParents(lookup.parent));\n }\n const keysToRemove = pendingCheck.map(item => item.key);\n const valueDepthIndices = [];\n this.dataItems = this.dataItems.filter((_item, i) => {\n // We need to know the index position of the data item to be able to update the valueDepth array accordignly\n // as each data item's position is corresponding to the same position in valueDepth\n valueDepthIndices.push(i);\n return !keysToRemove.includes(_item.key) || this.disabledIndices.has(i);\n });\n this.valueDepth = this.valueDepth.filter((_item, i) => valueDepthIndices.includes(i) || this.disabledIndices.has(i));\n }\n this.updateValue(this.dataItems);\n if (!this.isFocused) {\n this.focus();\n }\n }\n /**\n * @hidden\n */\n handleTagMapperChange(showAfter) {\n this.showAfter = parseNumber(showAfter);\n this.setTags();\n }\n /**\n * @hidden\n */\n clearAll(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n this.focus();\n this.value = this.value.filter((_item, index) => this.disabledIndices.has(index));\n this.dataItems = this.dataItems.filter((_item, index) => this.disabledIndices.has(index));\n this.valueDepth = this.valueDepth.filter((_depth, index) => this.disabledIndices.has(index));\n this.emitValueChange(this.value);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value || [];\n // Update the dataItems if the value is updated programmatically (non-primitive values only)\n // In the primitive case, the client should update the dataItems as well\n if (!this.valuePrimitive) {\n this.dataItems = this.value;\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onChangeCallback = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onTouchedCallback = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleFilterInputChange(input) {\n this.filterChange.next(input.value);\n this.allNodesHidden = this.nodes.every((node, index) => !this.isVisible(node, String(index)));\n }\n /**\n * @hidden\n */\n get filterInputClasses() {\n return `${this.size ? getSizeClass('input', this.size) : ''} ${this.fillMode ? 'k-input-' + this.fillMode : ''} ${this.rounded ? getRoundedClass(this.rounded) : ''}`;\n }\n /**\n * @hidden\n */\n get checkAllCheckboxClasses() {\n return `${this.size ? getSizeClass('checkbox', this.size) : ''}`;\n }\n /**\n * @hidden\n */\n toggleCheckAll() {\n this.checkAllInput.nativeElement.focus();\n this.checkAllInput.nativeElement.click();\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (!isPresent(this.valueField) || !isPresent(this.textField)) {\n throw new Error(MultiSelectTreeMessages.textAndValue);\n }\n if (!isArray(this.value)) {\n throw new Error(MultiSelectTreeMessages.array);\n }\n if (this.value.length > 0) {\n if (this.valuePrimitive && this.value.some(item => isObject(item))) {\n throw new Error(MultiSelectTreeMessages.primitive);\n }\n const isEveryDataItemObject = this.dataItems.every(item => isObject(item.dataItem));\n if (this.valuePrimitive && !isArray(this.dataItems)) {\n throw new Error(MultiSelectTreeMessages.dataItems);\n }\n if (this.valuePrimitive && !isEveryDataItemObject) {\n throw new Error(MultiSelectTreeMessages.dataItems);\n }\n if (this.valuePrimitive && this.dataItems.length !== this.value.length) {\n throw new Error(MultiSelectTreeMessages.dataItemsLength);\n }\n if (!this.valuePrimitive && !isObjectArray(this.value)) {\n throw new Error(MultiSelectTreeMessages.object);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && !isArray(this.valueDepth)) {\n throw new Error(MultiSelectTreeMessages.valueDepth);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && this.valueDepth.length === 0) {\n throw new Error(MultiSelectTreeMessages.valueDepth);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && this.valueDepth.length !== this.value.length) {\n throw new Error(MultiSelectTreeMessages.valueDepthLength);\n }\n }\n }\n emitValueChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n createPopup() {\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };\n const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n appendTo: this.appendTo,\n anchorAlign: anchorPosition,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n positionMode: 'absolute',\n popupClass: this.popupContainerClasses\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n this.renderer.setAttribute(popupWrapper, 'dir', this.direction);\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'false');\n if (this.filter !== \"\") {\n this.filter = \"\";\n this.allNodesHidden = false;\n if (hasObservers(this.filterChange)) {\n this._zone.run(() => {\n this.filterChange.emit(\"\");\n });\n }\n }\n }\n }\n subscribeEvents() {\n this.subscriptions.push(this.navigationService.open.subscribe(() => this.togglePopup(true)), this.navigationService.enter\n .pipe(tap((event) => event.originalEvent.preventDefault()))\n .subscribe(() => this.togglePopup(true)), merge(this.navigationService.close, this.navigationService.esc).subscribe(() => {\n this.focus();\n this.togglePopup(false);\n }), this.navigationService.tab.subscribe(this.handleTabKey.bind(this)), this.navigationService.up.subscribe(this.handleUpKey.bind(this)), this.navigationService.down.subscribe(this.handleDownKey.bind(this)), this.navigationService.left\n .pipe(filter(() => !this.isTreeViewActive))\n .subscribe(this.direction === 'rtl' ? this.handleRightKey.bind(this) : this.handleLeftKey.bind(this)), this.navigationService.right\n .pipe(filter(() => !this.isTreeViewActive))\n .subscribe(this.direction === 'rtl' ? this.handleLeftKey.bind(this) : this.handleRightKey.bind(this)), this.navigationService.home.pipe(filter(() => !this.isOpen)).subscribe(this.handleHome.bind(this)), this.navigationService.end.pipe(filter(() => !this.isOpen)).subscribe(this.handleEnd.bind(this)), this.navigationService.backspace.pipe(filter(() => this.isTagFocused)).subscribe(this.handleBackspace.bind(this)), this.navigationService.delete.pipe(filter(() => this.isTagFocused)).subscribe(this.handleDelete.bind(this)));\n }\n subscribeFocusEvents() {\n if (isDocumentAvailable()) {\n this.handleFocus = this.handleFocus.bind(this);\n this.handleDocumentBlur = this.handleDocumentBlur.bind(this);\n this._zone.runOutsideAngular(() => {\n const useCapture = true;\n document.addEventListener('focus', this.handleFocus, useCapture);\n document.addEventListener('blur', this.handleDocumentBlur, useCapture);\n });\n }\n }\n unSubscribeFocusEvents() {\n if (isDocumentAvailable()) {\n const useCapture = true;\n document.removeEventListener('focus', this.handleFocus, useCapture);\n document.removeEventListener('blur', this.handleDocumentBlur, useCapture);\n }\n }\n handleDocumentBlur(event) {\n if (event.target !== this.wrapper.nativeElement) {\n return;\n }\n event.stopImmediatePropagation();\n this.handleBlur(event);\n }\n handleTabKey() {\n this.focus();\n if (this.isOpen) {\n this.treeview.blur();\n this.removeTreeViewFromTabOrder();\n }\n }\n handleUpKey(event) {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n // Prevent toggling the focus between the filterInput and the wrapper elements with `up` key\n if (this.isWrapperActive) {\n return;\n }\n const isFirstNodeActive = this.treeview['navigationService']['activeIndex'] === '0';\n // Current focus is on the filter input => should focus the wrapper\n if (this.filterable && this.isFilterActive) {\n this.focus();\n // Current focus is on the treeview first node => should focus the check all checkbox if enabled\n }\n else if (this.checkAll && !this.isCheckAllActive && isFirstNodeActive) {\n this.checkAllInput.nativeElement.focus();\n // Current focus is either on the check all checkbox or the treeview's first node\n // => should focus either the filter input (if enabled) or the wrapper\n }\n else if (this.isCheckAllActive || isFirstNodeActive) {\n if (this.filterable) {\n this.filterInput.nativeElement.focus();\n }\n else {\n this.focus();\n }\n }\n }\n handleDownKey(event) {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n // Current focus is on the wrapper => should focus the filter input\n if (this.filterable && this.isWrapperActive) {\n this.filterInput.nativeElement.focus();\n // Current focus is on the wrapper/filter input => should focus check all checkbox if enabled\n }\n else if (this.checkAll && (this.isWrapperActive || this.isFilterActive)) {\n this.checkAllInput.nativeElement.focus();\n // Should focus the treeview if filterable and check all are disabled\n }\n else if (!this.treeview.isActive) {\n this.treeview.focus();\n }\n this.focusedTagIndex = undefined;\n }\n handleRightKey(event) {\n event.originalEvent.preventDefault();\n const last = this.tags.length - 1;\n if (this.focusedTagIndex === last) {\n this.focusedTagIndex = undefined;\n }\n else if (this.focusedTagIndex < last) {\n this.focusedTagIndex++;\n }\n else if (!this.focusedTagIndex) {\n this.focusedTagIndex = 0;\n }\n }\n handleLeftKey(event) {\n event.originalEvent.preventDefault();\n if (this.focusedTagIndex === undefined || this.focusedTagIndex < 0) {\n this.focusedTagIndex = this.tags.length - 1;\n }\n else if (this.focusedTagIndex !== 0) {\n this.focusedTagIndex--;\n }\n }\n handleEnd(event) {\n event.originalEvent.preventDefault();\n this.focusedTagIndex = this.tags.length - 1;\n }\n handleHome(event) {\n event.originalEvent.preventDefault();\n this.focusedTagIndex = 0;\n }\n handleBackspace() {\n if (this.focusedTagIndex !== undefined) {\n this.handleDelete();\n }\n else {\n const tag = this.tags[this.tags.length - 1];\n const index = this.tags.length - 1;\n this.handleRemoveTag({ tag, index });\n }\n }\n handleDelete() {\n const tag = this.tags[this.focusedTagIndex];\n const index = this.focusedTagIndex;\n this.handleRemoveTag({ tag, index });\n if (this.focusedTagIndex === this.tags.length) {\n this.focusedTagIndex = undefined;\n }\n }\n unsubscribeEvents() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.unSubscribeFocusEvents();\n }\n /**\n * Remove the `TreeView` from the tab order, otherwise a focus loop between the page elements will occur\n * and the user will not be able to tab to the rest of the browser elements\n */\n removeTreeViewFromTabOrder() {\n const nodes = this.treeview.element.nativeElement.querySelectorAll('li');\n nodes.forEach(item => {\n if (item.getAttribute('tabindex') === '0') {\n this.lastNodeOnFocus = item;\n this.lastNodeOnFocus.setAttribute('tabindex', '-1');\n }\n });\n }\n setState() {\n if (isPresent(this.dataItems) && isPresent(this.valueField)) {\n this.setTags();\n this.checkedItems = this.dataItems.slice();\n }\n this.cdr.markForCheck();\n }\n setTags() {\n const source = this.dataItems.map(item => item.dataItem);\n this.tags = this.tagMapper(source);\n this.disabledIndices = this.disabledItemsMapper();\n }\n updateValue(value) {\n const newValue = this.valuePrimitive ?\n value.map(item => valueFrom(item, this.valueField)) :\n value.map(item => item.dataItem);\n this.value = newValue;\n this.emitValueChange(this.value);\n }\n /**\n * @hidden\n *\n * Determines which of the provided tags should be disabled and stores their position indices\n */\n disabledItemsMapper() {\n return new Set(this.dataItems.reduce((indices, item, index) => {\n if (this.itemDisabled(item.dataItem, item.index)) {\n indices.push(index);\n }\n return indices;\n }, []));\n }\n setComponentClasses() {\n if (this.size !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));\n }\n if (this.rounded !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getRoundedClass(this.rounded));\n }\n if (this.fillMode !== 'none') {\n this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));\n }\n }\n removeParents(parent) {\n let currentParent = parent;\n const nodes = [];\n while (currentParent) {\n nodes.push(currentParent.item);\n currentParent = currentParent.parent;\n }\n return nodes;\n }\n /**\n * Creates an internal map of the available tree items to be used as a reference\n * to retrieve the item's children/parent and determine the checked sate\n */\n registerLookupItems(data, parentItem = null, levelIndex = 0) {\n if (!isPresent(data) || data.length === 0) {\n return;\n }\n const parentIndex = nodeIndex$1(parentItem);\n const treeItems = data.map((node) => buildTreeItem(node, this.valueField, levelIndex));\n if (isPresent(parentItem)) {\n this.lookup.registerChildren(parentIndex, treeItems);\n }\n treeItems.forEach(item => {\n this.lookup.registerItem(item, parentItem);\n if (!this.loadOnDemand) {\n this.registerChildLookupItems(item, levelIndex);\n }\n });\n }\n registerChildLookupItems(item, levelIndex) {\n if (this.hasChildren(item.dataItem)) {\n this.children(item.dataItem)\n .subscribe(children => {\n const index = this.isHeterogeneous ? levelIndex + 1 : 0;\n this.registerLookupItems(children, item, index);\n });\n }\n }\n}\nMultiSelectTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeComponent, deps: [{ token: i0.ElementRef }, { token: i2.PopupService }, { token: i0.Renderer2 }, { token: NavigationService }, { token: i0.NgZone }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: MultiSelectTreeLookupService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiSelectTreeComponent, selector: \"kendo-multiselecttree\", inputs: { tabindex: \"tabindex\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", popupSettings: \"popupSettings\", checkableSettings: \"checkableSettings\", data: \"data\", value: \"value\", dataItems: \"dataItems\", textField: \"textField\", valueField: \"valueField\", valueDepth: \"valueDepth\", loading: \"loading\", placeholder: \"placeholder\", listHeight: \"listHeight\", disabled: \"disabled\", readonly: \"readonly\", valuePrimitive: \"valuePrimitive\", loadOnDemand: \"loadOnDemand\", focusableId: \"focusableId\", clearButton: \"clearButton\", filterable: \"filterable\", checkAll: \"checkAll\", hasChildren: \"hasChildren\", fetchChildren: \"fetchChildren\", isNodeExpanded: \"isNodeExpanded\", isNodeVisible: \"isNodeVisible\", itemDisabled: \"itemDisabled\", tagMapper: \"tagMapper\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", nodeExpand: \"nodeExpand\", nodeCollapse: \"nodeCollapse\", valueChange: \"valueChange\", removeTag: \"removeTag\", filterChange: \"filterChange\" }, host: { listeners: { \"click\": \"handleClick()\", \"keydown\": \"handleKeydown($event)\" }, properties: { \"class.k-dropdowntree\": \"this.hostClasses\", \"class.k-input\": \"this.hostClasses\", \"class.k-disabled\": \"this.isDisabled\", \"attr.aria-disabled\": \"this.isDisabled\", \"class.k-loading\": \"this.isLoading\", \"attr.id\": \"this.id\", \"attr.dir\": \"this.direction\", \"attr.tabindex\": \"this.hostTabIndex\", \"attr.role\": \"this.role\", \"attr.aria-expanded\": \"this.isAriaExpanded\", \"attr.aria-haspopup\": \"this.ariaHasPopup\", \"attr.readonly\": \"this.isReadonly\", \"attr.aria-readonly\": \"this.isReadonly\", \"attr.aria-describedby\": \"this.ariaDescribedBy\", \"attr.aria-activedescendant\": \"this.ariaActiveDescendant\" } }, providers: [\n LocalizationService,\n NavigationService,\n DataService,\n DisabledItemsService,\n SelectionService,\n MultiSelectTreeLookupService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselecttree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n }\n ], queries: [{ propertyName: \"headerTemplate\", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: \"footerTemplate\", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: \"nodeTemplate\", first: true, predicate: NodeTemplateDirective, descendants: true }, { propertyName: \"noDataTemplate\", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: \"tagTemplate\", first: true, predicate: TagTemplateDirective, descendants: true }, { propertyName: \"groupTagTemplate\", first: true, predicate: GroupTagTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"treeview\", first: true, predicate: [\"treeview\"], descendants: true }, { propertyName: \"filterInput\", first: true, predicate: [\"filterInput\"], descendants: true }, { propertyName: \"checkAllInput\", first: true, predicate: [\"checkAllInput\"], descendants: true }], exportAs: [\"kendoMultiSelectTree\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n {{ placeholder }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{ messageFor('checkAllText') }}\n \n
\n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n `, isInline: true, components: [{ type: TagListComponent, selector: \"kendo-taglist\", inputs: [\"tags\", \"textField\", \"valueField\", \"valueDepth\", \"focused\", \"template\", \"groupTemplate\", \"disabled\", \"tagPrefix\", \"id\", \"size\", \"rounded\", \"fillMode\", \"disabledIndices\"], outputs: [\"removeTag\"] }, { type: i1$1.TreeViewComponent, selector: \"kendo-treeview\", inputs: [\"filterInputPlaceholder\", \"expandDisabledNodes\", \"animate\", \"nodeTemplate\", \"loadMoreButtonTemplate\", \"trackBy\", \"nodes\", \"textField\", \"hasChildren\", \"isChecked\", \"isDisabled\", \"isExpanded\", \"isSelected\", \"isVisible\", \"navigable\", \"children\", \"loadOnDemand\", \"filterable\", \"filter\", \"size\", \"disableParentNodesOnly\"], outputs: [\"childrenLoaded\", \"blur\", \"focus\", \"expand\", \"collapse\", \"nodeDragStart\", \"nodeDrag\", \"filterStateChange\", \"nodeDrop\", \"nodeDragEnd\", \"addItem\", \"removeItem\", \"checkedChange\", \"selectionChange\", \"filterChange\", \"nodeClick\", \"nodeDblClick\"], exportAs: [\"kendoTreeView\"] }], directives: [{ type: LocalizedMessagesDirective, selector: \"\\n [kendoDropDownListLocalizedMessages],\\n [kendoDropDownTreeLocalizedMessages],\\n [kendoComboBoxLocalizedMessages],\\n [kendoMultiColumnComboBoxLocalizedMessages],\\n [kendoAutoCompleteLocalizedMessages],\\n [kendoMultiSelectLocalizedMessages],\\n [kendoMultiSelectTreeLocalizedMessages]\\n \" }, { type: i11.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i11.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i12.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { type: FilterInputDirective, selector: \"[filterInput]\", inputs: [\"filterInput\"] }, { type: i12.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { type: i12.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { type: i9.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: TemplateContextDirective, selector: \"[templateContext]\", inputs: [\"templateContext\"] }, { type: CheckAllDirective, selector: \"[checkAll]\", inputs: [\"lastAction\", \"treeview\", \"checkedItems\", \"valueField\", \"checkAll\"], outputs: [\"checkedItemsChange\"] }, { type: CheckDirective, selector: \"[kendoMultiSelectTreeCheckable]\", inputs: [\"checkable\", \"valueField\", \"checkedItems\"], outputs: [\"checkedItemsChange\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoMultiSelectTree',\n providers: [\n LocalizationService,\n NavigationService,\n DataService,\n DisabledItemsService,\n SelectionService,\n MultiSelectTreeLookupService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselecttree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiSelectTreeComponent)\n }\n ],\n selector: 'kendo-multiselecttree',\n template: `\n \n \n \n \n {{ placeholder }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{ messageFor('checkAllText') }}\n \n
\n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i2.PopupService }, { type: i0.Renderer2 }, { type: NavigationService }, { type: i0.NgZone }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: MultiSelectTreeLookupService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-dropdowntree']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }, {\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], isLoading: [{\n type: HostBinding,\n args: ['class.k-loading']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], isAriaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], ariaHasPopup: [{\n type: HostBinding,\n args: ['attr.aria-haspopup']\n }], isReadonly: [{\n type: HostBinding,\n args: ['attr.readonly']\n }, {\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], ariaDescribedBy: [{\n type: HostBinding,\n args: ['attr.aria-describedby']\n }], ariaActiveDescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], handleClick: [{\n type: HostListener,\n args: ['click']\n }], handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], nodeTemplate: [{\n type: ContentChild,\n args: [NodeTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], tagTemplate: [{\n type: ContentChild,\n args: [TagTemplateDirective, { static: false }]\n }], groupTagTemplate: [{\n type: ContentChild,\n args: [GroupTagTemplateDirective, { static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], treeview: [{\n type: ViewChild,\n args: ['treeview', { static: false }]\n }], filterInput: [{\n type: ViewChild,\n args: ['filterInput', { static: false }]\n }], checkAllInput: [{\n type: ViewChild,\n args: ['checkAllInput', { static: false }]\n }], tabindex: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], checkableSettings: [{\n type: Input\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], dataItems: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], valueDepth: [{\n type: Input\n }], loading: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], focusableId: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], filterable: [{\n type: Input\n }], checkAll: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }], fetchChildren: [{\n type: Input\n }], isNodeExpanded: [{\n type: Input\n }], isNodeVisible: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], tagMapper: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], nodeExpand: [{\n type: Output\n }], nodeCollapse: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], removeTag: [{\n type: Output\n }], filterChange: [{\n type: Output\n }] } });\n\n/**\n * A directive which encapsulates the retrieval of the child nodes when flat data is provided.\n */\nclass DropDownTreeFlatBindingDirective extends FlatDataBindingDirective {\n constructor(dropDownTree) {\n super(dropDownTree);\n this.dropDownTree = dropDownTree;\n }\n /**\n * @hidden\n */\n set filter(term) {\n super.filter = term;\n }\n ngOnChanges(changes) {\n if (isChanged('nodes', changes, false)) {\n this.dropDownTree.nodes = changes.nodes.currentValue;\n super.nodes = changes.nodes.currentValue;\n }\n super.ngOnChanges(changes);\n }\n}\nDropDownTreeFlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreeFlatBindingDirective, deps: [{ token: i1$1.DataBoundComponent }], target: i0.ɵɵFactoryTarget.Directive });\nDropDownTreeFlatBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropDownTreeFlatBindingDirective, selector: \"[kendoDropDownTreeFlatBinding]\", inputs: { nodes: [\"kendoDropDownTreeFlatBinding\", \"nodes\"], idField: [\"valueField\", \"idField\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreeFlatBindingDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeFlatBinding]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.DataBoundComponent }]; }, propDecorators: { nodes: [{\n type: Input,\n args: ['kendoDropDownTreeFlatBinding']\n }], idField: [{\n type: Input,\n args: ['valueField']\n }] } });\n\nconst INDEX_SEPARATOR = '_';\nconst nodeIndex = (index = '', parentIndex = '') => {\n return `${parentIndex}${parentIndex ? INDEX_SEPARATOR : ''}${index}`;\n};\nconst isArrayWithAtLeastOneItem = v => v && Array.isArray(v) && v.length !== 0;\nconst mapToWrappers = (currentLevelNodes, childrenField, parent = null, parentIndex = '') => {\n if (!isArrayWithAtLeastOneItem(currentLevelNodes)) {\n return [];\n }\n return currentLevelNodes.map((node, idx) => {\n const index = nodeIndex(idx.toString(), parentIndex);\n const wrapper = {\n dataItem: node,\n index,\n parent,\n visible: true\n };\n wrapper.children = mapToWrappers(getter$1(childrenField)(node), childrenField, wrapper, index);\n return wrapper;\n });\n};\n/**\n * A directive which encapsulates the retrieval of the child nodes when hierarchical data is provided.\n */\nclass DropDownTreeHierarchyBindingDirective extends HierarchyBindingDirective {\n constructor(dropDownTree) {\n super(dropDownTree);\n this.dropDownTree = dropDownTree;\n }\n /**\n * @hidden\n */\n set filter(term) {\n super.filter = term;\n }\n ngOnChanges(changes) {\n if (isChanged('nodes', changes, false)) {\n this.dropDownTree.nodes = changes.nodes.currentValue;\n super.nodes = changes.nodes.currentValue;\n }\n super.ngOnChanges(changes);\n }\n}\nDropDownTreeHierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreeHierarchyBindingDirective, deps: [{ token: i1$1.DataBoundComponent }], target: i0.ɵɵFactoryTarget.Directive });\nDropDownTreeHierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropDownTreeHierarchyBindingDirective, selector: \"[kendoDropDownTreeHierarchyBinding]\", inputs: { nodes: [\"kendoDropDownTreeHierarchyBinding\", \"nodes\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreeHierarchyBindingDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeHierarchyBinding]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.DataBoundComponent }]; }, propDecorators: { nodes: [{\n type: Input,\n args: ['kendoDropDownTreeHierarchyBinding']\n }] } });\n\n/**\n * A directive which encapsulates the retrieval of the child nodes when flat data is provided.\n */\nclass MultiSelectTreeFlatBindingDirective extends FlatDataBindingDirective {\n constructor(multiSelectTree) {\n super(multiSelectTree);\n this.multiSelectTree = multiSelectTree;\n }\n /**\n * @hidden\n */\n set filter(term) {\n super.filter = term;\n }\n ngOnChanges(changes) {\n if (isChanged('nodes', changes, false)) {\n this.multiSelectTree.nodes = changes.nodes.currentValue;\n super.nodes = changes.nodes.currentValue;\n }\n super.ngOnChanges(changes);\n }\n}\nMultiSelectTreeFlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeFlatBindingDirective, deps: [{ token: i1$1.DataBoundComponent }], target: i0.ɵɵFactoryTarget.Directive });\nMultiSelectTreeFlatBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiSelectTreeFlatBindingDirective, selector: \"[kendoMultiSelectTreeFlatBinding]\", inputs: { nodes: [\"kendoMultiSelectTreeFlatBinding\", \"nodes\"], idField: [\"valueField\", \"idField\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeFlatBindingDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeFlatBinding]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.DataBoundComponent }]; }, propDecorators: { nodes: [{\n type: Input,\n args: ['kendoMultiSelectTreeFlatBinding']\n }], idField: [{\n type: Input,\n args: ['valueField']\n }] } });\n\n/**\n * A directive which encapsulates the retrieval of the child nodes when hierarchical data is provided.\n */\nclass MultiSelectTreeHierarchyBindingDirective extends HierarchyBindingDirective {\n constructor(multiSelectTree) {\n super(multiSelectTree);\n this.multiSelectTree = multiSelectTree;\n }\n /**\n * @hidden\n */\n set filter(term) {\n super.filter = term;\n }\n ngOnChanges(changes) {\n if (isChanged('nodes', changes, false)) {\n this.multiSelectTree.nodes = changes.nodes.currentValue;\n super.nodes = changes.nodes.currentValue;\n }\n super.ngOnChanges(changes);\n }\n}\nMultiSelectTreeHierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeHierarchyBindingDirective, deps: [{ token: i1$1.DataBoundComponent }], target: i0.ɵɵFactoryTarget.Directive });\nMultiSelectTreeHierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiSelectTreeHierarchyBindingDirective, selector: \"[kendoMultiSelectTreeHierarchyBinding]\", inputs: { nodes: [\"kendoMultiSelectTreeHierarchyBinding\", \"nodes\"] }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeHierarchyBindingDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeHierarchyBinding]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.DataBoundComponent }]; }, propDecorators: { nodes: [{\n type: Input,\n args: ['kendoMultiSelectTreeHierarchyBinding']\n }] } });\n\n/**\n * A directive which manages the expanded state of the popup TreeView.\n */\nclass DropDownTreesExpandDirective extends ExpandDirective {\n constructor(dropDownTree) {\n super(dropDownTree);\n this.dropDownTree = dropDownTree;\n }\n /**\n * @hidden\n *\n * Ensures a user-defined `isNodeExpanded` callback will not be overriden by the default directive setup.\n * Implemented as a value setter in the base directive, this just overrides the input name.\n */\n set isExpanded(value) {\n this.dropDownTree.isExpanded = value;\n }\n ;\n}\nDropDownTreesExpandDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreesExpandDirective, deps: [{ token: i1$1.ExpandableComponent }], target: i0.ɵɵFactoryTarget.Directive });\nDropDownTreesExpandDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropDownTreesExpandDirective, selector: \"[kendoDropDownTreeExpandable], [kendoMultiSelectTreeExpandable]\", inputs: { isExpanded: [\"isNodeExpanded\", \"isExpanded\"] }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreesExpandDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeExpandable], [kendoMultiSelectTreeExpandable]'\n }]\n }], ctorParameters: function () { return [{ type: i1$1.ExpandableComponent }]; }, propDecorators: { isExpanded: [{\n type: Input,\n args: ['isNodeExpanded']\n }] } });\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_dropdowns %}#toc-messages)).\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CustomMessagesComponent, selector: \"kendo-dropdownlist-messages,kendo-combobox-messages,kendo-multicolumncombobox-messages,kendo-autocomplete-messages,kendo-multiselect-messages,kendo-dropdowntree-messages,kendo-multiselecttree-messages\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ],\n selector: 'kendo-dropdownlist-messages,kendo-combobox-messages,kendo-multicolumncombobox-messages,kendo-autocomplete-messages,kendo-multiselect-messages,kendo-dropdowntree-messages,kendo-multiselecttree-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst DEFAULT_FILTER_SETTINGS = {\n caseSensitive: false,\n operator: 'startsWith'\n};\n/**\n * Implements an event handler for the `filterChange` event of a DropDowns component\n * which performs simple data filtering.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public data: Array = [\"Albania\", \"Andorra\", \"Armenia\", \"Austria\", \"Azerbaijan\"];\n * }\n * ```\n * > Currently, the built-in filtering does not work with [grouped data]({% slug api_kendo-data-query_groupby %}).\n */\nclass FilterDirective {\n constructor(component) {\n this.component = component;\n /**\n * @hidden\n *\n * Sets whether the filtering functionality is enabled on component init.\n */\n this.filterable = true;\n this._data = [];\n }\n /**\n * The initial data that will be used as a source array for the filtering operations.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n return this._data;\n }\n ngOnInit() {\n this.component.filterable = this.filterable;\n this.filterChangeSubscription = this.component.filterChange\n .subscribe(this.handleFilterChange.bind(this));\n }\n ngOnDestroy() {\n if (isPresent(this.filterChangeSubscription)) {\n this.filterChangeSubscription.unsubscribe();\n }\n }\n handleFilterChange(query) {\n this.component.data = this.data.filter(item => this.matchesAnyField(item, query));\n }\n matchesAnyField(item, query) {\n const normalizedQuery = this.normalizeValue(query);\n const { fields } = this.filterSettings;\n // if no filter fields are present, we are dealing with primitive data\n if (fields.length === 0) {\n return this.checkItem(item, normalizedQuery);\n }\n return fields.some(field => this.checkItem(getter(item, field), normalizedQuery));\n }\n checkItem(target, query) {\n target = this.normalizeValue(target);\n if (this.filterSettings.operator === 'contains') {\n return target.indexOf(query) !== -1;\n }\n else {\n return target.indexOf(query) === 0;\n }\n }\n normalizeValue(value) {\n const normalizedValue = isPresent(value) ? value.toString() : '';\n return this.filterSettings.caseSensitive ? normalizedValue : normalizedValue.toLowerCase();\n }\n getFilterFields(providedFields) {\n // ignore provided fields if the component deals with primitive data\n if (!this.component.textField && !this.component.valueField) {\n return [];\n }\n if (isArray(providedFields) && providedFields.length > 0) {\n return providedFields;\n }\n else {\n // the autocomplete uses `valueField` for text extraction\n const textField = this.component.textField || this.component.valueField;\n return [textField];\n }\n }\n get filterSettings() {\n const settings = this.rawSettings;\n const providedFields = isPresent(settings) && typeof settings === 'object' ? settings.fields : [];\n return Object.assign({}, DEFAULT_FILTER_SETTINGS, settings, { fields: this.getFilterFields(providedFields) });\n }\n}\nFilterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FilterDirective, deps: [{ token: FilterableComponent }], target: i0.ɵɵFactoryTarget.Directive });\nFilterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FilterDirective, selector: \"[kendoDropDownFilter]\", inputs: { data: \"data\", rawSettings: [\"kendoDropDownFilter\", \"rawSettings\"], filterable: \"filterable\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FilterDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownFilter]'\n }]\n }], ctorParameters: function () { return [{ type: FilterableComponent }]; }, propDecorators: { data: [{\n type: Input\n }], rawSettings: [{\n type: Input,\n args: ['kendoDropDownFilter']\n }], filterable: [{\n type: Input\n }] } });\n\nconst SHARED_DIRECTIVES = [\n HeaderTemplateDirective,\n FooterTemplateDirective,\n ItemTemplateDirective,\n GroupTemplateDirective,\n FixedGroupTemplateDirective,\n NoDataTemplateDirective,\n ValueTemplateDirective,\n TagTemplateDirective,\n GroupTagTemplateDirective,\n LocalizedMessagesDirective,\n CustomMessagesComponent,\n FilterDirective,\n FilterInputDirective\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ItemTemplateDirective`—The item template directive.\n * - `ValueTemplateDirective`—The value template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n * - `NoDataTemplateDirective`—The noData template directive.\n * - `TagTemplateDirective`—The tag template directive.\n * - `SummaryTagTemplateDirective`—The summary tag template directive.\n */\nclass SharedDirectivesModule {\n}\nSharedDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSharedDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedDirectivesModule, declarations: [HeaderTemplateDirective,\n FooterTemplateDirective,\n ItemTemplateDirective,\n GroupTemplateDirective,\n FixedGroupTemplateDirective,\n NoDataTemplateDirective,\n ValueTemplateDirective,\n TagTemplateDirective,\n GroupTagTemplateDirective,\n LocalizedMessagesDirective,\n CustomMessagesComponent,\n FilterDirective,\n FilterInputDirective], exports: [HeaderTemplateDirective,\n FooterTemplateDirective,\n ItemTemplateDirective,\n GroupTemplateDirective,\n FixedGroupTemplateDirective,\n NoDataTemplateDirective,\n ValueTemplateDirective,\n TagTemplateDirective,\n GroupTagTemplateDirective,\n LocalizedMessagesDirective,\n CustomMessagesComponent,\n FilterDirective,\n FilterInputDirective] });\nSharedDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedDirectivesModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedDirectivesModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES]\n }]\n }] });\n\nconst INTERNAL_DIRECTIVES = [\n ListComponent,\n ListItemDirective,\n SelectableDirective,\n SearchBarComponent,\n TemplateContextDirective,\n TagListComponent,\n CheckDirective,\n CheckAllDirective\n];\n/**\n * @hidden\n */\nclass SharedModule {\n}\nSharedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, declarations: [ListComponent,\n ListItemDirective,\n SelectableDirective,\n SearchBarComponent,\n TemplateContextDirective,\n TagListComponent,\n CheckDirective,\n CheckAllDirective], imports: [CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule], exports: [ListComponent,\n ListItemDirective,\n SelectableDirective,\n SearchBarComponent,\n TemplateContextDirective,\n TagListComponent,\n CheckDirective,\n CheckAllDirective, CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule] });\nSharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, imports: [[CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule], CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_DIRECTIVES],\n exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule],\n imports: [CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule]\n }]\n }] });\n\n/**\n * A directive which configures the MultiSelectTree to show one single summary tag for all selected data items.\n * When a number is provided, the summary tag is displayed after the given amount of data items are selected\n * ([more information and examples]({% slug api_dropdowns_multiselecttreesummarytagdirective %})).\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nclass MultiSelectTreeSummaryTagDirective {\n constructor(multiSelectTreeComponent) {\n this.multiSelectTreeComponent = multiSelectTreeComponent;\n /**\n * A numeric value that indicates the number of selected data items after which the summary tag will appear.\n */\n this.showAfter = 0;\n this.createTagMapper();\n }\n ngOnChanges(changes) {\n if (isPresent(changes.showAfter)) {\n this.createTagMapper();\n this.multiSelectTreeComponent.handleTagMapperChange(this.showAfter);\n }\n }\n createTagMapper() {\n const showAfter = parseNumber(this.showAfter);\n this.multiSelectTreeComponent.tagMapper = (tags) => {\n if (tags.length > showAfter) {\n // tags provided in an array are rendered as a single group tag\n return [...tags.slice(0, showAfter), tags.slice(showAfter)];\n }\n else {\n return tags;\n }\n };\n }\n}\nMultiSelectTreeSummaryTagDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeSummaryTagDirective, deps: [{ token: MultiSelectTreeComponent }], target: i0.ɵɵFactoryTarget.Directive });\nMultiSelectTreeSummaryTagDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MultiSelectTreeSummaryTagDirective, selector: \"[kendoMultiSelectTreeSummaryTag]\", inputs: { showAfter: [\"kendoMultiSelectTreeSummaryTag\", \"showAfter\"] }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectTreeSummaryTagDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeSummaryTag]'\n }]\n }], ctorParameters: function () { return [{ type: MultiSelectTreeComponent }]; }, propDecorators: { showAfter: [{\n type: Input,\n args: ['kendoMultiSelectTreeSummaryTag']\n }] } });\n\nconst DROPDOWNTREE_DIRECTIVES = [\n DropDownTreeComponent,\n MultiSelectTreeComponent,\n DropDownTreeFlatBindingDirective,\n DropDownTreeHierarchyBindingDirective,\n MultiSelectTreeFlatBindingDirective,\n MultiSelectTreeHierarchyBindingDirective,\n DropDownTreesExpandDirective,\n NodeTemplateDirective,\n MultiSelectTreeSummaryTagDirective\n];\n/**\n * @hidden\n */\nclass DropDownTreesModule {\n}\nDropDownTreesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDropDownTreesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreesModule, declarations: [DropDownTreeComponent,\n MultiSelectTreeComponent,\n DropDownTreeFlatBindingDirective,\n DropDownTreeHierarchyBindingDirective,\n MultiSelectTreeFlatBindingDirective,\n MultiSelectTreeHierarchyBindingDirective,\n DropDownTreesExpandDirective,\n NodeTemplateDirective,\n MultiSelectTreeSummaryTagDirective], imports: [SharedModule, TreeViewModule], exports: [DropDownTreeComponent,\n MultiSelectTreeComponent,\n DropDownTreeFlatBindingDirective,\n DropDownTreeHierarchyBindingDirective,\n MultiSelectTreeFlatBindingDirective,\n MultiSelectTreeHierarchyBindingDirective,\n DropDownTreesExpandDirective,\n NodeTemplateDirective,\n MultiSelectTreeSummaryTagDirective, SharedDirectivesModule] });\nDropDownTreesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreesModule, imports: [[SharedModule, TreeViewModule], SharedDirectivesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownTreesModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [DROPDOWNTREE_DIRECTIVES],\n exports: [DROPDOWNTREE_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule, TreeViewModule]\n }]\n }] });\n\n/**\n * A directive which configures the MultiSelect to show one single summary tag for all selected data items.\n * When a number is provided, the summary tag is displayed after the given amount of data items are selected\n * ([more information and examples]({% slug summarytagmode_multiselect %})).\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nclass SummaryTagDirective {\n constructor(multiSelectComponent) {\n this.multiSelectComponent = multiSelectComponent;\n /**\n * A numeric value that indicates the number of selected data items after which the summary tag will appear.\n */\n this.showAfter = 0;\n this.createTagMapper();\n }\n ngOnChanges(changes) {\n if (isPresent(changes.showAfter)) {\n this.createTagMapper();\n this.multiSelectComponent.onTagMapperChange();\n }\n }\n createTagMapper() {\n const showAfter = parseNumber(this.showAfter);\n this.multiSelectComponent.tagMapper = (tags) => {\n if (tags.length > showAfter) {\n let result;\n result = tags.slice(0, showAfter);\n result.push(tags.slice(showAfter, tags.length));\n return result;\n }\n else {\n return tags;\n }\n };\n }\n}\nSummaryTagDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SummaryTagDirective, deps: [{ token: MultiSelectComponent }], target: i0.ɵɵFactoryTarget.Directive });\nSummaryTagDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SummaryTagDirective, selector: \"[kendoMultiSelectSummaryTag]\", inputs: { showAfter: [\"kendoMultiSelectSummaryTag\", \"showAfter\"] }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SummaryTagDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectSummaryTag]'\n }]\n }], ctorParameters: function () { return [{ type: MultiSelectComponent }]; }, propDecorators: { showAfter: [{\n type: Input,\n args: ['kendoMultiSelectSummaryTag']\n }] } });\n\nconst AUTOCOMPLETE_DIRECTIVES = [\n AutoCompleteComponent\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `AutoCompleteComponent`—The AutoComplete component class.\n * - `ItemTemplateDirective`—The item template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n */\nclass AutoCompleteModule {\n}\nAutoCompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AutoCompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nAutoCompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AutoCompleteModule, declarations: [AutoCompleteComponent], imports: [SharedModule], exports: [AutoCompleteComponent, SharedDirectivesModule] });\nAutoCompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AutoCompleteModule, imports: [[SharedModule], SharedDirectivesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AutoCompleteModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [AUTOCOMPLETE_DIRECTIVES],\n exports: [AUTOCOMPLETE_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule]\n }]\n }] });\n\nconst COMBOBOX_DIRECTIVES = [\n ComboBoxComponent,\n MultiColumnComboBoxComponent,\n ComboBoxColumnComponent,\n ColumnHeaderTemplateDirective,\n ColumnCellTemplateDirective\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ComboBoxComponent`—The ComboBox component class.\n * - `MultiColumnComboBoxComponent`—The MultiColumnComboBox component class.\n * - `ItemTemplateDirective`—The item template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n * - `ColumnHeaderTemplateDirective`—The column header template directive.\n * - `ColumnCellTemplateDirective`—The column cell template directive.\n */\nclass ComboBoxModule {\n}\nComboBoxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nComboBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxModule, declarations: [ComboBoxComponent,\n MultiColumnComboBoxComponent,\n ComboBoxColumnComponent,\n ColumnHeaderTemplateDirective,\n ColumnCellTemplateDirective], imports: [SharedModule], exports: [ComboBoxComponent,\n MultiColumnComboBoxComponent,\n ComboBoxColumnComponent,\n ColumnHeaderTemplateDirective,\n ColumnCellTemplateDirective, SharedDirectivesModule] });\nComboBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxModule, providers: [{ provide: TOUCH_ENABLED, useValue: touchEnabled }], imports: [[SharedModule], SharedDirectivesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComboBoxModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMBOBOX_DIRECTIVES],\n exports: [COMBOBOX_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule],\n providers: [{ provide: TOUCH_ENABLED, useValue: touchEnabled }]\n }]\n }] });\n\nconst DROPDOWNLIST_DIRECTIVES = [\n DropDownListComponent\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `DropDownListComponent`—The DropDownList component class.\n * - `ItemTemplateDirective`—The item template directive.\n * - `ValueTemplateDirective`—The value template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n */\nclass DropDownListModule {\n}\nDropDownListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDropDownListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownListModule, declarations: [DropDownListComponent], imports: [SharedModule], exports: [DropDownListComponent, SharedDirectivesModule] });\nDropDownListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownListModule, imports: [[SharedModule], SharedDirectivesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownListModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [DROPDOWNLIST_DIRECTIVES],\n exports: [DROPDOWNLIST_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule]\n }]\n }] });\n\nconst MULTISELECT_DIRECTIVES = [\n MultiSelectComponent,\n SummaryTagDirective,\n CustomItemTemplateDirective\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `MultiSelectComponent`—The MultiSelect component class.\n * - `SummaryTagDirective`—The MultiSelect summary tag directive.\n * - `ItemTemplateDirective`—The item template directive.\n * - `CustomItemTemplateDirective`—The custom item template directive.\n * - `TagTemplateDirective`—The tag template directive.\n * - `SummaryTagTemplateDirective`—The summary tag template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n * - `NoDataTemplateDirective`—The no-data template directive.\n */\nclass MultiSelectModule {\n}\nMultiSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMultiSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectModule, declarations: [MultiSelectComponent,\n SummaryTagDirective,\n CustomItemTemplateDirective], imports: [SharedModule], exports: [MultiSelectComponent,\n SummaryTagDirective,\n CustomItemTemplateDirective, SharedDirectivesModule] });\nMultiSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectModule, providers: [{ provide: TOUCH_ENABLED, useValue: touchEnabled }], imports: [[SharedModule], SharedDirectivesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MultiSelectModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [MULTISELECT_DIRECTIVES],\n exports: [MULTISELECT_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule],\n providers: [{ provide: TOUCH_ENABLED, useValue: touchEnabled }]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dropdowns components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Dropdowns module\n * import { DropDownsModule } from '@progress/kendo-angular-dropdowns';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare the app component\n * imports: [BrowserModule, DropDownsModule], // import the Dropdowns module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DropDownsModule {\n}\nDropDownsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDropDownsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownsModule, exports: [AutoCompleteModule, ComboBoxModule, DropDownListModule, MultiSelectModule, DropDownTreesModule] });\nDropDownsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownsModule, imports: [AutoCompleteModule, ComboBoxModule, DropDownListModule, MultiSelectModule, DropDownTreesModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropDownsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [AutoCompleteModule, ComboBoxModule, DropDownListModule, MultiSelectModule, DropDownTreesModule]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AutoCompleteComponent, AutoCompleteModule, CheckAllDirective, CheckDirective, ColumnCellTemplateDirective, ColumnHeaderTemplateDirective, ComboBoxColumnComponent, ComboBoxComponent, ComboBoxModule, CustomItemTemplateDirective, CustomMessagesComponent, DropDownListComponent, DropDownListModule, DropDownTreeComponent, DropDownTreeFlatBindingDirective, DropDownTreeHierarchyBindingDirective, DropDownTreesExpandDirective, DropDownTreesModule, DropDownsModule, FilterDirective, FilterInputDirective, FilterableComponent, FixedGroupTemplateDirective, FooterTemplateDirective, GroupTagTemplateDirective, GroupTemplateDirective, HeaderTemplateDirective, ItemTemplateDirective, ListComponent, ListItemDirective, LocalizedMessagesDirective, MultiColumnComboBoxComponent, MultiSelectComponent, MultiSelectModule, MultiSelectTreeComponent, MultiSelectTreeFlatBindingDirective, MultiSelectTreeHierarchyBindingDirective, MultiSelectTreeSummaryTagDirective, NoDataTemplateDirective, NodeTemplateDirective, PreventableEvent, RemoveTagEvent, SearchBarComponent, SelectableDirective, SharedDirectivesModule, SharedModule, SummaryTagDirective, TagListComponent, TagTemplateDirective, TemplateContextDirective, ValueTemplateDirective };\n\n","import { not } from '../util/not';\nimport { filter } from './filter';\nexport function partition(predicate, thisArg) {\n return (source) => [filter(predicate, thisArg)(source), filter(not(predicate, thisArg))(source)];\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { isDevMode, Directive, Optional, EventEmitter, ElementRef, Component, Input, Output, HostBinding, ViewChild, ContentChild, ViewChildren, forwardRef, Inject, Injectable, HostListener, NgModule, ViewContainerRef, ContentChildren } from '@angular/core';\nimport { NgControl, NG_VALUE_ACCESSOR, NG_VALIDATORS, RadioControlValueAccessor } from '@angular/forms';\nimport { Subscription, fromEvent, interval, merge, BehaviorSubject, Subject } from 'rxjs';\nimport { take, filter, concatMap, startWith, takeUntil, skip, debounceTime, throttleTime } from 'rxjs/operators';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX, RTL } from '@progress/kendo-angular-l10n';\nimport * as i3 from '@progress/kendo-angular-common';\nimport { Keys, guid, hasObservers, anyChanged, isDocumentAvailable, KendoInput, isChanged, DraggableModule, EventsModule, ResizeSensorModule, PreventableEvent, closest as closest$1 } from '@progress/kendo-angular-common';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i1$1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { browser, mobileOS, detectDesktopBrowser, detectMobileOS } from '@progress/kendo-common';\nimport * as i1$2 from '@progress/kendo-angular-intl';\nimport * as i1$3 from '@progress/kendo-angular-popup';\nimport { PopupModule } from '@progress/kendo-angular-popup';\nimport { parseColor as parseColor$1, Color, namedColors } from '@progress/kendo-drawing';\n\n/**\n * @hidden\n *\n * Checks if the value is `null` or `undefined`. Falsy values like '', 0, false, NaN, etc. are regarded as present.\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst areSame = (value1, value2) => value1 === value2 || (value1 === null && value2 === undefined) || (value1 === undefined && value2 === null);\n/**\n * @hidden\n */\nconst requiresZoneOnBlur = (ngControl) => ngControl &&\n (!ngControl.touched || (ngControl.control && ngControl.control.updateOn === 'blur'));\n/**\n * @hidden\n *\n * Fits the contender number into the specified bounds. If the number is NaN or null, the min is returned.\n *\n * @param contender Represents the number you want to fit into specified bounds.\n * @param min The inclusive lower bound number.\n * @param max The inclusive upper bound number.\n */\nconst fitIntoBounds = (contender, min, max) => {\n if (!isPresent(contender) || isNaN(contender)) {\n return min;\n }\n return contender <= min ? min : contender >= max ? max : contender;\n};\nconst SIZES = {\n small: 'sm',\n medium: 'md',\n large: 'lg'\n};\nconst ROUNDNESS = {\n small: 'sm',\n medium: 'md',\n large: 'lg',\n full: 'full'\n};\n/**\n * @hidden\n *\n * Returns the styling classes to be added and removed\n */\nconst getStylingClasses = (componentType, stylingOption, previousValue, newValue) => {\n switch (stylingOption) {\n case 'size':\n return {\n toRemove: `k-${componentType}-${SIZES[previousValue]}`,\n toAdd: newValue !== 'none' ? `k-${componentType}-${SIZES[newValue]}` : ''\n };\n case 'rounded':\n return {\n toRemove: `k-rounded-${ROUNDNESS[previousValue]}`,\n toAdd: newValue !== 'none' ? `k-rounded-${ROUNDNESS[newValue]}` : ''\n };\n case 'fillMode':\n return {\n toRemove: `k-${componentType}-${previousValue}`,\n toAdd: newValue !== 'none' ? `k-${componentType}-${newValue}` : ''\n };\n default:\n break;\n }\n};\n\n/**\n * @hidden\n */\nconst MAX_PRECISION = 20;\n/**\n * @hidden\n */\nconst limitPrecision = (precision) => Math.min(precision, MAX_PRECISION);\n/**\n * @hidden\n */\nconst fractionLength = (value) => {\n return (String(value).split('.')[1] || \"\").length;\n};\nconst maxFractionLength = (value1, value2) => {\n return Math.max(fractionLength(value1), fractionLength(value2));\n};\n/**\n * @hidden\n */\nconst toFixedPrecision = (value, precision) => {\n const maxPrecision = limitPrecision(precision);\n return parseFloat(value.toFixed(maxPrecision));\n};\n/**\n * @hidden\n */\nconst add = (value1, value2) => {\n const maxPrecision = maxFractionLength(value1, value2);\n return toFixedPrecision(value1 + value2, maxPrecision);\n};\n/**\n * @hidden\n */\nconst subtract = (value1, value2) => {\n return add(value1, -value2);\n};\n/**\n * @hidden\n */\nconst multiply = (value1, value2) => {\n const maxPrecision = fractionLength(value1) + fractionLength(value2);\n return toFixedPrecision(value1 * value2, maxPrecision);\n};\n/**\n * @hidden\n */\nconst divide = (dividend, divisor) => {\n if (divisor === 0) {\n return NaN;\n }\n const power = maxFractionLength(dividend, divisor);\n const correctionValue = Math.pow(10, power);\n return ((correctionValue * dividend) / (correctionValue * divisor));\n};\n/**\n * @hidden\n */\nconst remainder = (dividend, divisor) => {\n return Math.abs(subtract(dividend, multiply(divisor, Math.floor(divide(dividend, divisor)))));\n};\n\n/**\n * @hidden\n */\nconst calculateFixedTrackSize = ({ max, min, smallStep, fixedTickWidth }) => ((max - min) / smallStep) * fixedTickWidth;\n/**\n * @hidden\n */\nconst calculateTrackSize = (wrapperWidth, offset, showButtons = true) => {\n const BUTTONS_COUNT = 2;\n const trackOffset = showButtons ? parseFloat(offset) * BUTTONS_COUNT : 0;\n const trackWidth = wrapperWidth - trackOffset;\n return Math.floor(trackWidth);\n};\n/**\n * @hidden\n */\nconst calculateTicksCount = (min = 0, max = 0, smallStep = 1) => {\n if (smallStep <= 0) {\n throw new Error('Invalid argument: smallStep must be a positive number');\n }\n const adjustedRange = Math.abs(subtract(max, min));\n const adjustedRatio = Math.floor(divide(adjustedRange, smallStep));\n const result = add(adjustedRatio, 1);\n return result;\n};\n/**\n * @hidden\n */\nconst calculateValueFromTick = (index, { max, min, smallStep, reverse, vertical }) => {\n const value = add(min, multiply(index, smallStep));\n return vertical || reverse ? Math.abs(subtract(value, max)) : value;\n};\n/**\n * @hidden\n */\nconst calculateHandlePosition = ({ trackWidth, min, max, reverse, value }) => {\n const step = trackWidth / Math.abs(max - min);\n let pos = isPresent(value) ? step * (value - min) : min;\n if (reverse) {\n pos = trackWidth - pos;\n }\n return Math.floor(pos);\n};\n/**\n * @hidden\n */\nconst decreaseValueToStep = (value, { max, min, smallStep, largeStep }, large = false) => {\n const step = large && largeStep ? multiply(smallStep, largeStep) : smallStep;\n const stepValue = subtract(value, min);\n let result;\n const stepRemainder = remainder(stepValue, step);\n if (stepRemainder === 0) {\n result = subtract(stepValue, step);\n }\n else {\n result = subtract(stepValue, stepRemainder);\n }\n return limitValue(add(result, min), min, max);\n};\n/**\n * @hidden\n */\nconst increaseValueToStep = (value, { max, min, smallStep, largeStep }, large = false) => {\n const step = large && largeStep ? multiply(smallStep, largeStep) : smallStep;\n const stepValue = subtract(value, min);\n const stepRemainder = remainder(stepValue, step);\n const result = add(subtract(stepValue, stepRemainder), step);\n return limitValue(add(result, min), min, max);\n};\n/**\n * @hidden\n */\nconst isStartHandle = (dragHandle) => dragHandle.id.indexOf('k-start-handle') > -1;\n/**\n * @hidden\n */\nconst snapValue = (value, options) => {\n const { smallStep, min, max } = options;\n const limited = limitValue(value, min, max);\n if (value !== limited) {\n return limited;\n }\n const left = decreaseValueToStep(value, options);\n const right = increaseValueToStep(value, options);\n if ((value - min) % smallStep === 0) {\n return value;\n }\n if (right - value <= (right - left) / 2) {\n return right;\n }\n return left;\n};\n/**\n * @hidden\n */\nconst trimValue = (max, min, value) => {\n if (value > max) {\n return max;\n }\n if (value < min) {\n return min;\n }\n return value;\n};\n/**\n * @hidden\n */\nconst trimValueRange = (max, min, value) => {\n return value ? [trimValue(max, min, value[0]), trimValue(max, min, value[1])] : [min, min];\n};\n/**\n * @hidden\n */\nconst identity = (value) => value;\n/**\n * @hidden\n */\nconst isSameRange = (value1, value2) => areSame(value1[0], value2[0]) && areSame(value1[1], value2[1]);\n/**\n * @hidden\n */\nconst elementOffset = (element) => {\n const box = element.getBoundingClientRect();\n const documentElement = document.documentElement;\n return {\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0),\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0)\n };\n};\n/**\n * @hidden\n */\nconst limitValue = (value, min, max) => {\n return Math.max(Math.min(value, max), min);\n};\n/**\n * @hidden\n */\nconst eventValue = (eventArgs, scaleElement, options) => {\n const { min, max, vertical, rtl } = options;\n const trackOffset = elementOffset(scaleElement);\n const offset = vertical ? eventArgs.pageY - trackOffset.top : eventArgs.pageX - trackOffset.left;\n const scale = (max - min) / (vertical ? scaleElement.clientHeight : scaleElement.clientWidth);\n const offsetValue = offset * scale;\n let value = rtl || vertical ? max - offsetValue : min + offsetValue;\n const stepFractionLength = fractionLength(options.smallStep);\n value = toFixedPrecision(value, stepFractionLength + 1);\n return snapValue(value, options);\n};\n/**\n * @hidden\n */\nconst isButton = (element) => {\n return element.className.indexOf('k-button-increase') >= 0 || element.className.indexOf('k-button-decrease') >= 0;\n};\n/**\n * @hidden\n */\nconst increment = (options) => {\n return increaseValueToStep(options.value, options);\n};\n/**\n * @hidden\n */\nconst decrement = (options) => {\n return decreaseValueToStep(options.value, options);\n};\n/**\n * @hidden\n */\nconst incrementLarge = (options) => {\n return increaseValueToStep(options.value, options, true);\n};\n/**\n * @hidden\n */\nconst decrementLarge = (options) => {\n return decreaseValueToStep(options.value, options, true);\n};\n/**\n * @hidden\n */\nconst validateValue = (value) => {\n if (isDevMode && value && value[0] > value[1]) {\n throw new Error('[RangeSlider] The start value should not be greater than the end value.');\n }\n};\n/**\n * @hidden\n */\nvar slidersUtil = {\n calculateFixedTrackSize,\n calculateValueFromTick,\n calculateTrackSize,\n calculateTicksCount,\n calculateHandlePosition,\n decreaseValueToStep,\n decrement,\n decrementLarge,\n eventValue,\n identity,\n increment,\n incrementLarge,\n isButton,\n isSameRange,\n isStartHandle,\n increaseValueToStep,\n trimValue,\n trimValueRange,\n snapValue,\n validateValue\n};\n\n/**\n * @hidden\n */\nclass SliderModelBase {\n constructor(props, wrapper, track, renderer) {\n this.props = props;\n this.wrapper = wrapper;\n this.track = track;\n this.renderer = renderer;\n this.props = props;\n this.wrapper = wrapper;\n this.track = track;\n this.tickSizes = this.getTickSizes();\n }\n resizeTrack() {\n const orientation = this.props.vertical ? 'height' : 'width';\n const altOrientation = this.props.vertical ? 'width' : 'height';\n const trackWidth = this.trackWidth();\n this.track.parentElement.style[orientation] = `${trackWidth}px`;\n this.track.parentElement.style[altOrientation] = '';\n }\n resizeTicks(ticksContainer, ticks) {\n const dimension = this.props.vertical ? \"height\" : \"width\";\n [...ticks].map((tick, index) => tick.style[dimension] = `${this.tickSizes[index]}px`);\n if (this.props.vertical) {\n this.adjustPadding(ticksContainer);\n }\n }\n resizeWrapper() {\n const dimension = this.props.vertical ? \"height\" : \"width\";\n const fixedTrackWidth = calculateFixedTrackSize(this.props);\n const wrapperParentEl = this.wrapper.parentElement;\n if (fixedTrackWidth) {\n wrapperParentEl.style[dimension] = \"auto\";\n }\n }\n trackWidth() {\n if (this.props.fixedTickWidth) {\n return calculateFixedTrackSize(this.props);\n }\n return this.elementSize(this.track.parentElement);\n }\n getTickSizes() {\n const { min, max, smallStep } = this.props;\n const count = calculateTicksCount(min, max, smallStep);\n const trackSize = this.trackWidth();\n const distStep = trackSize / subtract(max, min);\n const result = [];\n let usedSpace = 0;\n let endPoint = 0;\n for (let i = 0; i < count; i++) {\n if (i === 0 || i === count - 1) {\n endPoint += (smallStep / 2) * distStep;\n }\n else {\n endPoint += smallStep * distStep;\n }\n // ensure that the sum of the tick sizes does not exceed the track width\n endPoint = +endPoint.toFixed(2) - 0.01;\n const size = Math.round(endPoint - usedSpace);\n result.push(size);\n usedSpace += size;\n }\n if (usedSpace >= trackSize) {\n result[result.length - 1] -= 1;\n }\n return result;\n }\n adjustPadding(ticksContainer) {\n const totalTickSize = this.tickSizes.reduce((prev, curr) => prev + curr, 0);\n const trackWidth = this.trackWidth();\n const reminder = trackWidth - totalTickSize;\n if (reminder !== 0) {\n const padding = reminder + this.elementOffset(this.track);\n ticksContainer.style.paddingTop = `${padding}px`;\n }\n }\n elementOffset(element) {\n const { vertical } = this.props;\n const style = getComputedStyle(element);\n return parseInt(vertical ? style.bottom : style.left, 10);\n }\n elementSize(element) {\n const { vertical } = this.props;\n return vertical ? element.clientHeight : element.clientWidth;\n }\n}\n\n/**\n * @hidden\n */\nclass SliderModel extends SliderModelBase {\n positionHandle(dragHandle) {\n const { max, min, reverse, vertical } = this.props;\n const position = vertical ? 'bottom' : 'left';\n const trackWidth = this.trackWidth();\n const value = trimValue(max, min, this.props.value);\n this.handlePosition = calculateHandlePosition({\n min,\n max,\n reverse,\n value,\n trackWidth\n });\n this.renderer.setStyle(dragHandle, position, `${this.handlePosition}px`);\n }\n positionSelection(selection) {\n const { reverse, vertical } = this.props;\n const dimension = vertical ? 'height' : 'width';\n let size = this.handlePosition;\n if (reverse) {\n size = this.trackWidth() - size;\n }\n this.renderer.setStyle(selection, dimension, `${size}px`);\n }\n}\n\nconst UNTOUCHED = 'ng-untouched';\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst hasClass = (element, className) => Boolean(toClassList(element.className).find((name) => name === className));\n/**\n * @hidden\n */\nfunction invokeElementMethod(element, name, ...args) {\n if (element && element.nativeElement) {\n return element.nativeElement[name].apply(element.nativeElement, args);\n }\n}\n/**\n * @hidden\n */\nconst isUntouched = (element) => element && element.nativeElement && hasClass(element.nativeElement, UNTOUCHED);\n/**\n * @hidden\n */\nconst containsFocus = (hostElement, contender) => hostElement && contender && (hostElement === contender || hostElement.contains(contender));\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-inputs',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1659455021,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * Represents the template for the labels of the Slider.\n * To define the labels template, nest an `` tag with the `kendoSliderLabelTemplate` directive inside\n * the `` tag. The template context is passed to the `label` value.\n *\n * @example\n * ```ts-no-run\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{value}}\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * }\n *\n * ```\n */\nclass LabelTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nLabelTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LabelTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nLabelTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LabelTemplateDirective, selector: \"[kendoSliderLabelTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LabelTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoSliderLabelTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nclass SliderBase {\n constructor(localizationService, injector, renderer, ngZone, changeDetector, hostElement) {\n this.localizationService = localizationService;\n this.injector = injector;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * Defines the title of the ticks ([see example]({% slug ticks_slider %}#toc-titles)). The default title\n * for each tick is its Slider value. If you use a callback function, the function accepts an argument\n * that holds the value of the component and returns a string with the new title.\n */\n this.title = identity;\n /**\n * Denotes the location of the tick marks in the Slider ([see example]({% slug ticks_slider %}#toc-placement)).\n *\n * The available options are:\n * * `before`—The tick marks are located to the top side of the horizontal track or to the left side of a vertical track.\n * * `after`—The tick marks are located to the bottom side of the horizontal track or to the right side of the vertical track.\n * * `both`— (Default) The tick marks are located on both sides of the track.\n * * `none`—The tick marks are not visible. The actual elements are not added to the DOM tree.\n */\n this.tickPlacement = 'both';\n /**\n * If `vertical` is set to `true`, the orientation of the Slider changes from horizontal to vertical\n * ([see example]({% slug orientation_slider %})).\n */\n this.vertical = false;\n /**\n * The minimum value of the Slider ([see example]({% slug predefinedsteps_slider %}#toc-small-steps)).\n * The attribute accepts both integers and floating-point numbers.\n */\n this.min = 0;\n /**\n * The maximum value of the Slider ([see example]({% slug predefinedsteps_slider %}#toc-small-steps)).\n * The attribute accepts both integers and floating-point numbers.\n */\n this.max = 10;\n /**\n * The step value of the Slider ([see example]({% slug predefinedsteps_slider %}#toc-small-steps)).\n * Accepts positive values only. Can be an integer or a floating-point number.\n */\n this.smallStep = 1;\n /**\n * Specifies that every nth tick will be large and will have a label\n * ([see example]({% slug predefinedsteps_slider %}#toc-large-steps)).\n * Accepts positive integer values only.\n */\n this.largeStep = null;\n /**\n * Determines whether the Slider is disabled ([see example]({% slug disabledstate_slider %})).\n */\n this.disabled = false;\n /**\n * Determines whether the Slider is in its read-only state ([see example]({% slug readonly_slider %})).\n */\n this.readonly = false;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the Slider.\n */\n this.tabindex = 0;\n /**\n * Fires each time the user focuses the component.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the component is blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the user selects a new value.\n */\n this.valueChange = new EventEmitter();\n this.sliderClass = true;\n this.subscriptions = new Subscription();\n /**\n * @hidden\n */\n this.ifEnabled = (callback, event) => {\n if (!this.isDisabled) {\n callback.call(this, event);\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get horizontalClass() {\n return !this.vertical;\n }\n get verticalClass() {\n return this.vertical;\n }\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n ngOnInit() {\n this.subscriptions.add(this.localizationService\n .changes\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.sizeComponent();\n }));\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n }\n /**\n * @hidden\n */\n get isDisabled() {\n return this.disabled || this.readonly;\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n get reverse() {\n return this.localizationService.rtl && !this.vertical;\n }\n get keyBinding() {\n const reverse = this.reverse;\n return {\n [Keys.ArrowLeft]: reverse ? increment : decrement,\n [Keys.ArrowRight]: reverse ? decrement : increment,\n [Keys.ArrowDown]: decrement,\n [Keys.ArrowUp]: increment,\n [Keys.PageUp]: incrementLarge,\n [Keys.PageDown]: decrementLarge,\n [Keys.Home]: ({ min }) => min,\n [Keys.End]: ({ max }) => max\n };\n }\n resetStyles(elements) {\n elements.forEach(el => {\n if (el) {\n if (this.vertical) {\n this.renderer.removeStyle(el, 'width');\n this.renderer.removeStyle(el, 'left');\n this.renderer.removeStyle(el, 'right');\n }\n else {\n this.renderer.removeStyle(el, 'height');\n this.renderer.removeStyle(el, 'bottom');\n }\n this.renderer.removeStyle(el, 'padding-top');\n }\n });\n }\n}\nSliderBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderBase, deps: [{ token: i1.LocalizationService }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nSliderBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SliderBase, selector: \"kendo-slider-base\", inputs: { title: \"title\", tickPlacement: \"tickPlacement\", vertical: \"vertical\", min: \"min\", max: \"max\", smallStep: \"smallStep\", largeStep: \"largeStep\", fixedTickWidth: \"fixedTickWidth\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, host: { properties: { \"attr.dir\": \"this.direction\", \"class.k-slider-horizontal\": \"this.horizontalClass\", \"class.k-slider-vertical\": \"this.verticalClass\", \"class.k-slider\": \"this.sliderClass\", \"class.k-disabled\": \"this.disabledClass\" } }, queries: [{ propertyName: \"labelTemplate\", first: true, predicate: LabelTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"wrapper\", first: true, predicate: [\"wrap\"], descendants: true, static: true }, { propertyName: \"track\", first: true, predicate: [\"track\"], descendants: true, static: true }, { propertyName: \"sliderSelection\", first: true, predicate: [\"sliderSelection\"], descendants: true, static: true }, { propertyName: \"ticksContainer\", first: true, predicate: [\"ticks\"], descendants: true, read: ElementRef }, { propertyName: \"ticks\", first: true, predicate: [\"ticks\"], descendants: true }], ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderBase, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-slider-base',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { title: [{\n type: Input\n }], tickPlacement: [{\n type: Input\n }], vertical: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], smallStep: [{\n type: Input\n }], largeStep: [{\n type: Input\n }], fixedTickWidth: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-slider-horizontal']\n }], verticalClass: [{\n type: HostBinding,\n args: ['class.k-slider-vertical']\n }], sliderClass: [{\n type: HostBinding,\n args: ['class.k-slider']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], wrapper: [{\n type: ViewChild,\n args: ['wrap', { static: true }]\n }], track: [{\n type: ViewChild,\n args: ['track', { static: true }]\n }], sliderSelection: [{\n type: ViewChild,\n args: ['sliderSelection', { static: true }]\n }], ticksContainer: [{\n type: ViewChild,\n args: ['ticks', { read: ElementRef, static: false }]\n }], ticks: [{\n type: ViewChild,\n args: ['ticks', { static: false }]\n }], labelTemplate: [{\n type: ContentChild,\n args: [LabelTemplateDirective, { static: false }]\n }] } });\n\n/* eslint-disable @angular-eslint/component-selector */\n/**\n * @hidden\n */\nclass SliderTick {\n constructor(value) {\n this.value = value;\n this.classes = {\n 'k-tick': true\n };\n }\n}\n/**\n * @hidden\n */\nclass SliderTicksComponent {\n constructor() {\n this.wrapperClasses = 'k-reset k-slider-items';\n this.ticks = [];\n }\n ngOnChanges(_) {\n this.createTicks();\n }\n createTicks() {\n const count = calculateTicksCount(this.min, this.max, this.step);\n const largeStep = this.largeStep;\n const tickValueProps = {\n max: this.max,\n min: this.min,\n smallStep: this.step\n };\n let result = [];\n for (let i = 0; i < count; i++) {\n result.push(new SliderTick(calculateValueFromTick(i, tickValueProps)));\n if (largeStep && i % largeStep === 0) {\n result[i].large = true;\n result[i].classes['k-tick-large'] = true;\n }\n }\n if (result.length > 0) {\n Object.assign(result[0].classes, this.endTickClasses(true));\n Object.assign(result[result.length - 1].classes, this.endTickClasses(false));\n }\n this.ticks = result;\n }\n endTickClasses(first) {\n return {\n 'k-first': (first && !this.vertical) || (!first && this.vertical),\n 'k-last': (!first && !this.vertical) || (first && this.vertical)\n };\n }\n}\nSliderTicksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderTicksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nSliderTicksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SliderTicksComponent, selector: \"[kendoSliderTicks]\", inputs: { tickTitle: \"tickTitle\", vertical: \"vertical\", step: \"step\", largeStep: \"largeStep\", min: \"min\", max: \"max\", labelTemplate: \"labelTemplate\" }, host: { properties: { \"class\": \"this.wrapperClasses\" } }, viewQueries: [{ propertyName: \"tickElements\", predicate: [\"tickElement\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `\n
  • \n \n \n \n \n \n  \n \n
  • \n\n \n {{ tickTitle(value) }}\n \n `, isInline: true, directives: [{ type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderTicksComponent, decorators: [{\n type: Component,\n args: [{\n selector: '[kendoSliderTicks]',\n template: `\n
  • \n \n \n \n \n \n  \n \n
  • \n\n \n {{ tickTitle(value) }}\n \n `\n }]\n }], propDecorators: { wrapperClasses: [{\n type: HostBinding,\n args: ['class']\n }], tickTitle: [{\n type: Input\n }], vertical: [{\n type: Input\n }], step: [{\n type: Input\n }], largeStep: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], labelTemplate: [{\n type: Input\n }], tickElements: [{\n type: ViewChildren,\n args: ['tickElement']\n }] } });\n\n/**\n * @hidden\n */\nclass SliderMessages extends ComponentMessages {\n}\nSliderMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nSliderMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SliderMessages, selector: \"kendo-slider-messages-base\", inputs: { decrement: \"decrement\", increment: \"increment\", dragHandle: \"dragHandle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-slider-messages-base'\n }]\n }], propDecorators: { decrement: [{\n type: Input\n }], increment: [{\n type: Input\n }], dragHandle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedSliderMessagesDirective extends SliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedSliderMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedSliderMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedSliderMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedSliderMessagesDirective, selector: \"[kendoSliderLocalizedMessages]\", providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => LocalizedSliderMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedSliderMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => LocalizedSliderMessagesDirective)\n }\n ],\n selector: '[kendoSliderLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst PRESSED$1 = 'k-pressed';\n/**\n * Represents the [Kendo UI Slider component for Angular]({% slug overview_slider %}).\n */\nclass SliderComponent extends SliderBase {\n constructor(localization, injector, renderer, ngZone, changeDetector, hostElement) {\n super(localization, injector, renderer, ngZone, changeDetector, hostElement);\n this.localization = localization;\n this.injector = injector;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines if the animation will be played on value change.\n * Regardless of this setting, no animation will be played during the initial rendering.\n */\n this.animate = true;\n /**\n * Renders the arrow side buttons of the Slider ([see example]({% slug sidebuttons_slider %}#toc-hidden-state)).\n * When `showButtons` is set to `false`, the buttons are not displayed.\n */\n this.showButtons = true;\n /**\n * The current value of the Slider when it is initially displayed.\n * The component can use either NgModel or the `value` binding but not both of them at the same time.\n */\n this.value = this.min;\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.onWrapClick = (args) => {\n const target = args.target;\n if (!this.isDisabled && !(isButton(target) || isButton(target.parentNode))) {\n const value = eventValue(args, this.track.nativeElement, this.getProps());\n this.changeValue(value);\n }\n invokeElementMethod(this.draghandle, 'focus');\n };\n /**\n * @hidden\n */\n this.onKeyDown = (e) => {\n const options = this.getProps();\n const { max, min } = options;\n const handler = this.keyBinding[e.keyCode];\n if (this.isDisabled || !handler) {\n return;\n }\n const value = handler(options);\n this.changeValue(trimValue(max, min, value));\n e.preventDefault();\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.decreaseValue = () => {\n this.changeValue(decreaseValueToStep(this.value, this.getProps()));\n };\n this.increaseValue = () => {\n this.changeValue(increaseValueToStep(this.value, this.getProps()));\n };\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n });\n }\n };\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * @hidden\n */\n get currentValue() {\n return isPresent(this.value) ? this.value.toString() : '';\n }\n /**\n * Focuses the Slider.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.disabled) {\n this.focusChangedProgrammatically = true;\n invokeElementMethod(this.draghandle, 'focus');\n this.focusChangedProgrammatically = false;\n }\n }\n /**\n * Blurs the Slider.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n invokeElementMethod(this.draghandle, 'blur');\n this.handleBlur();\n this.focusChangedProgrammatically = false;\n }\n ngOnChanges(changes) {\n if (anyChanged(['value', 'fixedTickWidth', 'tickPlacement'], changes, true)) {\n this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this.sizeComponent(false);\n });\n }\n }\n ngAfterViewInit() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.showButtons) {\n this.setValueChangeInterval(this.increaseButton.nativeElement, () => this.increaseValue());\n this.setValueChangeInterval(this.decreaseButton.nativeElement, () => this.decreaseValue());\n }\n this.sizeComponent(false);\n if (this.ticks) {\n this.ticks.tickElements\n .changes\n .subscribe(() => this.sizeComponent(false));\n }\n this.attachElementEventHandlers();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get incrementMessage() {\n return this.incrementTitle || this.localizationService.get('increment');\n }\n /**\n * @hidden\n */\n get decrementMessage() {\n return this.decrementTitle || this.localizationService.get('decrement');\n }\n /**\n * @hidden\n */\n get dragHandleMessage() {\n return this.dragHandleTitle || this.localizationService.get('dragHandle');\n }\n /**\n * @hidden\n */\n handleDragPress(args) {\n if (args.originalEvent) {\n args.originalEvent.preventDefault();\n }\n this.renderer.removeClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n /**\n * @hidden\n */\n onHandleDrag(args) {\n this.dragging = true;\n this.changeValue(eventValue(args, this.track.nativeElement, this.getProps()));\n }\n /**\n * @hidden\n */\n onHandleRelease() {\n this.dragging = false; //needed for animation\n this.renderer.addClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n //ngModel binding\n /**\n * @hidden\n */\n writeValue(value) {\n this.changeDetector.markForCheck();\n this.value = value;\n this.sizeComponent(this.animate);\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n changeValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.sizeComponent(this.animate);\n this.changeDetector.markForCheck();\n });\n }\n }\n /**\n * @hidden\n */\n sizeComponent(animate) {\n if (!isDocumentAvailable()) {\n return;\n }\n const wrapper = this.wrapper.nativeElement;\n const track = this.track.nativeElement;\n const selectionEl = this.sliderSelection.nativeElement;\n const dragHandleEl = this.draghandle.nativeElement;\n const ticks = this.ticks ? this.ticksContainer.nativeElement : null;\n if (!animate) {\n this.renderer.removeClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n this.resetStyles([track, selectionEl, dragHandleEl, ticks, this.hostElement.nativeElement]);\n const props = this.getProps();\n const model = new SliderModel(props, wrapper, track, this.renderer);\n model.resizeTrack();\n if (this.ticks) { //for case when tickPlacement: none\n model.resizeTicks(this.ticksContainer.nativeElement, this.ticks.tickElements.map(element => element.nativeElement));\n }\n model.positionHandle(dragHandleEl);\n model.positionSelection(selectionEl);\n if (!animate) {\n this.hostElement.nativeElement.getBoundingClientRect();\n this.renderer.addClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n if (this.fixedTickWidth) {\n model.resizeWrapper();\n }\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n this.isFocused = value;\n }\n }\n set dragging(value) {\n if (this.isDragged !== value && this.sliderSelection && this.draghandle) {\n const sliderSelection = this.sliderSelection.nativeElement;\n const draghandle = this.draghandle.nativeElement;\n if (value) {\n this.renderer.addClass(sliderSelection, PRESSED$1);\n this.renderer.addClass(draghandle, PRESSED$1);\n }\n else {\n this.renderer.removeClass(sliderSelection, PRESSED$1);\n this.renderer.removeClass(draghandle, PRESSED$1);\n }\n this.isDragged = value;\n }\n }\n setValueChangeInterval(element, callback) {\n this.ngZone.runOutsideAngular(() => {\n const mousedown = fromEvent(element, 'mousedown');\n const mouseup = fromEvent(element, 'mouseup');\n const mouseout = fromEvent(element, 'mouseout');\n const subscription = mousedown.pipe(filter((e) => e.button === 0 && !this.isDisabled), concatMap(() => interval(150).pipe(startWith(-1), takeUntil(merge(mouseup, mouseout))))).subscribe(() => {\n if (!this.isFocused) {\n invokeElementMethod(this.draghandle, 'focus');\n }\n callback();\n });\n this.subscriptions.add(subscription);\n });\n }\n getProps() {\n return {\n buttons: this.showButtons,\n disabled: this.disabled,\n fixedTickWidth: this.fixedTickWidth,\n largeStep: this.largeStep,\n max: this.max,\n min: this.min,\n readonly: this.readonly,\n reverse: this.reverse,\n rtl: this.localizationService.rtl,\n smallStep: this.smallStep,\n value: trimValue(this.max, this.min, this.value),\n vertical: this.vertical\n };\n }\n attachElementEventHandlers() {\n const hostElement = this.hostElement.nativeElement;\n let tabbing = false;\n let cursorInsideWrapper = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onFocus.emit();\n }\n this.focused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n if (args.relatedTarget !== this.draghandle.nativeElement) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n }\n}\nSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SliderComponent, selector: \"kendo-slider\", inputs: { focusableId: \"focusableId\", dragHandleTitle: \"dragHandleTitle\", incrementTitle: \"incrementTitle\", animate: \"animate\", decrementTitle: \"decrementTitle\", showButtons: \"showButtons\", value: \"value\", tabIndex: \"tabIndex\" }, providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.slider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent) },\n { provide: KendoInput, useExisting: forwardRef(() => SliderComponent) }\n ], viewQueries: [{ propertyName: \"draghandle\", first: true, predicate: [\"draghandle\"], descendants: true, static: true }, { propertyName: \"decreaseButton\", first: true, predicate: [\"decreaseButton\"], descendants: true }, { propertyName: \"increaseButton\", first: true, predicate: [\"increaseButton\"], descendants: true }], exportAs: [\"kendoSlider\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\n \n
    \n \n
    \n
      \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n `, isInline: true, components: [{ type: SliderTicksComponent, selector: \"[kendoSliderTicks]\", inputs: [\"tickTitle\", \"vertical\", \"step\", \"largeStep\", \"min\", \"max\", \"labelTemplate\"] }, { type: i3.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedSliderMessagesDirective, selector: \"[kendoSliderLocalizedMessages]\" }, { type: i3.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i3.DraggableDirective, selector: \"[kendoDraggable]\", inputs: [\"enableDrag\"], outputs: [\"kendoPress\", \"kendoDrag\", \"kendoRelease\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoSlider',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.slider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent) },\n { provide: KendoInput, useExisting: forwardRef(() => SliderComponent) }\n ],\n selector: 'kendo-slider',\n template: `\n \n
    \n \n
    \n
      \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { focusableId: [{\n type: Input\n }], dragHandleTitle: [{\n type: Input\n }], incrementTitle: [{\n type: Input\n }], animate: [{\n type: Input\n }], decrementTitle: [{\n type: Input\n }], showButtons: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], draghandle: [{\n type: ViewChild,\n args: ['draghandle', { static: true }]\n }], decreaseButton: [{\n type: ViewChild,\n args: ['decreaseButton', { static: false }]\n }], increaseButton: [{\n type: ViewChild,\n args: ['increaseButton', { static: false }]\n }] } });\n\n/**\n * @hidden\n */\nclass RangeSliderModel extends SliderModelBase {\n positionHandle(dragHandle) {\n if (!dragHandle.id) {\n return;\n }\n const { max, min, reverse, vertical } = this.props;\n const position = vertical ? 'bottom' : 'left';\n const trackWidth = this.trackWidth();\n const value = isStartHandle(dragHandle) ? trimValueRange(max, min, this.props.value)[0]\n : trimValueRange(max, min, this.props.value)[1];\n if (isStartHandle(dragHandle)) {\n this.startHandlePosition = calculateHandlePosition({\n min,\n max,\n reverse,\n value,\n trackWidth\n });\n this.renderer.setStyle(dragHandle, position, `${this.startHandlePosition}px`);\n }\n else {\n this.endHandlePosition = calculateHandlePosition({\n min,\n max,\n reverse,\n value,\n trackWidth\n });\n this.renderer.setStyle(dragHandle, position, `${this.endHandlePosition}px`);\n }\n }\n positionSelection(dragHandle, selection) {\n const { reverse, vertical } = this.props;\n const dimension = vertical ? 'height' : 'width';\n const position = vertical ? 'bottom' : reverse ? 'right' : 'left';\n const size = Math.abs(this.endHandlePosition - this.startHandlePosition);\n const currentSelectionPosition = vertical ? dragHandle.style.bottom : dragHandle.style.left;\n this.renderer.setStyle(selection, dimension, `${size}px`);\n this.renderer.setStyle(selection, position, reverse ? this.trackWidth() - parseFloat(currentSelectionPosition) + 'px'\n : parseFloat(currentSelectionPosition) + 'px');\n }\n}\n\n/**\n * @hidden\n */\nclass RangeSliderMessages extends ComponentMessages {\n}\nRangeSliderMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nRangeSliderMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: RangeSliderMessages, selector: \"kendo-rangeslider-messages-base\", inputs: { dragHandleStart: \"dragHandleStart\", dragHandleEnd: \"dragHandleEnd\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-rangeslider-messages-base'\n }]\n }], propDecorators: { dragHandleStart: [{\n type: Input\n }], dragHandleEnd: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedRangeSliderMessagesDirective extends RangeSliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedRangeSliderMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedRangeSliderMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedRangeSliderMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedRangeSliderMessagesDirective, selector: \"[kendoSliderLocalizedMessages]\", providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => LocalizedRangeSliderMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedRangeSliderMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => LocalizedRangeSliderMessagesDirective)\n }\n ],\n selector: '[kendoSliderLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst PRESSED = 'k-pressed';\n/**\n * Represents the [Kendo UI RangeSlider component for Angular]({% slug overview_rangeslider %}).\n */\nclass RangeSliderComponent extends SliderBase {\n constructor(localization, injector, renderer, ngZone, changeDetector, hostElement) {\n super(localization, injector, renderer, ngZone, changeDetector, hostElement);\n this.localization = localization;\n this.injector = injector;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.startHandleId = `k-start-handle-${guid()}`;\n /**\n * @hidden\n */\n this.endHandleId = `k-end-handle-${guid()}`;\n /**\n * @hidden\n */\n this.focusableId = this.startHandleId;\n this.handleZIndex = 0;\n this.activeHandle = 'startHandle';\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.onWrapClick = (args) => {\n if (!this.isDisabled) {\n this.value = this.value || [this.min, this.min];\n const trackValue = eventValue(args, this.track.nativeElement, this.getProps());\n let newRangeValue;\n const [startValue, endValue] = newRangeValue = this.value;\n if (trackValue <= startValue) {\n newRangeValue = [trackValue, endValue];\n this.activeHandle = 'startHandle';\n }\n else if (startValue < trackValue && trackValue < endValue) {\n if (trackValue < (startValue + endValue) / 2) {\n newRangeValue = [trackValue, endValue];\n this.activeHandle = 'startHandle';\n }\n else {\n newRangeValue = [startValue, trackValue];\n this.activeHandle = 'endHandle';\n }\n }\n else if (trackValue >= endValue) {\n newRangeValue = [startValue, trackValue];\n this.activeHandle = 'endHandle';\n }\n const activeHandle = this.activeHandle === 'startHandle' ? this.draghandleStart : this.draghandleEnd;\n invokeElementMethod(activeHandle, 'focus');\n this.changeValue(newRangeValue);\n }\n };\n /**\n * @hidden\n */\n this.onKeyDown = (e) => {\n this.value = this.value || [this.min, this.min];\n const options = this.getProps();\n const { max, min } = options;\n const handler = this.keyBinding[e.keyCode];\n if (this.isDisabled || !handler) {\n return;\n }\n this.renderer.setStyle(e.target, 'zIndex', ++this.handleZIndex);\n const startHandleIsActive = isStartHandle(e.target);\n const value = handler(Object.assign(Object.assign({}, options), { value: startHandleIsActive ? this.value[0] : this.value[1] }));\n if (startHandleIsActive) {\n if (value > this.value[1]) {\n this.value[1] = value;\n }\n }\n else {\n if (value < this.value[0]) {\n this.value[0] = value;\n }\n }\n const trimmedValue = trimValue(max, min, value);\n const newValue = startHandleIsActive ? [trimmedValue, this.value[1]]\n : [this.value[0], trimmedValue];\n this.changeValue(newValue);\n e.preventDefault();\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n });\n }\n };\n }\n /**\n * Focuses the RangeSlider.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
    \n * \n *
    \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n this.focusChangedProgrammatically = true;\n invokeElementMethod(this.draghandleStart, 'focus');\n this.focusChangedProgrammatically = false;\n }\n /**\n * Blurs the RangeSlider.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n const activeHandle = this.activeHandle === 'startHandle' ? this.draghandleStart : this.draghandleEnd;\n invokeElementMethod(activeHandle, 'blur');\n this.handleBlur();\n this.focusChangedProgrammatically = false;\n }\n ngOnInit() {\n if (!this.value) {\n this.value = [this.min, this.max];\n }\n super.ngOnInit();\n }\n ngOnChanges(changes) {\n if (anyChanged(['value', 'fixedTickWidth', 'tickPlacement'], changes, true)) {\n if (changes.value && changes.value.currentValue) {\n validateValue(changes.value.currentValue);\n }\n this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this.sizeComponent();\n });\n }\n }\n ngAfterViewInit() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.sizeComponent();\n if (this.ticks) {\n this.ticks.tickElements\n .changes\n .subscribe(() => this.sizeComponent());\n }\n this.attachElementEventHandlers();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n get valueText() {\n return this.value ? `${this.value[0]} - ${this.value[1]}` : '';\n }\n /**\n * @hidden\n */\n handleDragPress(args) {\n if (args.originalEvent) {\n args.originalEvent.preventDefault();\n }\n const target = args.originalEvent.target;\n this.draggedHandle = target;\n this.renderer.setStyle(target, 'zIndex', ++this.handleZIndex);\n }\n /**\n * @hidden\n */\n onHandleDrag(args) {\n this.value = this.value || [this.min, this.min];\n const target = args.originalEvent.target;\n const lastCoords = this.draggedHandle.getBoundingClientRect();\n this.lastHandlePosition = { x: lastCoords.left, y: lastCoords.top };\n this.dragging = { value: true, target };\n const mousePos = {\n x: (args.pageX - 0.5) - (lastCoords.width / 2),\n y: (args.pageY - (lastCoords.width / 2))\n };\n const left = mousePos.x < this.lastHandlePosition.x;\n const right = mousePos.x > this.lastHandlePosition.x;\n const up = mousePos.y > this.lastHandlePosition.y;\n const moveStartHandle = () => this.changeValue([eventValue(args, this.track.nativeElement, this.getProps()), this.value[1]]);\n const moveEndHandle = () => this.changeValue([this.value[0], eventValue(args, this.track.nativeElement, this.getProps())]);\n const moveBothHandles = () => this.changeValue([eventValue(args, this.track.nativeElement, this.getProps()), eventValue(args, this.track.nativeElement, this.getProps())]);\n const activeStartHandle = isStartHandle(this.draggedHandle);\n const vertical = this.vertical;\n const horizontal = !vertical;\n const forward = (vertical && up) || (this.reverse ? horizontal && right : horizontal && left);\n const incorrectValueState = this.value[0] > this.value[1];\n if (this.value[0] === this.value[1] || incorrectValueState) {\n if (forward) {\n // eslint-disable-next-line no-unused-expressions\n activeStartHandle ? moveStartHandle() : moveBothHandles();\n }\n else {\n // eslint-disable-next-line no-unused-expressions\n activeStartHandle ? moveBothHandles() : moveEndHandle();\n }\n }\n else {\n // eslint-disable-next-line no-unused-expressions\n activeStartHandle ? moveStartHandle() : moveEndHandle();\n }\n }\n /**\n * @hidden\n */\n onHandleRelease(args) {\n this.dragging = { value: false, target: args.originalEvent.target }; //needed for animation\n this.draggedHandle = undefined;\n }\n //ngModel binding\n /**\n * @hidden\n */\n writeValue(value) {\n validateValue(value);\n this.value = value;\n this.sizeComponent();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n changeValue(value) {\n if (!this.value || !isSameRange(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n if (this.value) {\n this.valueChange.emit(value);\n }\n this.sizeComponent();\n });\n }\n }\n /**\n * @hidden\n */\n sizeComponent() {\n if (!isDocumentAvailable()) {\n return;\n }\n const wrapper = this.wrapper.nativeElement;\n const track = this.track.nativeElement;\n const selectionEl = this.sliderSelection.nativeElement;\n const dragHandleStartEl = this.draghandleStart.nativeElement;\n const dragHandleEndEl = this.draghandleEnd.nativeElement;\n const ticks = this.ticks ? this.ticksContainer.nativeElement : null;\n this.resetStyles([track, selectionEl, dragHandleStartEl, dragHandleEndEl, ticks, this.hostElement.nativeElement]);\n const props = this.getProps();\n const model = new RangeSliderModel(props, wrapper, track, this.renderer);\n model.resizeTrack();\n if (this.ticks) { //for case when tickPlacement: none\n model.resizeTicks(this.ticksContainer.nativeElement, this.ticks.tickElements.map(element => element.nativeElement));\n }\n model.positionHandle(dragHandleStartEl);\n model.positionHandle(dragHandleEndEl);\n model.positionSelection(dragHandleStartEl, selectionEl);\n if (this.fixedTickWidth) {\n model.resizeWrapper();\n }\n }\n /**\n * @hidden\n */\n get isDisabled() {\n return this.disabled || this.readonly;\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n this.isFocused = value;\n }\n }\n set dragging(data) {\n if (this.isDragged !== data.value && this.sliderSelection && this.draghandleStart && this.draghandleEnd) {\n const sliderSelection = this.sliderSelection.nativeElement;\n const draghandle = data.target;\n if (data.value) {\n this.renderer.addClass(sliderSelection, PRESSED);\n this.renderer.addClass(draghandle, PRESSED);\n }\n else {\n this.renderer.removeClass(sliderSelection, PRESSED);\n this.renderer.removeClass(draghandle, PRESSED);\n }\n this.isDragged = data.value;\n }\n }\n getProps() {\n return {\n disabled: this.disabled,\n fixedTickWidth: this.fixedTickWidth,\n largeStep: this.largeStep,\n max: this.max,\n min: this.min,\n readonly: this.readonly,\n reverse: this.reverse,\n rtl: this.localizationService.rtl,\n smallStep: this.smallStep,\n value: trimValueRange(this.max, this.min, this.value),\n vertical: this.vertical,\n buttons: false\n };\n }\n attachElementEventHandlers() {\n const hostElement = this.hostElement.nativeElement;\n let tabbing = false;\n let cursorInsideWrapper = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onFocus.emit();\n }\n this.focused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n if (args.relatedTarget !== this.draghandleStart.nativeElement && args.relatedTarget !== this.draghandleEnd.nativeElement) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n }\n}\nRangeSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nRangeSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: RangeSliderComponent, selector: \"kendo-rangeslider\", inputs: { value: \"value\" }, providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.rangeslider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RangeSliderComponent) },\n { provide: KendoInput, useExisting: forwardRef(() => RangeSliderComponent) }\n ], viewQueries: [{ propertyName: \"draghandleStart\", first: true, predicate: [\"draghandleStart\"], descendants: true, static: true }, { propertyName: \"draghandleEnd\", first: true, predicate: [\"draghandleEnd\"], descendants: true, static: true }], exportAs: [\"kendoRangeSlider\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\n \n\n
    \n
    \n
      \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n `, isInline: true, components: [{ type: SliderTicksComponent, selector: \"[kendoSliderTicks]\", inputs: [\"tickTitle\", \"vertical\", \"step\", \"largeStep\", \"min\", \"max\", \"labelTemplate\"] }, { type: i3.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedRangeSliderMessagesDirective, selector: \"[kendoSliderLocalizedMessages]\" }, { type: i3.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i3.DraggableDirective, selector: \"[kendoDraggable]\", inputs: [\"enableDrag\"], outputs: [\"kendoPress\", \"kendoDrag\", \"kendoRelease\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoRangeSlider',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.rangeslider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RangeSliderComponent) },\n { provide: KendoInput, useExisting: forwardRef(() => RangeSliderComponent) }\n ],\n selector: 'kendo-rangeslider',\n template: `\n \n\n
    \n
    \n
      \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { value: [{\n type: Input\n }], draghandleStart: [{\n type: ViewChild,\n args: ['draghandleStart', { static: true }]\n }], draghandleEnd: [{\n type: ViewChild,\n args: ['draghandleEnd', { static: true }]\n }] } });\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: Messages, selector: \"kendo-switch-messages-base\", inputs: { on: \"on\", off: \"off\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: Messages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-switch-messages-base'\n }]\n }], propDecorators: { on: [{\n type: Input\n }], off: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedSwitchMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedSwitchMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedSwitchMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedSwitchMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedSwitchMessagesDirective, selector: \"[kendoSwitchLocalizedMessages]\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSwitchMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedSwitchMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSwitchMessagesDirective)\n }\n ],\n selector: '[kendoSwitchLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst FOCUSED$4 = 'k-focus';\nconst DEFAULT_SIZE$7 = 'medium';\nconst DEFAULT_THUMB_ROUNDED = 'full';\nconst DEFAULT_TRACK_ROUNDED = 'full';\n/**\n * Represents the [Kendo UI Switch component for Angular]({% slug overview_switch %}).\n */\nclass SwitchComponent {\n constructor(renderer, hostElement, localizationService, injector, changeDetector, ngZone) {\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.localizationService = localizationService;\n this.injector = injector;\n this.changeDetector = changeDetector;\n this.ngZone = ngZone;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the Switch is disabled ([see example]({% slug disabled_switch %})).\n */\n this.disabled = false;\n /**\n * Determines whether the Switch is in its read-only state ([see example]({% slug readonly_switch %})).\n */\n this.readonly = false;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the Switch.\n */\n this.tabindex = 0;\n /**\n * Fires each time the user focuses the `input` element.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the user selects a new value.\n */\n this.valueChange = new EventEmitter();\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.initialized = false;\n this.hostClickSubscription = new Subscription;\n this._checked = false;\n this._size = 'medium';\n this._trackRounded = 'full';\n this._thumbRounded = 'full';\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n /**\n * @hidden\n */\n this.handleFocus = () => {\n if (this.isFocused) {\n return;\n }\n this.focused = true;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = (event) => {\n const relatedTarget = event && event.relatedTarget;\n if (this.hostElement.nativeElement.contains(relatedTarget)) {\n return;\n }\n this.changeDetector.markForCheck();\n this.focused = false;\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n });\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n this.keyDownHandler = this.keyDownHandler.bind(this);\n this.clickHandler = this.clickHandler.bind(this);\n }\n /**\n * Sets the value of the Switch when it is initially displayed.\n */\n set checked(value) {\n this.setHostClasses(value);\n this._checked = value;\n }\n get checked() {\n return this._checked;\n }\n /**\n * Specifies the width and height of the Switch.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$7;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * Specifies the border radius of the Switch thumb.\n *\n * The possible values are:\n * * `full` (default)\n * * `small`\n * * `medium`\n * * `large`\n * * `none`\n */\n set thumbRounded(thumbRounded) {\n const newThumbRounded = thumbRounded ? thumbRounded : DEFAULT_THUMB_ROUNDED;\n this.handleThumbClasses(newThumbRounded);\n this._thumbRounded = newThumbRounded;\n }\n get thumbRounded() {\n return this._thumbRounded;\n }\n /**\n * Specifies the border radius of the Switch track.\n *\n * The possible values are:\n * * `full` (default)\n * * `small`\n * * `medium`\n * * `large`\n * * `none`\n */\n set trackRounded(trackRounded) {\n const newTrackRounded = trackRounded ? trackRounded : DEFAULT_TRACK_ROUNDED;\n this.handleTrackClasses(newTrackRounded);\n this._trackRounded = newTrackRounded;\n }\n get trackRounded() {\n return this._trackRounded;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get ieClass() {\n return browser && browser.msie;\n }\n get ariaDisabled() {\n return this.disabled ? true : undefined;\n }\n get ariaReadonly() {\n return this.readonly;\n }\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get onLabelMessage() {\n return this.onLabel || this.localizationService.get('on');\n }\n /**\n * @hidden\n */\n get offLabelMessage() {\n return this.offLabel || this.localizationService.get('off');\n }\n get isEnabled() {\n return !this.disabled && !this.readonly;\n }\n ngOnInit() {\n if (this.hostElement) {\n const wrapper = this.hostElement.nativeElement;\n this.renderer.removeAttribute(wrapper, \"tabindex\");\n }\n this.localizationChangeSubscription = this.localizationService\n .changes\n .pipe(skip(1))\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.control = this.injector.get(NgControl, null);\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.initialized = true);\n }\n ngAfterViewInit() {\n const wrapper = this.hostElement.nativeElement;\n this.attachHostClickHandler();\n if (!this.checked && !wrapper.classList.contains('k-switch-off')) {\n this.renderer.addClass(wrapper, 'k-switch-off');\n }\n this.handleClasses(this.size, 'size');\n this.handleTrackClasses(this.trackRounded);\n this.handleThumbClasses(this.thumbRounded);\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.hostClickSubscription) {\n this.hostClickSubscription.unsubscribe();\n }\n }\n /**\n * Focuses the Switch.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.track) {\n return;\n }\n this.track.nativeElement.focus();\n }\n /**\n * Blurs the Switch.\n */\n blur() {\n if (!this.track) {\n return;\n }\n this.track.nativeElement.blur();\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.changeDetector.markForCheck();\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.checked = value === null ? false : value;\n this.changeDetector.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n keyDownHandler(e) {\n const keyCode = e.keyCode;\n if (this.isEnabled && (keyCode === Keys.Space || keyCode === Keys.Enter)) {\n this.changeValue(!this.checked);\n e.preventDefault();\n }\n }\n /**\n * @hidden\n */\n clickHandler() {\n if (this.isEnabled) {\n this.changeValue(!this.checked);\n }\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n changeValue(value) {\n if (this.checked !== value) {\n this.ngZone.run(() => {\n this.checked = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n const wrapper = this.hostElement.nativeElement;\n if (value) {\n this.renderer.addClass(wrapper, FOCUSED$4);\n }\n else {\n this.renderer.removeClass(wrapper, FOCUSED$4);\n }\n this.isFocused = value;\n }\n }\n attachHostClickHandler() {\n this.ngZone.runOutsideAngular(() => {\n this.hostClickSubscription.add(this.renderer.listen(this.hostElement.nativeElement, 'click', this.clickHandler));\n });\n }\n setHostClasses(value) {\n const wrapper = this.hostElement.nativeElement;\n if (value) {\n this.renderer.removeClass(wrapper, 'k-switch-off');\n this.renderer.addClass(wrapper, 'k-switch-on');\n }\n else {\n this.renderer.removeClass(wrapper, 'k-switch-on');\n this.renderer.addClass(wrapper, 'k-switch-off');\n }\n }\n handleClasses(value, input) {\n const elem = this.hostElement.nativeElement;\n const classes = getStylingClasses('switch', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n handleTrackClasses(value) {\n var _a, _b;\n const elem = (_a = this.hostElement) === null || _a === void 0 ? void 0 : _a.nativeElement;\n const track = (_b = this.track) === null || _b === void 0 ? void 0 : _b.nativeElement;\n if (!elem || !track) {\n return;\n }\n const classes = getStylingClasses('switch', 'rounded', this.trackRounded, value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n this.renderer.removeClass(track, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n this.renderer.addClass(track, classes.toAdd);\n }\n }\n handleThumbClasses(value) {\n var _a;\n const thumb = (_a = this.thumb) === null || _a === void 0 ? void 0 : _a.nativeElement;\n if (!thumb) {\n return;\n }\n const classes = getStylingClasses('switch', 'rounded', this.thumbRounded, value);\n if (classes.toRemove) {\n this.renderer.removeClass(thumb, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(thumb, classes.toAdd);\n }\n }\n}\nSwitchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nSwitchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SwitchComponent, selector: \"kendo-switch\", inputs: { focusableId: \"focusableId\", onLabel: \"onLabel\", offLabel: \"offLabel\", checked: \"checked\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", size: \"size\", thumbRounded: \"thumbRounded\", trackRounded: \"trackRounded\", tabIndex: \"tabIndex\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, host: { properties: { \"attr.dir\": \"this.direction\", \"class.k-ie\": \"this.ieClass\", \"attr.aria-disabled\": \"this.ariaDisabled\", \"attr.aria-readonly\": \"this.ariaReadonly\", \"class.k-switch\": \"this.hostClasses\", \"class.k-disabled\": \"this.disabledClass\" } }, providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.switch' },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitchComponent) /* eslint-disable-line*/\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => SwitchComponent)\n }\n ], viewQueries: [{ propertyName: \"track\", first: true, predicate: [\"track\"], descendants: true, static: true }, { propertyName: \"thumb\", first: true, predicate: [\"thumb\"], descendants: true, static: true }], exportAs: [\"kendoSwitch\"], ngImport: i0, template: `\n \n\n \n {{onLabelMessage}}\n {{offLabelMessage}}\n \n \n \n \n `, isInline: true, directives: [{ type: LocalizedSwitchMessagesDirective, selector: \"[kendoSwitchLocalizedMessages]\" }, { type: i3.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoSwitch',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.switch' },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitchComponent) /* eslint-disable-line*/\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => SwitchComponent)\n }\n ],\n selector: 'kendo-switch',\n template: `\n \n\n \n {{onLabelMessage}}\n {{offLabelMessage}}\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { focusableId: [{\n type: Input\n }], onLabel: [{\n type: Input\n }], offLabel: [{\n type: Input\n }], checked: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], size: [{\n type: Input\n }], thumbRounded: [{\n type: Input\n }], trackRounded: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], ieClass: [{\n type: HostBinding,\n args: ['class.k-ie']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], ariaReadonly: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-switch']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], track: [{\n type: ViewChild,\n args: ['track', { static: true }]\n }], thumb: [{\n type: ViewChild,\n args: ['thumb', { static: true }]\n }] } });\n\n/**\n * Represents the [Kendo UI TextBox directive]({% slug overview_textbox %}) for the Inputs components for Angular.\n * Used to style the textbox of any `input` element.\n *\n * @example\n * ```ts-no-run\n * \n * \n * \n * ```\n */\nclass TextBoxDirective {\n constructor(renderer, inputElement, ngZone) {\n this.renderer = renderer;\n this.inputElement = inputElement;\n this.ngZone = ngZone;\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.onFocus = new EventEmitter();\n /**\n * @hidden\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.onValueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillStart = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillEnd = new EventEmitter();\n this.listeners = [];\n }\n /**\n * @hidden\n */\n set value(text) {\n if (!this.inputElement) {\n return;\n }\n this.inputElement.nativeElement.value = (text === undefined || text === null) ? '' : text;\n this.onValueChange.emit();\n }\n /**\n * @hidden\n */\n get value() {\n return this.inputElement.nativeElement.value;\n }\n get id() {\n return this.inputElement.nativeElement.id;\n }\n set id(id) {\n this.renderer.setAttribute(this.inputElement.nativeElement, 'id', id);\n }\n ngAfterViewInit() {\n const input = this.inputElement.nativeElement;\n this.listeners = [\n this.renderer.listen(input, 'focus', () => this.onFocus.emit()),\n this.renderer.listen(input, 'blur', () => this.onBlur.emit())\n ];\n this.ngZone.runOutsideAngular(() => {\n this.renderer.listen(input, 'animationstart', (e) => {\n if (e.animationName === 'autoFillStart') {\n this.autoFillStart.emit();\n }\n else if (e.animationName === 'autoFillEnd') {\n this.autoFillEnd.emit();\n }\n });\n });\n }\n ngOnDestroy() {\n this.listeners.forEach(listener => listener());\n }\n}\nTextBoxDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nTextBoxDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextBoxDirective, selector: \"input[kendoTextBox]\", inputs: { value: \"value\" }, host: { properties: { \"class.k-textbox\": \"this.hostClasses\", \"class.k-input\": \"this.hostClasses\", \"class.k-input-md\": \"this.hostClasses\", \"class.k-rounded-md\": \"this.hostClasses\", \"class.k-input-solid\": \"this.hostClasses\" } }, providers: [{\n provide: KendoInput,\n useExisting: forwardRef(() => TextBoxDirective)\n }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[kendoTextBox]',\n providers: [{\n provide: KendoInput,\n useExisting: forwardRef(() => TextBoxDirective)\n }]\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-textbox']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }, {\n type: HostBinding,\n args: ['class.k-input-md']\n }, {\n type: HostBinding,\n args: ['class.k-rounded-md']\n }, {\n type: HostBinding,\n args: ['class.k-input-solid']\n }], value: [{\n type: Input\n }] } });\n\n/**\n * Represents the [Kendo UI TextArea directive for the Inputs components for Angular]({% slug overview_textarea %}).\n * Provides floating labels to `textarea` elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nclass TextAreaDirective {\n constructor(renderer, element, zone, changeDetector, injector, rtl) {\n this.renderer = renderer;\n this.element = element;\n this.zone = zone;\n this.changeDetector = changeDetector;\n this.injector = injector;\n this.elementClasses = true;\n this.autofillClass = true;\n /**\n * Fires each time the textarea value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Specifies if the `textarea` element will resize its height automatically\n * ([see example]({% slug overview_textarea %}#toc-auto-resizing)).\n *\n * @default false\n */\n this.autoSize = false;\n /**\n * @hidden\n */\n this.onFocus = new EventEmitter();\n /**\n * @hidden\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.onValueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillStart = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillEnd = new EventEmitter();\n this.listeners = [];\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.direction = rtl ? 'rtl' : 'ltr';\n }\n get id() {\n return this.element.nativeElement.id;\n }\n set id(id) {\n this.renderer.setAttribute(this.element.nativeElement, 'id', id);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.elementValue = value;\n this.resize();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.setElementProperty('disabled', isDisabled);\n }\n ngOnInit() {\n const element = this.element.nativeElement;\n this.zone.runOutsideAngular(() => {\n this.listeners = [\n this.renderer.listen(element, 'focus', this.handleFocus.bind(this)),\n this.renderer.listen(element, 'blur', this.handleBlur.bind(this)),\n this.renderer.listen(element, 'animationstart', (e) => {\n if (e.animationName === 'autoFillStart') {\n this.autoFillStart.emit();\n }\n else if (e.animationName === 'autoFillEnd') {\n this.autoFillEnd.emit();\n }\n })\n ];\n if (isDocumentAvailable() && this.autoSize) {\n this.resizeSubscription = fromEvent(window, 'resize')\n .pipe((debounceTime(50)))\n .subscribe(() => this.resize());\n }\n this.inputSubscription = fromEvent(element, 'input')\n .subscribe(this.handleInput.bind(this));\n });\n this.control = this.injector.get(NgControl, null);\n }\n ngOnChanges(changes) {\n const element = this.element.nativeElement;\n if (changes.value) {\n this.elementValue = this.value;\n }\n if (changes.autoSize) {\n if (this.autoSize) {\n this.initialHeight = element.offsetHeight;\n this.renderer.setStyle(element, 'resize', 'none');\n }\n else {\n this.renderer.setStyle(element, 'overflow-y', 'auto');\n this.renderer.setStyle(element, 'resize', 'both');\n element.style.height = `${this.initialHeight}px`;\n }\n }\n this.zone.onStable.pipe(take(1)).subscribe(() => this.resize());\n }\n ngOnDestroy() {\n this.listeners.forEach(listener => listener());\n if (this.inputSubscription) {\n this.inputSubscription.unsubscribe();\n }\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n get elementValue() {\n if (this.element) {\n return this.element.nativeElement.value;\n }\n return '';\n }\n set elementValue(value) {\n this.setElementProperty('value', (value === undefined || value === null) ? '' : value);\n }\n setElementProperty(name, value) {\n if (this.element) {\n this.renderer.setProperty(this.element.nativeElement, name, value);\n }\n }\n resize() {\n if (!this.autoSize) {\n return;\n }\n const element = this.element.nativeElement;\n this.renderer.setStyle(element, 'overflow-y', 'hidden');\n element.style.height = `${this.initialHeight}px`;\n const scrollHeight = element.scrollHeight;\n if (scrollHeight > this.initialHeight) {\n element.style.height = `${scrollHeight}px`;\n }\n }\n handleInput() {\n const value = this.elementValue;\n this.value = value;\n if (this.control || hasObservers(this.onValueChange) || hasObservers(this.valueChange)) {\n this.zone.run(() => {\n this.ngChange(value);\n this.onValueChange.emit(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n this.resize();\n }\n handleFocus() {\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleBlur() {\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n this.changeDetector.markForCheck();\n });\n }\n }\n}\nTextAreaDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nTextAreaDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextAreaDirective, selector: \"textarea[kendoTextArea]\", inputs: { autoSize: \"autoSize\", value: \"value\" }, outputs: { valueChange: \"valueChange\" }, host: { properties: { \"class.k-textarea\": \"this.elementClasses\", \"class.k-input\": \"this.elementClasses\", \"class.k-input-md\": \"this.elementClasses\", \"class.k-rounded-md\": \"this.elementClasses\", \"class.k-input-solid\": \"this.elementClasses\", \"class.k-autofill\": \"this.autofillClass\", \"attr.dir\": \"this.direction\" } }, providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaDirective),\n multi: true\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => TextAreaDirective)\n }], usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaDirective),\n multi: true\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => TextAreaDirective)\n }],\n selector: 'textarea[kendoTextArea]'\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, propDecorators: { elementClasses: [{\n type: HostBinding,\n args: ['class.k-textarea']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }, {\n type: HostBinding,\n args: ['class.k-input-md']\n }, {\n type: HostBinding,\n args: ['class.k-rounded-md']\n }, {\n type: HostBinding,\n args: ['class.k-input-solid']\n }], autofillClass: [{\n type: HostBinding,\n args: ['class.k-autofill']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], valueChange: [{\n type: Output\n }], autoSize: [{\n type: Input\n }], value: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nconst createMaxValidator = (maxValue) => {\n return (c) => {\n if (!isPresent(maxValue) || !isPresent(c.value) || c.value <= maxValue) {\n return null;\n }\n return {\n maxError: {\n maxValue: maxValue,\n value: c.value\n }\n };\n };\n};\n\n/**\n * @hidden\n */\nconst createMinValidator = (minValue) => {\n return (c) => {\n if (!isPresent(minValue) || !isPresent(c.value) || c.value >= minValue) {\n return null;\n }\n return {\n minError: {\n minValue: minValue,\n value: c.value\n }\n };\n };\n};\n\n/**\n * @hidden\n */\nconst MIN_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/inputs/api/NumericTextBoxComponent/#toc-min';\n/**\n * @hidden\n */\nconst MAX_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/inputs/api/NumericTextBoxComponent/#toc-max';\n/**\n * @hidden\n */\nconst POINT = \".\";\n/**\n * @hidden\n */\nconst INITIAL_SPIN_DELAY = 500;\n/**\n * @hidden\n */\nconst SPIN_DELAY = 50;\n/**\n * @hidden\n */\nconst EXPONENT_REGEX = /[eE][\\-+]?([0-9]+)/;\n\n/**\n * @hidden\n */\nconst numericRegex = (options) => {\n const { autoCorrect, decimals, min } = options;\n let separator = options.separator;\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n const signPattern = autoCorrect && min !== null && min >= 0 ? '' : '-?';\n let numberPattern;\n if (decimals === 0) {\n numberPattern = '\\\\d*';\n }\n else {\n numberPattern = `(?:(?:\\\\d+(${separator}\\\\d*)?)|(?:${separator}\\\\d*))?`;\n }\n return new RegExp(`^${signPattern}${numberPattern}$`);\n};\n/**\n * @hidden\n */\nconst decimalPart = (value) => {\n return value >= 0 ? Math.floor(value) : Math.ceil(value);\n};\n/**\n * @hidden\n */\nconst noop = (_) => { }; // eslint-disable-line no-empty\n/**\n * @hidden\n */\nconst defined = (value) => {\n return typeof value !== 'undefined';\n};\n/**\n * @hidden\n */\nconst isNumber = (value) => {\n return !isNaN(value) && value !== null;\n};\n/**\n * @hidden\n */\nfunction pad(value, digits) {\n const count = digits - String(value).length;\n let result = value;\n if (count > 0) {\n const padString = new Array(count + 1).join(\"0\");\n result = parseFloat(value + padString);\n }\n return result;\n}\n/**\n * @hidden\n */\nconst getDeltaFromMouseWheel = (e) => {\n let delta = 0;\n if (e.wheelDelta) {\n delta = e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n else if (e.detail) {\n delta = Math.round(-e.detail / 3);\n }\n return delta;\n};\n/**\n * @hidden\n */\nconst getCaretPosition = (element) => element.selectionStart;\n/**\n * @hidden\n */\nconst extractSignificantNumericChars = (formattedString, separator) => {\n const significantCharacters = `${separator}0123456789-`;\n return formattedString.split('').reduce((acc, curr) => significantCharacters.includes(curr) ? ++acc : acc, 0);\n};\n/**\n * @hidden\n */\nconst isRightClick = (event) => {\n const isRightClickIE = event.button && event.button === 2;\n const isRightClickOther = event.which && event.which === 3;\n return isRightClickIE || isRightClickOther;\n};\n\n/**\n * @hidden\n */\nvar ArrowDirection;\n(function (ArrowDirection) {\n ArrowDirection[ArrowDirection[\"Down\"] = -1] = \"Down\";\n ArrowDirection[ArrowDirection[\"None\"] = 0] = \"None\";\n ArrowDirection[ArrowDirection[\"Up\"] = 1] = \"Up\";\n})(ArrowDirection || (ArrowDirection = {}));\n\n/**\n * @hidden\n */\nclass NumericTextBoxMessages extends ComponentMessages {\n}\nNumericTextBoxMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nNumericTextBoxMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NumericTextBoxMessages, selector: \"kendo-numerictextbox-messages-base\", inputs: { decrement: \"decrement\", increment: \"increment\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-numerictextbox-messages-base'\n }]\n }], propDecorators: { decrement: [{\n type: Input\n }], increment: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedNumericTextBoxMessagesDirective extends NumericTextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedNumericTextBoxMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedNumericTextBoxMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedNumericTextBoxMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedNumericTextBoxMessagesDirective, selector: \"[kendoNumericTextBoxLocalizedMessages]\", providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => LocalizedNumericTextBoxMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedNumericTextBoxMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => LocalizedNumericTextBoxMessagesDirective)\n }\n ],\n selector: '[kendoNumericTextBoxLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst PARSABLE_OPTIONS = ['min', 'max', 'step', 'decimals'];\nconst PARSABLE_DEFAULTS = {\n decimals: null,\n max: null,\n min: null,\n step: 1\n};\nconst FOCUSED$3 = 'k-focus';\nconst DEFAULT_SIZE$6 = 'medium';\nconst DEFAULT_ROUNDED$5 = 'medium';\nconst DEFAULT_FILL_MODE$4 = 'solid';\n/**\n * Represents the [Kendo UI NumericTextBox component for Angular]({% slug overview_numerictextbox %}).\n */\nclass NumericTextBoxComponent {\n constructor(intl, renderer, localizationService, injector, ngZone, changeDetector, hostElement) {\n this.intl = intl;\n this.renderer = renderer;\n this.localizationService = localizationService;\n this.injector = injector;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the NumericTextBox is disabled ([see example]({% slug disabled_numerictextbox %})).\n */\n this.disabled = false;\n /**\n * Determines whether the NumericTextBox is in its read-only state ([see example]({% slug readonly_numerictextbox %})).\n */\n this.readonly = false;\n /**\n * Sets the title of the `input` element of the NumericTextBox.\n */\n this.title = '';\n /**\n * Specifies whether the value will be auto-corrected based on the minimum and maximum values\n * ([see example]({% slug precision_numerictextbox %})).\n */\n this.autoCorrect = false;\n /**\n * Specifies the number of decimals that the user can enter when the input is focused\n * ([see example]({% slug precision_numerictextbox %})).\n */\n this.decimals = null;\n /**\n * Specifies the value that is used to increment or decrement the component value\n * ([see example]({% slug predefinedsteps_numerictextbox %})).\n */\n this.step = 1;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered\n * ([see example]({% slug spinbuttons_numerictextbox %})).\n */\n this.spinners = true;\n /**\n * Determines whether the built-in minimum or maximum validators are enforced when a form is validated.\n *\n * > The 4.2.0 Angular version introduces the `min` and `max` validation directives. As a result, even if you set `rangeValidation`\n * to `false`, the built-in Angular validators will be executed.\n */\n this.rangeValidation = true;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Determines whether the value of the NumericTextBox will be changed via scrolling. Defaults to `true`.\n *\n * @default true\n */\n this.changeValueOnScroll = true;\n /**\n * Determines whether the whole value will be selected when the NumericTextBox is clicked. Defaults to `true`.\n */\n this.selectOnFocus = true;\n /**\n * Specifies the value of the NumericTextBox\n * ([see example]({% slug formats_numerictextbox %})).\n */\n this.value = null;\n /**\n * Fires each time the user selects a new value ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the `input` element ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.ArrowDirection = ArrowDirection;\n /**\n * @hidden\n */\n this.arrowDirection = ArrowDirection.None;\n this.hostClasses = true;\n this.inputValue = '';\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this._format = \"n2\";\n this.isPasted = false;\n this.mouseDown = false;\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n this.ngChange = noop;\n this.ngTouched = noop;\n this.ngValidatorChange = noop;\n this.domEvents = [];\n /**\n * @hidden\n */\n this.increasePress = (e) => {\n this.arrowPress(ArrowDirection.Up, e);\n };\n /**\n * @hidden\n */\n this.decreasePress = (e) => {\n this.arrowPress(ArrowDirection.Down, e);\n };\n /**\n * @hidden\n */\n this.releaseArrow = () => {\n clearTimeout(this.spinTimeout);\n if (this.arrowDirection !== ArrowDirection.None) {\n this.arrowDirection = ArrowDirection.None;\n this.changeDetector.detectChanges();\n }\n };\n /**\n * @hidden\n */\n this.handlePaste = () => {\n this.isPasted = true;\n };\n /**\n * @hidden\n */\n this.handleInput = () => {\n const input = this.numericInput.nativeElement;\n let { selectionStart, selectionEnd, value: inputValue } = input;\n if (this.pressedKey === Keys.NumpadDecimal) {\n inputValue = this.replaceNumpadDotValue();\n }\n if (this.isPasted) {\n inputValue = this.formatInputValue(this.intl.parseNumber(inputValue));\n }\n if (!this.isValid(inputValue)) {\n input.value = this.inputValue;\n this.setSelection(selectionStart - 1, selectionEnd - 1);\n return;\n }\n const parsedValue = this.intl.parseNumber(inputValue);\n let value = this.restrictDecimals(parsedValue);\n if (this.autoCorrect) {\n const limited = this.limitInputValue(value);\n value = limited.value;\n selectionStart = limited.selectionStart;\n selectionEnd = limited.selectionEnd;\n }\n if (parsedValue !== value || this.hasTrailingZeros(inputValue) || !this.focused) {\n this.setInputValue(value);\n this.setSelection(selectionStart, selectionEnd);\n }\n else {\n this.inputValue = inputValue;\n }\n if (this.isPasted) {\n input.value = this.inputValue;\n }\n this.updateValue(value);\n this.previousSelection = null;\n this.isPasted = false;\n };\n /**\n * @hidden\n */\n this.handleDragEnter = () => {\n if (!this.focused && !this.isDisabled) {\n this.setInputValue(this.value, true);\n }\n };\n /**\n * @hidden\n */\n this.handleMouseDown = () => {\n this.mouseDown = true;\n };\n /**\n * @hidden\n */\n this.handleFocus = () => {\n if (!this.focused) {\n this.focused = true;\n if (!this.isDisabled) {\n const shouldSelectAll = this.selectOnFocus || !this.mouseDown;\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (shouldSelectAll) {\n this.selectAll();\n }\n else {\n this.selectCaret();\n }\n }, 0);\n });\n }\n }\n this.mouseDown = false;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n //blur is thrown before input when dragging the input text in IE\n if (this.inputValue !== this.elementValue) {\n this.handleInput();\n }\n this.setInputValue();\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleKeyDown = (e) => {\n if (this.isDisabled) {\n return;\n }\n let step;\n if (e.keyCode === Keys.ArrowDown) {\n step = -1;\n }\n else if (e.keyCode === Keys.ArrowUp) {\n step = 1;\n }\n if (step && this.step) {\n e.preventDefault();\n this.addStep(step);\n }\n const input = this.numericInput.nativeElement;\n this.previousSelection = {\n end: input.selectionEnd,\n start: input.selectionStart\n };\n this.pressedKey = e.keyCode;\n };\n /**\n * @hidden\n */\n this.handleWheel = (e) => {\n if (this.focused && !this.isDisabled && this.changeValueOnScroll) {\n e.preventDefault();\n const delta = getDeltaFromMouseWheel(e);\n this.addStep(delta);\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * Specifies the number format which is used when the NumericTextBox is not focused\n * ([see example]({% slug formats_numerictextbox %})).\n * If `format` is set to `null` or `undefined`, the default format will be used.\n */\n get format() {\n const format = this._format;\n return format !== null && format !== undefined ? format : 'n2';\n }\n set format(value) {\n this._format = value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * The size property specifies padding of the NumericTextBox internal input element\n * ([see example]({% slug appearance_numerictextbox %}#toc-size)).\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$6;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the NumericTextBox\n * ([see example]({% slug appearance_numerictextbox %}#toc-rounded)).\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$5;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the NumericTextBox\n * ([see example]({% slug appearance_numerictextbox %}#toc-fillMode)).\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$4;\n this.handleClasses(newFillMode, 'fillMode');\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n get disableClass() {\n return this.disabled;\n }\n ngOnInit() {\n this.subscriptions = this.localizationService\n .changes\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.subscriptions.add(this.intl.changes.subscribe(this.intlChange.bind(this)));\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n this.ngZone.runOutsideAngular(() => {\n this.domEvents.push(this.renderer.listen(this.hostElement.nativeElement, 'mousewheel', this.handleWheel.bind(this)));\n this.domEvents.push(this.renderer.listen(this.hostElement.nativeElement, 'DOMMouseScroll', this.handleWheel.bind(this)));\n });\n }\n ngAfterViewInit() {\n const stylingInputs = ['size', 'rounded', 'fillMode'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged(PARSABLE_OPTIONS, changes, false)) {\n this.parseOptions(PARSABLE_OPTIONS.filter(option => changes[option]));\n }\n this.verifySettings();\n if (anyChanged(['min', 'max', 'rangeValidation'], changes, false)) {\n this.minValidateFn = this.rangeValidation ? createMinValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? createMaxValidator(this.max) : noop;\n this.ngValidatorChange();\n }\n if (anyChanged(['autoCorrect', 'decimals', 'min'], changes)) {\n delete this.numericRegex;\n }\n if (anyChanged(['value', 'format'], changes, false)) {\n this.verifyValue(this.value);\n this.value = this.restrictModelValue(this.value);\n if (!this.focused || (this.intl.parseNumber(this.elementValue) !== this.value)) {\n this.setInputValue();\n }\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n clearTimeout(this.spinTimeout);\n this.domEvents.forEach(unbindHandler => unbindHandler());\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.ngValidatorChange = fn;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n let restrictedValue = this.restrictModelValue(value);\n this.value = restrictedValue;\n this.setInputValue();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * Focuses the NumericTextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n invokeElementMethod(this.numericInput, 'focus');\n }\n /**\n * Blurs the NumericTextBox.\n */\n blur() {\n invokeElementMethod(this.numericInput, 'blur');\n }\n /**\n * Notifies the `NumericTextBoxComponent` that the input value should be changed.\n * Can be used to update the input after setting the component properties directly.\n */\n notifyValueChange() {\n this.setInputValue();\n }\n /**\n * @hidden\n */\n get incrementTitle() {\n return this.localizationService.get('increment');\n }\n /**\n * @hidden\n */\n get decrementTitle() {\n return this.localizationService.get('decrement');\n }\n get decimalSeparator() {\n const numberSymbols = this.intl.numberSymbols();\n return numberSymbols.decimal;\n }\n get elementValue() {\n return this.numericInput.nativeElement.value;\n }\n set elementValue(value) {\n this.renderer.setProperty(this.numericInput.nativeElement, 'value', value);\n }\n get focused() {\n return this.isFocused;\n }\n get hasDecimals() {\n return this.decimals !== null && this.decimals >= 0;\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n const wrap = this.hostElement.nativeElement;\n if (value) {\n this.renderer.addClass(wrap, FOCUSED$3);\n }\n else {\n this.renderer.removeClass(wrap, FOCUSED$3);\n }\n this.isFocused = value;\n }\n }\n get isDisabled() {\n return this.disabled || this.readonly;\n }\n arrowPress(direction, e) {\n e.preventDefault();\n if (this.isDisabled || isRightClick(e)) {\n return;\n }\n if (!mobileOS) {\n this.focused = true;\n this.focus();\n }\n if (this.arrowDirection !== direction) {\n this.arrowDirection = direction;\n this.changeDetector.detectChanges();\n }\n if (this.step) {\n this.spin(direction, INITIAL_SPIN_DELAY);\n }\n else {\n this.setInputValue();\n }\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n }\n replaceNumpadDotValue() {\n let value = this.inputValue || \"\";\n if (this.previousSelection) {\n const input = this.numericInput.nativeElement;\n const { selectionStart, selectionEnd } = input;\n const { start, end } = this.previousSelection;\n input.value = value = value.substring(0, start) + this.decimalSeparator + value.substring(end);\n this.setSelection(selectionStart, selectionEnd);\n }\n return value;\n }\n isValid(value) {\n if (!this.numericRegex) {\n this.numericRegex = numericRegex({\n autoCorrect: this.autoCorrect,\n decimals: this.decimals,\n min: this.min,\n separator: this.decimalSeparator\n });\n }\n return this.numericRegex.test(value);\n }\n spin(step, timeout) {\n clearTimeout(this.spinTimeout);\n this.spinTimeout = window.setTimeout(() => {\n this.spin(step, SPIN_DELAY);\n }, timeout);\n this.addStep(step);\n }\n addStep(step) {\n let value = add(this.value || 0, this.step * step);\n value = this.limitValue(value);\n value = this.restrictDecimals(value);\n this.setInputValue(value);\n this.updateValue(value);\n }\n setSelection(start, end) {\n if (this.focused) {\n invokeElementMethod(this.numericInput, 'setSelectionRange', start, end);\n }\n }\n limitValue(value) {\n let result = value;\n if (!this.isInRange(value)) {\n if (isNumber(this.max) && value > this.max) {\n result = this.max;\n }\n if (isNumber(this.min) && value < this.min) {\n result = this.min;\n }\n }\n return result;\n }\n limitInputValue(value) {\n let { selectionStart, selectionEnd, value: enteredValue } = this.numericInput.nativeElement;\n let limitedValue = value;\n let selectToEnd = false;\n if (!this.isInRange(value)) {\n const lengthChange = enteredValue.length - String(this.inputValue).length;\n const { min, max } = this;\n const hasMax = isNumber(max);\n const hasMin = isNumber(min);\n let padLimit, replaceNext;\n let correctedValue = value;\n if (selectionStart === 0 && this.inputValue.substr(1) === enteredValue) {\n return {\n selectionEnd: selectionEnd,\n selectionStart: selectionStart,\n value: null\n };\n }\n if (hasMax && value > max) {\n if (value > 0) {\n replaceNext = true;\n }\n else {\n padLimit = max;\n }\n }\n else if (hasMin && value < min) {\n if (value > 0) {\n padLimit = min;\n }\n else {\n replaceNext = true;\n }\n }\n if (padLimit) {\n const paddedValue = this.tryPadValue(value, padLimit);\n if (paddedValue && decimalPart(value) !== decimalPart(padLimit)) {\n correctedValue = paddedValue;\n selectToEnd = true;\n }\n }\n else if (replaceNext) {\n if (this.inputValue && selectionStart !== enteredValue.length) {\n correctedValue = parseFloat(enteredValue.substr(0, selectionStart) +\n enteredValue.substr(selectionStart + lengthChange));\n }\n }\n limitedValue = this.limitValue(correctedValue);\n selectToEnd = (selectToEnd || limitedValue !== correctedValue) && this.previousSelection &&\n (this.previousSelection.end - this.previousSelection.start + lengthChange) > 0;\n }\n return {\n selectionEnd: selectToEnd ? String(limitedValue).length : selectionEnd,\n selectionStart: selectionStart,\n value: limitedValue\n };\n }\n tryPadValue(value, limit) {\n const limitLength = String(Math.floor(limit)).length;\n const zeroPadded = pad(value, limitLength);\n const zeroPaddedNext = pad(value, limitLength + 1);\n let result;\n if (this.isInRange(zeroPadded)) {\n result = zeroPadded;\n }\n else if (this.isInRange(zeroPaddedNext)) {\n result = zeroPaddedNext;\n }\n return result;\n }\n isInRange(value) {\n return !isNumber(value) || ((!isNumber(this.min) || this.min <= value) && (!isNumber(this.max) || value <= this.max));\n }\n restrictModelValue(value) {\n let result = this.restrictDecimals(value, true);\n if (this.autoCorrect && this.limitValue(result) !== result) {\n result = null;\n }\n return result;\n }\n restrictDecimals(value, round) {\n let result = value;\n if (value && this.hasDecimals) {\n const decimals = this.decimals;\n const stringValue = String(value);\n if (round || EXPONENT_REGEX.test(stringValue)) {\n result = toFixedPrecision(value, decimals);\n }\n else {\n const parts = stringValue.split(POINT);\n let fraction = parts[1];\n if (fraction && fraction.length > decimals) {\n fraction = fraction.substr(0, decimals);\n result = parseFloat(`${parts[0]}${POINT}${fraction}`);\n }\n }\n }\n return result;\n }\n formatInputValue(value) {\n let stringValue = Object.is(value, -0) ? '-0' : String(value);\n const exponentMatch = EXPONENT_REGEX.exec(stringValue);\n if (exponentMatch) {\n stringValue = value.toFixed(limitPrecision(parseInt(exponentMatch[1], 10)));\n }\n return stringValue.replace(POINT, this.decimalSeparator);\n }\n formatValue(value, focused) {\n let formattedValue;\n if (value === null || !defined(value) || value === '') {\n formattedValue = '';\n }\n else if (focused && !this.readonly) {\n formattedValue = this.formatInputValue(value);\n }\n else {\n formattedValue = this.intl.formatNumber(value, this.format);\n }\n return formattedValue;\n }\n setInputValue(value = this.value, focused = this.focused) {\n const formattedValue = this.formatValue(value, focused);\n this.elementValue = formattedValue;\n this.inputValue = formattedValue;\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.min !== null && this.max !== null && this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK} and ${MAX_DOC_LINK}.`);\n }\n }\n verifyValue(value) {\n if (isDevMode() && value && typeof value !== 'number') {\n throw new Error(`The NumericTextBox component requires value of type Number and ${JSON.stringify(value)} was set.`);\n }\n }\n parseOptions(options) {\n for (let idx = 0; idx < options.length; idx++) {\n const name = options[idx];\n const value = this[name];\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n const valid = !isNaN(parsed);\n if (isDevMode() && !valid && value !== '') {\n throw new Error('The NumericTextBox component requires value of type Number or a String representing ' +\n `a number for the ${name} property and ${JSON.stringify(value)} was set.`);\n }\n this[name] = valid ? parsed : PARSABLE_DEFAULTS[name];\n }\n }\n }\n intlChange() {\n delete this.numericRegex;\n if (this.numericInput && (!this.focused || !this.isValid(this.elementValue))) {\n this.setInputValue();\n }\n }\n hasTrailingZeros(inputValue) {\n if (this.hasDecimals && this.focused) {\n const fraction = inputValue.split(this.decimalSeparator)[1];\n return fraction && fraction.length > this.decimals && fraction.lastIndexOf('0') === fraction.length - 1;\n }\n }\n selectAll() {\n this.setInputValue();\n this.setSelection(0, this.inputValue.length);\n }\n selectCaret() {\n const caretPosition = getCaretPosition(this.numericInput.nativeElement);\n const formattedValue = this.elementValue;\n const partialValue = formattedValue.substring(0, caretPosition);\n this.setInputValue();\n if (partialValue.length) {\n const significantCharsInFormattedValue = extractSignificantNumericChars(partialValue, this.decimalSeparator);\n const adjustedSignificantChars = this.adjustSignificantChars(formattedValue, significantCharsInFormattedValue);\n this.setSelection(adjustedSignificantChars, adjustedSignificantChars);\n }\n else {\n this.setSelection(0, 0);\n }\n }\n numberOfLeadingZeroes(formattedValue) {\n const separatorIndex = formattedValue.indexOf(this.decimalSeparator);\n const matchedLeadingZeroes = formattedValue.match(/^[^1-9]*?(0+)/);\n if (matchedLeadingZeroes) {\n const lengthOfMatch = matchedLeadingZeroes[0].length;\n const lengthOfLeadingZeroesMatch = matchedLeadingZeroes[1].length;\n return lengthOfMatch === separatorIndex ? lengthOfLeadingZeroesMatch - 1 : lengthOfLeadingZeroesMatch;\n }\n return 0;\n }\n adjustSignificantChars(formattedValue, significantChars) {\n const leadingZeroes = this.numberOfLeadingZeroes(formattedValue);\n if (leadingZeroes > 0) {\n return Math.max(0, significantChars - leadingZeroes);\n }\n return significantChars;\n }\n handleClasses(value, input) {\n const elem = this.hostElement.nativeElement;\n const classes = getStylingClasses('input', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n}\nNumericTextBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxComponent, deps: [{ token: i1$2.IntlService }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.Injector }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nNumericTextBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NumericTextBoxComponent, selector: \"kendo-numerictextbox\", inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", title: \"title\", autoCorrect: \"autoCorrect\", format: \"format\", max: \"max\", min: \"min\", decimals: \"decimals\", placeholder: \"placeholder\", step: \"step\", spinners: \"spinners\", rangeValidation: \"rangeValidation\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", changeValueOnScroll: \"changeValueOnScroll\", selectOnFocus: \"selectOnFocus\", value: \"value\", maxlength: \"maxlength\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\" }, host: { properties: { \"attr.dir\": \"this.direction\", \"class.k-disabled\": \"this.disableClass\", \"class.k-input\": \"this.hostClasses\", \"class.k-numerictextbox\": \"this.hostClasses\" } }, providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.numerictextbox' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => NumericTextBoxComponent) }\n ], viewQueries: [{ propertyName: \"numericInput\", first: true, predicate: [\"numericInput\"], descendants: true, static: true }], exportAs: [\"kendoNumericTextBox\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n `, isInline: true, directives: [{ type: LocalizedNumericTextBoxMessagesDirective, selector: \"[kendoNumericTextBoxLocalizedMessages]\" }, { type: i3.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoNumericTextBox',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.numerictextbox' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => NumericTextBoxComponent) }\n ],\n selector: 'kendo-numerictextbox',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1$2.IntlService }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], title: [{\n type: Input\n }], autoCorrect: [{\n type: Input\n }], format: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], decimals: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], step: [{\n type: Input\n }], spinners: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], changeValueOnScroll: [{\n type: Input\n }], selectOnFocus: [{\n type: Input\n }], value: [{\n type: Input\n }], maxlength: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], numericInput: [{\n type: ViewChild,\n args: ['numericInput', { static: true }]\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], disableClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-input']\n }, {\n type: HostBinding,\n args: ['class.k-numerictextbox']\n }] } });\n\n/**\n * Custom component messages override default component messages.\n */\nclass NumericTextBoxCustomMessagesComponent extends NumericTextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nNumericTextBoxCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nNumericTextBoxCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NumericTextBoxCustomMessagesComponent, selector: \"kendo-numerictextbox-messages\", providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => NumericTextBoxCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => NumericTextBoxCustomMessagesComponent)\n }\n ],\n selector: 'kendo-numerictextbox-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * @hidden\n */\nvar ResultType;\n(function (ResultType) {\n ResultType[ResultType[\"Literal\"] = 0] = \"Literal\";\n ResultType[ResultType[\"Mask\"] = 1] = \"Mask\";\n // eslint-disable-next-line id-denylist\n ResultType[ResultType[\"Undefined\"] = 2] = \"Undefined\";\n})(ResultType || (ResultType = {}));\n/**\n * @hidden\n */\nclass Result {\n constructor(value, rest, type = ResultType.Undefined) {\n this.value = value;\n this.rest = rest;\n this.type = type;\n }\n //map :: Functor f => f a ~> (a -> b) -> f b\n map(fn) {\n return new Result(fn(this.value), this.rest);\n }\n //chain :: Chain m => m a ~> (a -> m b) -> m b\n chain(fn) {\n return fn(this.value, this.rest);\n }\n fold(s, _ /*we don't need it*/) {\n return s(this.value, this.rest);\n }\n concat(r) {\n return this.map((vs, _) => r.chain((v, __) => vs.concat([v])));\n }\n toString() {\n return `Result({ value: '${this.value}', rest: ${this.rest} })`;\n }\n}\n\n/**\n * @hidden\n */\nclass Stream {\n constructor(input = [], control = []) {\n this.input = input;\n this.control = control;\n this.inputCursor = 0;\n this.controlCursor = 0;\n }\n eof() {\n return this.inputCursor >= this.input.length;\n }\n // Get the first value from the input.\n next() {\n return {\n char: this.input[this.inputCursor++],\n control: this.control[this.controlCursor++]\n };\n }\n peek() {\n return {\n char: this.input[this.inputCursor],\n control: this.control[this.controlCursor]\n };\n }\n eat_input() {\n this.inputCursor++;\n }\n eat_control() {\n this.controlCursor++;\n }\n eat() {\n this.inputCursor++;\n this.controlCursor++;\n }\n}\n\nconst toArray = (value) => (value || '').split('');\nconst ESCAPE_CHARACTER = '\\\\';\n/**\n * @hidden\n */\nclass Parser {\n constructor(parse) {\n this.parse = parse;\n }\n run(input, control = '') {\n if (input instanceof Stream) {\n return this.parse(input);\n }\n else {\n return this.parse(new Stream(toArray(input), toArray(control)));\n }\n }\n //map :: Functor f => f a ~> (a -> b) -> f b\n map(f) {\n return new Parser(stream => this.parse(stream).map(f));\n }\n //chain :: Chain m => m a ~> (a -> m b) -> m b\n chain(f) {\n return new Parser(stream => this.parse(stream).chain((v, s) => f(v).run(s)));\n }\n isLiteral(c) {\n return this.run(c).type === ResultType.Literal;\n }\n}\n/**\n * @hidden\n */\nconst mask = ({ prompt, promptPlaceholder }) => rule => new Parser(stream => {\n while (!stream.eof()) {\n const { char, control } = stream.peek();\n if (char === control && control === prompt) {\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n }\n if (rule.test(char)) {\n stream.eat();\n return new Result(char, stream, ResultType.Mask);\n }\n if (char === promptPlaceholder) {\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n }\n stream.eat_input();\n }\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n});\n/**\n * @hidden\n */\nconst literal = _token => new Parser(stream => {\n // let {char, control} = stream.peek();\n let char = stream.peek().char;\n if (char === _token) {\n stream.eat();\n return new Result(_token, stream, ResultType.Literal);\n }\n // if (control === _token) {\n // while (!stream.eof() && char !== _token) {\n // stream.eat_input();\n // char = stream.peek().char;\n // }\n // }\n //\n // if (control !== undefined) {\n // stream.eat();\n // }\n return new Result(_token, stream, ResultType.Literal);\n});\n/**\n * @hidden\n */\nconst unmask = prompt => rule => new Parser(stream => {\n while (!stream.eof()) {\n const { char, control } = stream.peek();\n if (char === prompt && control === prompt) {\n stream.eat();\n return new Result(char, stream);\n }\n if (rule.test(char)) {\n stream.eat();\n return new Result(char, stream);\n }\n stream.eat_input();\n }\n stream.eat();\n return new Result('', stream);\n});\n/**\n * @hidden\n */\nconst unliteral = _token => new Parser(stream => {\n if (stream.eof()) {\n return new Result('', stream);\n }\n const { char } = stream.peek();\n if (char === _token) {\n stream.eat();\n }\n return new Result(_token, stream);\n});\n/**\n * @hidden\n */\nconst token = (rules, creator) => new Parser(stream => {\n let { char } = stream.next();\n const rule = rules[char];\n if (char === ESCAPE_CHARACTER) {\n char = stream.next().char;\n return new Result(creator.literal(char), stream);\n }\n if (!rule) {\n return new Result(creator.literal(char), stream);\n }\n return new Result(creator.mask(rule), stream);\n});\n/**\n * @hidden\n */\nconst rawMask = ({ prompt, promptPlaceholder }) => new Parser(stream => {\n let { char } = stream.next();\n if (char === prompt) {\n return new Result(promptPlaceholder, stream);\n }\n return new Result(char, stream);\n});\n/**\n * @hidden\n */\nconst rawLiteral = includeLiterals => new Parser(stream => {\n let { char } = stream.next();\n if (includeLiterals) {\n return new Result(char, stream);\n }\n return new Result('', stream);\n});\n\n/**\n * @hidden\n */\nconst always = value => new Parser(stream => new Result(value, stream));\n/**\n * @hidden\n */\nconst append = (p1, p2) => p1.chain(vs => p2.map(v => vs.concat([v])));\n/**\n * @hidden\n */\nconst sequence = list => list.reduce((acc, parser) => append(acc, parser), always([]));\n/**\n * @hidden\n */\nconst greedy = parser => new Parser(stream => {\n let result = new Result([], stream);\n while (!stream.eof()) {\n result = result.concat(parser.run(stream));\n }\n return result;\n});\n\n/**\n * @hidden\n */\nclass MaskingService {\n constructor() {\n this.rules = {};\n this.prompt = \"_\";\n this.mask = \"\";\n this.promptPlaceholder = \" \";\n this.includeLiterals = false;\n this.maskTokens = [];\n this.unmaskTokens = [];\n this.rawTokens = [];\n this.validationTokens = [];\n }\n update({ mask = '', prompt = '', promptPlaceholder = ' ', rules = {}, includeLiterals = false }) {\n this.mask = mask;\n this.prompt = prompt;\n this.promptPlaceholder = promptPlaceholder;\n this.rules = rules;\n this.includeLiterals = includeLiterals;\n this.tokenize();\n }\n validationValue(maskedValue = '') {\n let value = maskedValue;\n sequence(this.validationTokens)\n .run(maskedValue)\n .fold(unmasked => {\n value = unmasked.join('');\n });\n return value;\n }\n rawValue(maskedValue = '') {\n let value = maskedValue;\n if (!this.rawTokens.length) {\n return value;\n }\n sequence(this.rawTokens)\n .run(maskedValue)\n .fold(unmasked => {\n value = unmasked.join('');\n });\n return value;\n }\n /**\n * @hidden\n */\n maskRaw(rawValue = '') {\n let value = rawValue;\n if (!this.maskTokens.length) {\n return value;\n }\n sequence(this.maskTokens)\n .run(rawValue)\n .fold(masked => {\n value = masked.join('');\n });\n return value;\n }\n maskInput(input, control, splitPoint) {\n if (input.length < control.length) {\n return this.maskRemoved(input, control, splitPoint);\n }\n return this.maskInserted(input, control, splitPoint);\n }\n maskInRange(pasted, oldValue, start, end) {\n let value = '';\n let selection = end;\n const beforeChange = oldValue.split('').slice(0, start);\n const afterChange = oldValue.split('').slice(end);\n sequence(this.maskTokens.slice(start, end))\n .run(pasted)\n .fold(masked => {\n value = beforeChange\n .concat(masked)\n .concat(afterChange)\n .join('');\n });\n return {\n selection,\n value\n };\n }\n maskRemoved(input, control, splitPoint) {\n let value = '';\n let selection = splitPoint;\n const unchanged = input.split('').slice(splitPoint);\n const changed = input.split('').slice(0, splitPoint).join('');\n const take = this.maskTokens.length - (input.length - splitPoint);\n sequence(this.maskTokens.slice(0, take))\n .run(changed, control)\n .fold(masked => {\n selection = this.adjustPosition(masked, selection);\n value = masked.concat(unchanged).join('');\n });\n return {\n selection,\n value\n };\n }\n adjustPosition(input, selection) {\n const caretChar = input[selection];\n const isLiteral = this.maskTokens[selection].isLiteral(caretChar);\n if (!isLiteral && caretChar !== this.prompt) {\n return selection + 1;\n }\n return selection;\n }\n maskInserted(input, control, splitPoint) {\n let value = '';\n let selection = splitPoint;\n const changed = input.slice(0, splitPoint);\n sequence(this.unmaskTokens)\n .run(changed, control)\n .chain(unmasked => {\n selection = unmasked.join('').length;\n const unchanged = control.slice(selection);\n return sequence(this.maskTokens)\n .run(unmasked.join('') + unchanged, control);\n })\n .fold(masked => {\n value = masked.join('');\n });\n return {\n selection,\n value\n };\n }\n get maskTokenCreator() {\n const { prompt, promptPlaceholder } = this;\n return {\n literal: rule => literal(rule),\n mask: rule => mask({ prompt, promptPlaceholder })(rule)\n };\n }\n get unmaskTokenCreator() {\n return {\n literal: rule => unliteral(rule),\n mask: rule => unmask(this.prompt)(rule)\n };\n }\n get rawTokenCreator() {\n const { prompt, promptPlaceholder, includeLiterals } = this;\n return {\n literal: _ => rawLiteral(includeLiterals),\n mask: _ => rawMask({ prompt, promptPlaceholder })\n };\n }\n get validationTokenCreator() {\n const { prompt } = this;\n return {\n literal: _ => rawLiteral(false),\n mask: _ => rawMask({ prompt, promptPlaceholder: '' })\n };\n }\n tokenize() {\n greedy(token(this.rules, this.maskTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.maskTokens = tokens;\n });\n greedy(token(this.rules, this.unmaskTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.unmaskTokens = tokens;\n });\n greedy(token(this.rules, this.rawTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.rawTokens = tokens;\n });\n greedy(token(this.rules, this.validationTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.validationTokens = tokens;\n });\n }\n}\nMaskingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMaskingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskingService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskingService, decorators: [{\n type: Injectable\n }] });\n\nconst resolvedPromise = Promise.resolve(null);\nconst FOCUSED$2 = 'k-focus';\nconst DEFAULT_SIZE$5 = 'medium';\nconst DEFAULT_ROUNDED$4 = 'medium';\nconst DEFAULT_FILL_MODE$3 = 'solid';\n/**\n * Represents the [Kendo UI MaskedTextBox component for Angular]({% slug overview_maskedtextbox %}).\n *\n * @example\n * ```ts-no-run\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public value: string = \"9580128055807792\";\n * public mask: string = \"0000-0000-0000-0000\";\n * }\n * ```\n */\nclass MaskedTextBoxComponent {\n constructor(service, renderer, hostElement, ngZone, injector, changeDetector, rtl) {\n this.service = service;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.ngZone = ngZone;\n this.injector = injector;\n this.changeDetector = changeDetector;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the MaskedTextBox is disabled ([see example]({% slug disabled_maskedtextbox %})).\n */\n this.disabled = false;\n /**\n * Determines whether the MaskedTextBox is in its read-only state ([see example]({% slug readonly_maskedtextbox %})).\n */\n this.readonly = false;\n /**\n * Represents a prompt character for the masked value.\n * @default `_`\n */\n this.prompt = '_';\n /**\n * Indicates a character which represents an empty position in the raw value.\n * @default ' '\n */\n this.promptPlaceholder = ' ';\n /**\n * Indicates whether to include literals in the raw value ([see example]({% slug value_maskedtextbox %})).\n * @default false\n */\n this.includeLiterals = false;\n /**\n * Specifies if the mask should be shown on focus for empty value.\n */\n this.maskOnFocus = false;\n /**\n * Determines whether the built-in mask validator is enforced when a form is validated\n * ([see example]({% slug validation_maskedtextbox %})).\n * @default true\n */\n this.maskValidation = true;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Fires each time the user focuses the `input` element.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the value changes.\n */\n this.valueChange = new EventEmitter();\n this.hostClasses = true;\n this.focusClick = false;\n this.defaultRules = {\n \"#\": /[\\d\\s\\+\\-]/,\n \"&\": /[\\S]/,\n \"0\": /[\\d]/,\n \"9\": /[\\d\\s]/,\n \"?\": /[a-zA-Z\\s]/,\n \"A\": /[a-zA-Z0-9]/,\n \"C\": /./,\n \"L\": /[a-zA-Z]/,\n \"a\": /[a-zA-Z0-9\\s]/\n };\n this.isPasted = false;\n this.selection = [0, 0];\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n /**\n * @hidden\n */\n this.handleFocus = () => {\n this.focused = true;\n if (this.maskOnFocus && this.emptyMask) {\n this.updateInput(this.service.maskRaw(this.value));\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => { this.setSelection(0, 0); }, 0);\n });\n }\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleClick = () => {\n if (this.focused && !this.focusClick) {\n this.focusClick = true;\n const { selectionStart, selectionEnd } = this.input.nativeElement;\n if (selectionStart === selectionEnd) {\n this.setFocusSelection();\n }\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n this.focusClick = false;\n if (this.maskOnFocus && this.emptyMask) {\n this.updateInput(this.maskedValue);\n }\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.onTouched();\n this.onBlur.emit();\n });\n }\n };\n this.onChange = (_) => { };\n this.onTouched = () => { };\n validatePackage(packageMetadata);\n this.direction = rtl ? 'rtl' : 'ltr';\n this.updateService();\n }\n /**\n * The size property specifies the padding of the MaskedTextBox internal input element\n * ([see example]({% slug appearance_maskedtextbox %}#toc-size)).\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$5;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the MaskedTextBox\n * ([see example]({% slug appearance_maskedtextbox %}#toc-rounded)).\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$4;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the MaskedTexBox\n * ([see example]({% slug appearance_maskedtextbox %}#toc-fillMode)).\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$3;\n this.handleClasses(newFillMode, 'fillMode');\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * Exposes the RegExp-based mask validation array ([see example]({% slug masks_maskedtextbox %})).\n */\n set rules(value) {\n this._rules = Object.assign({}, this.defaultRules, value);\n }\n get rules() {\n return this._rules || this.defaultRules;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get hostDisabledClass() {\n return this.disabled;\n }\n ngOnInit() {\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n }\n ngAfterViewInit() {\n const stylingInputs = ['size', 'rounded', 'fillMode'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the MaskedTextBox is empty.\n */\n isEmpty() {\n if (this.input) {\n return !Boolean(this.input.nativeElement.value);\n }\n }\n /**\n * @hidden\n */\n handleDragDrop() {\n return false;\n }\n /**\n * Focuses the MaskedTextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.input.nativeElement.focus();\n this.setFocusSelection();\n }\n /**\n * Blurs the MaskedTextBox.\n */\n blur() {\n if (!this.input) {\n return;\n }\n this.input.nativeElement.blur();\n }\n /**\n * @hidden\n */\n pasteHandler(e) {\n const { selectionStart, selectionEnd } = e.target;\n if (selectionEnd === selectionStart) {\n return;\n }\n this.isPasted = true;\n this.selection = [selectionStart, selectionEnd];\n }\n /**\n * @hidden\n */\n inputHandler(e) {\n const value = e.target.value;\n const [start, end] = this.selection;\n if (!this.mask) {\n this.updateValueWithEvents(value);\n this.isPasted = false;\n return;\n }\n let result;\n if (this.isPasted) {\n this.isPasted = false;\n const rightPart = this.maskedValue.length - end;\n const to = value.length - rightPart;\n result = this.service.maskInRange(value.slice(start, to), this.maskedValue, start, end);\n }\n else {\n result = this.service.maskInput(value, this.maskedValue || '', e.target.selectionStart);\n }\n this.updateInput(result.value, result.selection);\n this.updateValueWithEvents(result.value);\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.value) {\n this.value = this.normalizeValue();\n }\n if (!this.mask) {\n this.updateInput(this.value);\n return;\n }\n const next = this.extractChanges(changes);\n this.updateService(next);\n const maskedValue = this.service.maskRaw(this.value);\n this.updateInput(maskedValue, null, true);\n if (changes.includeLiterals || isChanged('promptPlaceholder', changes)) {\n resolvedPromise.then(() => {\n this.updateValueWithEvents(this.maskedValue);\n });\n }\n }\n /**\n * @hidden\n * Writes a new value to the element.\n */\n writeValue(value) {\n this.value = this.normalizeValue(value);\n this.updateInput(this.service.maskRaw(this.value));\n if (this.includeLiterals) {\n this.updateValue(this.maskedValue);\n }\n }\n /**\n * @hidden\n * Sets the function that will be called when a `change` event is triggered.\n */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /**\n * @hidden\n * Sets the function that will be called when a `touch` event is triggered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n validate(_) {\n if (this.maskValidation === false || !this.mask) {\n return null;\n }\n if (!this.service.validationValue(this.maskedValue)) {\n return null;\n }\n if (this.maskedValue.indexOf(this.prompt) !== -1) {\n return {\n patternError: {\n mask: this.mask,\n maskedValue: this.maskedValue,\n value: this.value\n }\n };\n }\n return null;\n }\n /**\n * @hidden\n */\n updateValueWithEvents(maskedValue) {\n this.updateValue(maskedValue);\n if (hasObservers(this.valueChange)) {\n this.valueChange.emit(this.value);\n }\n }\n updateValue(value) {\n if (this.mask && !this.service.validationValue(value) && !this.includeLiterals) {\n this.value = '';\n }\n else {\n this.value = this.service.rawValue(value);\n }\n this.onChange(this.value);\n }\n updateInput(maskedValue = '', selection, isFromOnChanges) {\n if (isFromOnChanges && maskedValue === this.maskedValue) {\n return;\n }\n this.maskedValue = maskedValue;\n const value = this.maskOnFocus && !this.focused && this.emptyMask ? '' : maskedValue;\n this.renderer.setProperty(this.input.nativeElement, \"value\", value);\n if (selection !== undefined) {\n this.setSelection(selection, selection);\n }\n }\n extractChanges(changes) {\n return Object.keys(changes).filter(key => key !== 'rules').reduce((obj, key) => {\n obj[key] = changes[key].currentValue;\n return obj;\n }, {});\n }\n updateService(extra) {\n const config = Object.assign({\n includeLiterals: this.includeLiterals,\n mask: this.mask,\n prompt: this.prompt,\n promptPlaceholder: this.promptPlaceholder,\n rules: this.rules\n }, extra);\n this.service.update(config);\n }\n setSelection(start = this.selection[0], end = this.selection[1]) {\n if (this.focused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n get emptyMask() {\n return this.service.maskRaw() === this.maskedValue;\n }\n setFocusSelection() {\n const selectionStart = this.input.nativeElement.selectionStart;\n const index = this.maskedValue ? this.maskedValue.indexOf(this.prompt) : 0;\n if (index >= 0 && index < selectionStart) {\n this.selection = [index, index];\n this.setSelection();\n }\n }\n get focused() {\n return this.isFocused;\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value) {\n this.renderer.addClass(element, FOCUSED$2);\n }\n else {\n this.renderer.removeClass(element, FOCUSED$2);\n }\n this.isFocused = value;\n }\n }\n normalizeValue(value = this.value) {\n const present = isPresent(value);\n if (present && typeof value !== 'string') {\n if (isDevMode()) {\n throw new Error('The MaskedTextBox component supports only string values.');\n }\n return String(value);\n }\n return present ? value : '';\n }\n handleClasses(value, input) {\n const elem = this.hostElement.nativeElement;\n const classes = getStylingClasses('input', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n}\nMaskedTextBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskedTextBoxComponent, deps: [{ token: MaskingService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMaskedTextBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: MaskedTextBoxComponent, selector: \"kendo-maskedtextbox\", inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", title: \"title\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", mask: \"mask\", value: \"value\", rules: \"rules\", prompt: \"prompt\", promptPlaceholder: \"promptPlaceholder\", includeLiterals: \"includeLiterals\", maskOnFocus: \"maskOnFocus\", maskValidation: \"maskValidation\", tabindex: \"tabindex\", tabIndex: \"tabIndex\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, host: { listeners: { \"paste\": \"pasteHandler($event)\", \"input\": \"inputHandler($event)\" }, properties: { \"attr.dir\": \"this.direction\", \"class.k-input\": \"this.hostClasses\", \"class.k-maskedtextbox\": \"this.hostClasses\", \"class.k-disabled\": \"this.hostDisabledClass\" } }, providers: [\n MaskingService,\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* eslint-disable-line*/\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* eslint-disable-line*/\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MaskedTextBoxComponent)\n }\n ], viewQueries: [{ propertyName: \"input\", first: true, predicate: [\"input\"], descendants: true, static: true }], exportAs: [\"kendoMaskedTextBox\"], usesOnChanges: true, ngImport: i0, template: `\n \n `, isInline: true, directives: [{ type: i3.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskedTextBoxComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoMaskedTextBox',\n providers: [\n MaskingService,\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* eslint-disable-line*/\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* eslint-disable-line*/\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MaskedTextBoxComponent)\n }\n ],\n selector: 'kendo-maskedtextbox',\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: MaskingService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, propDecorators: { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], title: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], mask: [{\n type: Input\n }], value: [{\n type: Input\n }], rules: [{\n type: Input\n }], prompt: [{\n type: Input\n }], promptPlaceholder: [{\n type: Input\n }], includeLiterals: [{\n type: Input\n }], maskOnFocus: [{\n type: Input\n }], maskValidation: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-input']\n }, {\n type: HostBinding,\n args: ['class.k-maskedtextbox']\n }], hostDisabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }], pasteHandler: [{\n type: HostListener,\n args: ['paste', ['$event']]\n }], inputHandler: [{\n type: HostListener,\n args: ['input', ['$event']]\n }] } });\n\n/**\n * @hidden\n */\nclass SlidersCommonModule {\n}\nSlidersCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SlidersCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSlidersCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SlidersCommonModule, declarations: [SliderTicksComponent,\n LabelTemplateDirective], imports: [CommonModule, DraggableModule, EventsModule, ResizeSensorModule], exports: [LabelTemplateDirective,\n SliderTicksComponent,\n DraggableModule,\n EventsModule,\n ResizeSensorModule] });\nSlidersCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SlidersCommonModule, imports: [[CommonModule, DraggableModule, EventsModule, ResizeSensorModule], DraggableModule,\n EventsModule,\n ResizeSensorModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SlidersCommonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n SliderTicksComponent,\n LabelTemplateDirective\n ],\n exports: [\n LabelTemplateDirective,\n SliderTicksComponent,\n DraggableModule,\n EventsModule,\n ResizeSensorModule\n ],\n imports: [CommonModule, DraggableModule, EventsModule, ResizeSensorModule]\n }]\n }] });\n\n/**\n * Custom component messages override default component messages.\n */\nclass SliderCustomMessagesComponent extends SliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nSliderCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nSliderCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SliderCustomMessagesComponent, selector: \"kendo-slider-messages\", providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => SliderCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => SliderCustomMessagesComponent)\n }\n ],\n selector: 'kendo-slider-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Slider component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { SliderModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, SliderModule], // import Slider module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass SliderModule {\n}\nSliderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSliderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderModule, declarations: [SliderComponent,\n SliderCustomMessagesComponent,\n LocalizedSliderMessagesDirective], imports: [CommonModule, SlidersCommonModule], exports: [SliderComponent,\n SliderCustomMessagesComponent,\n LabelTemplateDirective,\n LocalizedSliderMessagesDirective] });\nSliderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderModule, imports: [[CommonModule, SlidersCommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SliderModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n SliderComponent,\n SliderCustomMessagesComponent,\n LocalizedSliderMessagesDirective\n ],\n exports: [\n SliderComponent,\n SliderCustomMessagesComponent,\n LabelTemplateDirective,\n LocalizedSliderMessagesDirective\n ],\n imports: [CommonModule, SlidersCommonModule]\n }]\n }] });\n\n/**\n * Custom component messages override default component messages.\n */\nclass RangeSliderCustomMessagesComponent extends RangeSliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nRangeSliderCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nRangeSliderCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: RangeSliderCustomMessagesComponent, selector: \"kendo-rangeslider-messages\", providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => RangeSliderCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => RangeSliderCustomMessagesComponent)\n }\n ],\n selector: 'kendo-rangeslider-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the RangeSlider component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { RangeSliderModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, RangeSliderModule], // import RangeSlider module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass RangeSliderModule {\n}\nRangeSliderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nRangeSliderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderModule, declarations: [RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective], imports: [CommonModule, SlidersCommonModule], exports: [RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective,\n LabelTemplateDirective] });\nRangeSliderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderModule, imports: [[CommonModule, SlidersCommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RangeSliderModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective\n ],\n exports: [\n RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective,\n LabelTemplateDirective\n ],\n imports: [CommonModule, SlidersCommonModule]\n }]\n }] });\n\n/**\n * Custom component messages override default component messages.\n */\nclass SwitchCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nSwitchCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nSwitchCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SwitchCustomMessagesComponent, selector: \"kendo-switch-messages\", providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => SwitchCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => SwitchCustomMessagesComponent)\n }\n ],\n selector: 'kendo-switch-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Switch component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Switch module\n * import { SwitchModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, SwitchModule], // import Switch module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass SwitchModule {\n}\nSwitchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSwitchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchModule, declarations: [SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective], imports: [CommonModule, EventsModule, ResizeSensorModule], exports: [SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective] });\nSwitchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchModule, imports: [[CommonModule, EventsModule, ResizeSensorModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SwitchModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective\n ],\n exports: [\n SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective\n ],\n imports: [CommonModule, EventsModule, ResizeSensorModule]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the NumericTextBox component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the NumericTextBox module\n * import { NumericTextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, NumericTextBoxModule], // import NumericTextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass NumericTextBoxModule {\n}\nNumericTextBoxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nNumericTextBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxModule, declarations: [LocalizedNumericTextBoxMessagesDirective,\n NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent], imports: [CommonModule, EventsModule], exports: [NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent] });\nNumericTextBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxModule, imports: [[CommonModule, EventsModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumericTextBoxModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n LocalizedNumericTextBoxMessagesDirective,\n NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent\n ],\n exports: [\n NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent\n ],\n imports: [CommonModule, EventsModule]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the MaskedTextBox component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the MaskedTextBox module\n * import { MaskedTextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, MaskedTextBoxModule], // import MaskedTextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass MaskedTextBoxModule {\n}\nMaskedTextBoxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskedTextBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMaskedTextBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskedTextBoxModule, declarations: [MaskedTextBoxComponent], imports: [CommonModule, EventsModule], exports: [MaskedTextBoxComponent] });\nMaskedTextBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskedTextBoxModule, imports: [[CommonModule, EventsModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MaskedTextBoxModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [MaskedTextBoxComponent],\n exports: [MaskedTextBoxComponent],\n imports: [CommonModule, EventsModule]\n }]\n }] });\n\n/**\n * @hidden\n *\n * Returns true if the used browser is Safari.\n */\nconst isSafari = (userAgent) => {\n const desktopBrowser = detectDesktopBrowser(userAgent);\n const mobileOS = detectMobileOS(userAgent);\n return (desktopBrowser && desktopBrowser.safari) || (mobileOS && mobileOS.browser === 'mobilesafari');\n};\n/**\n * @hidden\n *\n * Checks if input is Japanese IME\n */\nconst isJapanese = (input) => {\n const japaneseRegex = /[\\u3000-\\u303F]|[\\u3040-\\u309F]|[\\u30A0-\\u30FF]|[\\uFF00-\\uFFEF]|[\\u4E00-\\u9FAF]|[\\u2605-\\u2606]|[\\u2190-\\u2195]|\\u203B/g;\n return japaneseRegex.test(input);\n};\n\n/**\n * Specifies the adornments in the suffix container ([see examples]({% slug adornments_textbox %}#toc-suffixadornments)).\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass TextBoxSuffixTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTextBoxSuffixTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxSuffixTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nTextBoxSuffixTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextBoxSuffixTemplateDirective, selector: \"[kendoTextBoxSuffixTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxSuffixTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTextBoxSuffixTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Specifies the adornments in the prefix container ([see examples]({% slug adornments_textbox %}#toc-prefixadornments)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass TextBoxPrefixTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTextBoxPrefixTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxPrefixTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nTextBoxPrefixTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextBoxPrefixTemplateDirective, selector: \"[kendoTextBoxPrefixTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxPrefixTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTextBoxPrefixTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nclass TextBoxMessages extends ComponentMessages {\n}\nTextBoxMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nTextBoxMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextBoxMessages, selector: \"kendo-textbox-messages-base\", inputs: { clear: \"clear\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-textbox-messages-base'\n }]\n }], propDecorators: { clear: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedTextBoxMessagesDirective extends TextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedTextBoxMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedTextBoxMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedTextBoxMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedTextBoxMessagesDirective, selector: \"[kendoTextBoxLocalizedMessages]\", providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => LocalizedTextBoxMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedTextBoxMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => LocalizedTextBoxMessagesDirective)\n }\n ],\n selector: '[kendoTextBoxLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst FOCUSED$1 = 'k-focus';\nconst DEFAULT_SIZE$4 = 'medium';\nconst DEFAULT_ROUNDED$3 = 'medium';\nconst DEFAULT_FILL_MODE$2 = 'solid';\nclass TextBoxComponent {\n constructor(localizationService, ngZone, changeDetector, renderer, injector, hostElement) {\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n this.injector = injector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets the `title` attribute of the `input` element of the TextBox.\n */\n this.title = '';\n /**\n * Sets the disabled state of the component.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Specifies the `tabindex` of the TextBox.\n *\n * @default 0\n */\n this.tabindex = 0;\n /**\n * Provides a value for the TextBox.\n */\n this.value = null;\n /**\n * Determines whether the whole value will be selected when the TextBox is clicked. Defaults to `false`.\n *\n * @default false\n */\n this.selectOnFocus = false;\n /**\n * Specifies when the Success icon will be shown ([see example]({% slug validation_textbox %})).\n *\n * The possible values are:\n *\n * `boolean`—The Success icon is displayed, if the condition given by the developer is met.\n *\n * `initial`—The Success icon will be displayed when the component state is neither `invalid` nor `touched` or `dirty`.\n *\n * @default false\n */\n this.showSuccessIcon = false;\n /**\n * Specifies when the Error icon will be shown ([see example]({% slug validation_textbox %})).\n *\n * The possible values are:\n *\n * * `initial`—The Error icon will be displayed when the component state is\n * `invalid` and `touched` or `dirty`.\n * * `boolean`—The Error icon is displayed, if the condition given by the developer is met.\n *\n * @default false\n */\n this.showErrorIcon = false;\n /**\n * Specifies whether a Clear button will be rendered.\n *\n * @default false\n */\n this.clearButton = false;\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_textbox %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the `input` element.\n */\n this.inputFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred.\n */\n this.inputBlur = new EventEmitter();\n /**\n * Fires each time the user focuses the TextBox component.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log('Component is isFocused');\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the TextBox component gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log('Component is blurred');\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n this.hostClasses = true;\n this._isFocused = false;\n this.focusChangedProgrammatically = false;\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n /**\n * @hidden\n */\n this.handleInputFocus = () => {\n if (!this.disabled) {\n if (this.selectOnFocus && this.value) {\n this.ngZone.run(() => {\n setTimeout(() => { this.selectAll(); });\n });\n }\n if (hasObservers(this.onFocus)) {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n if (hasObservers(this.inputFocus)) {\n if (!this.focusChangedProgrammatically || (this.focusChangedProgrammatically && this.clearButtonClicked)) {\n this.ngZone.run(() => {\n this.inputFocus.emit();\n });\n }\n }\n this.ngZone.run(() => {\n this.isFocused = true;\n });\n }\n };\n /**\n * @hidden\n */\n this.handleInputBlur = () => {\n this.changeDetector.markForCheck();\n if (hasObservers(this.inputBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.inputBlur.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleInput = (ev) => {\n const target = ev.target;\n const isBrowserSafari = isSafari(navigator.userAgent);\n const incomingValue = isBrowserSafari && isJapanese(target.value) ? ev.data : target.value;\n const [caretStart, caretEnd] = [target.selectionStart, target.selectionEnd];\n this.updateValue(incomingValue);\n if (isBrowserSafari) {\n target.setSelectionRange(caretStart, caretEnd);\n }\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * The size property specifies the padding of the TextBox internal input element\n * ([see example]({% slug appearance_textbox %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$4;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the TextBox\n * ([see example]({% slug appearance_textbox %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$3;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the TextBox\n * ([see example]({% slug appearance_textbox %}#toc-fillMode)).\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$2;\n this.handleClasses(newFillMode, 'fillMode');\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get disabledClass() {\n return this.disabled;\n }\n ngOnInit() {\n this.control = this.injector.get(NgControl, null);\n this.checkClearButton();\n this.subscriptions = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n ngAfterViewInit() {\n const hostElement = this.hostElement.nativeElement;\n let cursorInsideWrapper = false;\n let tabbing = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n this.isFocused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n const closestTextbox = closest(args.relatedTarget, (element) => element === this.hostElement.nativeElement);\n if (!closestTextbox) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper && !this.clearButtonClicked) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n const stylingInputs = ['size', 'rounded', 'fillMode'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n ngOnChanges(changes) {\n if (changes.disabled || changes.readonly || changes.value) {\n this.checkClearButton();\n }\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * Focuses the TextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.focusChangedProgrammatically = true;\n this.isFocused = true;\n this.input.nativeElement.focus();\n this.focusChangedProgrammatically = false;\n }\n /**\n * Blurs the TextBox.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n const isFocusedElement = this.hostElement.nativeElement.querySelector(':focus');\n if (isFocusedElement) {\n isFocusedElement.blur();\n }\n this.isFocused = false;\n this.focusChangedProgrammatically = false;\n }\n /**\n * @hidden\n */\n clearTitle() {\n return this.localizationService.get('clear');\n }\n /**\n * @hidden\n */\n checkClearButton() {\n this.showClearButton =\n !this.disabled &&\n !this.readonly &&\n this.clearButton &&\n !!this.value;\n }\n /**\n * @hidden\n */\n clearValue(ev) {\n if (ev) {\n ev.preventDefault();\n }\n this.clearButtonClicked = true;\n this.input.nativeElement.value = '';\n this.input.nativeElement.focus();\n this.updateValue('');\n this.checkClearButton();\n this.clearButtonClicked = false;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n this.checkClearButton();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n showErrorsInitial() {\n if (!this.control) {\n return false;\n }\n const { invalid, dirty, touched } = this.control;\n return invalid && (dirty || touched);\n }\n /**\n * @hidden\n */\n showSuccessInitial() {\n if (!this.control) {\n return false;\n }\n const { valid, dirty, touched } = this.control;\n return valid && (dirty || touched);\n }\n /**\n * @hidden\n */\n get successIconClasses() {\n return this.successIcon\n ? `${this.successIcon}`\n : `k-input-validation-icon k-icon k-i-check`;\n }\n /**\n * @hidden\n */\n get errorIconClasses() {\n return this.errorIcon\n ? `${this.errorIcon}`\n : `k-input-validation-icon k-icon k-i-warning`;\n }\n /**\n * @hidden\n */\n get clearButtonClasses() {\n return this.clearButtonIcon\n ? this.clearButtonIcon\n : `k-icon k-i-x`;\n }\n /**\n * @hidden\n */\n get hasErrors() {\n return this.showErrorIcon === 'initial'\n ? this.showErrorsInitial()\n : this.showErrorIcon;\n }\n /**\n * @hidden\n */\n get isSuccessful() {\n return this.showSuccessIcon === 'initial'\n ? this.showSuccessInitial()\n : this.showSuccessIcon;\n }\n setSelection(start, end) {\n if (this.isFocused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n selectAll() {\n if (this.value) {\n this.setSelection(0, this.value.length);\n }\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.checkClearButton();\n this.changeDetector.markForCheck();\n });\n }\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(value) {\n if (this._isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value && !this.disabled) {\n this.renderer.addClass(element, FOCUSED$1);\n }\n else {\n this.renderer.removeClass(element, FOCUSED$1);\n }\n this._isFocused = value;\n }\n }\n handleBlur() {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n this.isFocused = false;\n });\n }\n handleClasses(value, input) {\n const elem = this.hostElement.nativeElement;\n const classes = getStylingClasses('input', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n}\nTextBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nTextBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextBoxComponent, selector: \"kendo-textbox\", inputs: { focusableId: \"focusableId\", title: \"title\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", value: \"value\", selectOnFocus: \"selectOnFocus\", showSuccessIcon: \"showSuccessIcon\", showErrorIcon: \"showErrorIcon\", clearButton: \"clearButton\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", clearButtonIcon: \"clearButtonIcon\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\", tabIndex: \"tabIndex\", placeholder: \"placeholder\", maxlength: \"maxlength\" }, outputs: { valueChange: \"valueChange\", inputFocus: \"inputFocus\", inputBlur: \"inputBlur\", onFocus: \"focus\", onBlur: \"blur\" }, host: { properties: { \"class.k-disabled\": \"this.disabledClass\", \"class.k-textbox\": \"this.hostClasses\", \"class.k-input\": \"this.hostClasses\", \"attr.dir\": \"this.direction\" } }, providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textbox' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextBoxComponent),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextBoxComponent) }\n ], queries: [{ propertyName: \"suffixTemplate\", first: true, predicate: TextBoxSuffixTemplateDirective, descendants: true }, { propertyName: \"prefixTemplate\", first: true, predicate: TextBoxPrefixTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"input\", first: true, predicate: [\"input\"], descendants: true, static: true }], exportAs: [\"kendoTextBox\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n `, isInline: true, directives: [{ type: LocalizedTextBoxMessagesDirective, selector: \"[kendoTextBoxLocalizedMessages]\" }, { type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i3.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }, { type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoTextBox',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textbox' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextBoxComponent),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextBoxComponent) }\n ],\n selector: 'kendo-textbox',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: i0.ElementRef }]; }, propDecorators: { focusableId: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], value: [{\n type: Input\n }], selectOnFocus: [{\n type: Input\n }], showSuccessIcon: [{\n type: Input\n }], showErrorIcon: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], clearButtonIcon: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], maxlength: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], inputFocus: [{\n type: Output\n }], inputBlur: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }], suffixTemplate: [{\n type: ContentChild,\n args: [TextBoxSuffixTemplateDirective, { static: false }]\n }], prefixTemplate: [{\n type: ContentChild,\n args: [TextBoxPrefixTemplateDirective, { static: false }]\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-textbox']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }] } });\n\n/**\n * Custom component messages override default component messages.\n */\nclass TextBoxCustomMessagesComponent extends TextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTextBoxCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nTextBoxCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextBoxCustomMessagesComponent, selector: \"kendo-textbox-messages\", providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => TextBoxCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => TextBoxCustomMessagesComponent)\n }\n ],\n selector: 'kendo-textbox-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Specifies a separator in the content of components like the TextArea and the TextBox. ([see examples]({% slug adornments_textbox %}#toc-separator)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass InputSeparatorComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nInputSeparatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: InputSeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nInputSeparatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: InputSeparatorComponent, selector: \"kendo-input-separator, kendo-textbox-separator\", host: { properties: { \"class.k-input-separator\": \"this.hostClass\" } }, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: InputSeparatorComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-input-separator, kendo-textbox-separator',\n template: ``\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-input-separator']\n }] } });\n\n/**\n * @hidden\n */\nconst SHARED_DIRECTIVES = [\n InputSeparatorComponent,\n TextAreaDirective\n];\n/**\n * @hidden\n */\nclass SharedModule {\n}\nSharedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, declarations: [InputSeparatorComponent,\n TextAreaDirective], exports: [InputSeparatorComponent,\n TextAreaDirective] });\nSharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TextBox directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the TextBox module\n * import { TextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, TextBoxModule], // import TextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass TextBoxModule {\n}\nTextBoxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTextBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxModule, declarations: [TextBoxDirective,\n TextBoxComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective], imports: [CommonModule, EventsModule, SharedModule], exports: [TextBoxDirective,\n TextBoxComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n EventsModule,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective, InputSeparatorComponent, TextAreaDirective] });\nTextBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxModule, imports: [[CommonModule, EventsModule, SharedModule], EventsModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextBoxModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n TextBoxDirective,\n TextBoxComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective\n ],\n exports: [\n TextBoxDirective,\n TextBoxComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n EventsModule,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective,\n SHARED_DIRECTIVES\n ],\n imports: [CommonModule, EventsModule, SharedModule]\n }]\n }] });\n\n/**\n * @hidden\n */\nclass TextFieldsBase {\n constructor(localizationService, ngZone, changeDetector, renderer, injector, hostElement) {\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n this.injector = injector;\n this.hostElement = hostElement;\n /**\n * Sets the `title` attribute of the internal textarea input element of the component.\n */\n this.title = '';\n /**\n * Sets the disabled state of the TextArea component.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the TextArea component.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Provides a value for the TextArea component.\n */\n this.value = null;\n /**\n * Determines whether the whole value will be selected when the TextArea is clicked. Defaults to `false`.\n *\n * @default false\n */\n this.selectOnFocus = false;\n /**\n * Fires each time the user focuses the internal textarea element of the component.\n * This event is useful when you need to distinguish between focusing the textarea element and focusing one of its adornments.\n */\n this.inputFocus = new EventEmitter();\n /**\n * Fires each time the internal textarea element gets blurred.\n * This event is useful when adornments are used, in order to distinguish between blurring the textarea element and blurring the whole TextArea component.\n */\n this.inputBlur = new EventEmitter();\n this.subscriptions = new Subscription();\n this._isFocused = false;\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.handleInputBlur = () => {\n this.changeDetector.markForCheck();\n if (hasObservers(this.inputBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.inputBlur.emit();\n });\n }\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n }\n get disabledClass() {\n return this.disabled;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n}\nTextFieldsBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextFieldsBase, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nTextFieldsBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextFieldsBase, selector: \"kendo-textfield-base\", inputs: { title: \"title\", disabled: \"disabled\", readonly: \"readonly\", value: \"value\", selectOnFocus: \"selectOnFocus\", placeholder: \"placeholder\" }, outputs: { inputFocus: \"inputFocus\", inputBlur: \"inputBlur\" }, host: { properties: { \"class.k-disabled\": \"this.disabledClass\", \"attr.dir\": \"this.direction\" } }, viewQueries: [{ propertyName: \"input\", first: true, predicate: [\"input\"], descendants: true, static: true }], ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextFieldsBase, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-textfield-base',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: i0.ElementRef }]; }, propDecorators: { title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], value: [{\n type: Input\n }], selectOnFocus: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], inputFocus: [{\n type: Output\n }], inputBlur: [{\n type: Output\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }] } });\n\nconst resizeClasses = {\n 'vertical': 'k-resize-vertical',\n 'horizontal': 'k-resize-horizontal',\n 'both': 'k-resize-both',\n 'none': 'k-resize-none',\n 'auto': 'k-resize-none'\n};\nconst FOCUSED = 'k-focus';\nconst DEFAULT_SIZE$3 = 'medium';\nconst DEFAULT_ROUNDED$2 = 'medium';\nconst DEFAULT_FILL_MODE$1 = 'solid';\n/**\n * Represents the [Kendo UI TextArea component for Angular]({% slug overview_textarea %}).\n */\nclass TextAreaComponent extends TextFieldsBase {\n constructor(localizationService, ngZone, changeDetector, renderer, injector, hostElement) {\n super(localizationService, ngZone, changeDetector, renderer, injector, hostElement);\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n this.injector = injector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n this.hostClasses = true;\n /**\n * Specifies the flow direction of the TextArea sections. This property is useful when adornments are used, in order to specify\n * their position in relation to the textarea element.\n *\n * The possible values are:\n * * `vertical`(Default) —TextArea sections are placed from top to bottom.\n * * `horizontal`—TextArea sections are placed from left to right in `ltr`, and from right to left in `rtl` mode.\n */\n this.flow = 'vertical';\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Configures the resize behavior of the TextArea.\n *\n * The possible values are:\n * * `vertical`(Default)—The TextArea component can be resized only vertically.\n * * `horizontal`—The TextArea component can be resized only horizontally.\n * * `both`—The TextArea component can be resized in both (horizontal and vertical) directions.\n * * `auto`—Specifies whether the TextArea component will adjust its height automatically, based on the content.\n * * `none`—The TextArea cannot be resized.\n *\n */\n this.resizable = 'vertical';\n /**\n * Fires each time the user focuses the TextArea component.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log('Component is focused');\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the TextArea component gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log('Component is blurred');\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the value is changed or the component is blurred\n * ([see example]({% slug overview_textarea %}#toc-events)).\n * When the component value is changed programmatically or via its form control binding, the valueChange event is not emitted.\n */\n this.valueChange = new EventEmitter();\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n /**\n * @hidden\n */\n this.handleInput = (ev) => {\n let incomingValue = ev.target.value;\n this.updateValue(incomingValue);\n this.resize();\n };\n /**\n * @hidden\n */\n this.handleInputFocus = () => {\n if (!this.disabled) {\n if (this.selectOnFocus && this.value) {\n this.ngZone.run(() => {\n setTimeout(() => { this.selectAll(); });\n });\n }\n if (hasObservers(this.onFocus)) {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n if (hasObservers(this.inputFocus)) {\n if (!this.focusChangedProgrammatically) {\n this.ngZone.run(() => {\n this.inputFocus.emit();\n });\n }\n }\n this.ngZone.run(() => {\n this.isFocused = true;\n });\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get flowCol() {\n return this.flow === 'vertical';\n }\n get flowRow() {\n return this.flow === 'horizontal';\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * The size property specifies the padding of the internal textarea element\n * ([see example]({% slug appearance_textarea %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$3;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the TextArea\n * ([see example]({% slug appearance_textarea %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$2;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the TextArea\n * ([see example]({% slug appearance_textarea %}#toc-fillMode)).\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE$1;\n this.handleClasses(newFillMode, 'fillMode');\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n ngAfterViewInit() {\n const hostElement = this.hostElement.nativeElement;\n let cursorInsideWrapper = false;\n let tabbing = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n this.isFocused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n const closestTextbox = closest(args.relatedTarget, (element) => element === this.hostElement.nativeElement);\n if (!closestTextbox) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n this.handleFlow();\n });\n const stylingInputs = ['size', 'rounded', 'fillMode'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n ngOnInit() {\n this.control = this.injector.get(NgControl, null);\n if (isDocumentAvailable() && this.resizable === 'auto') {\n this.resizeSubscription = fromEvent(window, 'resize')\n .pipe((debounceTime(50)))\n .subscribe(() => this.resize());\n }\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.subscriptions = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n ngOnChanges(changes) {\n const hostElement = this.hostElement.nativeElement;\n const element = this.input.nativeElement;\n if (changes.flow) {\n this.handleFlow();\n }\n if (changes.resizable) {\n if (this.resizable === 'auto') {\n this.renderer.removeClass(element, '\\!k-overflow-y-auto');\n this.initialHeight = element.offsetHeight;\n }\n else {\n this.renderer.addClass(element, '\\!k-overflow-y-auto');\n element.style.height = `${this.initialHeight}px`;\n }\n }\n if (changes.cols) {\n if (isPresent(changes.cols.currentValue)) {\n this.renderer.setStyle(hostElement, 'width', 'auto');\n }\n else {\n this.renderer.removeStyle(hostElement, 'width');\n }\n }\n if (changes.value) {\n this.resize();\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n this.resize();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get resizableClass() {\n return resizeClasses[this.resizable];\n }\n /**\n * Focuses the TextArea component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.focusChangedProgrammatically = true;\n this.isFocused = true;\n this.input.nativeElement.focus();\n this.focusChangedProgrammatically = false;\n }\n /**\n * Blurs the TextArea component.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n const isFocusedElement = this.hostElement.nativeElement.querySelector(':focus');\n if (isFocusedElement) {\n isFocusedElement.blur();\n }\n this.isFocused = false;\n this.focusChangedProgrammatically = false;\n }\n resize() {\n if (this.resizable !== 'auto') {\n return;\n }\n // The logic of the resize method, does not depend on Angular and thus moving it outisde of it\n // We need to ensure that the resizing logic runs after the value is updated thus the setTimout\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const hostElement = this.hostElement.nativeElement;\n const element = this.input.nativeElement;\n this.renderer.setStyle(element, 'height', `${this.initialHeight}px`);\n const scrollHeight = element.scrollHeight;\n this.renderer.setStyle(hostElement, 'min-height', `${scrollHeight}px`);\n if (scrollHeight > this.initialHeight) {\n this.renderer.setStyle(element, 'height', `${scrollHeight}px`);\n }\n }, 0);\n });\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(value) {\n if (this._isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value && !this.disabled) {\n this.renderer.addClass(element, FOCUSED);\n }\n else {\n this.renderer.removeClass(element, FOCUSED);\n }\n this._isFocused = value;\n }\n }\n handleBlur() {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n this.isFocused = false;\n });\n }\n setSelection(start, end) {\n if (this.isFocused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n selectAll() {\n if (this.value) {\n this.setSelection(0, this.value.length);\n }\n }\n handleClasses(value, input) {\n const elem = this.hostElement.nativeElement;\n const classes = getStylingClasses('input', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n handleFlow() {\n const isVertical = this.flow === 'vertical';\n const hostElement = this.hostElement.nativeElement;\n const element = this.input.nativeElement;\n const suffix = hostElement.children[1];\n this.renderer[isVertical ? 'addClass' : 'removeClass'](element, '\\!k-flex-none');\n if (suffix) {\n this.renderer[isVertical ? 'removeClass' : 'addClass'](suffix, '\\!k-align-items-start');\n }\n }\n}\nTextAreaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaComponent, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nTextAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextAreaComponent, selector: \"kendo-textarea\", inputs: { focusableId: \"focusableId\", flow: \"flow\", rows: \"rows\", cols: \"cols\", maxlength: \"maxlength\", tabindex: \"tabindex\", tabIndex: \"tabIndex\", resizable: \"resizable\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, host: { properties: { \"class.k-textarea\": \"this.hostClasses\", \"class.k-input\": \"this.hostClasses\", \"class.!k-flex-col\": \"this.flowCol\", \"class.!k-flex-row\": \"this.flowRow\" } }, providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textarea' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaComponent),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextAreaComponent) }\n ], exportAs: [\"kendoTextArea\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\n \n \n \n `, isInline: true, directives: [{ type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i3.EventsOutsideAngularDirective, selector: \"[kendoEventsOutsideAngular]\", inputs: [\"kendoEventsOutsideAngular\", \"scope\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoTextArea',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textarea' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaComponent),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextAreaComponent) }\n ],\n selector: 'kendo-textarea',\n template: `\n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: i0.ElementRef }]; }, propDecorators: { focusableId: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-textarea']\n }, {\n type: HostBinding,\n args: ['class.k-input']\n }], flowCol: [{\n type: HostBinding,\n args: ['class.\\!k-flex-col']\n }], flowRow: [{\n type: HostBinding,\n args: ['class.\\!k-flex-row']\n }], flow: [{\n type: Input\n }], rows: [{\n type: Input\n }], cols: [{\n type: Input\n }], maxlength: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], resizable: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }] } });\n\n/**\n * Specifies the adornments in the suffix container ([see example]({% slug textarea_adornments %})).\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass TextAreaSuffixComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nTextAreaSuffixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaSuffixComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nTextAreaSuffixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TextAreaSuffixComponent, selector: \"kendo-textarea-suffix\", host: { properties: { \"class.k-input-suffix\": \"this.hostClass\" } }, exportAs: [\"kendoTextAreaSuffix\"], ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaSuffixComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoTextAreaSuffix',\n selector: 'kendo-textarea-suffix',\n template: ``\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-input-suffix']\n }] } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TextArea component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the TextArea module\n * import { TextAreaModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, TextAreaModule], // import TextArea module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass TextAreaModule {\n}\nTextAreaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTextAreaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaModule, declarations: [TextAreaComponent,\n TextAreaSuffixComponent], imports: [CommonModule, EventsModule, SharedModule], exports: [TextAreaComponent,\n EventsModule,\n TextAreaSuffixComponent, InputSeparatorComponent, TextAreaDirective] });\nTextAreaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaModule, imports: [[CommonModule, EventsModule, SharedModule], EventsModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TextAreaModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n TextAreaComponent,\n TextAreaSuffixComponent\n ],\n exports: [\n TextAreaComponent,\n EventsModule,\n TextAreaSuffixComponent,\n SHARED_DIRECTIVES\n ],\n imports: [CommonModule, EventsModule, SharedModule]\n }]\n }] });\n\n// eslint-disable max-line-length\n/**\n * @hidden\n */\nconst PALETTEPRESETS = {\n basic: {\n colors: '000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7',\n columns: 10\n },\n office: {\n colors: 'ffffff, 000000, e6e6e6, 435569, 4371c4, ed7e32, a5a4a5, febf04, 5a9bd5, 71ae48, f2f2f3, 7f7f7f, d1cece, d5dde3, dae1f4, fce5d4, deeded, fff2cc, deeaf6, e1efd9, d7d8d8, 585959, aeabab, adbaca, b4c5e7, f6caac, dbdbdb, ffe498, bcd6ee, c5e0b2, bfbfc0, 3f3f3f, 767070, 8595b1, 8fabdb, f5b183, c9c8c9, fed965, 9bc4e5, a8d08d, a5a5a6, 262625, 393939, 334050, 2e5496, c45a11, 7b7b7a, bf9000, 2f75b5, 548235, 7f7f7f, 0b0c0c, 161616, 222a34, 203764, 843d0b, 525252, 7f6000, 1d4d79, 375623',\n columns: 10\n },\n apex: {\n colors: 'ffffff, 000000, c9c2d1, 69676d, ceb966, 9cb084, 6bb1c9, 6585cf, 7e6bc9, a379bb, f2f2f2, 7f7f7f, f4f2f5, e0e0e2, f5f1e0, ebefe6, e1eff4, e0e6f5, e5e1f4, ece4f1, d8d8d8, 595959, e9e6ec, c2c1c5, ebe3c1, d7dfcd, c3dfe9, c1ceeb, cbc3e9, dac9e3, bfbfbf, 3f3f3f, dedae3, a4a3a8, e1d5a3, c3cfb5, a6d0de, a2b5e2, b1a6de, c7aed6, a5a5a5, 262626, 9688a5, 4e4d51, ae9638, 758c5a, 3d8da9, 365bb0, 533da9, 7d4d99, 7f7f7f, 0c0c0c, 635672, 343336, 746425, 4e5d3c, 295e70, 243c75, 372970, 533366',\n columns: 10\n },\n austin: {\n colors: 'ffffff, 000000, caf278, 3e3d2d, 94c600, 71685a, ff6700, 909465, 956b43, fea022, f2f2f2, 7f7f7f, f4fce4, dddcd0, efffc0, e3e1dc, ffe0cb, e8e9df, ece1d6, feecd2, d8d8d8, 595959, e9f9c9, bbb9a1, dfff82, c8c3ba, ffc299, d2d4c0, dac3ad, fed9a6, bfbfbf, 3f3f3f, dff7ae, ada598, cfff43, ada598, ffa365, bcbfa1, c8a585, fec67a, a5a5a5, 262626, a9ea25, 2e2d21, 6f9400, 544e43, bf4d00, 6c6f4b, 6f5032, d77b00, 7f7f7f, 0c0c0c, 74a50f, 1f1e16, 4a6300, 38342d, 7f3300, 484a32, 4a3521, 8f5200',\n columns: 10\n },\n clarity: {\n colors: 'ffffff, 292934, f3f2dc, d2533c, 93a299, ad8f67, 726056, 4c5a6a, 808da0, 79463d, f2f2f2, e7e7ec, e7e5b9, f6dcd8, e9ecea, eee8e0, e4dedb, d8dde3, e5e8ec, e9d6d3, d8d8d8, c4c4d1, d5d185, edbab1, d3d9d6, ded2c2, c9beb8, b2bcc8, ccd1d9, d3aea7, bfbfbf, 8a8aa3, aca73b, e4978a, bec7c1, cdbba3, af9e94, 8c9bac, b2bac6, bd857c, a5a5a5, 56566e, 56531d, a43925, 6b7c72, 866b48, 554840, 39434f, 5c697b, 5a342d, 7f7f7f, 3b3b4b, 22210b, 6d2619, 47534c, 594730, 39302b, 262d35, 3d4652, 3c231e',\n columns: 10\n },\n slipstream: {\n colors: 'ffffff, 000000, b4dcfa, 212745, 4e67c8, 5eccf3, a7ea52, 5dceaf, ff8021, f14124, f2f2f2, 7f7f7f, 8bc9f7, c7cce4, dbe0f4, def4fc, edfadc, def5ef, ffe5d2, fcd9d3, d8d8d8, 595959, 4facf3, 909aca, b8c2e9, beeafa, dbf6b9, beebdf, ffcca6, f9b3a7, bfbfbf, 3f3f3f, 0d78c9, 5967af, 94a3de, 9ee0f7, caf297, 9de1cf, ffb279, f68d7b, a5a5a5, 262626, 063c64, 181d33, 31479f, 11b2eb, 81d319, 34ac8b, d85c00, c3260c, 7f7f7f, 0c0c0c, 021828, 101322, 202f6a, 0b769c, 568c11, 22725c, 903d00, 821908',\n columns: 10\n },\n metro: {\n colors: 'ffffff, 000000, d6ecff, 4e5b6f, 7fd13b, ea157a, feb80a, 00addc, 738ac8, 1ab39f, f2f2f2, 7f7f7f, a7d6ff, d9dde4, e5f5d7, fad0e4, fef0cd, c5f2ff, e2e7f4, c9f7f1, d8d8d8, 595959, 60b5ff, b3bcca, cbecb0, f6a1c9, fee29c, 8be6ff, c7d0e9, 94efe3, bfbfbf, 3f3f3f, 007dea, 8d9baf, b2e389, f272af, fed46b, 51d9ff, aab8de, 5fe7d5, a5a5a5, 262626, 003e75, 3a4453, 5ea226, af0f5b, c58c00, 0081a5, 425ea9, 138677, 7f7f7f, 0c0c0c, 00192e, 272d37, 3f6c19, 750a3d, 835d00, 00566e, 2c3f71, 0c594f',\n columns: 10\n },\n flow: {\n colors: 'ffffff, 000000, dbf5f9, 04617b, 0f6fc6, 009dd9, 0bd0d9, 10cf9b, 7cca62, a5c249, f2f2f2, 7f7f7f, b2e9f2, b4ecfc, c7e2fa, c4eeff, c9fafc, c9faed, e4f4df, edf2da, d8d8d8, 595959, 76d9e8, 6adafa, 90c6f6, 89deff, 93f5f9, 94f6db, cae9c0, dbe6b6, bfbfbf, 3f3f3f, 21b2c8, 20c8f7, 59a9f2, 4fceff, 5df0f6, 5ff2ca, b0dfa0, c9da91, a5a5a5, 262626, 105964, 02485c, 0b5394, 0075a2, 089ca2, 0b9b74, 54a838, 7e9532, 7f7f7f, 0c0c0c, 062328, 01303d, 073763, 004e6c, 05686c, 07674d, 387025, 546321',\n columns: 10\n },\n hardcover: {\n colors: 'ffffff, 000000, ece9c6, 895d1d, 873624, d6862d, d0be40, 877f6c, 972109, aeb795, f2f2f2, 7f7f7f, e1dca5, f2e0c6, f0d0c9, f6e6d5, f5f2d8, e7e5e1, fbc7bc, eef0e9, d8d8d8, 595959, d0c974, e6c28d, e2a293, eeceaa, ece5b2, cfccc3, f78f7a, dee2d4, bfbfbf, 3f3f3f, a29a36, daa454, d4735e, e6b681, e2d88c, b7b2a5, f35838, ced3bf, a5a5a5, 262626, 514d1b, 664515, 65281a, a2641f, a39428, 655f50, 711806, 879464, 7f7f7f, 0c0c0c, 201e0a, 442e0e, 431b11, 6c4315, 6d621a, 433f35, 4b1004, 5a6243',\n columns: 10\n },\n trek: {\n colors: 'ffffff, 000000, fbeec9, 4e3b30, f0a22e, a5644e, b58b80, c3986d, a19574, c17529, f2f2f2, 7f7f7f, f7e09e, e1d6cf, fcecd5, eddfda, f0e7e5, f3eae1, ece9e3, f5e3d1, d8d8d8, 595959, f3cc5f, c4ad9f, f9d9ab, dcc0b6, e1d0cc, e7d5c4, d9d4c7, ebc7a3, bfbfbf, 3f3f3f, d29f0f, a78470, f6c781, cba092, d2b9b2, dbc1a7, c6bfab, e1ac76, a5a5a5, 262626, 694f07, 3a2c24, c87d0e, 7b4b3a, 926255, a17242, 7b7153, 90571e, 7f7f7f, 0c0c0c, 2a1f03, 271d18, 855309, 523226, 614138, 6b4c2c, 524b37, 603a14',\n columns: 10\n },\n verve: {\n colors: 'ffffff, 000000, d2d2d2, 666666, ff388c, e40059, 9c007f, 68007f, 005bd3, 00349e, f2f2f2, 7f7f7f, bdbdbd, e0e0e0, ffd7e8, ffc6dc, ffb8f1, f1b2ff, c3dcff, b8cfff, d8d8d8, 595959, 9d9d9d, c1c1c1, ffafd1, ff8eba, ff71e4, e365ff, 87baff, 72a0ff, bfbfbf, 3f3f3f, 696969, a3a3a3, ff87ba, ff5597, ff2ad7, d519ff, 4b98ff, 2b71ff, a5a5a5, 262626, 343434, 4c4c4c, e90062, ab0042, 75005f, 4e005f, 00449e, 002676, 7f7f7f, 0c0c0c, 151515, 333333, 9b0041, 72002c, 4e003f, 34003f, 002d69, 00194f',\n columns: 10\n },\n monochrome: {\n colors: '000000, 1a1a1a, 333333, 4d4d4d, 666666, 808080, 999999, b3b3b3, cccccc, e6e6e6, f2f2f2, ffffff',\n columns: 12\n },\n accessible: {\n colors: 'black, grey, darkred, red, darkorange, gold, green, blue, darkblue, purple, white, darkgrey, saddlebrown, pink, orange, yellow, lightgreen, lightskyblue, lightblue, mediumpurple',\n columns: 10\n }\n};\n\n;\n\n/**\n * Arguments for the `cancel` event of the ColorPicker and FlatColorPicker components.\n */\nclass ColorPickerCancelEvent extends PreventableEvent {\n constructor(originalEvent) {\n super();\n this.originalEvent = originalEvent;\n }\n}\n\n/**\n * Arguments for the `close` event of the ColorPicker component.\n */\nclass ColorPickerCloseEvent extends PreventableEvent {\n}\n\n/**\n * Arguments for the `open` event of the ColorPicker component.\n */\nclass ColorPickerOpenEvent extends PreventableEvent {\n}\n\n/**\n * Fires each time the left side of the ColorPicker wrapper is clicked.\n * The event is triggered regardless of whether a ColorPicker icon is set or not.\n *\n * Provides information about the current active color and gives the option to prevent the opening of the popup.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public handleActiveColorClick(event: ActiveColorClickEvent): void {\n * event.preventOpen();\n *\n * console.log('Open prevented:', event.isOpenPrevented());\n * console.log('Current color:', event.color);\n * }\n * }\n * ```\n */\nclass ActiveColorClickEvent {\n /**\n * @hidden\n * @param color Represents the current value of the ColorPicker.\n */\n constructor(color) {\n this.color = color;\n this.openPrevented = false;\n }\n /**\n * Prevents the opening of the popup.\n */\n preventOpen() {\n this.openPrevented = true;\n }\n /**\n * Returns `true` if the popup opening is prevented by any of its subscribers.\n *\n * @returns - Returns `true` if the open action was prevented. Otherwise, returns `false`.\n */\n isOpenPrevented() {\n return this.openPrevented;\n }\n}\n\n/**\n * @hidden\n *\n * Returns the hex or rgba string representation of the color.\n */\nconst parseColor = (value, format, opacityEnabled = false, safe = true) => {\n const allowedFormats = ['hex', 'rgba', 'name'];\n if (allowedFormats.indexOf(format) === -1) {\n throw new Error(`Unsupported color output format '${format}'. The available options are 'hex', 'rgba' or 'name'.`);\n }\n if (!isPresent(value)) {\n return;\n }\n if (format === 'name') {\n return nameFormat(value, safe);\n }\n const parsedColor = parseColor$1(value.trim(), safe);\n if (!isPresent(parsedColor)) {\n return;\n }\n const parsedColorResult = format === 'hex' ? getHexValue(parsedColor, opacityEnabled) : parsedColor.toCssRgba();\n return parsedColorResult;\n};\n/**\n * @hidden\n *\n * Returns an HSV object representation of the color string.\n */\nconst getHSV = (value, safe = true) => {\n const parsed = parseColor$1(value, safe);\n if (!isPresent(parsed)) {\n return {};\n }\n return parsed.toHSV();\n};\n/**\n * @hidden\n *\n * Returns an RGBA object representation of the color string.\n */\nconst getRGBA = (value, safe = true) => {\n const parsed = parseColor$1(value, safe);\n if (!isPresent(parsed)) {\n return {};\n }\n return parsed.toBytes();\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color.\n */\nconst getColorFromHSV = (hsva, format = 'rgba', opacityEnabled = false) => {\n const hue = fitIntoBounds(hsva.h, 0, 359.9);\n const saturation = fitIntoBounds(hsva.s, 0, 1);\n const value = fitIntoBounds(hsva.v, 0, 1);\n const alpha = fitIntoBounds(hsva.a, 0, 1);\n const color = Color.fromHSV(hue, saturation, value, alpha);\n return format === 'hex' ? getHexValue(color, opacityEnabled) : color.toCssRgba();\n};\n/**\n * @hidden\n *\n * Returns the HEX value.\n */\nconst getHexValue = (color, opacity) => {\n return opacity && color.a < 1 ? color.toCss({ alpha: true }) : color.toCss();\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color based on the `hue`, assuming the `value`, `saturation` and `alpha` have value of `1`.\n */\nconst getColorFromHue = (hue) => {\n return getColorFromHSV({ h: hue, s: 1, v: 1, a: 1 });\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color.\n */\nconst getColorFromRGBA = (rgba) => {\n const red = fitIntoBounds(rgba.r, 0, 255);\n const green = fitIntoBounds(rgba.g, 0, 255);\n const blue = fitIntoBounds(rgba.b, 0, 255);\n const alpha = fitIntoBounds(rgba.a, 0, 1);\n return Color.fromBytes(red, green, blue, alpha).toCssRgba();\n};\n/**\n *\n * @hidden\n */\nfunction nameFormat(value, safe) {\n value = value.toLowerCase().trim();\n if (isPresent(namedColors[value])) {\n return value;\n }\n if (parseColor$1(value, safe)) {\n value = parseColor$1(value, safe).toHex();\n }\n const key = Object.keys(namedColors).find(key => namedColors[key] === value);\n if (!key && !safe) {\n throw new Error(`The provided color ${value} is not supported for 'format=\"name\"' property.To display ${value} color, the component 'format' property should be set to 'hex' or 'rgba' `);\n }\n return key;\n}\n/**\n * @hidden\n *\n * Returns the RGB object representation of the color based on the background color.\n */\nconst getRGBFromRGBA = (foregroundColor, backgroundColor) => {\n const r1 = fitIntoBounds(foregroundColor.r, 0, 255);\n const g1 = fitIntoBounds(foregroundColor.g, 0, 255);\n const b1 = fitIntoBounds(foregroundColor.b, 0, 255);\n const a1 = fitIntoBounds(foregroundColor.a, 0, 1);\n const r2 = fitIntoBounds(backgroundColor.r, 0, 255);\n const g2 = fitIntoBounds(backgroundColor.g, 0, 255);\n const b2 = fitIntoBounds(backgroundColor.b, 0, 255);\n return {\n r: Math.round(((1 - a1) * r2) + (a1 * r1)),\n g: Math.round(((1 - a1) * g2) + (a1 * g1)),\n b: Math.round(((1 - a1) * b2) + (a1 * b1))\n };\n};\n/**\n * @hidden\n *\n * Returns the relative luminance.\n */\nconst getLuminance = (rgb) => {\n let a = [rgb.r, rgb.g, rgb.b].map(function (v) {\n v /= 255;\n return v <= 0.03928\n ? v / 12.92\n : Math.pow((v + 0.055) / 1.055, 2.4);\n });\n return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;\n};\n/**\n * @hidden\n *\n * Returns the color contrast.\n */\nconst getContrast = (luminance1, luminance2) => {\n const brightest = Math.max(luminance1, luminance2);\n const darkest = Math.min(luminance1, luminance2);\n return (brightest + 0.05)\n / (darkest + 0.05);\n};\n/**\n * @hidden\n *\n * Returns the color contrast from two RGBA colors.\n */\nconst getContrastFromTwoRGBAs = (a, b) => {\n return getContrast(getLuminance(getRGBFromRGBA(a, b)), getLuminance(getRGBFromRGBA(b, { r: 0, g: 0, b: 0, a: 1 })));\n};\n\n/**\n * @hidden\n */\nconst bezierCommand = (controlPointCalc) => (point, i, a) => {\n // start control point\n const [cpsX, cpsY] = controlPointCalc(a[i - 1], a[i - 2], point);\n // end control point\n const [cpeX, cpeY] = controlPointCalc(point, a[i - 1], a[i + 1], true);\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point[0]},${point[1]}`;\n};\n/**\n * @hidden\n */\nconst controlPoint = (lineCalc) => (current, previous, next, reverse) => {\n // when 'current' is the first or last point of the array\n // 'previous' and 'next' are undefined\n // replace with 'current'\n const p = previous || current;\n const n = next || current;\n const smooth = 0.1;\n // properties of the line between previous and next\n const l = lineCalc(p, n);\n // If is end-control-point, add PI to the angle to go backward\n const angle = l.angle + (reverse ? Math.PI : 0);\n const length = l.length * smooth;\n // The control point position is relative to the current point\n const x = current[0] + Math.cos(angle) * length;\n const y = current[1] + Math.sin(angle) * length;\n return [x, y];\n};\n/**\n * @hidden\n */\nconst line = (pointA, pointB) => {\n const lengthX = pointB[0] - pointA[0];\n const lengthY = pointB[1] - pointA[1];\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n };\n};\n/**\n * @hidden\n */\nconst d = (points, command) => {\n if (points.length === 0) {\n return '';\n }\n // build the d attributes by looping over the points\n const d = points.reduce((acc, point, i, a) => i === 0 ?\n // if first point\n `M ${point[0]},${point[1]}` :\n // else\n `${acc} ${command(point, i, a)}`, '');\n return d;\n};\n/**\n * @hidden\n *\n * Render the svg element.\n *\n * @param points (array) Represents the points coordinates as an array of tuples.\n * @param command (function) The command that is used (bezierCommand, lineCommand).\n * @param point (array) [x,y] Represents the current point coordinates.\n * @param i (integer) Represents the index of 'point' in the array 'a'.\n * @param a (array) Represents the complete array of points coordinates.\n * @output (string) a svg path command.\n * @output (string) a Svg element\n */\nconst svgPath = (points, command) => {\n if (points.length === 0) {\n return '';\n }\n // build the d attributes by looping over the points\n const d = points.reduce((acc, point, i, a) => i === 0 ?\n // if first point\n `M ${point[0]},${point[1]}` :\n // else\n `${acc} ${command(point, i, a)}`, '');\n return d;\n};\n\n/**\n * @hidden\n */\nclass ColorPickerLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl) {\n super(prefix, messageService, _rtl);\n }\n}\nColorPickerLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nColorPickerLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerLocalizationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerLocalizationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [L10N_PREFIX]\n }] }, { type: i1.MessageService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; } });\n\n/**\n * @hidden\n */\nconst DEFAULT_OUTPUT_FORMAT = 'rgba';\n/**\n * @hidden\n */\nconst DEFAULT_GRADIENT_BACKGROUND_COLOR = 'rgba(255, 0, 0, 1)';\n/**\n * @hidden\n */\nconst DRAGHANDLE_MOVE_SPEED = 5;\n/**\n * @hidden\n */\nconst AAA_RATIO = 7.0;\n/**\n * @hidden\n */\nconst AA_RATIO = 4.5;\n/**\n * @hidden\n */\nconst DEFAULT_PRESET$1 = 'office';\n/**\n * @hidden\n */\nconst DEFAULT_ACCESSIBLE_PRESET$1 = 'accessible';\n/**\n * @hidden\n */\nconst STEP_COUNT = 16;\n\n/**\n * @hidden\n */\nclass FlatColorPickerLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl, colorPickerLocalization) {\n super(prefix, messageService, _rtl);\n this.colorPickerLocalization = colorPickerLocalization;\n }\n get(shortKey) {\n if (this.colorPickerLocalization) {\n return this.colorPickerLocalization.get(shortKey);\n }\n return super.get(shortKey);\n }\n}\nFlatColorPickerLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }, { token: ColorPickerLocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nFlatColorPickerLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerLocalizationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerLocalizationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [L10N_PREFIX]\n }] }, { type: i1.MessageService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }, { type: ColorPickerLocalizationService, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ColorPickerLocalizationService]\n }] }]; } });\n\n/**\n * @hidden\n */\nclass FlatColorPickerService {\n getPaletteSettings(settings, format) {\n const defaultPreset = (format !== 'name') ? DEFAULT_PRESET$1 : DEFAULT_ACCESSIBLE_PRESET$1;\n const settingsPalette = settings.palette;\n const presetColumns = typeof settingsPalette === 'string' && PALETTEPRESETS[settingsPalette] ?\n PALETTEPRESETS[settingsPalette].columns :\n undefined;\n return {\n palette: settingsPalette || defaultPreset,\n tileSize: settings.tileSize || 24,\n columns: settings.columns || presetColumns || 10\n };\n }\n paletteTileLayout(tileSize) {\n if (typeof tileSize === 'number') {\n return { width: tileSize, height: tileSize };\n }\n return {\n width: tileSize.width ? tileSize.width : tileSize.height,\n height: tileSize.height ? tileSize.height : tileSize.width\n };\n }\n}\nFlatColorPickerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nFlatColorPickerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass FlatColorPickerHeaderComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.hostClasses = true;\n this.viewChange = new EventEmitter();\n this.valuePaneClick = new EventEmitter();\n this.clearButtonClick = new EventEmitter();\n }\n onViewButtonClick(view) {\n this.activeView = view;\n this.viewChange.emit(view);\n }\n get viewButtons() {\n return this.views && this.views.indexOf('gradient') >= 0 && this.views.indexOf('palette') >= 0;\n }\n getViewButtonIcon(view) {\n return view === 'gradient' ? 'k-i-color-canvas' : 'k-i-palette';\n }\n getText(text) {\n return this.localizationService.get(text);\n }\n}\nFlatColorPickerHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerHeaderComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nFlatColorPickerHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FlatColorPickerHeaderComponent, selector: \"[kendoFlatColorPickerHeader]\", inputs: { clearButton: \"clearButton\", activeView: \"activeView\", views: \"views\", preview: \"preview\", value: \"value\", selection: \"selection\" }, outputs: { viewChange: \"viewChange\", valuePaneClick: \"valuePaneClick\", clearButtonClick: \"clearButtonClick\" }, host: { properties: { \"class.k-coloreditor-header\": \"this.hostClasses\", \"class.k-hstack\": \"this.hostClasses\" } }, viewQueries: [{ propertyName: \"clearButtonElement\", first: true, predicate: [\"clearButton\"], descendants: true, read: ElementRef }, { propertyName: \"viewButtonsCollection\", predicate: [\"viewButtons\"], descendants: true, read: ElementRef }], ngImport: i0, template: `\n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n `, isInline: true, directives: [{ type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerHeaderComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoFlatColorPickerHeader]',\n template: `\n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-coloreditor-header']\n }, {\n type: HostBinding,\n args: ['class.k-hstack']\n }], clearButton: [{\n type: Input\n }], activeView: [{\n type: Input\n }], views: [{\n type: Input\n }], preview: [{\n type: Input\n }], value: [{\n type: Input\n }], selection: [{\n type: Input\n }], viewChange: [{\n type: Output\n }], valuePaneClick: [{\n type: Output\n }], clearButtonClick: [{\n type: Output\n }], viewButtonsCollection: [{\n type: ViewChildren,\n args: ['viewButtons', { read: ElementRef }]\n }], clearButtonElement: [{\n type: ViewChild,\n args: ['clearButton', { read: ElementRef, static: false }]\n }] } });\n\n/**\n * @hidden\n */\nclass ColorGradientLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl, flatColorPickerLocalization) {\n super(prefix, messageService, _rtl);\n this.flatColorPickerLocalization = flatColorPickerLocalization;\n }\n get(shortKey) {\n if (this.flatColorPickerLocalization) {\n return this.flatColorPickerLocalization.get(shortKey);\n }\n return super.get(shortKey);\n }\n}\nColorGradientLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorGradientLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }, { token: FlatColorPickerLocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nColorGradientLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorGradientLocalizationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorGradientLocalizationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [L10N_PREFIX]\n }] }, { type: i1.MessageService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }, { type: FlatColorPickerLocalizationService, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [FlatColorPickerLocalizationService]\n }] }]; } });\n\n/**\n * @hidden\n */\nclass ColorContrastSvgComponent {\n constructor() {\n this.hostClass = true;\n }\n ngAfterViewInit() {\n this.metrics = this.wrapper.getBoundingClientRect();\n this.oldA = this.hsva.value.a;\n this.oldH = this.hsva.value.h;\n this.hsva.subscribe((value) => {\n if (value.h !== this.oldH || value.a !== this.oldA) {\n this.oldH = value.h;\n this.oldA = value.a;\n this.setPaths();\n }\n });\n }\n ngOnChanges(changes) {\n if (isPresent(changes.backgroundColor) && this.metrics) {\n this.setPaths();\n }\n }\n setPaths() {\n const bezierCommandCalc = bezierCommand(controlPoint(line));\n this.paths = [svgPath(this.getPaths(AA_RATIO, STEP_COUNT), bezierCommandCalc),\n svgPath(this.getPaths(AA_RATIO, STEP_COUNT, true), bezierCommandCalc),\n svgPath(this.getPaths(AAA_RATIO, STEP_COUNT), bezierCommandCalc),\n svgPath(this.getPaths(AAA_RATIO, STEP_COUNT, true), bezierCommandCalc)];\n }\n findValue(contrast, saturation, low, high, comparer) {\n const mid = (low + high) / 2;\n const hsva = Object.assign({}, this.hsva.value, { s: saturation / this.metrics.width, v: 1 - mid / this.metrics.height });\n const currentContrast = getContrastFromTwoRGBAs(getRGBA(getColorFromHSV(hsva)), getRGBA(this.backgroundColor || ''));\n if (low + 0.5 > high) {\n if (currentContrast < contrast + 1 && currentContrast > contrast - 1) {\n return mid;\n }\n else {\n return null;\n }\n }\n if (comparer(currentContrast, contrast)) {\n return this.findValue(contrast, saturation, low, high - (high - low) / 2, comparer);\n }\n return this.findValue(contrast, saturation, low + (high - low) / 2, high, comparer);\n }\n getPaths(contrast, stepCount, reversed = false) {\n const points = [];\n for (let i = 0; i <= this.metrics.width; i += this.metrics.width / stepCount) {\n const value = this.findValue(contrast, i, 0, this.metrics.height, reversed ? ((a, b) => a < b) : ((a, b) => a > b));\n if (value !== null) {\n points.push([i, value]);\n }\n }\n return points;\n }\n}\nColorContrastSvgComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorContrastSvgComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nColorContrastSvgComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColorContrastSvgComponent, selector: \"[kendoColorContrastSvg]\", inputs: { wrapper: \"wrapper\", hsva: \"hsva\", backgroundColor: \"backgroundColor\" }, host: { properties: { \"class.k-color-contrast-svg\": \"this.hostClass\" } }, usesOnChanges: true, ngImport: i0, template: `\n \n `, isInline: true, directives: [{ type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorContrastSvgComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoColorContrastSvg]',\n template: `\n \n `\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-color-contrast-svg']\n }], wrapper: [{\n type: Input\n }], hsva: [{\n type: Input\n }], backgroundColor: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass ColorInputComponent {\n constructor(host, renderer, localizationService) {\n this.host = host;\n this.renderer = renderer;\n this.localizationService = localizationService;\n /**\n * The id of the hex input.\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets whether the alpha slider will be shown.\n */\n this.opacity = true;\n /**\n * Sets the disabled state of the ColorInput.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorInput.\n */\n this.readonly = false;\n /**\n * Emits a parsed rgba string color.\n */\n this.valueChange = new EventEmitter();\n this.colorInputClass = true;\n /**\n * The rgba inputs values.\n */\n this.rgba = {};\n this.subscriptions = new Subscription();\n }\n /**\n * Indicates whether any of the inputs are focused.\n */\n get isFocused() {\n if (!(isDocumentAvailable() && isPresent(this.host))) {\n return false;\n }\n const activeElement = document.activeElement;\n return this.host.nativeElement.contains(activeElement);\n }\n /**\n * Indicates whether any of the rgba inputs have value.\n */\n get rgbaInputValid() {\n return Object.keys(this.rgba).every(key => isPresent(this.rgba[key]));\n }\n ngAfterViewInit() {\n this.initDomEvents();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n ngOnChanges(changes) {\n if (isPresent(changes.value) && !this.isFocused) {\n this.hex = parseColor(this.value, 'hex', this.opacity);\n this.rgba = getRGBA(this.value);\n this.rgba.a = parseColor(this.value, 'rgba', this.opacity) ? this.rgba.a : 1;\n }\n }\n get formatButtonTitle() {\n return this.localizationService.get('formatButton');\n }\n handleRgbaValueChange() {\n const color = getColorFromRGBA(this.rgba);\n if (!this.rgbaInputValid || color === this.value) {\n return;\n }\n this.value = color;\n this.rgba = getRGBA(this.value);\n this.hex = parseColor(color, 'hex', this.opacity);\n this.valueChange.emit(color);\n }\n handleHexValueChange(hex) {\n this.hex = hex;\n const color = parseColor(hex, 'rgba', this.opacity);\n if (!isPresent(color) || color === this.value) {\n return;\n }\n this.value = color;\n this.rgba = getRGBA(color);\n this.valueChange.emit(color);\n }\n handleRgbaInputBlur() {\n if (!this.rgbaInputValid) {\n this.rgba = getRGBA(this.value);\n }\n }\n handleHexInputBlur() {\n this.hex = parseColor(this.value, 'hex', this.opacity);\n }\n toggleFormatView() {\n this.formatView = this.formatView === 'hex' ? 'rgba' : 'hex';\n }\n initDomEvents() {\n if (!this.host) {\n return;\n }\n this.subscriptions.add(this.renderer.listen(this.toggleFormatButton.nativeElement, 'click', () => this.toggleFormatView()));\n }\n}\nColorInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nColorInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColorInputComponent, selector: \"kendo-colorinput\", inputs: { focusableId: \"focusableId\", formatView: \"formatView\", value: \"value\", opacity: \"opacity\", disabled: \"disabled\", readonly: \"readonly\" }, outputs: { valueChange: \"valueChange\" }, host: { properties: { \"class.k-colorgradient-inputs\": \"this.colorInputClass\", \"class.k-hstack\": \"this.colorInputClass\" } }, viewQueries: [{ propertyName: \"opacityInput\", first: true, predicate: [\"opacityInput\"], descendants: true }, { propertyName: \"hexInput\", first: true, predicate: [\"hexInput\"], descendants: true, read: ElementRef }, { propertyName: \"blueInput\", first: true, predicate: [\"blueInput\"], descendants: true, read: ElementRef }, { propertyName: \"toggleFormatButton\", first: true, predicate: [\"toggleFormatButton\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `\n
    \n \n
    \n
    \n \n \n
    \n \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n `, isInline: true, components: [{ type: NumericTextBoxComponent, selector: \"kendo-numerictextbox\", inputs: [\"focusableId\", \"disabled\", \"readonly\", \"title\", \"autoCorrect\", \"format\", \"max\", \"min\", \"decimals\", \"placeholder\", \"step\", \"spinners\", \"rangeValidation\", \"tabindex\", \"tabIndex\", \"changeValueOnScroll\", \"selectOnFocus\", \"value\", \"maxlength\", \"size\", \"rounded\", \"fillMode\"], outputs: [\"valueChange\", \"focus\", \"blur\"], exportAs: [\"kendoNumericTextBox\"] }], directives: [{ type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorInputComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-colorinput',\n template: `\n
    \n \n
    \n
    \n \n \n
    \n \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }]; }, propDecorators: { focusableId: [{\n type: Input\n }], formatView: [{\n type: Input\n }], value: [{\n type: Input\n }], opacity: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], colorInputClass: [{\n type: HostBinding,\n args: ['class.k-colorgradient-inputs']\n }, {\n type: HostBinding,\n args: ['class.k-hstack']\n }], opacityInput: [{\n type: ViewChild,\n args: ['opacityInput', { static: false }]\n }], hexInput: [{\n type: ViewChild,\n args: ['hexInput', { read: ElementRef, static: false }]\n }], blueInput: [{\n type: ViewChild,\n args: ['blueInput', { read: ElementRef, static: false }]\n }], toggleFormatButton: [{\n type: ViewChild,\n args: ['toggleFormatButton', { static: false }]\n }] } });\n\n/**\n * @hidden\n */\nclass ContrastValidationComponent {\n constructor(localization) {\n this.localization = localization;\n }\n get passMessage() {\n return this.localization.get('passContrast');\n }\n get failMessage() {\n return this.localization.get('failContrast');\n }\n get contrastText() {\n let ratio = this.type === 'AA' ? AA_RATIO : AAA_RATIO;\n return `${this.type}: ${ratio.toFixed(1)}`;\n }\n}\nContrastValidationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ContrastValidationComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nContrastValidationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ContrastValidationComponent, selector: \"[kendoContrastValidation]\", inputs: { type: \"type\", pass: \"pass\", value: \"value\" }, ngImport: i0, template: `\n {{contrastText}}\n \n \n {{passMessage}}\n \n \n \n {{failMessage}}\n \n \n \n `, isInline: true, directives: [{ type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ContrastValidationComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoContrastValidation]',\n template: `\n {{contrastText}}\n \n \n {{passMessage}}\n \n \n \n {{failMessage}}\n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { type: [{\n type: Input\n }], pass: [{\n type: Input\n }], value: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass ContrastComponent {\n constructor(localization) {\n this.localization = localization;\n }\n get formatedRatio() {\n return this.contrastRatio.toFixed(2);\n }\n get contrastRatioText() {\n return `${this.localization.get('contrastRatio')}: ${this.value ? this.formatedRatio : 'n/a'}`;\n }\n get satisfiesAACondition() {\n return this.contrastRatio >= AA_RATIO;\n }\n get satisfiesAAACondition() {\n return this.contrastRatio >= AAA_RATIO;\n }\n get contrastRatio() {\n let contrast = getContrastFromTwoRGBAs(getRGBA(this.value), getRGBA(this.ratio));\n return contrast;\n }\n}\nContrastComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ContrastComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nContrastComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ContrastComponent, selector: \"[kendoContrastTool]\", inputs: { value: \"value\", ratio: \"ratio\" }, ngImport: i0, template: `\n
    \n {{contrastRatioText}}\n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n `, isInline: true, components: [{ type: ContrastValidationComponent, selector: \"[kendoContrastValidation]\", inputs: [\"type\", \"pass\", \"value\"] }], directives: [{ type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ContrastComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoContrastTool]',\n template: `\n
    \n {{contrastRatioText}}\n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { value: [{\n type: Input\n }], ratio: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass ColorPickerMessages extends ComponentMessages {\n}\nColorPickerMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nColorPickerMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColorPickerMessages, selector: \"kendo-colorpicker-messages-base\", inputs: { colorPaletteNoColor: \"colorPaletteNoColor\", colorGradientNoColor: \"colorGradientNoColor\", flatColorPickerNoColor: \"flatColorPickerNoColor\", colorPickerNoColor: \"colorPickerNoColor\", colorGradientHandle: \"colorGradientHandle\", clearButton: \"clearButton\", hueSliderHandle: \"hueSliderHandle\", opacitySliderHandle: \"opacitySliderHandle\", hexInputPlaceholder: \"hexInputPlaceholder\", redInputPlaceholder: \"redInputPlaceholder\", greenInputPlaceholder: \"greenInputPlaceholder\", blueInputPlaceholder: \"blueInputPlaceholder\", alphaInputPlaceholder: \"alphaInputPlaceholder\", passContrast: \"passContrast\", failContrast: \"failContrast\", contrastRatio: \"contrastRatio\", previewColor: \"previewColor\", revertSelection: \"revertSelection\", gradientView: \"gradientView\", paletteView: \"paletteView\", formatButton: \"formatButton\", applyButton: \"applyButton\", cancelButton: \"cancelButton\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-colorpicker-messages-base'\n }]\n }], propDecorators: { colorPaletteNoColor: [{\n type: Input\n }], colorGradientNoColor: [{\n type: Input\n }], flatColorPickerNoColor: [{\n type: Input\n }], colorPickerNoColor: [{\n type: Input\n }], colorGradientHandle: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], hueSliderHandle: [{\n type: Input\n }], opacitySliderHandle: [{\n type: Input\n }], hexInputPlaceholder: [{\n type: Input\n }], redInputPlaceholder: [{\n type: Input\n }], greenInputPlaceholder: [{\n type: Input\n }], blueInputPlaceholder: [{\n type: Input\n }], alphaInputPlaceholder: [{\n type: Input\n }], passContrast: [{\n type: Input\n }], failContrast: [{\n type: Input\n }], contrastRatio: [{\n type: Input\n }], previewColor: [{\n type: Input\n }], revertSelection: [{\n type: Input\n }], gradientView: [{\n type: Input\n }], paletteView: [{\n type: Input\n }], formatButton: [{\n type: Input\n }], applyButton: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedColorPickerMessagesDirective extends ColorPickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedColorPickerMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedColorPickerMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedColorPickerMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedColorPickerMessagesDirective, selector: \"[kendoColorPickerLocalizedMessages], [kendoFlatColorPickerLocalizedMessages], [kendoColorGradientLocalizedMessages], [kendoColorPaletteLocalizedMessages]\", providers: [\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => LocalizedColorPickerMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedColorPickerMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => LocalizedColorPickerMessagesDirective)\n }\n ],\n selector: '[kendoColorPickerLocalizedMessages], [kendoFlatColorPickerLocalizedMessages], [kendoColorGradientLocalizedMessages], [kendoColorPaletteLocalizedMessages]'\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nlet serial$3 = 0;\n/**\n * The ColorGradient component enables smooth color transitions and provides options for selecting specific colors over the drag handle.\n * The ColorGradient is independently used by `kendo-colorpicker` and can be directly added to the page.\n */\nclass ColorGradientComponent {\n constructor(host, ngZone, renderer, cdr, localizationService) {\n this.host = host;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.cdr = cdr;\n this.localizationService = localizationService;\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.id = `k-colorgradient-${serial$3++}`;\n /**\n * Defines whether the alpha slider will be displayed.\n *\n * @default true\n */\n this.opacity = true;\n /**\n * Sets the disabled state of the ColorGradient.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorGradient.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Specifies whether the ColorGradient should display a 'Clear color' button.\n *\n * @default false\n */\n this.clearButton = false;\n /**\n * Determines the delay time (in milliseconds) before the value is changed on handle drag. A value of 0 indicates no delay.\n *\n * @default 0\n */\n this.delay = 0;\n /**\n * Specifies the output format of the ColorGradientComponent.\n * The input value may be in a different format, but it will be parsed into the output `format`\n * after the component processes it.\n *\n * The supported values are:\n * * (Default) `rgba`\n * * `hex`\n */\n this.format = DEFAULT_OUTPUT_FORMAT;\n /**\n * Fires each time the user selects a new color.\n */\n this.valueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.backgroundColor = DEFAULT_GRADIENT_BACKGROUND_COLOR;\n /**\n * @hidden\n *\n * Represents the currently selected `hue`, `saturation`, `value`, and `alpha` values.\n * The values are initially set in `ngOnInit` or in `ngOnChanges` and are\n * updated on moving the drag handle or the sliders.\n */\n this.hsva = new BehaviorSubject({});\n this._tabindex = 0;\n this.listeners = [];\n this.hueSliderTouched = false;\n this.alphaSliderTouched = false;\n this.updateValues = new Subject();\n this.notifyNgChanged = () => { };\n this.notifyNgTouched = () => { };\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n get readonlyAttribute() {\n return this.readonly;\n }\n get disabledClass() {\n return this.disabled;\n }\n get gradientId() {\n return this.id;\n }\n get hostTabindex() {\n return this.tabindex;\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor(value, this.format, this.opacity);\n }\n get value() {\n return this._value;\n }\n /**\n * Enables the color contrast tool. Accepts the background color that will be compared to the selected value.\n * The tool will calculate the contrast ratio between the two colors.\n */\n set contrastTool(value) {\n this._contrastTool = parseColor(value, this.format, this.opacity);\n }\n get contrastTool() {\n return this._contrastTool;\n }\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n *\n * @default 0\n */\n set tabindex(value) {\n if (isPresent(value)) {\n const tabindex = Number(value);\n this._tabindex = !isNaN(tabindex) ? tabindex : 0;\n }\n else {\n // Allows removal of the tabindex attribute\n this._tabindex = value;\n }\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * Indicates whether the ColorGradient or any of its content is focused.\n */\n get isFocused() {\n if (!(isDocumentAvailable() && isPresent(this.host))) {\n return false;\n }\n return this.host.nativeElement === document.activeElement || this.host.nativeElement.contains(document.activeElement);\n }\n /**\n * @hidden\n */\n get alphaSliderValue() {\n // setting the initial value to undefined to force the slider to recalculate the height of the slider track on the next cdr run\n if (!(isPresent(this.hsva.value) && isPresent(this.hsva.value.a))) {\n return;\n }\n return this.hsva.value.a * 100;\n }\n get gradientRect() {\n return this.gradientWrapper.nativeElement.getBoundingClientRect();\n }\n /**\n * @hidden\n */\n get contrastToolVisible() {\n return this.contrastTool && this.contrastTool.length > 0;\n }\n ngAfterViewInit() {\n this.updateUI();\n this.cdr.detectChanges();\n this.addEventListeners();\n this.subscribeChanges();\n }\n ngOnChanges(changes) {\n if (isChanged('value', changes) && !this.isFocused) {\n this.updateUI();\n }\n if (isChanged('delay', changes)) {\n this.unsubscribeChanges();\n this.subscribeChanges();\n }\n }\n ngOnDestroy() {\n this.listeners.forEach(removeListener => removeListener());\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n this.unsubscribeChanges();\n }\n /**\n * Focuses the component.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n this.gradientDragHandle.nativeElement.focus();\n }\n /**\n * @hidden\n */\n reset() {\n this.handleValueChange(undefined);\n this.updateUI();\n this.host.nativeElement.focus();\n }\n /**\n * @hidden\n */\n handleDragPress(args) {\n if (this.disabled || this.readonly || !isPresent(args.originalEvent)) {\n return;\n }\n this.focus();\n args.originalEvent.preventDefault();\n }\n /**\n * @hidden\n */\n onHandleDrag(args) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.renderer.addClass(this.gradientWrapper.nativeElement, 'k-dragging');\n this.changePosition(args);\n }\n /**\n * @hidden\n */\n onHandleRelease() {\n if (this.disabled || this.readonly) {\n return;\n }\n this.renderer.removeClass(this.gradientWrapper.nativeElement, 'k-dragging');\n this.handleValueChange(getColorFromHSV(this.hsva.value, this.format, this.opacity));\n }\n /**\n * @hidden\n */\n onKeyboardAction(args) {\n if (this.disabled || this.readonly) {\n return;\n }\n if (args.key && args.key.indexOf('Arrow') !== -1) {\n args.preventDefault();\n const dragHandleElement = this.gradientDragHandle.nativeElement;\n this.renderer.addClass(this.gradientWrapper.nativeElement, 'k-dragging');\n let keyboardMoveX = 0;\n let keyboardMoveY = 0;\n switch (args.key) {\n case 'ArrowRight':\n keyboardMoveX = DRAGHANDLE_MOVE_SPEED;\n break;\n case 'ArrowLeft':\n keyboardMoveX = -DRAGHANDLE_MOVE_SPEED;\n break;\n case 'ArrowUp':\n keyboardMoveY = -DRAGHANDLE_MOVE_SPEED;\n break;\n case 'ArrowDown':\n keyboardMoveY = DRAGHANDLE_MOVE_SPEED;\n break;\n default: break;\n }\n const newY = parseInt(dragHandleElement.style.top, 10) + keyboardMoveY;\n const newX = parseInt(dragHandleElement.style.left, 10) + keyboardMoveX;\n this.renderer.setStyle(dragHandleElement, 'top', `${newY}px`);\n this.renderer.setStyle(dragHandleElement, 'left', `${newX}px`);\n this.ngZone.run(() => this.moveDragHandle(newX, newY));\n }\n }\n /**\n * @hidden\n */\n changePosition(position) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.gradientDragHandle.nativeElement.focus();\n const gradientRect = this.gradientRect;\n const newX = position.clientX - gradientRect.left;\n const newY = position.clientY - gradientRect.top;\n this.ngZone.run(() => this.moveDragHandle(newX, newY));\n }\n /**\n * @hidden\n */\n handleHueSliderChange(hue) {\n const hsva = this.hsva.value;\n hsva.h = hue;\n this.hsva.next(hsva);\n this.handleValueChange(getColorFromHSV(this.hsva.value, this.format, this.opacity));\n this.backgroundColor = getColorFromHue(hue);\n this.setBackgroundColor(this.backgroundColor);\n this.setAlphaSliderBackground(this.backgroundColor);\n this.hueSliderTouched = true;\n }\n /**\n * @hidden\n */\n handleAlphaSliderChange(alpha) {\n const hsva = this.hsva.value;\n hsva.a = alpha / 100;\n this.hsva.next(hsva);\n this.handleValueChange(getColorFromHSV(this.hsva.value, this.format, this.opacity));\n this.alphaSliderTouched = true;\n }\n /**\n * @hidden\n */\n handleInputsValueChange(color) {\n const parsed = parseColor(color, this.format, this.opacity);\n if (this.value !== parsed) {\n this.handleValueChange(parsed);\n this.updateUI();\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n if (isPresent(this.gradientWrapper)) {\n this.updateUI();\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.cdr.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n get colorGradientHandleTitle() {\n return this.localizationService.get('colorGradientHandle');\n }\n /**\n * @hidden\n */\n get colorGradientHandleAriaLabel() {\n const parsed = parseColor(this.value, this.format, this.opacity);\n return `${this.value ? parsed : this.localizationService.get('colorGradientHandle')}`;\n }\n /**\n * @hidden\n */\n get hueSliderTitle() {\n return this.localizationService.get('hueSliderHandle');\n }\n /**\n * @hidden\n */\n get opacitySliderTitle() {\n return this.localizationService.get('opacitySliderHandle');\n }\n /**\n * @hidden\n */\n get clearButtonTitle() {\n return this.localizationService.get('clearButton');\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n moveDragHandle(positionX, positionY) {\n const gradientRect = this.gradientRect;\n const gradientRectWidth = gradientRect.width;\n const gradientRectHeight = gradientRect.height;\n const top = fitIntoBounds(positionY, 0, gradientRectHeight);\n const left = fitIntoBounds(positionX, 0, gradientRectWidth);\n this.setDragHandleElementPosition(top, left);\n const hsva = this.hsva.value;\n hsva.s = left / gradientRectWidth;\n hsva.v = 1 - top / gradientRectHeight;\n this.hsva.next(hsva);\n this.updateValues.next(getColorFromHSV(this.hsva.value, this.format, this.opacity));\n this.setAlphaSliderBackground(getColorFromHSV(Object.assign(Object.assign({}, this.hsva.value), { a: 1 }), this.format, this.opacity));\n }\n handleValueChange(color) {\n if (this.value === color) {\n return;\n }\n this.value = color;\n this.valueChange.emit(color);\n this.notifyNgChanged(color);\n this.setHostElementAriaLabel();\n }\n setDragHandleElementPosition(top, left) {\n const dragHandle = this.gradientDragHandle.nativeElement;\n this.renderer.setStyle(dragHandle, 'top', `${top}px`);\n this.renderer.setStyle(dragHandle, 'left', `${left}px`);\n }\n setAlphaSliderBackground(backgroundColor) {\n if (!isPresent(this.alphaSlider)) {\n return;\n }\n const sliderTrack = this.alphaSlider.track.nativeElement;\n this.renderer.setStyle(sliderTrack, 'background', `linear-gradient(to top, transparent, ${backgroundColor})`);\n }\n setHostElementAriaLabel() {\n const parsed = parseColor(this.value, this.format, this.opacity);\n this.renderer.setAttribute(this.host.nativeElement, 'aria-label', `${this.value ? parsed : this.localizationService.get('colorGradientNoColor')}`);\n }\n setBackgroundColor(color) {\n this.renderer.setStyle(this.hsvRectangle.nativeElement, 'background', color);\n }\n updateUI() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.hueSliderTouched || this.alphaSliderTouched) {\n this.hueSliderTouched = false;\n this.alphaSliderTouched = false;\n return;\n }\n this.hsva.next(this.value ? getHSV(this.value) : { h: 0, s: 0, v: 1, a: 1 });\n const gradientRect = this.gradientRect;\n const top = (1 - this.hsva.value.v) * gradientRect.height;\n const left = this.hsva.value.s * gradientRect.width;\n this.setDragHandleElementPosition(top, left);\n this.backgroundColor = getColorFromHue(this.hsva.value.h);\n this.setBackgroundColor(this.backgroundColor);\n this.setAlphaSliderBackground(this.backgroundColor);\n this.setHostElementAriaLabel();\n }\n addEventListeners() {\n this.ngZone.runOutsideAngular(() => {\n const focusOutListener = this.renderer.listen(this.host.nativeElement, 'focusout', (event) => {\n if (!containsFocus(this.host.nativeElement, event.relatedTarget) && isUntouched(this.host)) {\n this.ngZone.run(() => this.notifyNgTouched());\n }\n });\n const keydownListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'keydown', (event) => {\n this.onKeyboardAction(event);\n });\n const keyupListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'keyup', () => {\n this.renderer.removeClass(this.gradientWrapper.nativeElement, 'k-dragging');\n if (!this.readonly && !this.disabled) {\n this.ngZone.run(() => this.handleValueChange(getColorFromHSV(this.hsva.value, this.format, this.opacity)));\n }\n });\n const dragHandleFocusInListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'focusin', () => {\n this.renderer.addClass(this.gradientDragHandle.nativeElement, 'k-focus');\n });\n const dragHandleFocusOutListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'focusout', () => {\n this.renderer.removeClass(this.gradientDragHandle.nativeElement, 'k-focus');\n });\n this.listeners.push(focusOutListener, keydownListener, keyupListener, dragHandleFocusInListener, dragHandleFocusOutListener);\n });\n }\n subscribeChanges() {\n this.changeRequestsSubscription = this.updateValues.pipe(throttleTime(this.delay)).subscribe(value => {\n this.handleValueChange(value);\n });\n }\n unsubscribeChanges() {\n if (this.changeRequestsSubscription) {\n this.changeRequestsSubscription.unsubscribe();\n }\n }\n}\nColorGradientComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorGradientComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nColorGradientComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColorGradientComponent, selector: \"kendo-colorgradient\", inputs: { id: \"id\", opacity: \"opacity\", disabled: \"disabled\", readonly: \"readonly\", clearButton: \"clearButton\", delay: \"delay\", value: \"value\", contrastTool: \"contrastTool\", tabindex: \"tabindex\", format: \"format\" }, outputs: { valueChange: \"valueChange\" }, host: { properties: { \"class.k-colorgradient\": \"this.hostClasses\", \"attr.aria-readonly\": \"this.readonlyAttribute\", \"class.k-disabled\": \"this.disabledClass\", \"attr.id\": \"this.gradientId\", \"attr.dir\": \"this.direction\", \"attr.tabindex\": \"this.hostTabindex\" } }, providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorGradientComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorGradientComponent)\n },\n ColorGradientLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorGradientLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorgradient'\n }\n ], viewQueries: [{ propertyName: \"gradientDragHandle\", first: true, predicate: [\"gradientDragHandle\"], descendants: true, read: ElementRef }, { propertyName: \"inputs\", first: true, predicate: [\"inputs\"], descendants: true }, { propertyName: \"alphaSlider\", first: true, predicate: [\"alphaSlider\"], descendants: true }, { propertyName: \"gradientWrapper\", first: true, predicate: [\"gradientWrapper\"], descendants: true }, { propertyName: \"hsvRectangle\", first: true, predicate: [\"hsvRectangle\"], descendants: true }], exportAs: [\"kendoColorGradient\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n \n \n \n \n \n \n \n
    \n \n \n \n
    \n
    \n `, isInline: true, styles: [\"\\n .k-clear-color {\\n position: absolute;\\n top: 0;\\n left: 50%;\\n transform: translateX(-50%);\\n }\\n .k-colorgradient-slider.k-align-self-end {\\n height: 140px;\\n }\\n\\n .k-color-contrast-svg {\\n position: absolute;\\n overflow: visible;\\n pointer-events: none;\\n left: 0px;\\n top: 0px;\\n }\\n \"], components: [{ type: ColorContrastSvgComponent, selector: \"[kendoColorContrastSvg]\", inputs: [\"wrapper\", \"hsva\", \"backgroundColor\"] }, { type: SliderComponent, selector: \"kendo-slider\", inputs: [\"focusableId\", \"dragHandleTitle\", \"incrementTitle\", \"animate\", \"decrementTitle\", \"showButtons\", \"value\", \"tabIndex\"], exportAs: [\"kendoSlider\"] }, { type: ColorInputComponent, selector: \"kendo-colorinput\", inputs: [\"focusableId\", \"formatView\", \"value\", \"opacity\", \"disabled\", \"readonly\"], outputs: [\"valueChange\"] }, { type: ContrastComponent, selector: \"[kendoContrastTool]\", inputs: [\"value\", \"ratio\"] }], directives: [{ type: LocalizedColorPickerMessagesDirective, selector: \"[kendoColorPickerLocalizedMessages], [kendoFlatColorPickerLocalizedMessages], [kendoColorGradientLocalizedMessages], [kendoColorPaletteLocalizedMessages]\" }, { type: i3.DraggableDirective, selector: \"[kendoDraggable]\", inputs: [\"enableDrag\"], outputs: [\"kendoPress\", \"kendoDrag\", \"kendoRelease\"] }, { type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorGradientComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoColorGradient',\n selector: 'kendo-colorgradient',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorGradientComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorGradientComponent)\n },\n ColorGradientLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorGradientLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorgradient'\n }\n ],\n template: `\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n \n \n \n \n \n \n \n
    \n \n \n \n
    \n
    \n `,\n styles: [`\n .k-clear-color {\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n .k-colorgradient-slider.k-align-self-end {\n height: 140px;\n }\n\n .k-color-contrast-svg {\n position: absolute;\n overflow: visible;\n pointer-events: none;\n left: 0px;\n top: 0px;\n }\n `]\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-colorgradient']\n }], readonlyAttribute: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], gradientId: [{\n type: HostBinding,\n args: ['attr.id']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], id: [{\n type: Input\n }], opacity: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], delay: [{\n type: Input\n }], value: [{\n type: Input\n }], contrastTool: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], format: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], gradientDragHandle: [{\n type: ViewChild,\n args: ['gradientDragHandle', { read: ElementRef, static: false }]\n }], inputs: [{\n type: ViewChild,\n args: ['inputs', { static: false }]\n }], alphaSlider: [{\n type: ViewChild,\n args: ['alphaSlider', { static: false }]\n }], gradientWrapper: [{\n type: ViewChild,\n args: ['gradientWrapper', { static: false }]\n }], hsvRectangle: [{\n type: ViewChild,\n args: ['hsvRectangle', { static: false }]\n }] } });\n\n/**\n * @hidden\n */\nclass ColorPaletteLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl, flatColorPickerLocalization) {\n super(prefix, messageService, _rtl);\n this.flatColorPickerLocalization = flatColorPickerLocalization;\n }\n get(shortKey) {\n if (this.flatColorPickerLocalization) {\n return this.flatColorPickerLocalization.get(shortKey);\n }\n return super.get(shortKey);\n }\n}\nColorPaletteLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }, { token: FlatColorPickerLocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nColorPaletteLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteLocalizationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteLocalizationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [L10N_PREFIX]\n }] }, { type: i1.MessageService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }, { type: FlatColorPickerLocalizationService, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [FlatColorPickerLocalizationService]\n }] }]; } });\n\n/**\n * @hidden\n */\nclass ColorPaletteService {\n constructor() {\n this.colorRows = [];\n }\n setColorMatrix(palette, columns) {\n this.colorRows = [];\n if (!(isPresent(palette) && palette.length)) {\n return;\n }\n columns = columns || palette.length;\n for (let start = 0; start < palette.length; start += columns) {\n const row = palette.slice(start, columns + start);\n this.colorRows.push(row);\n }\n }\n getCellCoordsFor(color) {\n if (!isPresent(color)) {\n return;\n }\n for (let row = 0; row < this.colorRows.length; row++) {\n for (let col = 0; col < this.colorRows[row].length; col++) {\n if (this.colorRows[row][col] === color) {\n return { row, col };\n }\n }\n }\n }\n getColorAt(cellCoords) {\n if (!(isPresent(cellCoords) && isPresent(this.colorRows[cellCoords.row]))) {\n return;\n }\n return this.colorRows[cellCoords.row][cellCoords.col];\n }\n getNextCell(current, horizontalStep, verticalStep) {\n if (!(isPresent(current) && isPresent(current.row) && isPresent(current.col))) {\n return { row: 0, col: 0 };\n }\n const row = this.clampIndex(current.row + verticalStep, this.colorRows.length - 1);\n const col = this.clampIndex(current.col + horizontalStep, this.colorRows[row].length - 1);\n return { row, col };\n }\n clampIndex(index, max) {\n const minArrayIndex = 0;\n if (index < minArrayIndex) {\n return minArrayIndex;\n }\n if (index > max) {\n return max;\n }\n return index;\n }\n}\nColorPaletteService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nColorPaletteService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteService, decorators: [{\n type: Injectable\n }] });\n\nconst DEFAULT_TILE_SIZE = 24;\nconst DEFAULT_COLUMNS_COUNT = 10;\nconst DEFAULT_PRESET = 'office';\nconst DEFAULT_ACCESSIBLE_PRESET = 'accessible';\nlet serial$2 = 0;\n/**\n * The ColorPalette component provides a set of predefined palette presets and enables you to implement a custom color palette.\n * The ColorPalette is independently used by `kendo-colorpicker` and can be directly added to the page.\n */\nclass ColorPaletteComponent {\n constructor(host, service, cdr, renderer, localizationService, ngZone) {\n this.host = host;\n this.service = service;\n this.cdr = cdr;\n this.renderer = renderer;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n /**\n * @hidden\n */\n this.id = `k-colorpalette-${serial$2++}`;\n /**\n * Specifies the output format of the ColorPaletteComponent.\n * The input value may be in a different format. However, it will be parsed into the output `format`\n * after the component processes it.\n *\n * The supported values are:\n * * (Default) `hex`\n * * `rgba`\n * * `name`\n */\n this.format = 'hex';\n /**\n * Sets the disabled state of the ColorPalette.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorPalette.\n */\n this.readonly = false;\n /**\n * Specifies the size of a color cell.\n *\n * The possible values are:\n * * (Default) `tileSize = 24`\n * * `{ width: number, height: number }`\n */\n this.tileSize = { width: DEFAULT_TILE_SIZE, height: DEFAULT_TILE_SIZE };\n /**\n * Fires each time the color selection is changed.\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires each time the value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user selects a cell with the mouse or presses `Enter`.\n *\n * @hidden\n */\n this.cellSelection = new EventEmitter();\n /**\n * @hidden\n */\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.uniqueId = guid();\n this._tabindex = 0;\n this.notifyNgTouched = () => { };\n this.notifyNgChanged = () => { };\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n /**\n * @hidden\n */\n get paletteId() {\n return this.id;\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor(value, this.format);\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the number of columns that will be displayed.\n * Defaults to `10`.\n */\n set columns(value) {\n const minColumnsCount = 1;\n this._columns = value > minColumnsCount ? value : minColumnsCount;\n }\n get columns() {\n return this._columns;\n }\n /**\n * The color palette that will be displayed.\n *\n * The supported values are:\n * * The name of the predefined palette preset (for example, `office`, `basic`, and `apex`).\n * * A string with comma-separated colors.\n * * A string array.\n */\n set palette(value) {\n if (!isPresent(value)) {\n value = DEFAULT_PRESET;\n }\n if (typeof value === 'string' && isPresent(PALETTEPRESETS[value])) {\n this.columns = this.columns || PALETTEPRESETS[value].columns;\n value = PALETTEPRESETS[value].colors;\n }\n const colors = (typeof value === 'string') ? value.split(',') : value;\n this._palette = colors.map(color => parseColor(color, this.format, false, false));\n }\n get palette() {\n return this._palette;\n }\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * @hidden\n */\n get tileLayout() {\n if (typeof this.tileSize !== 'number') {\n return this.tileSize;\n }\n return { width: this.tileSize, height: this.tileSize };\n }\n /**\n * @hidden\n */\n get colorRows() {\n return this.service.colorRows;\n }\n /**\n * @hidden\n */\n get hostTabindex() { return this.tabindex; }\n /**\n * @hidden\n */\n get disabledClass() { return this.disabled; }\n /**\n * @hidden\n */\n get readonlyAttribute() { return this.readonly; }\n ngOnInit() {\n if (this.colorRows.length === 0) {\n const defaultPreset = (this.format !== 'name') ? DEFAULT_PRESET : DEFAULT_ACCESSIBLE_PRESET;\n this.palette = this.palette || defaultPreset;\n this.setRows();\n }\n }\n ngAfterViewInit() {\n this.setHostElementAriaLabel();\n if (this.value) {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.selectCell(this.value);\n });\n }\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n ngOnChanges(changes) {\n if (changes.palette || changes.columns) {\n this.setRows();\n }\n if (changes.palette || changes.value || changes.columns) {\n this.selectCell(this.value);\n this.setHostElementAriaLabel();\n }\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const isRTL = this.direction === 'rtl';\n switch (event.keyCode) {\n case Keys.ArrowDown:\n this.handleCellNavigation(0, 1);\n break;\n case Keys.ArrowUp:\n this.handleCellNavigation(0, -1);\n break;\n case Keys.ArrowRight:\n this.handleCellNavigation(isRTL ? -1 : 1, 0);\n break;\n case Keys.ArrowLeft:\n this.handleCellNavigation(isRTL ? 1 : -1, 0);\n break;\n case Keys.Enter:\n this.handleEnter();\n break;\n default: return;\n }\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleHostBlur() {\n this.notifyNgTouched();\n this.handleCellFocusOnBlur();\n }\n /**\n * @hidden\n */\n handleCellSelection(value, focusedCell) {\n if (this.readonly) {\n return;\n }\n this.selectedCell = focusedCell;\n this.focusedCell = this.selectedCell;\n this.focusInComponent = true;\n const parsedColor = parseColor(value, this.format, false, false);\n this.cellSelection.emit(parsedColor);\n this.handleValueChange(parsedColor);\n if (this.selection !== parsedColor) {\n this.selection = parsedColor;\n this.selectionChange.emit(parsedColor);\n }\n if (focusedCell) {\n this.activeCellId = `k-${this.selectedCell.row}-${this.selectedCell.col}-${this.uniqueId}`;\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n this.selectCell(value);\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.cdr.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n /**\n * Clears the color value of the ColorPalette.\n */\n reset() {\n this.focusedCell = null;\n if (isPresent(this.value)) {\n this.handleValueChange(undefined);\n }\n this.selectedCell = undefined;\n }\n handleValueChange(color) {\n if (this.value === color) {\n return;\n }\n this.value = color;\n this.valueChange.emit(color);\n this.notifyNgChanged(color);\n this.setHostElementAriaLabel();\n }\n handleCellFocusOnBlur() {\n this.focusInComponent = false;\n this.focusedCell = this.selectedCell;\n }\n selectCell(value) {\n this.selectedCell = this.service.getCellCoordsFor(value);\n this.focusedCell = this.selectedCell;\n }\n setRows() {\n if (!isPresent(this.palette)) {\n return;\n }\n this.columns = this.columns || DEFAULT_COLUMNS_COUNT;\n this.service.setColorMatrix(this.palette, this.columns);\n }\n handleCellNavigation(horizontalStep, verticalStep) {\n if (this.readonly) {\n return;\n }\n this.focusedCell = this.service.getNextCell(this.focusedCell, horizontalStep, verticalStep);\n this.focusInComponent = true;\n }\n setHostElementAriaLabel() {\n const parsed = parseColor(this.value, this.format);\n this.renderer.setAttribute(this.host.nativeElement, 'aria-label', `${this.value ? parsed : this.localizationService.get('colorPaletteNoColor')}`);\n }\n handleEnter() {\n if (!isPresent(this.focusedCell)) {\n return;\n }\n const selectedColor = this.service.getColorAt(this.focusedCell);\n this.handleCellSelection(selectedColor, this.focusedCell);\n }\n}\nColorPaletteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteComponent, deps: [{ token: i0.ElementRef }, { token: ColorPaletteService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nColorPaletteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColorPaletteComponent, selector: \"kendo-colorpalette\", inputs: { id: \"id\", format: \"format\", value: \"value\", columns: \"columns\", palette: \"palette\", tabindex: \"tabindex\", disabled: \"disabled\", readonly: \"readonly\", tileSize: \"tileSize\" }, outputs: { selectionChange: \"selectionChange\", valueChange: \"valueChange\", cellSelection: \"cellSelection\" }, host: { listeners: { \"keydown\": \"handleKeydown($event)\", \"blur\": \"handleHostBlur()\" }, properties: { \"attr.dir\": \"this.direction\", \"attr.id\": \"this.paletteId\", \"attr.tabindex\": \"this.hostTabindex\", \"class.k-colorpalette\": \"this.hostClasses\", \"attr.aria-disabled\": \"this.disabledClass\", \"class.k-disabled\": \"this.disabledClass\", \"attr.aria-readonly\": \"this.readonlyAttribute\" } }, providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPaletteComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPaletteComponent)\n },\n ColorPaletteService,\n ColorPaletteLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPaletteLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpalette'\n }\n ], exportAs: [\"kendoColorPalette\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n
    \n \n \n \n \n \n \n
    \n
    \n
    \n `, isInline: true, directives: [{ type: LocalizedColorPickerMessagesDirective, selector: \"[kendoColorPickerLocalizedMessages], [kendoFlatColorPickerLocalizedMessages], [kendoColorGradientLocalizedMessages], [kendoColorPaletteLocalizedMessages]\" }, { type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPaletteComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoColorPalette',\n selector: 'kendo-colorpalette',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPaletteComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPaletteComponent)\n },\n ColorPaletteService,\n ColorPaletteLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPaletteLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpalette'\n }\n ],\n template: `\n \n \n
    \n \n \n \n \n \n \n
    \n
    \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ColorPaletteService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], paletteId: [{\n type: HostBinding,\n args: ['attr.id']\n }], id: [{\n type: Input\n }], format: [{\n type: Input\n }], value: [{\n type: Input\n }], columns: [{\n type: Input\n }], palette: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tileSize: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], cellSelection: [{\n type: Output\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-colorpalette']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], readonlyAttribute: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], handleHostBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\n\n/**\n * @hidden\n */\nclass FlatColorPickerActionButtonsComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.hostClasses = true;\n this.actionButtonClick = new EventEmitter();\n }\n getText(text) {\n return this.localizationService.get(text);\n }\n onActionButtonClick(type, ev) {\n let args = {\n target: type,\n originalEvent: ev\n };\n this.actionButtonClick.emit(args);\n }\n}\nFlatColorPickerActionButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerActionButtonsComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nFlatColorPickerActionButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FlatColorPickerActionButtonsComponent, selector: \"[kendoFlatColorPickerActionButtons]\", outputs: { actionButtonClick: \"actionButtonClick\" }, host: { properties: { \"class.k-coloreditor-footer\": \"this.hostClasses\", \"class.k-actions\": \"this.hostClasses\", \"class.k-hstack\": \"this.hostClasses\" } }, viewQueries: [{ propertyName: \"lastButton\", first: true, predicate: [\"last\"], descendants: true, read: ElementRef }], ngImport: i0, template: `\n {{getText('cancelButton')}}\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerActionButtonsComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoFlatColorPickerActionButtons]',\n template: `\n {{getText('cancelButton')}}\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-coloreditor-footer']\n }, {\n type: HostBinding,\n args: ['class.k-actions']\n }, {\n type: HostBinding,\n args: ['class.k-hstack']\n }], actionButtonClick: [{\n type: Output\n }], lastButton: [{\n type: ViewChild,\n args: ['last', { read: ElementRef, static: false }]\n }] } });\n\n/**\n * @hidden\n */\nclass FocusOnDomReadyDirective {\n constructor(host, ngZone) {\n this.host = host;\n this.ngZone = ngZone;\n }\n ngAfterContentInit() {\n this.focusOnNextTick();\n }\n focusOnNextTick() {\n this.ngZone.runOutsideAngular(() => setTimeout(() => this.host.nativeElement.focus()));\n }\n}\nFocusOnDomReadyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FocusOnDomReadyDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nFocusOnDomReadyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FocusOnDomReadyDirective, selector: \"[kendoFocusOnDomReady]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FocusOnDomReadyDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoFocusOnDomReady]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; } });\n\n/**\n * Represents the [Kendo UI FlatColorPicker component for Angular]({% slug overview_flatcolorpicker %}).\n *\n * The FlatColorPicker is a powerful tool which allows the user to choose colors through palettes with predefined sets of colors and\n * through a gradient that renders an hsv canvas. It supports previewing the selected color, reverting it to its previous state or clearing it completely.\n */\nclass FlatColorPickerComponent {\n constructor(host, service, localizationService, cdr, renderer, ngZone) {\n this.host = host;\n this.service = service;\n this.localizationService = localizationService;\n this.cdr = cdr;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.hostClasses = true;\n /**\n * Sets the read-only state of the FlatColorPicker.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Sets the disabled state of the FlatColorPicker.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Specifies the output format of the FlatColorPicker.\n *\n * If the input value is in a different format, it will be parsed into the specified output `format`.\n *\n * The supported values are:\n * * `rgba` (default)\n * * `hex`\n */\n this.format = 'rgba';\n /**\n * Specifies whether the FlatColorPicker should display a 'Clear color' button.\n *\n * @default true\n */\n this.clearButton = true;\n /**\n * Displays `Apply` and `Cancel` action buttons and a color preview pane.\n *\n * When enabled, the component value will not change immediately upon\n * color selection, but only after the `Apply` button is clicked.\n *\n * The `Cancel` button reverts the current selection to its\n * initial state i.e. to the current value.\n *\n * @default true\n */\n this.preview = true;\n /**\n * Configures the layout of the `Apply` and `Cancel` action buttons.\n * * `start`\n * * `center`\n * * `end` (default)\n * * `stretch`\n */\n this.actionsLayout = 'end';\n /**\n * Specifies the views that will be rendered. Default value is gradient and palette.\n */\n this.views = ['gradient', 'palette'];\n /**\n * Fires each time the component value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires when the user cancels the current color selection.\n *\n * The event is emitted on preview pane or on 'Cancel' button click.\n */\n this.cancel = new EventEmitter();\n /**\n * Fires each time the view is about to change.\n * Used to provide a two-way binding for the `activeView` property.\n */\n this.activeViewChange = new EventEmitter();\n /**\n * @hidden\n */\n this.actionButtonClick = new EventEmitter();\n this._tabindex = 0;\n this._gradientSettings = { opacity: true, delay: 0 };\n this._paletteSettings = {};\n this.subscriptions = new Subscription();\n this.notifyNgChanged = () => { };\n this.notifyNgTouched = () => { };\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n get disabledClass() {\n return this.disabled;\n }\n get ariaReadonly() {\n return this.readonly;\n }\n get hostTabindex() {\n return this.tabindex;\n }\n /**\n * Specifies the initially selected color.\n */\n set value(value) {\n this._value = parseColor(value, this.format, this.gradientSettings.opacity);\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n *\n * @default 0\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * Configures the gradient view.\n */\n set gradientSettings(value) {\n Object.assign(this._gradientSettings, value);\n }\n get gradientSettings() {\n return this._gradientSettings;\n }\n /**\n * Configures the palette view.\n */\n set paletteSettings(value) {\n Object.assign(this._paletteSettings, value);\n }\n get paletteSettings() {\n return this._paletteSettings;\n }\n ngOnInit() {\n this.selection = this.value;\n this._paletteSettings = this.service.getPaletteSettings(this._paletteSettings, this.format);\n this.setActiveView();\n }\n ngAfterViewInit() {\n this.setHostElementAriaLabel();\n this.initDomEvents();\n this.setSizingVariables();\n }\n ngOnChanges(changes) {\n if (isChanged('value', changes)) {\n this.selection = this.value;\n this.setHostElementAriaLabel();\n }\n if (isChanged('paletteSettings', changes)) {\n this.setSizingVariables();\n }\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n get headerHasContent() {\n return this.preview || this.views.length > 1 || this.clearButton;\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n /**\n * Focuses the wrapper of the FlatColorPicker.\n */\n focus() {\n if (this.disabled && this.focused) {\n return;\n }\n this.host.nativeElement.focus();\n this.focused = true;\n }\n /**\n * Blurs the wrapper of the FlatColorPicker.\n */\n blur() {\n if (!this.focused) {\n return;\n }\n this.notifyNgTouched();\n this.host.nativeElement.blur();\n this.focused = false;\n }\n /**\n * Clears the value of the FlatColorPicker.\n */\n reset() {\n if (!isPresent(this.value)) {\n return;\n }\n this.value = undefined;\n this.notifyNgChanged(undefined);\n this.setHostElementAriaLabel();\n }\n /**\n * @hidden\n */\n onViewChange(view) {\n if (this.activeView === view) {\n return;\n }\n this.activeView = view;\n this.activeViewChange.emit(view);\n if (this.activeView === 'gradient') {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.gradient.gradientDragHandle.nativeElement.focus();\n });\n });\n }\n }\n /**\n * @hidden\n */\n onClearButtonClick() {\n this.resetInnerComponentValue();\n this.host.nativeElement.focus();\n }\n /**\n * @hidden\n */\n handleValueChange(color) {\n // eslint-disable-next-line no-unused-expressions\n this.preview ? this.changeCurrentValue(color) : this.setFlatColorPickerValue(color);\n }\n /**\n * @hidden\n */\n onAction(ev) {\n // eslint-disable-next-line no-unused-expressions\n ev.target === 'apply' ? this.setFlatColorPickerValue(this.selection) : this.resetSelection(ev.originalEvent);\n this.actionButtonClick.emit();\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.cdr.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n resetSelection(ev) {\n const eventArgs = new ColorPickerCancelEvent(ev);\n this.cancel.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.selection = this.value;\n }\n this.notifyNgTouched();\n }\n setHostElementAriaLabel() {\n const parsed = parseColor(this.value, this.format, this.gradientSettings.opacity);\n const ariaLabelValue = `${this.value ? parsed : this.localizationService.get('flatColorPickerNoColor')}`;\n this.renderer.setAttribute(this.host.nativeElement, 'aria-label', ariaLabelValue);\n }\n setSizingVariables() {\n const paletteTileSize = this.service.paletteTileLayout(this.paletteSettings.tileSize);\n const value = `--kendo-color-preview-columns: ${this.paletteSettings.columns};\n --kendo-color-preview-width: ${paletteTileSize.width}px;\n --kendo-color-preview-height: ${paletteTileSize.height}px;`;\n this.host.nativeElement.querySelector('.k-coloreditor-views.k-vstack').setAttribute('style', value);\n }\n changeCurrentValue(color) {\n this.selection = color;\n this.notifyNgTouched();\n }\n resetInnerComponentValue() {\n this.selection = null;\n if (this.gradient) {\n this.gradient.reset();\n return;\n }\n this.palette.reset();\n }\n setFlatColorPickerValue(color) {\n if (this.value === color) {\n return;\n }\n this.value = color;\n this.valueChange.emit(color);\n this.notifyNgChanged(color);\n this.setHostElementAriaLabel();\n }\n setActiveView() {\n if (!isPresent(this.activeView)) {\n this.activeView = this.views[0];\n return;\n }\n if (isDevMode() && this.views.indexOf(this.activeView) === -1) {\n throw new Error(\"Invalid configuration: The current activeView is not present in the views collection\");\n }\n }\n initDomEvents() {\n if (!this.host) {\n return;\n }\n let hostElement = this.host.nativeElement;\n this.ngZone.runOutsideAngular(() => {\n this.subscriptions.add(this.renderer.listen(hostElement, 'focus', () => {\n this.focused = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'blur', () => {\n this.focused = false;\n this.notifyNgTouched();\n }));\n });\n }\n}\nFlatColorPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: FlatColorPickerService }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nFlatColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FlatColorPickerComponent, selector: \"kendo-flatcolorpicker\", inputs: { readonly: \"readonly\", disabled: \"disabled\", format: \"format\", value: \"value\", tabindex: \"tabindex\", clearButton: \"clearButton\", preview: \"preview\", actionsLayout: \"actionsLayout\", activeView: \"activeView\", views: \"views\", gradientSettings: \"gradientSettings\", paletteSettings: \"paletteSettings\" }, outputs: { valueChange: \"valueChange\", cancel: \"cancel\", activeViewChange: \"activeViewChange\", actionButtonClick: \"actionButtonClick\" }, host: { properties: { \"class.k-flatcolorpicker\": \"this.hostClasses\", \"class.k-coloreditor\": \"this.hostClasses\", \"class.k-disabled\": \"this.disabledClass\", \"attr.aria-disabled\": \"this.disabledClass\", \"attr.aria-readonly\": \"this.ariaReadonly\", \"attr.dir\": \"this.direction\", \"attr.tabindex\": \"this.hostTabindex\" } }, providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FlatColorPickerComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => FlatColorPickerComponent)\n },\n FlatColorPickerService,\n FlatColorPickerLocalizationService,\n {\n provide: LocalizationService,\n useExisting: FlatColorPickerLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.flatcolorpicker'\n }\n ], viewQueries: [{ propertyName: \"header\", first: true, predicate: [\"header\"], descendants: true }, { propertyName: \"gradient\", first: true, predicate: [\"gradient\"], descendants: true }, { propertyName: \"palette\", first: true, predicate: [\"palette\"], descendants: true }, { propertyName: \"footer\", first: true, predicate: [\"footer\"], descendants: true }], exportAs: [\"kendoFlatColorPicker\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n`, isInline: true, components: [{ type: FlatColorPickerHeaderComponent, selector: \"[kendoFlatColorPickerHeader]\", inputs: [\"clearButton\", \"activeView\", \"views\", \"preview\", \"value\", \"selection\"], outputs: [\"viewChange\", \"valuePaneClick\", \"clearButtonClick\"] }, { type: ColorGradientComponent, selector: \"kendo-colorgradient\", inputs: [\"id\", \"opacity\", \"disabled\", \"readonly\", \"clearButton\", \"delay\", \"value\", \"contrastTool\", \"tabindex\", \"format\"], outputs: [\"valueChange\"], exportAs: [\"kendoColorGradient\"] }, { type: ColorPaletteComponent, selector: \"kendo-colorpalette\", inputs: [\"id\", \"format\", \"value\", \"columns\", \"palette\", \"tabindex\", \"disabled\", \"readonly\", \"tileSize\"], outputs: [\"selectionChange\", \"valueChange\", \"cellSelection\"], exportAs: [\"kendoColorPalette\"] }, { type: FlatColorPickerActionButtonsComponent, selector: \"[kendoFlatColorPickerActionButtons]\", outputs: [\"actionButtonClick\"] }], directives: [{ type: LocalizedColorPickerMessagesDirective, selector: \"[kendoColorPickerLocalizedMessages], [kendoFlatColorPickerLocalizedMessages], [kendoColorGradientLocalizedMessages], [kendoColorPaletteLocalizedMessages]\" }, { type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: FocusOnDomReadyDirective, selector: \"[kendoFocusOnDomReady]\" }, { type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatColorPickerComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoFlatColorPicker',\n selector: 'kendo-flatcolorpicker',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FlatColorPickerComponent)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => FlatColorPickerComponent)\n },\n FlatColorPickerService,\n FlatColorPickerLocalizationService,\n {\n provide: LocalizationService,\n useExisting: FlatColorPickerLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.flatcolorpicker'\n }\n ],\n template: `\n \n \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n`\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: FlatColorPickerService }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-flatcolorpicker']\n }, {\n type: HostBinding,\n args: ['class.k-coloreditor']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }, {\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], ariaReadonly: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], readonly: [{\n type: Input\n }], disabled: [{\n type: Input\n }], format: [{\n type: Input\n }], value: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], preview: [{\n type: Input\n }], actionsLayout: [{\n type: Input\n }], activeView: [{\n type: Input\n }], views: [{\n type: Input\n }], gradientSettings: [{\n type: Input\n }], paletteSettings: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], cancel: [{\n type: Output\n }], activeViewChange: [{\n type: Output\n }], actionButtonClick: [{\n type: Output\n }], header: [{\n type: ViewChild,\n args: ['header', { static: false }]\n }], gradient: [{\n type: ViewChild,\n args: ['gradient', { static: false }]\n }], palette: [{\n type: ViewChild,\n args: ['palette', { static: false }]\n }], footer: [{\n type: ViewChild,\n args: ['footer', { static: false }]\n }] } });\n\nconst DOM_FOCUS_EVENTS = ['focus', 'blur'];\nconst DEFAULT_SIZE$2 = 'medium';\nconst DEFAULT_ROUNDED$1 = 'medium';\nconst DEFAULT_FILL_MODE = 'solid';\n/**\n * Represents the [Kendo UI ColorPicker component for Angular]({% slug overview_colorpicker %}).\n *\n * The ColorPicker is a powerful tool for choosing colors from Gradient and Palette views\n * which are rendered in its popup. It supports previewing the selected color, reverting it to its previous state or clearing it completely.\n */\nclass ColorPickerComponent {\n constructor(host, popupService, cdr, localizationService, ngZone, renderer) {\n this.host = host;\n this.popupService = popupService;\n this.cdr = cdr;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.hostClasses = true;\n this.role = 'listbox';\n /**\n * Specifies the views that will be rendered in the popup.\n * By default both the gradient and palette views will be rendered.\n */\n this.views = ['gradient', 'palette'];\n /**\n * Sets the read-only state of the ColorPicker.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Sets the disabled state of the ColorPicker.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Specifies the output format of the ColorPicker.\n *\n * If the input value is in a different format, it will be parsed into the specified output `format`.\n *\n * The supported values are:\n * * `rgba` (default)\n * * `hex`\n */\n this.format = 'rgba';\n /**\n * Specifies whether the ColorPicker should display a 'Clear color' button.\n *\n * @default true\n */\n this.clearButton = true;\n /**\n * Displays `Apply` and `Cancel` action buttons and color preview panes.\n *\n * When enabled, the component value will not change immediately upon\n * color selection, but only after the `Apply` button is clicked.\n *\n * The `Cancel` button reverts the current selection to its\n * previous state i.e. to the current value.\n *\n * @default false\n */\n this.preview = false;\n /**\n * Configures the layout of the `Apply` and `Cancel` action buttons.\n *\n * The possible values are:\n * * `start`\n * * `center`\n * * `end` (default)\n * * `stretch`\n */\n this.actionsLayout = 'end';\n /**\n * Fires each time the value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires each time ColorPicker is focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the ColorPicker is blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires when the user cancels the current color selection.\n *\n * Fires on preview pane or 'Cancel' button click.\n */\n this.cancel = new EventEmitter();\n /**\n * Fires each time the left side of the ColorPicker wrapper is clicked.\n * The event is triggered regardless of whether a ColorPicker icon is set or not.\n *\n * The [ActiveColorClickEvent]({% slug api_inputs_activecolorclickevent %}) event provides the option to prevent the popup opening.\n */\n this.activeColorClick = new EventEmitter();\n /**\n * Fires each time the view is about to change.\n * Used to provide a two-way binding for the `activeView` property.\n */\n this.activeViewChange = new EventEmitter();\n /**\n * Indicates whether the ColorPicker wrapper is focused.\n */\n this.isFocused = false;\n this._tabindex = 0;\n this._popupSettings = { animate: true };\n this._paletteSettings = {};\n this._gradientSettings = { opacity: true, delay: 0 };\n this._size = 'medium';\n this._rounded = 'medium';\n this._fillMode = 'solid';\n this.subscriptions = new Subscription();\n this.notifyNgTouched = () => { };\n this.notifyNgChanged = () => { };\n this.domFocusListener = (event) => event.stopImmediatePropagation();\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n get focusedClass() {\n return this.isFocused;\n }\n get disabledClass() {\n return this.disabled;\n }\n get ariaReadonly() {\n return this.readonly;\n }\n get ariaExpanded() {\n return this.isOpen;\n }\n get hostTabindex() {\n return this.tabindex;\n }\n /**\n * @hidden\n */\n set view(view) {\n this.views = [view];\n }\n get view() {\n return (this.views && this.views.length > 0) ? this.views[0] : null;\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor(value, this.format, this.gradientSettings.opacity);\n }\n get value() {\n return this._value;\n }\n /**\n * Configures the popup of the ColorPicker.\n */\n set popupSettings(value) {\n this._popupSettings = Object.assign(this._popupSettings, value);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Configures the palette that is displayed in the ColorPicker popup.\n */\n set paletteSettings(value) {\n this._paletteSettings = Object.assign(this._paletteSettings, value);\n }\n get paletteSettings() {\n return this._paletteSettings;\n }\n /**\n * Configures the gradient that is displayed in the ColorPicker popup.\n */\n set gradientSettings(value) {\n this._gradientSettings = Object.assign(this._gradientSettings, value);\n }\n get gradientSettings() {\n return this._gradientSettings;\n }\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n *\n * @default 0\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * The size property specifies the padding of the ColorPicker internal elements\n * ([see example]({% slug appearance_colorpicker %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$2;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the ColorPicker\n * ([see example]({% slug appearance_colorpicker %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `full`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED$1;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * The fillMode property specifies the background and border styles of the ColorPicker\n * ([see example]({% slug appearance_colorpicker %}#toc-fillMode)).\n *\n * The possible values are:\n * * `flat`\n * * `solid` (default)\n * * `outline`\n * * `none`\n */\n set fillMode(fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE;\n this.handleClasses(newFillMode, 'fillMode');\n this._fillMode = newFillMode;\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * Indicates whether the ColorPicker popup is open.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n /**\n * @hidden\n */\n get iconStyles() {\n if (this.iconClass) {\n return this.iconClass;\n }\n if (this.icon) {\n return `k-icon k-i-${this.icon}`;\n }\n }\n ngOnInit() {\n const defaultPreset = (this.format !== 'name') ? DEFAULT_PRESET$1 : DEFAULT_ACCESSIBLE_PRESET$1;\n const settingsPalette = this._paletteSettings.palette;\n const presetColumns = typeof settingsPalette === 'string' && PALETTEPRESETS[settingsPalette] ?\n PALETTEPRESETS[settingsPalette].columns :\n undefined;\n this._paletteSettings = {\n palette: settingsPalette || defaultPreset,\n tileSize: this._paletteSettings.tileSize || 24,\n columns: this._paletteSettings.columns || presetColumns || 10\n };\n }\n ngAfterViewInit() {\n const stylingInputs = ['size', 'rounded', 'fillMode'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n this.setHostElementAriaLabel();\n this.handleHostId();\n this.initDomEvents();\n }\n ngOnChanges(changes) {\n if (changes.format && changes.format.currentValue === 'name') {\n this.activeView = 'palette';\n }\n if (this.activeView === 'gradient' && this.gradientSettings.opacity) {\n this.format = 'rgba';\n this.value = parseColor(this.value, this.format, this.gradientSettings.opacity);\n }\n if (isChanged('value', changes)) {\n this.setHostElementAriaLabel();\n }\n }\n ngOnDestroy() {\n this.closePopup();\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n this.subscriptions.unsubscribe();\n this.handleDomEvents('remove', DOM_FOCUS_EVENTS);\n }\n /**\n * @hidden\n */\n handleCancelEvent(ev) {\n this.cancel.emit(ev);\n }\n /**\n * @hidden\n */\n togglePopup() {\n this.focus();\n this.toggleWithEvents(!this.isOpen);\n }\n /**\n * @hidden\n */\n handleWrapperClick(event) {\n if (this.disabled) {\n return;\n }\n this.focus();\n if (closest$1(event.target, (element) => element === this.activeColor.nativeElement)) {\n const event = new ActiveColorClickEvent(this.value);\n this.activeColorClick.emit(event);\n if (!event.isOpenPrevented() || this.isOpen) {\n this.toggleWithEvents(!this.isOpen);\n }\n return;\n }\n this.toggleWithEvents(!this.isOpen);\n }\n /**\n * Focuses the wrapper of the ColorPicker.\n */\n focus() {\n this.isFocused = true;\n this.host.nativeElement.focus();\n }\n /**\n * @hidden\n */\n handleWrapperFocus() {\n if (this.isFocused) {\n return;\n }\n this.ngZone.run(() => {\n this.focus();\n this.onFocus.emit();\n });\n }\n /**\n * Blurs the ColorPicker.\n */\n blur() {\n this.isFocused = false;\n this.host.nativeElement.blur();\n this.notifyNgTouched();\n }\n /**\n * @hidden\n */\n handleWrapperBlur() {\n if (this.isOpen) {\n return;\n }\n this.ngZone.run(() => {\n this.onBlur.emit();\n this.isFocused = false;\n });\n }\n /**\n * Clears the value of the ColorPicker.\n */\n reset() {\n if (!isPresent(this.value)) {\n return;\n }\n this._value = undefined;\n this.setHostElementAriaLabel();\n this.notifyNgChanged(undefined);\n }\n /**\n * Toggles the popup of the ColorPicker.\n * Does not trigger the `open` and `close` events of the component.\n *\n * @param open An optional parameter. Specifies whether the popup will be opened or closed.\n */\n toggle(open) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.cdr.markForCheck();\n this.closePopup();\n open = isPresent(open) ? open : !this.isOpen;\n if (open) {\n this.openPopup();\n }\n }\n /**\n * @hidden\n */\n handleValueChange(color) {\n const parsedColor = parseColor(color, this.format, this.gradientSettings.opacity);\n const valueChange = parsedColor !== this.value;\n if (valueChange) {\n this.value = parsedColor;\n this.valueChange.emit(parsedColor);\n this.setHostElementAriaLabel();\n this.notifyNgChanged(parsedColor);\n }\n }\n /**\n * @hidden\n */\n handlePopupBlur(event) {\n if (this.popupBlurInvalid(event)) {\n return;\n }\n this.isFocused = false;\n this.onBlur.emit();\n this.notifyNgTouched();\n this.toggleWithEvents(false);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.cdr.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n handleWrapperKeyDown(event) {\n if (event.keyCode === Keys.ArrowDown || event.keyCode === Keys.Enter) {\n event.preventDefault();\n this.ngZone.run(() => {\n this.toggleWithEvents(true);\n });\n }\n }\n /**\n * @hidden\n */\n handlePopupKeyDown(event) {\n if (event.keyCode === Keys.Escape) {\n this.toggleWithEvents(false);\n this.host.nativeElement.focus();\n }\n if (event.keyCode === Keys.Tab) {\n const currentElement = event.shiftKey ? this.firstFocusableElement.nativeElement : this.lastFocusableElement.nativeElement;\n const nextElement = event.shiftKey ? this.lastFocusableElement.nativeElement : this.firstFocusableElement.nativeElement;\n if (event.target === currentElement) {\n event.preventDefault();\n nextElement.focus();\n }\n }\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n setHostElementAriaLabel() {\n const ariaLabelValue = `${this.value ? this.value : this.localizationService.get('colorPickerNoColor')}`;\n this.renderer.setAttribute(this.host.nativeElement, 'aria-label', ariaLabelValue);\n }\n handleClasses(value, input) {\n const elem = this.host.nativeElement;\n const classes = getStylingClasses('picker', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n popupBlurInvalid(ev) {\n const focusInFlatColorPickerElement = this.popupRef.popupElement.contains(ev.relatedTarget);\n const hostClicked = closest$1(ev.relatedTarget, (element) => element === this.host.nativeElement);\n return hostClicked || focusInFlatColorPickerElement;\n }\n toggleWithEvents(open) {\n const sameState = this.isOpen === open;\n if (this.disabled || this.readonly || sameState) {\n return;\n }\n let eventArgs;\n if (open) {\n eventArgs = new ColorPickerOpenEvent();\n this.open.emit(eventArgs);\n }\n else {\n eventArgs = new ColorPickerCloseEvent();\n this.close.emit(eventArgs);\n }\n if (!eventArgs.isDefaultPrevented()) {\n this.toggle(open);\n }\n if (open) {\n this.focusFirstElement();\n }\n }\n focusFirstElement() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n if (this.flatColorPicker) {\n const gradient = this.flatColorPicker.gradient;\n const elementToFocus = gradient ? gradient.gradientDragHandle :\n this.flatColorPicker.palette.host;\n elementToFocus.nativeElement.focus();\n }\n });\n }\n openPopup() {\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.activeColor,\n animate: this.popupSettings.animate,\n appendTo: this.popupSettings.appendTo,\n popupAlign: popupPosition,\n anchorAlign: anchorPosition,\n popupClass: 'k-colorpicker-popup',\n content: this.popupTemplate,\n positionMode: 'absolute'\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => {\n this.toggleWithEvents(false);\n if (!this.isOpen) {\n this.host.nativeElement.focus({\n preventScroll: true\n });\n }\n });\n }\n closePopup() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.close();\n this.popupRef = null;\n }\n get firstFocusableElement() {\n if (!this.flatColorPicker.header || (this.views.length <= 1 && !this.flatColorPicker.clearButton)) {\n const gradient = this.flatColorPicker.gradient;\n return gradient ? gradient.gradientDragHandle : this.flatColorPicker.palette.host;\n }\n return this.views.length > 1 ? this.flatColorPicker.header.viewButtonsCollection.toArray()[0] : this.flatColorPicker.header.clearButtonElement;\n }\n get lastFocusableElement() {\n if (this.preview) {\n return this.flatColorPicker.footer.lastButton;\n }\n if (this.flatColorPicker.palette) {\n return this.flatColorPicker.palette.host;\n }\n const gradient = this.flatColorPicker.gradient;\n const inputs = gradient && gradient.inputs;\n if (gradient && inputs && inputs.formatView === 'hex') {\n return inputs.hexInput;\n }\n return this.gradientSettings.opacity ? inputs.opacityInput.numericInput : inputs.blueInput;\n }\n handleDomEvents(action, events) {\n const hostElement = this.host.nativeElement;\n events.forEach(ev => hostElement[`${action}EventListener`](ev, this.domFocusListener, true));\n }\n initDomEvents() {\n if (!this.host) {\n return;\n }\n let hostElement = this.host.nativeElement;\n this.ngZone.runOutsideAngular(() => {\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n this.handleWrapperFocus();\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (event) => {\n const closestPopup = this.popupRef ?\n closest$1(event.relatedTarget, (element) => element === this.flatColorPicker.host.nativeElement) :\n false;\n const closestWrapper = closest$1(event.relatedTarget, (element) => element === this.host.nativeElement);\n if (!closestPopup && !closestWrapper) {\n this.handleWrapperBlur();\n }\n }));\n this.handleDomEvents('add', DOM_FOCUS_EVENTS);\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (event) => {\n this.handleWrapperKeyDown(event);\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'click', (event) => {\n this.ngZone.run(() => {\n this.handleWrapperClick(event);\n });\n }));\n });\n }\n handleHostId() {\n const hostElement = this.host.nativeElement;\n const existingId = hostElement.getAttribute('id');\n if (existingId) {\n this.focusableId = existingId;\n }\n else {\n const id = `k-${guid()}`;\n hostElement.setAttribute('id', id);\n this.focusableId = id;\n }\n }\n}\nColorPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: i1$3.PopupService }, { token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColorPickerComponent, selector: \"kendo-colorpicker\", inputs: { views: \"views\", view: \"view\", activeView: \"activeView\", readonly: \"readonly\", disabled: \"disabled\", format: \"format\", value: \"value\", popupSettings: \"popupSettings\", paletteSettings: \"paletteSettings\", gradientSettings: \"gradientSettings\", icon: \"icon\", iconClass: \"iconClass\", clearButton: \"clearButton\", tabindex: \"tabindex\", preview: \"preview\", actionsLayout: \"actionsLayout\", size: \"size\", rounded: \"rounded\", fillMode: \"fillMode\" }, outputs: { valueChange: \"valueChange\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\", cancel: \"cancel\", activeColorClick: \"activeColorClick\", activeViewChange: \"activeViewChange\" }, host: { properties: { \"class.k-colorpicker\": \"this.hostClasses\", \"class.k-icon-picker\": \"this.hostClasses\", \"class.k-picker\": \"this.hostClasses\", \"class.k-focus\": \"this.focusedClass\", \"attr.aria-disabled\": \"this.disabledClass\", \"class.k-disabled\": \"this.disabledClass\", \"attr.aria-readonly\": \"this.ariaReadonly\", \"attr.aria-expanded\": \"this.ariaExpanded\", \"attr.tabindex\": \"this.hostTabindex\", \"attr.dir\": \"this.direction\", \"attr.role\": \"this.role\" } }, providers: [{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPickerComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPickerComponent)\n },\n ColorPickerLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPickerLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpicker'\n }\n ], viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: \"activeColor\", first: true, predicate: [\"activeColor\"], descendants: true, static: true }, { propertyName: \"popupTemplate\", first: true, predicate: [\"popupTemplate\"], descendants: true, static: true }, { propertyName: \"flatColorPicker\", first: true, predicate: [\"flatColorPicker\"], descendants: true }], exportAs: [\"kendoColorPicker\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `, isInline: true, components: [{ type: FlatColorPickerComponent, selector: \"kendo-flatcolorpicker\", inputs: [\"readonly\", \"disabled\", \"format\", \"value\", \"tabindex\", \"clearButton\", \"preview\", \"actionsLayout\", \"activeView\", \"views\", \"gradientSettings\", \"paletteSettings\"], outputs: [\"valueChange\", \"cancel\", \"activeViewChange\", \"actionButtonClick\"], exportAs: [\"kendoFlatColorPicker\"] }], directives: [{ type: LocalizedColorPickerMessagesDirective, selector: \"[kendoColorPickerLocalizedMessages], [kendoFlatColorPickerLocalizedMessages], [kendoColorGradientLocalizedMessages], [kendoColorPaletteLocalizedMessages]\" }, { type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoColorPicker',\n selector: 'kendo-colorpicker',\n providers: [{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPickerComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPickerComponent)\n },\n ColorPickerLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPickerLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpicker'\n }],\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$3.PopupService }, { type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-colorpicker']\n }, {\n type: HostBinding,\n args: ['class.k-icon-picker']\n }, {\n type: HostBinding,\n args: ['class.k-picker']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], ariaReadonly: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], ariaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], views: [{\n type: Input\n }], view: [{\n type: Input\n }], activeView: [{\n type: Input\n }], readonly: [{\n type: Input\n }], disabled: [{\n type: Input\n }], format: [{\n type: Input\n }], value: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], paletteSettings: [{\n type: Input\n }], gradientSettings: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], preview: [{\n type: Input\n }], actionsLayout: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], cancel: [{\n type: Output\n }], activeColorClick: [{\n type: Output\n }], activeViewChange: [{\n type: Output\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], activeColor: [{\n type: ViewChild,\n args: ['activeColor', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], flatColorPicker: [{\n type: ViewChild,\n args: ['flatColorPicker', { static: false }]\n }] } });\n\n/**\n * Custom component messages override default component messages.\n */\nclass ColorPickerCustomMessagesComponent extends ColorPickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nColorPickerCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nColorPickerCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ColorPickerCustomMessagesComponent, selector: \"kendo-colorpicker-messages, kendo-flatcolorpicker-messages, kendo-colorgradient-messages, kendo-colorpalette-messages\", providers: [\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => ColorPickerCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => ColorPickerCustomMessagesComponent)\n }\n ],\n selector: 'kendo-colorpicker-messages, kendo-flatcolorpicker-messages, kendo-colorgradient-messages, kendo-colorpalette-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst PUBLIC_DIRECTIVES = [\n ColorPickerComponent,\n ColorPaletteComponent,\n ColorGradientComponent,\n FlatColorPickerComponent,\n LocalizedColorPickerMessagesDirective,\n ColorPickerCustomMessagesComponent\n];\nconst INTERNAL_DIRECTIVES = [\n ColorInputComponent,\n FocusOnDomReadyDirective,\n ContrastComponent,\n ContrastValidationComponent,\n FlatColorPickerHeaderComponent,\n FlatColorPickerActionButtonsComponent,\n ColorContrastSvgComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the ColorPicker.\n */\nclass ColorPickerModule {\n}\nColorPickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nColorPickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerModule, declarations: [ColorPickerComponent,\n ColorPaletteComponent,\n ColorGradientComponent,\n FlatColorPickerComponent,\n LocalizedColorPickerMessagesDirective,\n ColorPickerCustomMessagesComponent, ColorInputComponent,\n FocusOnDomReadyDirective,\n ContrastComponent,\n ContrastValidationComponent,\n FlatColorPickerHeaderComponent,\n FlatColorPickerActionButtonsComponent,\n ColorContrastSvgComponent], imports: [SliderModule,\n NumericTextBoxModule,\n CommonModule,\n PopupModule,\n DraggableModule], exports: [ColorPickerComponent,\n ColorPaletteComponent,\n ColorGradientComponent,\n FlatColorPickerComponent,\n LocalizedColorPickerMessagesDirective,\n ColorPickerCustomMessagesComponent] });\nColorPickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerModule, imports: [[\n SliderModule,\n NumericTextBoxModule,\n CommonModule,\n PopupModule,\n DraggableModule\n ]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ColorPickerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n PUBLIC_DIRECTIVES,\n INTERNAL_DIRECTIVES\n ],\n exports: [PUBLIC_DIRECTIVES],\n imports: [\n SliderModule,\n NumericTextBoxModule,\n CommonModule,\n PopupModule,\n DraggableModule\n ]\n }]\n }] });\n\nconst DEFAULT_SIZE$1 = 'medium';\nconst DEFAULT_ROUNDED = 'medium';\n/**\n * Represents the directive that renders the [Kendo UI CheckBox]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"checkbox\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nclass CheckBoxDirective {\n constructor(renderer, hostElement) {\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.kendoClass = true;\n this._size = 'medium';\n this._rounded = 'medium';\n }\n /**\n * The size property specifies the width and height of the CheckBox\n * ([see example]({% slug appearance_checkboxdirective %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE$1;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n /**\n * The rounded property specifies the border radius of the CheckBox\n * ([see example]({% slug appearance_checkboxdirective %}#toc-rounded)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set rounded(rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n this.handleClasses(newRounded, 'rounded');\n this._rounded = newRounded;\n }\n get rounded() {\n return this._rounded;\n }\n ngAfterViewInit() {\n const stylingInputs = ['size', 'rounded'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n handleClasses(value, input) {\n const elem = this.hostElement.nativeElement;\n const classes = getStylingClasses('checkbox', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n}\nCheckBoxDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCheckBoxDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CheckBoxDirective, selector: \"input[kendoCheckBox]\", inputs: { size: \"size\", rounded: \"rounded\" }, host: { properties: { \"class.k-checkbox\": \"this.kendoClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[kendoCheckBox]'\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { kendoClass: [{\n type: HostBinding,\n args: ['class.k-checkbox']\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }] } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the CheckBox directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the CheckBox module\n * import { CheckBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CheckBoxModule], // import CheckBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CheckBoxModule {\n}\nCheckBoxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCheckBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule, declarations: [CheckBoxDirective], imports: [CommonModule], exports: [CheckBoxDirective] });\nCheckBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [CheckBoxDirective],\n exports: [CheckBoxDirective],\n imports: [CommonModule]\n }]\n }] });\n\nconst DEFAULT_SIZE = 'medium';\n/**\n * Represents the directive that renders the [Kendo UI RadioButton]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"radio\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nclass RadioButtonDirective {\n constructor(renderer, hostElement) {\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.kendoClass = true;\n this._size = 'medium';\n validatePackage(packageMetadata);\n }\n /**\n * The size property specifies the width and height of the RadioButton\n * ([see example]({% slug appearance_radiobuttondirective %}#toc-size)).\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : DEFAULT_SIZE;\n this.handleClasses(newSize, 'size');\n this._size = newSize;\n }\n get size() {\n return this._size;\n }\n ngAfterViewInit() {\n // kept in sync with other inputs for easier refactoring\n // to a common base class\n const stylingInputs = ['size'];\n stylingInputs.forEach(input => {\n this.handleClasses(this[input], input);\n });\n }\n handleClasses(value, input) {\n const elem = this.hostElement.nativeElement;\n const classes = getStylingClasses('radio', input, this[input], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n}\nRadioButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RadioButtonDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nRadioButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: RadioButtonDirective, selector: \"input[kendoRadioButton]\", inputs: { size: \"size\" }, host: { properties: { \"class.k-radio\": \"this.kendoClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RadioButtonDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[kendoRadioButton]'\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { kendoClass: [{\n type: HostBinding,\n args: ['class.k-radio']\n }], size: [{\n type: Input\n }] } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the RadioButton directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the RadioButton module\n * import { RadioButtonModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, RadioButtonModule], // import RadioButton module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass RadioButtonModule {\n}\nRadioButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RadioButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nRadioButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RadioButtonModule, declarations: [RadioButtonDirective], imports: [CommonModule], exports: [RadioButtonDirective] });\nRadioButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RadioButtonModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: RadioButtonModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [RadioButtonDirective],\n exports: [RadioButtonDirective],\n imports: [CommonModule]\n }]\n }] });\n\nlet serial$1 = 0;\n/**\n * Represents an error message that will be shown underneath\n * a Kendo control or native HTML form-bound component after a validation.\n */\nclass ErrorComponent {\n constructor() {\n this.hostClass = true;\n /**\n * Specifies the alignment of the Error message.\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.align = 'start';\n /**\n * @hidden\n */\n this.id = `kendo-error-${serial$1++}`;\n this.roleAttribute = 'alert';\n }\n get startClass() {\n return this.align === 'start';\n }\n get endClass() {\n return this.align === 'end';\n }\n get idAttribute() {\n return this.id;\n }\n}\nErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ErrorComponent, selector: \"kendo-formerror\", inputs: { align: \"align\" }, host: { properties: { \"class.k-form-error\": \"this.hostClass\", \"attr.role\": \"this.roleAttribute\", \"class.k-text-start\": \"this.startClass\", \"class.k-text-end\": \"this.endClass\", \"attr.id\": \"this.idAttribute\" } }, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ErrorComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-formerror',\n template: `\n \n `\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-form-error']\n }], align: [{\n type: Input\n }], roleAttribute: [{\n type: HostBinding,\n args: ['attr.role']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-text-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-text-end']\n }], idAttribute: [{\n type: HostBinding,\n args: ['attr.id']\n }] } });\n\nlet serial = 0;\n/**\n * Represents a hint message that will be shown underneath a form-bound component.\n */\nclass HintComponent {\n constructor() {\n /**\n * Specifies the alignment of the Hint message.\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.align = 'start';\n /**\n * @hidden\n */\n this.id = `kendo-hint-${serial++}`;\n this.hostClass = true;\n }\n get startClass() {\n return this.align === 'start';\n }\n get endClass() {\n return this.align === 'end';\n }\n get idAttribute() {\n return this.id;\n }\n}\nHintComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nHintComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: HintComponent, selector: \"kendo-formhint\", inputs: { align: \"align\" }, host: { properties: { \"class.k-form-hint\": \"this.hostClass\", \"class.k-text-start\": \"this.startClass\", \"class.k-text-end\": \"this.endClass\", \"attr.id\": \"this.idAttribute\" } }, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HintComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-formhint',\n template: `\n \n `\n }]\n }], propDecorators: { align: [{\n type: Input\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-form-hint']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-text-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-text-end']\n }], idAttribute: [{\n type: HostBinding,\n args: ['attr.id']\n }] } });\n\n/**\n * Specifies a container for form-bound controls (Kendo controls or native HTML controls).\n * Applies styling and behavior rules.\n */\nclass FormFieldComponent {\n constructor(renderer, localizationService, hostElement) {\n this.renderer = renderer;\n this.localizationService = localizationService;\n this.hostElement = hostElement;\n this.hostClass = true;\n /**\n *\n * Specifies when the Hint messages will be shown.\n *\n * The possible values are:\n *\n * * (Default) `initial`—Allows displaying hints when the form-bound component state is\n * `valid` or `untouched` and `pristine`.\n * * `always`—Allows full control over the visibility of the hints.\n *\n */\n this.showHints = 'initial';\n /**\n * Specifies the layout orientation of the form field.\n *\n * * The possible values are:\n *\n * * (Default) `vertical`\n * * `horizontal`\n */\n this.orientation = 'vertical';\n /**\n * Specifies when the Error messages will be shown.\n *\n * The possible values are:\n *\n * * (Default) `initial`—Allows displaying errors when the form-bound component state is\n * `invalid` and `touched` or `dirty`.\n * * `always`—Allows full control over the visibility of the errors.\n *\n */\n this.showErrors = 'initial';\n this.subscriptions = new Subscription();\n this.rtl = false;\n validatePackage(packageMetadata);\n this.subscriptions.add(this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n }));\n }\n get errorClass() {\n if (!this.control) {\n return false;\n }\n return this.control.invalid && (this.control.touched || this.control.dirty);\n }\n get disabledClass() {\n if (!this.control) {\n return false;\n }\n // radiobutton group\n if (this.isRadioControl(this.control)) {\n return false;\n }\n return this.disabledControl() ||\n this.disabledElement() ||\n this.disabledKendoInput();\n }\n set formControls(formControls) {\n this.validateFormControl(formControls);\n this.control = formControls.first;\n }\n /**\n * @hidden\n */\n get horizontal() {\n return this.orientation === 'horizontal';\n }\n /**\n * @hidden\n */\n get hasHints() {\n return this.showHints === 'always' ? true : this.showHintsInitial();\n }\n /**\n * @hidden\n */\n get hasErrors() {\n return this.showErrors === 'always' ? true : this.showErrorsInitial();\n }\n ngAfterViewInit() {\n this.setDescription();\n }\n ngAfterViewChecked() {\n this.updateDescription();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n disabledKendoInput() {\n return this.kendoInput && this.kendoInput.disabled;\n }\n disabledControl() {\n return this.control.disabled;\n }\n disabledElement() {\n const elements = this.controlElementRefs.toArray();\n return elements.every(e => e.nativeElement.hasAttribute('disabled'));\n }\n validateFormControl(formControls) {\n if (isDevMode() && formControls.length !== 1 && !this.isControlGroup(formControls)) {\n throw new Error('The `kendo-formfield` component should contain ' +\n 'only one control of type NgControl with a formControlName(https://angular.io/api/forms/FormControlName)' +\n 'or an ngModel(https://angular.io/api/forms/NgModel) binding.');\n }\n }\n isControlGroup(formControls) {\n if (!formControls.length) {\n return false;\n }\n const name = formControls.first.name;\n return formControls.toArray().every(c => c.name === name && (this.isRadioControl(c)));\n }\n isRadioControl(control) {\n return control.valueAccessor instanceof RadioControlValueAccessor;\n }\n updateDescription() {\n const controls = this.findControlElements();\n if (!controls) {\n return;\n }\n controls.forEach((control) => {\n if (this.errorChildren.length > 0 || this.hintChildren.length > 0) {\n const ariaIds = this.generateDescriptionIds(control);\n if (ariaIds !== '') {\n this.renderer.setAttribute(control, 'aria-describedby', ariaIds);\n }\n else {\n this.renderer.removeAttribute(control, 'aria-describedby');\n }\n }\n });\n }\n findControlElements() {\n if (!this.controlElementRefs) {\n return;\n }\n // if the control is KendoInput and has focusableId - dropdowns, dateinputs\n if (this.kendoInput && this.kendoInput.focusableId && isDocumentAvailable()) {\n return [this.hostElement.nativeElement.querySelector(`#${this.kendoInput.focusableId}`)];\n }\n return this.controlElementRefs.map(el => el.nativeElement);\n }\n generateDescriptionIds(control) {\n const ids = new Set();\n let errorAttribute = '';\n if (control.hasAttribute('aria-describedby')) {\n const attributes = control.getAttribute('aria-describedby').split(' ');\n errorAttribute = attributes.filter(attr => attr.includes('kendo-error-'))[0];\n attributes.forEach((attr) => {\n if (attr.includes('kendo-hint-') || attr.includes('kendo-error-')) {\n return;\n }\n ids.add(attr);\n });\n }\n this.hintChildren.forEach((hint) => {\n ids.add(hint.id);\n });\n if (this.hasErrors) {\n this.errorChildren.forEach((error) => {\n ids.add(error.id);\n });\n }\n else {\n ids.delete(errorAttribute);\n }\n return Array.from(ids).join(' ');\n }\n showHintsInitial() {\n if (!this.control) {\n return true;\n }\n const { valid, untouched, pristine } = this.control;\n return valid || (untouched && pristine);\n }\n showErrorsInitial() {\n if (!this.control) {\n return false;\n }\n const { invalid, dirty, touched } = this.control;\n return invalid && (dirty || touched);\n }\n setDescription() {\n this.updateDescription();\n this.subscriptions.add(this.errorChildren.changes.subscribe(() => this.updateDescription()));\n this.subscriptions.add(this.hintChildren.changes.subscribe(() => this.updateDescription()));\n }\n}\nFormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nFormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FormFieldComponent, selector: \"kendo-formfield\", inputs: { showHints: \"showHints\", orientation: \"orientation\", showErrors: \"showErrors\" }, host: { properties: { \"class.k-form-field\": \"this.hostClass\", \"attr.dir\": \"this.direction\", \"class.k-form-field-error\": \"this.errorClass\", \"class.k-form-field-disabled\": \"this.disabledClass\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.formfield'\n }\n ], queries: [{ propertyName: \"kendoInput\", first: true, predicate: KendoInput, descendants: true, static: true }, { propertyName: \"formControls\", predicate: NgControl, descendants: true }, { propertyName: \"controlElementRefs\", predicate: NgControl, descendants: true, read: ElementRef }, { propertyName: \"errorChildren\", predicate: ErrorComponent, descendants: true }, { propertyName: \"hintChildren\", predicate: HintComponent, descendants: true }], ngImport: i0, template: `\n \n
    \n \n \n \n
    \n `, isInline: true, directives: [{ type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FormFieldComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-formfield',\n template: `\n \n
    \n \n \n \n
    \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.formfield'\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.ElementRef }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-form-field']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], errorClass: [{\n type: HostBinding,\n args: ['class.k-form-field-error']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-form-field-disabled']\n }], formControls: [{\n type: ContentChildren,\n args: [NgControl, { descendants: true }]\n }], controlElementRefs: [{\n type: ContentChildren,\n args: [NgControl, { read: ElementRef, descendants: true }]\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput, { static: true }]\n }], errorChildren: [{\n type: ContentChildren,\n args: [ErrorComponent, { descendants: true }]\n }], hintChildren: [{\n type: ContentChildren,\n args: [HintComponent, { descendants: true }]\n }], showHints: [{\n type: Input\n }], orientation: [{\n type: Input\n }], showErrors: [{\n type: Input\n }] } });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the FormField, Error and Hint components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the FormField module\n * import { FormFieldModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, FormFieldModule], // import FormField module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass FormFieldModule {\n}\nFormFieldModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nFormFieldModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FormFieldModule, declarations: [HintComponent, ErrorComponent, FormFieldComponent], imports: [CommonModule], exports: [HintComponent, ErrorComponent, FormFieldComponent] });\nFormFieldModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FormFieldModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FormFieldModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [HintComponent, ErrorComponent, FormFieldComponent],\n exports: [HintComponent, ErrorComponent, FormFieldComponent],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Inputs components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { InputsModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, InputsModule], // import Inputs module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass InputsModule {\n}\nInputsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: InputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nInputsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: InputsModule, imports: [CommonModule], exports: [TextAreaModule,\n TextBoxModule,\n SliderModule,\n RangeSliderModule,\n SwitchModule,\n NumericTextBoxModule,\n MaskedTextBoxModule,\n ColorPickerModule,\n CheckBoxModule,\n RadioButtonModule,\n FormFieldModule] });\nInputsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: InputsModule, imports: [[CommonModule], TextAreaModule,\n TextBoxModule,\n SliderModule,\n RangeSliderModule,\n SwitchModule,\n NumericTextBoxModule,\n MaskedTextBoxModule,\n ColorPickerModule,\n CheckBoxModule,\n RadioButtonModule,\n FormFieldModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: InputsModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [\n TextAreaModule,\n TextBoxModule,\n SliderModule,\n RangeSliderModule,\n SwitchModule,\n NumericTextBoxModule,\n MaskedTextBoxModule,\n ColorPickerModule,\n CheckBoxModule,\n RadioButtonModule,\n FormFieldModule\n ],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ActiveColorClickEvent, CheckBoxDirective, CheckBoxModule, ColorGradientComponent, ColorPaletteComponent, ColorPickerCancelEvent, ColorPickerCloseEvent, ColorPickerComponent, ColorPickerCustomMessagesComponent, ColorPickerModule, ColorPickerOpenEvent, ErrorComponent, FlatColorPickerComponent, FormFieldComponent, FormFieldModule, HintComponent, InputSeparatorComponent, InputsModule, LabelTemplateDirective, LocalizedColorPickerMessagesDirective, LocalizedNumericTextBoxMessagesDirective, LocalizedRangeSliderMessagesDirective, LocalizedSliderMessagesDirective, LocalizedSwitchMessagesDirective, LocalizedTextBoxMessagesDirective, MaskedTextBoxComponent, MaskedTextBoxModule, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, NumericTextBoxModule, RadioButtonDirective, RadioButtonModule, RangeSliderComponent, RangeSliderCustomMessagesComponent, RangeSliderModule, SharedModule, SliderComponent, SliderCustomMessagesComponent, SliderModule, SliderTicksComponent, SwitchComponent, SwitchCustomMessagesComponent, SwitchModule, TextAreaComponent, TextAreaDirective, TextAreaModule, TextAreaSuffixComponent, TextBoxComponent, TextBoxCustomMessagesComponent, TextBoxDirective, TextBoxModule, TextBoxPrefixTemplateDirective, TextBoxSuffixTemplateDirective };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { EventEmitter, LOCALE_ID, Injectable, Inject, Pipe, NgModule } from '@angular/core';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as intl from '@progress/kendo-intl';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-intl',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1668698299,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\nconst DOCS_URL = 'http://www.telerik.com/kendo-angular-ui/components/internationalization/troubleshooting/';\n/**\n * @hidden\n */\nconst errorSolutions = {\n 'NoCurrency': `Solution: ${DOCS_URL}#toc-no-currency`,\n 'NoCurrencyDisplay': `Solution: ${DOCS_URL}#toc-no-currency-display`,\n 'NoCurrencyRegion': `Solution: ${DOCS_URL}#toc-no-currency-region`,\n 'NoDateFieldNames': `Solution: ${DOCS_URL}#toc-no-date-filed-names`,\n 'NoFirstDay': `Solution: ${DOCS_URL}#toc-no-first-day`,\n 'NoGMTInfo': `Solution: ${DOCS_URL}#toc-no-gmt-info`,\n 'NoLocale': `Solution: ${DOCS_URL}#toc-no-locale`,\n 'NoValidCurrency': `Solution: ${DOCS_URL}#toc-no-valid-currency`,\n 'NoWeekData': `Solution: ${DOCS_URL}#toc-no-week-data`\n};\n\nfunction formatMessage(error) {\n const message = error.message;\n const errorSolution = errorSolutions[Object.keys(errorSolutions).filter(key => message.indexOf(key) === 0)[0]];\n return errorSolution ? `${message} ${errorSolution}` : message;\n}\nfunction intlMethod(fn) {\n return function (...values) {\n try {\n return fn.apply(null, values);\n }\n catch (error) {\n error.message = formatMessage(error);\n throw error;\n }\n };\n}\n/**\n * @hidden\n */\nconst dateFormatNames = intlMethod(intl.dateFormatNames);\n/**\n * @hidden\n */\nconst dateFieldName = intlMethod(intl.dateFieldName);\n/**\n * @hidden\n */\nconst firstDay = intlMethod(intl.firstDay);\n/**\n * @hidden\n */\nconst format = intlMethod(intl.format);\n/**\n * @hidden\n */\nconst formatDate = intlMethod(intl.formatDate);\n/**\n * @hidden\n */\nconst formatNumber = intlMethod(intl.formatNumber);\n/**\n * @hidden\n */\nconst load = intlMethod(intl.load);\n/**\n * @hidden\n */\nconst numberSymbols = intlMethod(intl.numberSymbols);\n/**\n * @hidden\n */\nconst parseDate = intlMethod(intl.parseDate);\n/**\n * @hidden\n */\nconst parseNumber = intlMethod(intl.parseNumber);\n/**\n * @hidden\n */\nconst splitDateFormat = intlMethod(intl.splitDateFormat);\n/**\n * @hidden\n */\nconst toString = intlMethod(intl.toString);\n/**\n * @hidden\n */\nconst weekendRange = intlMethod(intl.weekendRange);\n/**\n * Sets a pre-built locale.\n *\n * @params data - The pre-built locale data.\n */\nconst setData = (data) => intl.setData(data);\n/**\n * Retrieves the locale data for the specified locale.\n *\n * @params locale - The locale id.\n * @returns data - The locale data.\n */\nconst localeData = (locale) => {\n try {\n return intl.localeInfo(locale);\n }\n catch (error) {\n error.message = formatMessage(error);\n throw error;\n }\n};\n\nconst LOCALE_REGEX = /_/g;\n/**\n * @hidden\n */\nfunction cldrServiceFactory(localeId) {\n return new CldrIntlService(localeId);\n}\n/**\n * An abstract base class that implements\n * the Internationalization service methods\n * for the current locale.\n */\nclass IntlService {\n /**\n * @hidden\n */\n constructor() {\n /**\n * @hidden\n */\n this.changes = new EventEmitter();\n validatePackage(packageMetadata);\n }\n /**\n * Notifies that the service was changed.\n */\n notify() {\n this.changes.emit();\n }\n}\nIntlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IntlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIntlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IntlService, providedIn: 'root', useFactory: cldrServiceFactory, deps: [{ token: LOCALE_ID }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IntlService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n useFactory: cldrServiceFactory,\n deps: [LOCALE_ID]\n }]\n }], ctorParameters: function () { return []; } });\n/**\n * The Internationalization service implemented by using\n * the CLDR Database via the `@progress/kendo-intl` package.\n */\nclass CldrIntlService extends IntlService {\n /**\n * Creates a new instance of the service with the ID of the specified locale.\n *\n * Note that the parts of the locale ID can be separated by either `_` (underscore)\n * or `-` (dash).\n *\n * @param localeId - The default locale ID.\n */\n constructor(localeId) {\n super();\n this.localeId = localeId;\n }\n /**\n * Gets or sets the current locale ID.\n */\n get localeId() {\n return this.locale;\n }\n set localeId(value) {\n // Angular locales use underscore, for example, en_US\n // while IETF BCP-47 specifies a dash.\n // https://tools.ietf.org/html/bcp47\n const locale = value.replace(LOCALE_REGEX, '-');\n if (locale !== this.locale) {\n this.locale = locale;\n this.notify();\n }\n }\n /**\n * Formats a string with placeholders such as\n * `Total amount {0:c}`.\n *\n * @param format - The format string.\n * @param values - One or more values to output in the format string placeholders.\n * @return - The formatted string.\n */\n format(format$1, ...values) {\n return format(format$1, values, this.localeId);\n }\n /**\n * Converts an object into a string based on the specified format.\n *\n * @param value - The value to format.\n * @param format - The format to use.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The formatted object.\n */\n toString(value, format, localeId) {\n return toString(value, format, localeId || this.localeId);\n }\n /**\n * Converts a `Date` object into a string based on the specified format.\n * If no format is provided, the default short date format is used.\n *\n * @param value - The date to format.\n * @param format - The format string or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The formatted date.\n */\n formatDate(value, format, localeId) {\n return formatDate(value, format, localeId || this.localeId);\n }\n /**\n * Converts a string into a `Date` object based on the specified format.\n *\n * @param value - The string to convert.\n * @param format - The format strings or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The parsed date.\n */\n parseDate(value, format, localeId) {\n return parseDate(value, format, localeId || this.localeId);\n }\n /**\n * Converts a string into a `Number`.\n *\n * @param value - The string to convert.\n * @param format - The format string or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The parsed number.\n */\n parseNumber(value, format, localeId) {\n return parseNumber(value, localeId || this.localeId, format);\n }\n /**\n * Converts a `Number` into a string based on the specified format.\n *\n * @param value - The number to format.\n * @param format - The format string or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The formatted number.\n */\n formatNumber(value, format, localeId) {\n return formatNumber(value, format, localeId || this.localeId);\n }\n /**\n * Returns the date names from the current locale based on the option.\n *\n * The available `type` values are:\n * - `era`\n * - `year`\n * - `quarter`\n * - `month`\n * - `week`\n * - `day`\n * - `dayperiod`\n * - `hour`\n * - `minute`\n * - `second`\n * - `zone`\n *\n * The available `nameType` values are:\n * - `wide`\n * - `narrow`\n * - `short`\n *\n * @param options - Detailed configuration for the desired date field name.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return - The day names from the current locale based on the option.\n * @returns The localized date field name from the current locale based on the option.\n *\n * @example\n * ```\n * dateFieldName({ type: 'day' }); //returns 'day';\n * dateFieldName({ type: 'day', nameType: 'wide' }); //returns 'day';\n * dateFieldName({ type: 'month', nameType: 'short' }); //returns 'mo.';\n * dateFieldName({ type: 'month', nameType: 'wide' }); //returns 'month';\n * ```\n */\n dateFieldName(options, localeId) {\n return dateFieldName(options, localeId || this.localeId);\n }\n /**\n * Returns a localized date field name based on specific dateFieldName options.\n *\n * The available type values are:\n * - `day`\n * - `dayperiod`\n * - `months`\n * - `quarters`\n * - `eras`\n *\n * @param options - Detailed configuration for the desired date format.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return - The day names from the current locale based on the option.\n */\n dateFormatNames(options, localeId) {\n return dateFormatNames(localeId || this.localeId, options);\n }\n /**\n * Splits the date format into objects containing information about each part of the pattern.\n *\n * @param format The format string or options.\n * @param localeId The optional locale id. If not specified, the `\"en\"` locale id is used.\n * @returns The date format parts.\n */\n splitDateFormat(format, localeId) {\n return splitDateFormat(format, localeId || this.localeId);\n }\n /**\n * Returns the number symbols from the current locale based on the option.\n *\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return - The number symbols from the current locale.\n */\n numberSymbols(localeId) {\n return numberSymbols(localeId || this.localeId);\n }\n /**\n * Returns the first day index starting from Sunday.\n *\n * @param localeId - The locale ID. Defaults to the current locale ID.\n * @return - The index of the first day of the week (0 == Sunday).\n */\n firstDay(localeId) {\n return firstDay(localeId || this.localeId);\n }\n /**\n * Returns the start and end index of the locale weekend starting from Sunday.\n *\n * @param localeId - The locale ID. Defaults to the current locale ID.\n * @return - The the start and end index of the locale weekend (0 == Sunday).\n */\n weekendRange(localeId) {\n return weekendRange(localeId || this.localeId);\n }\n}\nCldrIntlService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CldrIntlService, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable });\nCldrIntlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CldrIntlService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CldrIntlService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; } });\n\nconst isNumeric = (value) => !isNaN(value - parseFloat(value));\n/**\n * Formats a date value to a string based on the requested format.\n * This pipe uses the [IntlService]({% slug api_intl_intlservice %}).\n *\n * @example\n * ```ng-template-no-run\n *
      \n *
    • {{date | kendoDate }}
    • \n *
    • {{milliseconds | kendoDate: 'M/dd/yyy' }}
    • \n *
    • {{stringDate | kendoDate: 'G' }}
    • \n *
    \n * ```\n */\nclass DatePipe {\n /**\n * @hidden\n */\n constructor(intlService) {\n this.intlService = intlService;\n }\n /**\n * Converts a `Date` object into a string based on the specified format.\n * If no format is provided, the default short date format is used.\n *\n * @param value - The date to format.\n * @param format - The format string or options.\n * @param localeId - (Optional) The ID of the locale which will be used instead of the default one.\n * @return - The formatted date.\n */\n transform(value, format = \"\", localeId) {\n value = this.normalize(value);\n if (value) {\n return this.intlService.formatDate(value, format, localeId);\n }\n return value;\n }\n normalize(value) {\n if (value && typeof value === 'string') {\n value = this.intlService.parseDate(value);\n }\n else if (value && isNumeric(value)) {\n value = new Date(parseFloat(value));\n }\n return value;\n }\n}\nDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePipe, deps: [{ token: IntlService }], target: i0.ɵɵFactoryTarget.Pipe });\nDatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePipe, name: \"kendoDate\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DatePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'kendoDate'\n }]\n }], ctorParameters: function () { return [{ type: IntlService }]; } });\n\n/**\n * Formats a number value to a string based on the requested format.\n * This pipe uses the [`IntlService`]({% slug api_intl_intlservice %}).\n *\n * @example\n * ```ng-template-no-run\n *
      \n *
    • {{decimal | kendoNumber:'c' }}
    • \n *
    • {{stringNumber | kendoNumber:'p' }}
    • \n *
    • {{int | kendoNumber:'##.00' }}
    • \n *
    \n * ```\n */\nclass NumberPipe {\n /**\n * @hidden\n */\n constructor(intlService) {\n this.intlService = intlService;\n }\n /**\n * Converts a `Number` object into a string based on the specified format.\n * If no format is provided, the value is formatted as decimal number using the\n * [`\"n\"`](https://github.com/telerik/kendo-intl/blob/master/docs/num-formatting/index.md#standard) format.\n *\n * @param value - The numer that will be formatted.\n * @param format - The format string or options.\n * @param localeId - (Optional) The locale ID that will be used in place of the default one.\n * @return - The formatted number.\n */\n transform(value, format, localeId) {\n if (typeof value === 'string') {\n value = this.intlService.parseNumber(value);\n }\n if (value !== null && value !== undefined) {\n return this.intlService.formatNumber(value, format, localeId);\n }\n return value;\n }\n}\nNumberPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumberPipe, deps: [{ token: IntlService }], target: i0.ɵɵFactoryTarget.Pipe });\nNumberPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumberPipe, name: \"kendoNumber\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NumberPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'kendoNumber'\n }]\n }], ctorParameters: function () { return [{ type: IntlService }]; } });\n\nconst pipes = [\n DatePipe,\n NumberPipe\n];\n/**\n * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi']docs/ts/latest/guide/ngmodule.html)\n * definition for the Intl services.\n */\nclass IntlModule {\n}\nIntlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IntlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nIntlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IntlModule, declarations: [DatePipe,\n NumberPipe], exports: [DatePipe,\n NumberPipe] });\nIntlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IntlModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IntlModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [pipes],\n exports: [pipes]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CldrIntlService, DatePipe, IntlModule, IntlService, NumberPipe, cldrServiceFactory, dateFieldName, dateFormatNames, firstDay, format, formatDate, formatNumber, load, localeData, numberSymbols, parseDate, parseNumber, setData, splitDateFormat, toString, weekendRange };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { Injectable, Directive, InjectionToken, Inject, Optional } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { skip, map, tap } from 'rxjs/operators';\n\n/**\n * A base class for a service that returns localized messages.\n *\n * For more information, refer to the section on [using the message service]({% slug messages_l10n %}#toc-using-the-message-service).\n */\nclass MessageService {\n /**\n * @hidden\n */\n constructor() {\n /**\n * @hidden\n */\n this.changes = new BehaviorSubject({ rtl: undefined });\n }\n /**\n * Notifies the components that the messages were changed.\n *\n * @param rtl - (Optional) A new value for the [text direction token]({% slug api_l10n_rtl %}).\n */\n notify(rtl) {\n this.changes.next({ rtl });\n }\n /**\n * Returns a localized message for the supplied key.\n *\n * @param _key - The message key. For example, `\"kendo.grid.noRecords\"`.\n * @return - The localized message for this key or `undefined` if not found.\n */\n get(_key) {\n return undefined;\n }\n}\nMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MessageService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: MessageService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\n/**\n * Base class that acts as a component messages container.\n *\n * For internal use.\n * @hidden\n */\nclass ComponentMessages {\n get override() {\n return false;\n }\n ngOnChanges(changes) {\n this.register(changes);\n if (Object.keys(changes).some(field => !changes[field].isFirstChange())) {\n this.service.notifyChanges();\n }\n }\n ngOnInit() {\n this.subscription = this.service.changes.pipe(skip(1)).subscribe(() => this.register(this));\n }\n register(changes) {\n const keys = Object.keys(changes);\n keys.forEach(key => this.service.register(key, this[key], this.override));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\nComponentMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComponentMessages, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nComponentMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ComponentMessages, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ComponentMessages, decorators: [{\n type: Directive,\n args: [{}]\n }] });\n\n/**\n * A token that specifies the text direction of Kendo UI for Angular components.\n *\n * @example\n * {% meta height:230 %}\n * {% embed_file rtl/app.module.ts preview %}\n * {% embed_file rtl/app.component.ts %}\n * {% embed_file shared/main.ts hidden %}\n * {% endmeta %}\n *\n */\nconst RTL = new InjectionToken(\"Kendo UI Right-to-Left token\");\n\n/**\n * Localization prefix for the component messages.\n *\n * For internal use.\n * @hidden\n */\nconst L10N_PREFIX = new InjectionToken('Localization key prefix');\n/**\n * Component localization service.\n *\n * For internal use.\n * @hidden\n */\nclass LocalizationService {\n constructor(prefix, messageService, _rtl) {\n this.prefix = prefix;\n this.messageService = messageService;\n this._rtl = _rtl;\n this.changes = new BehaviorSubject({ rtl: this._rtl });\n this.dictionary = {};\n if (messageService) {\n this.subscription = messageService.changes\n .pipe(map(({ rtl }) => rtl !== undefined ? rtl : this._rtl), tap(rtl => this._rtl = rtl))\n .subscribe(rtl => {\n this.dictionary = {};\n this.changes.next({ rtl });\n });\n }\n }\n get rtl() {\n return this._rtl;\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n get(shortKey) {\n const key = this.key(shortKey);\n return this.dictionary[key];\n }\n register(shortKey, value, override = false) {\n const key = this.key(shortKey);\n let message = value;\n if (!override) {\n if (this.dictionary.hasOwnProperty(key)) {\n return;\n }\n message = this.defaultValue(key, value);\n }\n this.dictionary[key] = message;\n }\n notifyChanges() {\n this.changes.next({ rtl: this.rtl });\n }\n key(shortKey) {\n return this.prefix + '.' + shortKey;\n }\n defaultValue(key, value) {\n if (!this.messageService) {\n return value;\n }\n const alt = this.messageService.get(key);\n return (alt === undefined) ? value : alt;\n }\n}\nLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizationService, deps: [{ token: L10N_PREFIX }, { token: MessageService, optional: true }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [L10N_PREFIX]\n }] }, { type: MessageService, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; } });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ComponentMessages, L10N_PREFIX, LocalizationService, MessageService, RTL };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { isDevMode, Component, HostBinding, Input, Directive, forwardRef, EventEmitter, Output, ViewChild, ContentChild, NgModule } from '@angular/core';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport * as i2 from '@progress/kendo-angular-common';\nimport { hasObservers, isChanged, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport * as i3 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-progressbar',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1668698393,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nconst MIN_MAX_ERROR_MESSAGE = `The max value should be greater than the min.`;\n/**\n * @hidden\n */\nconst LABEL_DECIMALS = 3;\n/**\n * @hidden\n */\nconst MIN_RATIO = 0.0001;\n\n/**\n * @hidden\n */\nconst reverseChunks = (orientation, reverse) => (orientation === 'vertical' && !reverse || orientation === 'horizontal' && reverse);\n/**\n * @hidden\n */\nconst formatValue = (value, min, max, label) => {\n const defaultFormattedValue = truncateNumber(value);\n if (typeof label !== 'boolean') {\n if (typeof label.format === 'string') {\n switch (label.format) {\n case 'value':\n return defaultFormattedValue;\n case 'percent':\n return `${Math.floor(calculatePercentage(value, min, max))}%`;\n default:\n return defaultFormattedValue;\n }\n }\n else if (typeof label.format === 'function') {\n return label.format(value);\n }\n else {\n return defaultFormattedValue;\n }\n }\n return defaultFormattedValue;\n};\n/**\n * @hidden\n */\nconst validateRange = (min, max) => {\n if (isDevMode && min > max) {\n throw new Error(MIN_MAX_ERROR_MESSAGE);\n }\n};\n/**\n * @hidden\n */\nconst adjustValueToRange = (min, max, value) => Math.max(Math.min(value, max), min);\n/**\n * @hidden\n */\nconst calculatePercentage = (value, min, max) => {\n const onePercent = Math.abs((max - min) / 100);\n return Math.abs((value - min) / onePercent);\n};\n/**\n * @hidden\n */\nconst truncateNumber = (value) => {\n const numberParts = value.toString().split('.');\n return numberParts.length === 1 ? `${numberParts[0]}` : `${numberParts[0]}.${numberParts[1].substr(0, LABEL_DECIMALS)}`;\n};\n/**\n * @hidden\n */\nconst calculateRatio = (min, max, value) => Math.max((value - min) / (max - min), MIN_RATIO);\n/**\n * @hidden\n */\nconst extractValueFromChanges = (changes, type, value) => changes[type] && changes[type].currentValue !== undefined ? changes[type].currentValue : value;\n/**\n * @hidden\n */\nconst runAnimation = (changes, animation, previousValue, displayValue) => animation && typeof requestAnimationFrame !== 'undefined' && changes.value && previousValue !== displayValue;\n/**\n * @hidden\n */\nconst stopCurrentAnimation = (changes) => {\n const isAnimationChanged = Boolean(changes.animation);\n const hasAnimation = isAnimationChanged && changes.animation.currentValue;\n return isAnimationChanged && !hasAnimation;\n};\n/**\n * @hidden\n */\nconst setProgressBarStyles = (props, renderer) => {\n props.forEach(prop => {\n renderer[prop.method](prop.el, prop.attr, `${prop.attrValue}`);\n });\n};\n/**\n * @hidden\n */\nconst removeProgressBarStyles = (props, renderer) => {\n props.forEach(prop => {\n renderer[prop.method](prop.el, prop.attr);\n });\n};\n/**\n * @hidden\n */\nconst hasElementSize = (element) => {\n return element.style.width && element.style.height;\n};\n\n/**\n * @hidden\n */\nclass ProgressBarBase {\n /**\n * @hidden\n */\n constructor(elem, renderer, localization) {\n this.elem = elem;\n this.renderer = renderer;\n this.localization = localization;\n this.hostClasses = true;\n this.roleAttribute = 'progressbar';\n /**\n * The maximum value of the ProgressBar.\n * Defaults to `100`.\n */\n this.max = 100;\n /**\n * The minimum value of the ProgressBar.\n * Defaults to `0`.\n */\n this.min = 0;\n /**\n * The value of the ProgressBar.\n * Has to be between `min` and `max`.\n * By default, the value is equal to the `min` value.\n */\n /**\n * The value of the ProgressBar.\n * Has to be between `min` and `max`.\n * Defaults to `0`.\n */\n this.value = 0;\n /**\n * Defines the orientation of the ProgressBar\n * ([see example]({% slug progressbar_orientation %})).\n * Defaults to `horizontal`.\n */\n this.orientation = 'horizontal';\n /**\n * If set to `true`, the ProgressBar will be disabled\n * ([see example]({% slug progressbar_disabled %})).\n * It will still allow you to change its value.\n * Defaults to `false`.\n */\n this.disabled = false;\n /**\n * If set to `true`, the ProgressBar will be reversed\n * ([see example]({% slug progressbar_direction %})).\n * Defaults to `false`.\n */\n this.reverse = false;\n /**\n * Sets the `indeterminate` state of the ProgressBar.\n * Defaults to `false`.\n */\n this.indeterminate = false;\n this.displayValue = 0;\n this.previousValue = 0;\n validatePackage(packageMetadata);\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n get isHorizontal() {\n return this.orientation === 'horizontal';\n }\n get isVertical() {\n return this.orientation === 'vertical';\n }\n get disabledClass() {\n return this.disabled;\n }\n get reverseClass() {\n return this.reverse;\n }\n get indeterminateClass() {\n return this.indeterminate;\n }\n get dirAttribute() {\n return this.direction;\n }\n get ariaMinAttribute() {\n return String(this.min);\n }\n get ariaMaxAttribute() {\n return String(this.max);\n }\n get ariaValueAttribute() {\n return this.indeterminate ? undefined : String(this.displayValue);\n }\n /**\n * @hidden\n */\n get isCompleted() {\n return this.value === this.max;\n }\n /**\n * @hidden\n */\n get statusWidth() {\n return this.orientation === 'horizontal' ? this._progressRatio * 100 : 100;\n }\n /**\n * @hidden\n */\n get statusHeight() {\n return this.orientation === 'vertical' ? this._progressRatio * 100 : 100;\n }\n /**\n * @hidden\n */\n get statusWrapperWidth() {\n return this.orientation === 'horizontal' ? 100 / this._progressRatio : 100;\n }\n /**\n * @hidden\n */\n get statusWrapperHeight() {\n return this.orientation === 'vertical' ? 100 / this._progressRatio : 100;\n }\n get _progressRatio() {\n return calculateRatio(this.min, this.max, this.displayValue);\n }\n ngAfterViewInit() {\n const elem = this.elem.nativeElement;\n const label = this.localization.get('progressBarLabel');\n this.renderer.setAttribute(elem, 'aria-label', label);\n }\n ngOnChanges(changes) {\n const min = extractValueFromChanges(changes, 'min', this.min);\n const max = extractValueFromChanges(changes, 'max', this.max);\n const value = extractValueFromChanges(changes, 'value', this.value);\n if (changes.min || changes.max || changes.value) {\n if (changes.min || changes.max) {\n validateRange(min, max);\n }\n if (changes.value) {\n if (value == null || Number.isNaN(value)) {\n this.value = min;\n }\n const previousValue = this.displayValue;\n this.displayValue = adjustValueToRange(this.min, this.max, value);\n this.previousValue = previousValue;\n }\n this.min = min;\n this.max = max;\n this.displayValue = adjustValueToRange(this.min, this.max, value);\n }\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n}\nProgressBarBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarBase, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nProgressBarBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ProgressBarBase, selector: \"ng-component\", inputs: { max: \"max\", min: \"min\", value: \"value\", orientation: \"orientation\", disabled: \"disabled\", reverse: \"reverse\", indeterminate: \"indeterminate\" }, host: { properties: { \"class.k-progressbar\": \"this.hostClasses\", \"class.k-progressbar-horizontal\": \"this.isHorizontal\", \"class.k-progressbar-vertical\": \"this.isVertical\", \"class.k-disabled\": \"this.disabledClass\", \"class.k-progressbar-reverse\": \"this.reverseClass\", \"class.k-progressbar-indeterminate\": \"this.indeterminateClass\", \"attr.dir\": \"this.dirAttribute\", \"attr.role\": \"this.roleAttribute\", \"attr.aria-valuemin\": \"this.ariaMinAttribute\", \"attr.aria-valuemax\": \"this.ariaMaxAttribute\", \"attr.aria-valuenow\": \"this.ariaValueAttribute\" } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarBase, decorators: [{\n type: Component,\n args: [{\n template: ''\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-progressbar']\n }], isHorizontal: [{\n type: HostBinding,\n args: ['class.k-progressbar-horizontal']\n }], isVertical: [{\n type: HostBinding,\n args: ['class.k-progressbar-vertical']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], reverseClass: [{\n type: HostBinding,\n args: ['class.k-progressbar-reverse']\n }], indeterminateClass: [{\n type: HostBinding,\n args: ['class.k-progressbar-indeterminate']\n }], dirAttribute: [{\n type: HostBinding,\n args: ['attr.dir']\n }], roleAttribute: [{\n type: HostBinding,\n args: ['attr.role']\n }], ariaMinAttribute: [{\n type: HostBinding,\n args: ['attr.aria-valuemin']\n }], ariaMaxAttribute: [{\n type: HostBinding,\n args: ['attr.aria-valuemax']\n }], ariaValueAttribute: [{\n type: HostBinding,\n args: ['attr.aria-valuenow']\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], value: [{\n type: Input\n }], orientation: [{\n type: Input\n }], disabled: [{\n type: Input\n }], reverse: [{\n type: Input\n }], indeterminate: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass ProgressBarMessages extends ComponentMessages {\n}\nProgressBarMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nProgressBarMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ProgressBarMessages, selector: \"kendo-progressbar-messages-base\", inputs: { progressBarLabel: \"progressBarLabel\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-progressbar-messages-base'\n }]\n }], propDecorators: { progressBarLabel: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedProgressBarMessagesDirective extends ProgressBarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedProgressBarMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedProgressBarMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedProgressBarMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedProgressBarMessagesDirective, selector: \"[kendoProgressBarLocalizedMessages]\", providers: [\n {\n provide: ProgressBarMessages,\n useExisting: forwardRef(() => LocalizedProgressBarMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedProgressBarMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: ProgressBarMessages,\n useExisting: forwardRef(() => LocalizedProgressBarMessagesDirective)\n }\n ],\n selector: `[kendoProgressBarLocalizedMessages]`\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Represents the [Kendo UI ProgressBar component for Angular]({% slug overview_progressbar %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public value = 50;\n * }\n * ```\n */\nclass ProgressBarComponent extends ProgressBarBase {\n /**\n * @hidden\n */\n constructor(localization, elem, renderer, zone) {\n super(elem, renderer, localization);\n this.localization = localization;\n this.elem = elem;\n this.renderer = renderer;\n this.zone = zone;\n /**\n * Determines whether the status label will be visible.\n * Defaults to `true`—the label will be visible and displayed with the default\n * `LabelSettings` having its position set to `end` and its format set to `value`.\n */\n this.label = true;\n /**\n * The animation configuration of the ProgressBar.\n * Defaults to `false`.\n */\n this.animation = false;\n /**\n * Fires when the animation which indicates the latest value change is completed.\n */\n this.animationEnd = new EventEmitter();\n }\n /**\n * @hidden\n */\n get showLabel() {\n if (typeof this.label === 'boolean') {\n return this.label;\n }\n else {\n if (this.label && !this.label.hasOwnProperty('visible')) {\n this.label.visible = true;\n }\n return this.label.visible;\n }\n }\n /**\n * @hidden\n */\n get labelPosition() {\n if (typeof this.label === 'boolean') {\n return 'end';\n }\n else {\n if (this.label && !this.label.hasOwnProperty('position')) {\n this.label.position = 'end';\n }\n return this.label.position;\n }\n }\n /**\n * @hidden\n */\n get isPositionStart() {\n return this.labelPosition === 'start';\n }\n /**\n * @hidden\n */\n get isPositionCenter() {\n return this.labelPosition === 'center';\n }\n /**\n * @hidden\n */\n get isPositionEnd() {\n return this.labelPosition === 'end';\n }\n /**\n * @hidden\n */\n get formattedLabelValue() {\n return formatValue(this.displayValue, this.min, this.max, this.label);\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n if (this.isAnimationInProgress && stopCurrentAnimation(changes)) {\n this.cancelCurrentAnimation = true;\n }\n if (runAnimation(changes, this.animation, this.previousValue, this.displayValue) && !changes.value.firstChange) {\n this.startAnimation(this.previousValue);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.animationFrame) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n /**\n * @hidden\n */\n startAnimation(previousValue) {\n this.isAnimationInProgress = true;\n const element = this.progressStatusElement.nativeElement;\n const wrapperElement = this.progressStatusWrapperElement.nativeElement;\n const animationOptions = this.getAnimationOptions(previousValue);\n this.zone.runOutsideAngular(() => {\n if (this.animationFrame) {\n cancelAnimationFrame(this.animationFrame);\n }\n const animate = () => {\n const elapsed = new Date().getTime() - animationOptions.startTime;\n const position = Math.min(elapsed / animationOptions.duration, 1);\n const size = animationOptions.startSize + animationOptions.deltaSize * position;\n const wrapperSize = (100 / size) * 100;\n this.renderValueChange(element, wrapperElement, animationOptions.property, size, wrapperSize);\n if (position < 1) {\n if (this.cancelCurrentAnimation) {\n this.resetProgress(element, wrapperElement, animationOptions.property);\n return;\n }\n this.animationFrame = requestAnimationFrame(animate);\n }\n else {\n this.stopAnimation(previousValue);\n }\n };\n animate();\n });\n }\n /**\n * @hidden\n */\n get animationDuration() {\n if (typeof this.animation === 'boolean') {\n return 400;\n }\n else {\n if (this.animation && !this.animation.hasOwnProperty('duration')) {\n this.animation.duration = 400;\n }\n return this.animation.duration;\n }\n }\n stopAnimation(value) {\n if (hasObservers(this.animationEnd)) {\n this.zone.run(() => {\n this.animationEnd.emit({\n from: value,\n to: this.displayValue\n });\n });\n }\n this.zone.run(() => {\n this.isAnimationInProgress = false;\n });\n }\n getAnimationOptions(value) {\n const isHorizontal = this.orientation === 'horizontal';\n const previousRatio = calculateRatio(this.min, this.max, value);\n const previousStatusWidth = isHorizontal ? previousRatio * 100 : 100;\n const previousStatusHeight = !isHorizontal ? previousRatio * 100 : 100;\n const property = isHorizontal ? 'width' : 'height';\n const startTime = new Date().getTime();\n const startSize = isHorizontal ? previousStatusWidth : previousStatusHeight;\n const deltaSize = isHorizontal ? this.statusWidth - previousStatusWidth : this.statusHeight - previousStatusHeight;\n const duration = this.animationDuration * Math.abs((deltaSize / 100));\n return {\n property,\n startTime,\n startSize,\n deltaSize,\n duration\n };\n }\n renderValueChange(element, wrapperElement, property, size, wrapperSize) {\n this.renderer.setStyle(element, property, size + '%');\n this.renderer.setStyle(wrapperElement, property, wrapperSize + '%');\n }\n resetProgress(element, wrapperElement, property) {\n const size = calculateRatio(this.min, this.max, this.value);\n const newSize = size * 100;\n const newWrapperSize = 100 / size;\n this.renderValueChange(element, wrapperElement, property, newSize, newWrapperSize);\n this.zone.run(() => {\n this.cancelCurrentAnimation = false;\n this.isAnimationInProgress = false;\n });\n }\n}\nProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ProgressBarComponent, selector: \"kendo-progressbar\", inputs: { label: \"label\", progressCssStyle: \"progressCssStyle\", progressCssClass: \"progressCssClass\", emptyCssStyle: \"emptyCssStyle\", emptyCssClass: \"emptyCssClass\", animation: \"animation\" }, outputs: { animationEnd: \"animationEnd\" }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.progressbar'\n }\n ], viewQueries: [{ propertyName: \"progressStatusElement\", first: true, predicate: [\"progressStatus\"], descendants: true }, { propertyName: \"progressStatusWrapperElement\", first: true, predicate: [\"progressStatusWrap\"], descendants: true }], exportAs: [\"kendoProgressBar\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `\n \n \n \n {{formattedLabelValue}}\n \n \n \n {{formattedLabelValue}}\n \n \n `, isInline: true, directives: [{ type: LocalizedProgressBarMessagesDirective, selector: \"[kendoProgressBarLocalizedMessages]\" }, { type: i3.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i3.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoProgressBar',\n selector: 'kendo-progressbar',\n template: `\n \n \n \n {{formattedLabelValue}}\n \n \n \n {{formattedLabelValue}}\n \n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.progressbar'\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { label: [{\n type: Input\n }], progressCssStyle: [{\n type: Input\n }], progressCssClass: [{\n type: Input\n }], emptyCssStyle: [{\n type: Input\n }], emptyCssClass: [{\n type: Input\n }], animation: [{\n type: Input\n }], animationEnd: [{\n type: Output\n }], progressStatusElement: [{\n type: ViewChild,\n args: ['progressStatus', { static: false }]\n }], progressStatusWrapperElement: [{\n type: ViewChild,\n args: ['progressStatusWrap', { static: false }]\n }] } });\n\n/**\n * Represents the [Kendo UI ChunkProgressBar component for Angular]({% slug overview_chunkprogressbar %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public value = 40;\n * }\n * ```\n */\nclass ChunkProgressBarComponent extends ProgressBarBase {\n /**\n * @hidden\n */\n constructor(localization, elem, renderer) {\n super(elem, renderer, localization);\n this.localization = localization;\n this.elem = elem;\n this.renderer = renderer;\n /**\n * Sets the number of chunks into which the ChunkProgressBar will be split.\n * Defaults to `5`.\n */\n this.chunkCount = 5;\n this._orientationStyles = {\n width: `${this.chunkSizePercentage}%`\n };\n }\n /**\n * @hidden\n */\n get chunks() {\n const count = this.chunkCount;\n const chunks = Array(count).fill(false);\n const completedChunks = Math.floor(this._progressRatio * count);\n for (let i = 0; i < completedChunks; i++) {\n chunks[i] = true;\n }\n if (reverseChunks(this.orientation, this.reverse)) {\n chunks.reverse();\n }\n return chunks;\n }\n /**\n * @hidden\n */\n get chunkSizePercentage() {\n return 100 / this.chunkCount;\n }\n /**\n * @hidden\n */\n get orientationStyles() {\n if (this.orientation === 'horizontal') {\n this._orientationStyles.width = `${this.chunkSizePercentage}%`;\n this._orientationStyles.height = undefined;\n }\n else {\n this._orientationStyles.height = `${this.chunkSizePercentage}%`;\n this._orientationStyles.width = undefined;\n }\n return this._orientationStyles;\n }\n}\nChunkProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChunkProgressBarComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nChunkProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ChunkProgressBarComponent, selector: \"kendo-chunkprogressbar\", inputs: { chunkCount: \"chunkCount\", progressCssStyle: \"progressCssStyle\", progressCssClass: \"progressCssClass\", emptyCssStyle: \"emptyCssStyle\", emptyCssClass: \"emptyCssClass\" }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chunkprogressbar'\n }\n ], exportAs: [\"kendoChunkProgressBar\"], usesInheritance: true, ngImport: i0, template: `\n \n \n
      \n
    • \n
    • \n
    \n `, isInline: true, directives: [{ type: LocalizedProgressBarMessagesDirective, selector: \"[kendoProgressBarLocalizedMessages]\" }, { type: i3.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i3.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i3.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ChunkProgressBarComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoChunkProgressBar',\n selector: 'kendo-chunkprogressbar',\n template: `\n \n \n
      \n
    • \n
    • \n
    \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chunkprogressbar'\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { chunkCount: [{\n type: Input\n }], progressCssStyle: [{\n type: Input\n }], progressCssClass: [{\n type: Input\n }], emptyCssStyle: [{\n type: Input\n }], emptyCssClass: [{\n type: Input\n }] } });\n\n/**\n * A directive that selects a template within the component which will be used for the center template.\n * ([see example]({% slug center_template_circularprogressbar %})).\n */\nclass CircularProgressbarCenterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCircularProgressbarCenterTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CircularProgressbarCenterTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCircularProgressbarCenterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CircularProgressbarCenterTemplateDirective, selector: \"[kendoCircularProgressbarCenterTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CircularProgressbarCenterTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCircularProgressbarCenterTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst DEFAULT_SURFACE_SIZE = 200;\n/**\n * Represents the [Kendo UI Circular ProgressBar component for Angular]({% slug overview_circularprogressbar %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public value: number = 50;\n * }\n * ```\n */\nclass CircularProgressBarComponent {\n constructor(renderer, cdr, localization, element, zone) {\n this.renderer = renderer;\n this.cdr = cdr;\n this.localization = localization;\n this.element = element;\n this.zone = zone;\n this.hostClasses = true;\n this.roleAttribute = 'progressbar';\n /**\n * Indicates whether an animation will be played on value changes.\n *\n * @default false\n */\n this.animation = false;\n /**\n * The opacity of the value arc.\n * @default 1\n */\n this.opacity = 1;\n /**\n * Fires when the animation which indicates the latest value change is completed.\n */\n this.animationEnd = new EventEmitter();\n this.centerTemplateContext = {};\n this._indeterminate = false;\n this._max = 100;\n this._min = 0;\n this._value = 0;\n this.previousValue = 0;\n this.internalValue = 0;\n this.subscriptions = new Subscription();\n validatePackage(packageMetadata);\n this.subscriptions.add(this.localization.changes.subscribe(this.rtlChange.bind(this)));\n }\n get ariaMinAttribute() {\n return String(this.min);\n }\n get ariaMaxAttribute() {\n return String(this.max);\n }\n get ariaValueAttribute() {\n return this.indeterminate ? undefined : String(this.value);\n }\n /**\n * Sets the default value of the Circular Progressbar between `min` and `max`.\n *\n * @default 0\n */\n set value(value) {\n if (value > this.max) {\n this.handleErrors('value > max');\n }\n if (value < this.min) {\n this.handleErrors('value < min');\n }\n this.previousValue = this.value;\n this._value = value;\n }\n get value() {\n return this._value;\n }\n /**\n * The maximum value which the Circular Progressbar can accept.\n *\n * @default 100\n */\n set max(max) {\n if (max < this.min) {\n this.handleErrors('max < min');\n }\n this._max = max;\n }\n get max() {\n return this._max;\n }\n /**\n * The minimum value which the Circular Progressbar can accept.\n *\n * @default 0\n */\n set min(min) {\n if (min > this.max) {\n this.handleErrors('max < min');\n }\n this._min = min;\n }\n get min() {\n return this._min;\n }\n /**\n * Puts the Circular ProgressBar in indeterminate state.\n * @default false\n */\n set indeterminate(indeterminate) {\n this._indeterminate = indeterminate;\n }\n get indeterminate() {\n return this._indeterminate;\n }\n ngAfterViewInit() {\n const elem = this.element.nativeElement;\n const ariaLabel = this.localization.get('progressBarLabel');\n this.renderer.setAttribute(elem, 'aria-label', ariaLabel);\n this.initProgressArc();\n }\n ngOnChanges(changes) {\n const skipFirstChange = true;\n if (isChanged('value', changes, skipFirstChange) && this.progress) {\n if (this.animation) {\n this.progressbarAnimation();\n }\n else {\n const value = this.value - this.min;\n this.internalValue = changes.value.currentValue;\n this.calculateProgress(value);\n }\n }\n if (changes.opacity && this.progress) {\n setProgressBarStyles([{ method: 'setAttribute', el: this.progress.nativeElement, attr: 'opacity', attrValue: this.opacity }], this.renderer);\n }\n if (changes.indeterminate && !changes.indeterminate.firstChange) {\n this.indeterminateState();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n onResize(_event) {\n this.setStyles();\n const value = this.animation ? this.internalValue : this.value;\n this.calculateProgress(value);\n this.updateCenterTemplate(value);\n }\n initProgressArc() {\n this.setStyles();\n if (this.indeterminate) {\n this.indeterminateState();\n }\n else {\n if (!this.animation) {\n const value = this.value - this.min;\n this.calculateProgress(value);\n }\n else {\n this.progressbarAnimation();\n }\n }\n }\n calculateProgress(value) {\n if (this.progressColor) {\n this.updateProgressColor(value);\n }\n // needed when we have *ngIf inside the template to render different content depending on some condition\n this.zone.onStable.pipe(take(1)).subscribe(() => {\n this.updateCenterTemplate(value + this.min);\n });\n const progressArc = this.progress.nativeElement;\n const radius = this.progress.nativeElement.r.baseVal.value;\n const circumference = Math.PI * (radius * 2);\n const dir = this.rtl ? circumference * -1 : circumference;\n const strokeDashOffest = circumference - dir * (value / (this.max - this.min));\n const progressCalculations = [\n { method: 'setStyle', el: progressArc, attr: 'strokeDasharray', attrValue: circumference },\n { method: 'setStyle', el: progressArc, attr: 'strokeDashoffset', attrValue: strokeDashOffest }\n ];\n setProgressBarStyles(progressCalculations, this.renderer);\n }\n progressbarAnimation() {\n const forwardProgress = {\n isOngoing: this.internalValue > this.value - this.min,\n isPositive: this.value >= this.previousValue\n };\n const backwardProgress = {\n isOngoing: this.internalValue < this.value - this.min,\n isNegative: this.value <= this.previousValue\n };\n if (forwardProgress.isOngoing && forwardProgress.isPositive ||\n backwardProgress.isOngoing && backwardProgress.isNegative) {\n return;\n }\n this.calculateProgress(this.internalValue);\n const from = this.internalValue;\n if (hasObservers(this.animationEnd)) {\n this.animationEnd.emit({\n from: from,\n to: this.internalValue\n });\n }\n // eslint-disable-next-line no-unused-expressions\n forwardProgress.isPositive ? this.internalValue += 1 : this.internalValue -= 1;\n requestAnimationFrame(this.progressbarAnimation.bind(this));\n }\n setStyles() {\n const progressArc = this.progress.nativeElement;\n const scale = this.scale.nativeElement;\n const surface = this.surface.nativeElement;\n const element = this.element.nativeElement;\n let elWidth = element.getBoundingClientRect().width;\n ;\n if (!hasElementSize(element)) {\n const surfaceSize = [\n { method: 'setStyle', el: surface, attr: 'width', attrValue: `${DEFAULT_SURFACE_SIZE}px` },\n { method: 'setStyle', el: surface, attr: 'height', attrValue: `${DEFAULT_SURFACE_SIZE}px` }\n ];\n elWidth = DEFAULT_SURFACE_SIZE;\n setProgressBarStyles(surfaceSize, this.renderer);\n }\n const attributesArray = [\n { method: 'setAttribute', el: progressArc, attr: 'r', attrValue: (elWidth / 2) - 10 },\n { method: 'setAttribute', el: progressArc, attr: 'cx', attrValue: (elWidth / 2) },\n { method: 'setAttribute', el: progressArc, attr: 'cy', attrValue: (elWidth / 2) },\n { method: 'setAttribute', el: progressArc, attr: 'opacity', attrValue: this.opacity },\n { method: 'setAttribute', el: scale, attr: 'r', attrValue: (elWidth / 2) - 10 },\n { method: 'setAttribute', el: scale, attr: 'cx', attrValue: (elWidth / 2) },\n { method: 'setAttribute', el: scale, attr: 'cy', attrValue: (elWidth / 2) }\n ];\n setProgressBarStyles(attributesArray, this.renderer);\n }\n indeterminateState() {\n const progressArc = this.progress.nativeElement;\n if (this.indeterminate) {\n // the indeterminate state wont work as the `k-circular-progressbar-arc` has a transform: rotate(-90deg) which is \n // interfering with the svg animation as the animateTransform brings its own transform: rotate()\n // This will be like this until the themes release a new version, bringing a new class `k-circular-progressbar-indeterminate-arc`\n // containing only the necassery CSS styles and we will switch between them when the state of the progressbar is switched. \n this.calculateProgress(this.value - this.min);\n const rotate = this.rtl ? { from: 360, to: 0 } : { from: 0, to: 360 };\n let color;\n if (!this.progressColor) {\n color = getComputedStyle(progressArc).stroke;\n }\n const indeterminateStyles = [\n { method: 'setStyle', el: progressArc, attr: 'transform-origin', attrValue: 'center' },\n { method: 'setStyle', el: progressArc, attr: 'fill', attrValue: 'none' },\n { method: 'setStyle', el: progressArc, attr: 'stroke-linecap', attrValue: 'round' },\n { method: 'setStyle', el: progressArc, attr: 'stroke', attrValue: color ? color : this.currentColor }\n ];\n setProgressBarStyles(indeterminateStyles, this.renderer);\n this.renderer.removeClass(progressArc, 'k-circular-progressbar-arc');\n progressArc.innerHTML = ``;\n }\n else {\n this.renderer.addClass(progressArc, 'k-circular-progressbar-arc');\n const removeIndeterminateStyles = [\n { method: 'removeStyle', el: progressArc, attr: 'transform-origin' },\n { method: 'removeStyle', el: progressArc, attr: 'fill' },\n { method: 'removeStyle', el: progressArc, attr: 'stroke-linecap' }\n ];\n removeProgressBarStyles(removeIndeterminateStyles, this.renderer);\n progressArc.innerHTML = '';\n if (this.animation) {\n this.progressbarAnimation();\n }\n }\n }\n updateCenterTemplate(value) {\n if (!this.centerTemplate) {\n return;\n }\n this.centerTemplateContext.value = value;\n this.centerTemplateContext.color = this.currentColor;\n this.cdr.detectChanges();\n this.positionLabel();\n }\n positionLabel() {\n const labelEl = this.labelElement.nativeElement;\n const element = this.element.nativeElement;\n const surface = this.surface.nativeElement;\n let elWidth;\n let elHeight;\n if (!hasElementSize(element)) {\n const surfaceSize = surface.getBoundingClientRect();\n elWidth = surfaceSize.width;\n elHeight = surfaceSize.height;\n }\n else {\n const elementSize = element.getBoundingClientRect();\n elWidth = elementSize.width;\n elHeight = elementSize.height;\n }\n const left = (elWidth / 2) - (labelEl.offsetWidth / 2);\n const top = (elHeight / 2) - (labelEl.offsetHeight / 2);\n const labelCalculations = [\n { method: 'setStyle', el: labelEl, attr: 'left', attrValue: `${left}px` },\n { method: 'setStyle', el: labelEl, attr: 'top', attrValue: `${top}px` }\n ];\n setProgressBarStyles(labelCalculations, this.renderer);\n }\n get currentColor() {\n const currentColor = this.progress.nativeElement.style.stroke;\n return currentColor;\n }\n updateProgressColor(value) {\n const progressArc = this.progress.nativeElement;\n if (typeof this.progressColor === 'string') {\n this.renderer.setStyle(progressArc, 'stroke', this.progressColor);\n }\n else {\n for (let i = 0; i < this.progressColor.length; i++) {\n let from = this.progressColor[i].from;\n let to = this.progressColor[i].to;\n if (value >= from && value <= to || (!from && value <= to)) {\n this.renderer.setStyle(progressArc, 'stroke', this.progressColor[i].color);\n break;\n }\n if (!to && value >= from) {\n this.renderer.setStyle(progressArc, 'stroke', this.progressColor[i].color);\n }\n }\n }\n }\n handleErrors(type) {\n if (isDevMode()) {\n switch (type) {\n case 'value > max':\n throw new Error('The value of the CircularProgressbar cannot exceed the max value');\n case 'value < min':\n throw new Error('The value of the CircularProgressbar cannot be lower than the min value');\n case 'max < min':\n throw new Error('The min value cannot be higher than the max value');\n default:\n }\n }\n }\n setDirection() {\n this.rtl = this.localization.rtl;\n if (this.element) {\n this.renderer.setAttribute(this.element.nativeElement, 'dir', this.rtl ? 'rtl' : 'ltr');\n }\n if (this.labelElement) {\n this.renderer.setAttribute(this.labelElement.nativeElement, 'dir', this.rtl ? 'rtl' : 'ltr');\n }\n }\n rtlChange() {\n if (this.element && this.rtl !== this.localization.rtl) {\n this.setDirection();\n }\n }\n}\nCircularProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CircularProgressBarComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nCircularProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CircularProgressBarComponent, selector: \"kendo-circularprogressbar\", inputs: { value: \"value\", max: \"max\", min: \"min\", animation: \"animation\", opacity: \"opacity\", indeterminate: \"indeterminate\", progressColor: \"progressColor\" }, outputs: { animationEnd: \"animationEnd\" }, host: { properties: { \"class.k-circular-progressbar\": \"this.hostClasses\", \"attr.aria-valuemin\": \"this.ariaMinAttribute\", \"attr.aria-valuemax\": \"this.ariaMaxAttribute\", \"attr.aria-valuenow\": \"this.ariaValueAttribute\", \"attr.role\": \"this.roleAttribute\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.circularprogressbar'\n }\n ], queries: [{ propertyName: \"centerTemplate\", first: true, predicate: CircularProgressbarCenterTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"progress\", first: true, predicate: [\"progress\"], descendants: true }, { propertyName: \"scale\", first: true, predicate: [\"scale\"], descendants: true }, { propertyName: \"labelElement\", first: true, predicate: [\"label\"], descendants: true }, { propertyName: \"surface\", first: true, predicate: [\"surface\"], descendants: true }], exportAs: [\"kendoCircularProgressBar\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n
    \n
    \n \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n \n `, isInline: true, components: [{ type: i2.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedProgressBarMessagesDirective, selector: \"[kendoProgressBarLocalizedMessages]\" }, { type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CircularProgressBarComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoCircularProgressBar',\n selector: 'kendo-circularprogressbar',\n template: `\n \n \n
    \n
    \n \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n \n `, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.circularprogressbar'\n }\n ]\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-circular-progressbar']\n }], ariaMinAttribute: [{\n type: HostBinding,\n args: ['attr.aria-valuemin']\n }], ariaMaxAttribute: [{\n type: HostBinding,\n args: ['attr.aria-valuemax']\n }], ariaValueAttribute: [{\n type: HostBinding,\n args: ['attr.aria-valuenow']\n }], roleAttribute: [{\n type: HostBinding,\n args: ['attr.role']\n }], value: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], animation: [{\n type: Input\n }], opacity: [{\n type: Input\n }], indeterminate: [{\n type: Input\n }], progressColor: [{\n type: Input\n }], animationEnd: [{\n type: Output\n }], progress: [{\n type: ViewChild,\n args: ['progress']\n }], scale: [{\n type: ViewChild,\n args: ['scale']\n }], labelElement: [{\n type: ViewChild,\n args: [\"label\"]\n }], surface: [{\n type: ViewChild,\n args: [\"surface\"]\n }], centerTemplate: [{\n type: ContentChild,\n args: [CircularProgressbarCenterTemplateDirective]\n }] } });\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_layout %})).\n */\nclass ProgressBarCustomMessagesComponent extends ProgressBarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nProgressBarCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nProgressBarCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ProgressBarCustomMessagesComponent, selector: \"kendo-progressbar-messages\", providers: [\n {\n provide: ProgressBarMessages,\n useExisting: forwardRef(() => ProgressBarCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ProgressBarMessages,\n useExisting: forwardRef(() => ProgressBarCustomMessagesComponent)\n }\n ],\n selector: 'kendo-progressbar-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst COMPONENT_DIRECTIVES = [\n ProgressBarComponent,\n ChunkProgressBarComponent,\n CircularProgressBarComponent,\n CircularProgressbarCenterTemplateDirective,\n LocalizedProgressBarMessagesDirective,\n ProgressBarCustomMessagesComponent\n];\nconst MODULES = [CommonModule, ResizeSensorModule];\n/**\n * Represents the [NgModule](link:site.data.urls.angular['ngmodules'])\n * definition for the ProgressBar components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the ProgressBar module\n * import { ProgressBarModule } from '@progress/kendo-angular-progressbar';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ProgressBarModule], // import ProgressBar module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ProgressBarModule {\n}\nProgressBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nProgressBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarModule, declarations: [ProgressBarComponent,\n ChunkProgressBarComponent,\n CircularProgressBarComponent,\n CircularProgressbarCenterTemplateDirective,\n LocalizedProgressBarMessagesDirective,\n ProgressBarCustomMessagesComponent], imports: [CommonModule, ResizeSensorModule], exports: [ProgressBarComponent,\n ChunkProgressBarComponent,\n CircularProgressBarComponent,\n CircularProgressbarCenterTemplateDirective,\n LocalizedProgressBarMessagesDirective,\n ProgressBarCustomMessagesComponent] });\nProgressBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarModule, imports: [MODULES] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ProgressBarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: COMPONENT_DIRECTIVES,\n exports: COMPONENT_DIRECTIVES,\n imports: MODULES\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ChunkProgressBarComponent, CircularProgressBarComponent, CircularProgressbarCenterTemplateDirective, LocalizedProgressBarMessagesDirective, ProgressBarComponent, ProgressBarCustomMessagesComponent, ProgressBarModule };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { Directive, Optional, Injectable, isDevMode, Component, SkipSelf, Host, Input, ViewChild, HostBinding, ViewChildren, ContentChildren, EventEmitter, Output, ContentChild, HostListener, Inject, QueryList, NgZone, forwardRef, ElementRef, ViewEncapsulation, TemplateRef, NgModule } from '@angular/core';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport * as i1$1 from '@progress/kendo-angular-common';\nimport { Keys, PreventableEvent as PreventableEvent$1, isDocumentAvailable, hasObservers, EventsModule, DraggableModule, ResizeSensorModule, isChanged } from '@progress/kendo-angular-common';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i1$2 from '@angular/animations';\nimport { trigger, state, style, transition, animate, AUTO_STYLE } from '@angular/animations';\nimport { Subject, BehaviorSubject, Subscription, of } from 'rxjs';\nimport * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { delay, takeUntil, map, tap, filter, switchMap, take } from 'rxjs/operators';\nimport * as i4 from '@progress/kendo-angular-progressbar';\nimport { ProgressBarModule } from '@progress/kendo-angular-progressbar';\nimport Draggable from '@progress/kendo-draggable';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-layout',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1659509319,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * Represents the expand modes of the PanelBar.\n * By default, the expand mode is set to `multiple`.\n */\nvar PanelBarExpandMode;\n(function (PanelBarExpandMode) {\n /**\n * Allows you to expand only one item at a time.\n * When you expand an item, the item that was previously expanded is coll.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Single\"] = 0] = \"Single\";\n /**\n * Allows you to expand only one item at a time and requires you to set the `height` property.\n * The expanded area occupies the entire height of the PanelBar.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Full\"] = 1] = \"Full\";\n /**\n * The default mode of the PanelBar.\n * Allows you to expand more than one item at a time. Items can also be toggled.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Multiple\"] = 2] = \"Multiple\";\n /**\n * By default, the expand mode is set to `multiple`.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Default\"] = 2] = \"Default\";\n})(PanelBarExpandMode || (PanelBarExpandMode = {}));\n\n/**\n * Represents the content template of the declaratively initialized PanelBar items.\n * The content can be expanded or collapsed through the item.\n */\nclass PanelBarContentDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPanelBarContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nPanelBarContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PanelBarContentDirective, selector: \"[kendoPanelBarContent]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarContentDirective, decorators: [{\n type: Directive,\n args: [{\n selector: \"[kendoPanelBarContent]\"\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Represents the template directive of the PanelBar which helps to customize the item title\n * ([more information and example]({% slug templates_panelbar %}#toc-customizing-the-appearance-of-the-title)).\n *\n * > The `kendoPanelBarItemTitle` directive overrides the PanelBarItem [title]({% slug api_layout_panelbaritemcomponent %}#toc-title) option.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Item Title\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {}\n *\n * ```\n */\nclass PanelBarItemTitleDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPanelBarItemTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarItemTitleDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nPanelBarItemTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PanelBarItemTitleDirective, selector: \"[kendoPanelBarItemTitle]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarItemTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoPanelBarItemTitle]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\nlet nextId$1 = 0;\nconst SIZES = {\n small: 'sm',\n medium: 'md',\n large: 'lg'\n};\nconst ROUNDNESS = {\n small: 'sm',\n medium: 'md',\n large: 'lg',\n full: 'full'\n};\nconst SHAPE_TO_ROUNDED = {\n rounded: 'large',\n circle: 'full'\n};\n/**\n * @hidden\n */\nconst parsePanelBarItems = (data) => {\n return data.map((item) => {\n if (!item.id) {\n item.id = `default-${nextId$1++}`;\n }\n if (item.children) {\n item.children = parsePanelBarItems(item.children);\n }\n return item;\n });\n};\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isHorizontalArrowKey = keyCode => keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight;\n/**\n * @hidden\n */\nconst isVerticalArrowKey = keyCode => keyCode === Keys.ArrowUp || keyCode === Keys.ArrowDown;\n/**\n * @hidden\n */\nconst isArrowKey = keyCode => isHorizontalArrowKey(keyCode) || isVerticalArrowKey(keyCode);\n/**\n * @hidden\n */\nconst isNavigationKey = keyCode => keyCode === Keys.PageUp || keyCode === Keys.PageDown ||\n keyCode === Keys.Home || keyCode === Keys.End;\n/**\n * @hidden\n *\n * Returns the styling classes to be added and removed\n */\nconst getStylingClasses = (componentType, stylingOption, previousValue, newValue) => {\n switch (stylingOption) {\n case 'size':\n return {\n toRemove: `k-${componentType}-${SIZES[previousValue]}`,\n toAdd: newValue !== 'none' ? `k-${componentType}-${SIZES[newValue]}` : ''\n };\n case 'rounded':\n return {\n toRemove: `k-rounded-${ROUNDNESS[previousValue]}`,\n toAdd: newValue !== 'none' ? `k-rounded-${ROUNDNESS[newValue]}` : ''\n };\n default:\n break;\n }\n};\n/**\n * @hidden\n */\nconst mapShapeToRounded = (shape) => SHAPE_TO_ROUNDED[shape] || 'none';\n/**\n * @hidden\n */\nconst isNumber = (value) => typeof value === 'number' && isFinite(value);\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst isFocusable = (element) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const skipTab = tabIndex === '-1';\n let focusable = tabIndex !== null && !skipTab;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled && !skipTab;\n }\n return focusable;\n }\n return false;\n};\n/**\n * @hidden\n */\nconst hasClass = (element, className) => Boolean(toClassList(element.className).find((name) => name === className));\n/**\n * @hidden\n */\nconst closestInScope = (target, predicate, scope, targetAttr) => {\n while (target && target !== scope && !predicate(target, targetAttr)) {\n target = target.parentNode;\n }\n if (target !== scope) {\n return target;\n }\n};\n/**\n * @hidden\n */\nconst itemIndex = (item, indexAttr) => +item.getAttribute(indexAttr);\nconst hasItemIndex = (item, indexAttr) => isPresent(item.getAttribute(indexAttr));\n/**\n * @hidden\n */\nconst closestItem = (target, targetAttr, scope) => closestInScope(target, hasItemIndex, scope, targetAttr);\n\n/**\n * @hidden\n */\nlet nextPanelbarId = 0;\n/**\n * @hidden\n */\nclass PanelBarService {\n constructor() {\n this.parentSource = new Subject();\n this.keepContentSource = new BehaviorSubject(false);\n this.childSource = new Subject();\n this.parent$ = this.parentSource.asObservable();\n this.children$ = this.childSource.asObservable();\n this.keepContent$ = this.keepContentSource.asObservable();\n this.pbId = nextPanelbarId++;\n }\n onKeepContent(keepContent) {\n this.keepContentSource.next(keepContent);\n }\n onSelect(event) {\n this.childSource.next(event);\n }\n onFocus() {\n this.parentSource.next(true);\n }\n onBlur() {\n this.parentSource.next(false);\n }\n}\nPanelBarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nPanelBarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\n/**\n * @hidden\n */\nlet nextId = 0;\n/**\n * Represents the items of the PanelBar.\n */\nclass PanelBarItemComponent {\n constructor(parent, eventService, element, renderer) {\n this.parent = parent;\n this.eventService = eventService;\n this.element = element;\n this.renderer = renderer;\n /**\n * Allows the component to set the `\"id\"` property to each item.\n * Used to set the `id` attributes of the nested elements and to enable the WAI-ARIA support.\n */\n this.id = `default-${nextId++}`;\n /**\n * Defines the icon that will be rendered next to the title ([see example]({% slug items_panelbar %}#toc-title-icons)).\n */\n this.icon = '';\n /**\n * Defines the icon that will be rendered next to the title by using a custom CSS class\n * ([see example]({% slug items_panelbar %}#toc-title-icons)).\n */\n this.iconClass = '';\n /**\n * Defines the location of the image that will be displayed next to the title\n * ([see example]({% slug items_panelbar %}#toc-title-images)).\n */\n this.imageUrl = '';\n /**\n * When set to `true`, disables a PanelBar item ([see example]({% slug items_panelbar %}#toc-disabled-state)).\n */\n this.disabled = false;\n /**\n * Sets the selected state of a PanelBar item ([see example]({% slug items_panelbar %}#toc-selected-state)).\n */\n this.selected = false;\n this.keepContent = false;\n this.hasChildItems = false;\n this.hasItems = false;\n this.hasContent = false;\n this.state = \"inactive\";\n this.role = \"treeitem\";\n this.titleAttribute = null; // eslint-disable-line\n this.kItemClass = true;\n this.focused = false;\n this.wrapperFocused = false;\n this.subscriptions = new Subscription(() => { });\n this._expanded = false;\n this.subscriptions.add(eventService.parent$.subscribe(focused => this.onWrapperFocusChange(focused)));\n this.subscriptions.add(eventService.keepContent$.subscribe(keepContent => this.keepContent = keepContent));\n this.wrapperFocused = parent ? parent.focused : false;\n this.level = this.parent ? this.parent.level + 1 : 0;\n }\n /**\n * When set to `true`, expands the PanelBar item ([see example]({% slug items_panelbar %}#toc-expanded-state)).\n */\n set expanded(value) {\n const activeState = this.animate ? \"active\" : \"activeWithoutAnimation\";\n this.state = value ? activeState : \"inactive\";\n if (!this.keepContent) {\n this.toggleExpandedChildAnimations(value);\n }\n this._expanded = value;\n }\n get expanded() {\n return this._expanded;\n }\n get animate() {\n return this.eventService.animate;\n }\n get kStateDefaultClass() {\n return !this.disabled;\n }\n get kStateDisabledClass() {\n return this.disabled;\n }\n get kStateExpandedClass() {\n return !this.disabled && this.expanded && (this.hasChildItems || this.hasContent);\n }\n get itemId() {\n return 'k-panelbar-' + this.eventService.pbId + '-item-' + this.id;\n }\n get ariaExpanded() {\n return (this.hasChildItems || this.hasContent) ? !this.disabled && this.expanded : null;\n }\n get ariaSelected() {\n return !this.disabled && this.selected;\n }\n get ariaDisabled() {\n return this.disabled ? true : null;\n }\n get headerClass() {\n return this.parent ? null : true;\n }\n get childClass() {\n return this.parent ? true : null;\n }\n /**\n * @hidden\n */\n get titleTemplate() {\n return this.titleTemplates.length > 0 ? this.titleTemplates.toArray()[0].templateRef : undefined;\n }\n /**\n * @hidden\n */\n headerHeight() {\n return this.element.nativeElement.offsetHeight - (this.contentWrapper ? this.contentWrapper.nativeElement.offsetHeight : 0);\n }\n ngOnInit() {\n this.addLevelClass();\n }\n ngAfterContentChecked() {\n this.hasItems = this.items && this.items.filter(item => !item.hidden).length > 0;\n this.hasChildItems = this.contentItems.filter(item => item !== this).length > 0 || this.hasItems;\n this.hasContent = (this.contentTemplate !== undefined && this.contentTemplate.length > 0) ||\n this.content !== undefined;\n this.validateConfiguration();\n }\n ngAfterViewChecked() {\n if (this.items) {\n this.childrenItems = this.viewChildItems.toArray();\n }\n else {\n this.childrenItems = this.contentItems.filter(item => item !== this);\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n onItemAction() {\n if (!this.disabled) {\n this.eventService.onSelect(this);\n }\n }\n /**\n * @hidden\n */\n onItemClick(e) {\n if (!isFocusable(e.target)) {\n this.onItemAction();\n }\n }\n /**\n * @hidden\n */\n get iconClasses() {\n let icon = this.icon ? 'k-i-' + this.icon : null;\n return {\n [icon || this.iconClass]: true\n };\n }\n /**\n * @hidden\n */\n serialize() {\n return {\n content: this.content,\n disabled: this.disabled,\n expanded: this.expanded,\n focused: this.focused,\n icon: this.icon,\n iconClass: this.iconClass,\n id: this.id,\n imageUrl: this.imageUrl,\n selected: this.selected,\n title: this.title\n };\n }\n /**\n * @hidden\n */\n subTreeViewItems() {\n let subTree = [];\n this.viewChildItems.forEach(item => {\n subTree = subTree.concat(item.subTreeViewItems());\n subTree.push(item);\n });\n return subTree;\n }\n /**\n * @hidden\n */\n validateConfiguration() {\n if (isDevMode()) {\n if (this.content && (this.contentTemplate !== undefined && this.contentTemplate.length > 0)) {\n throw new Error(\"Invalid configuration: mixed template components and component property.\");\n }\n }\n }\n /**\n * @hidden\n */\n toggleAnimationState(value) {\n if (!this.animate) {\n return;\n }\n this.state = value && this.eventService.expandMode !== PanelBarExpandMode.Single ? 'active' : 'activeWithoutAnimation';\n }\n /**\n * @hidden\n */\n toggleExpandedChildAnimations(value) {\n if (this.childrenItems) {\n this.childrenItems.forEach(child => {\n if (child.expanded) {\n child.toggleAnimationState(value);\n child.toggleExpandedChildAnimations(value);\n }\n });\n }\n }\n /**\n * @hidden\n */\n addLevelClass() {\n if (this.level >= 0) {\n this.renderer.addClass(this.element.nativeElement, `k-level-${this.level}`);\n }\n }\n onWrapperFocusChange(focused) {\n this.wrapperFocused = focused;\n }\n}\nPanelBarItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarItemComponent, deps: [{ token: PanelBarItemComponent, host: true, optional: true, skipSelf: true }, { token: PanelBarService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nPanelBarItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PanelBarItemComponent, selector: \"kendo-panelbar-item\", inputs: { title: \"title\", id: \"id\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", disabled: \"disabled\", expanded: \"expanded\", selected: \"selected\", content: \"content\", items: \"items\", template: \"template\" }, host: { properties: { \"attr.role\": \"this.role\", \"attr.title\": \"this.titleAttribute\", \"class.k-item\": \"this.kItemClass\", \"class.k-state-default\": \"this.kStateDefaultClass\", \"class.k-disabled\": \"this.kStateDisabledClass\", \"class.k-state-expanded\": \"this.kStateExpandedClass\", \"id\": \"this.itemId\", \"attr.aria-expanded\": \"this.ariaExpanded\", \"attr.aria-selected\": \"this.ariaSelected\", \"attr.aria-disabled\": \"this.ariaDisabled\", \"class.k-panelbar-header\": \"this.headerClass\", \"class.k-panelbar-item\": \"this.childClass\" } }, queries: [{ propertyName: \"contentItems\", predicate: PanelBarItemComponent }, { propertyName: \"contentTemplate\", predicate: PanelBarContentDirective }, { propertyName: \"titleTemplates\", predicate: PanelBarItemTitleDirective }], viewQueries: [{ propertyName: \"header\", first: true, predicate: [\"header\"], descendants: true }, { propertyName: \"contentWrapper\", first: true, predicate: [\"contentWrapper\"], descendants: true }, { propertyName: \"viewChildItems\", predicate: PanelBarItemComponent, descendants: true }], exportAs: [\"kendoPanelbarItem\"], ngImport: i0, template: `\n \n \n \n \n {{title}}\n \n \n \n \n
    \n \n \n
    \n \n \n \n \n
    \n \n \n \n \n
    \n \n \n \n {{content}}\n \n `, isInline: true, components: [{ type: PanelBarItemComponent, selector: \"kendo-panelbar-item\", inputs: [\"title\", \"id\", \"icon\", \"iconClass\", \"imageUrl\", \"disabled\", \"expanded\", \"selected\", \"content\", \"items\", \"template\"], exportAs: [\"kendoPanelbarItem\"] }], directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }], animations: [\n trigger('toggle', [\n state('inactive', style({ display: 'none' })),\n transition('* => active', [\n style({ overflow: 'hidden', display: 'block', height: 0 }),\n animate(200, style({ height: AUTO_STYLE }))\n ]),\n transition('active => *', [\n style({ overflow: 'hidden', height: AUTO_STYLE }),\n animate(200, style({ height: 0, display: 'none' }))\n ])\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarItemComponent, decorators: [{\n type: Component,\n args: [{\n animations: [\n trigger('toggle', [\n state('inactive', style({ display: 'none' })),\n transition('* => active', [\n style({ overflow: 'hidden', display: 'block', height: 0 }),\n animate(200, style({ height: AUTO_STYLE }))\n ]),\n transition('active => *', [\n style({ overflow: 'hidden', height: AUTO_STYLE }),\n animate(200, style({ height: 0, display: 'none' }))\n ])\n ])\n ],\n exportAs: 'kendoPanelbarItem',\n selector: \"kendo-panelbar-item\",\n template: `\n \n \n \n \n {{title}}\n \n \n \n \n
    \n \n \n
    \n \n \n \n \n
    \n \n \n \n \n
    \n \n \n \n {{content}}\n \n `\n }]\n }], ctorParameters: function () { return [{ type: PanelBarItemComponent, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }, { type: PanelBarService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { title: [{\n type: Input\n }], id: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], disabled: [{\n type: Input\n }], expanded: [{\n type: Input\n }], selected: [{\n type: Input\n }], content: [{\n type: Input\n }], items: [{\n type: Input\n }], template: [{\n type: Input\n }], header: [{\n type: ViewChild,\n args: ['header', { static: false }]\n }], contentWrapper: [{\n type: ViewChild,\n args: ['contentWrapper', { static: false }]\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], titleAttribute: [{\n type: HostBinding,\n args: ['attr.title']\n }], kItemClass: [{\n type: HostBinding,\n args: ['class.k-item']\n }], kStateDefaultClass: [{\n type: HostBinding,\n args: ['class.k-state-default']\n }], kStateDisabledClass: [{\n type: HostBinding,\n args: ['class.k-disabled']\n }], kStateExpandedClass: [{\n type: HostBinding,\n args: ['class.k-state-expanded']\n }], itemId: [{\n type: HostBinding,\n args: ['id']\n }], ariaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], ariaSelected: [{\n type: HostBinding,\n args: ['attr.aria-selected']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], headerClass: [{\n type: HostBinding,\n args: ['class.k-panelbar-header']\n }], childClass: [{\n type: HostBinding,\n args: ['class.k-panelbar-item']\n }], viewChildItems: [{\n type: ViewChildren,\n args: [PanelBarItemComponent]\n }], contentItems: [{\n type: ContentChildren,\n args: [PanelBarItemComponent]\n }], contentTemplate: [{\n type: ContentChildren,\n args: [PanelBarContentDirective, { descendants: false }]\n }], titleTemplates: [{\n type: ContentChildren,\n args: [PanelBarItemTitleDirective, { descendants: false }]\n }] } });\n\n/**\n * Represents the template directive of the PanelBar which helps to customize the item content.\n */\nclass PanelBarItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPanelBarItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarItemTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nPanelBarItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PanelBarItemTemplateDirective, selector: \"[kendoPanelBarItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoPanelBarItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n /**\n * @hidden\n */\n constructor(args) {\n this.prevented = false;\n Object.assign(this, args);\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Arguments for the `collapse` event of the PanelBar.\n */\nclass PanelBarCollapseEvent extends PreventableEvent {\n}\n\n/**\n * Arguments for the `expand` event of the PanelBar.\n */\nclass PanelBarExpandEvent extends PreventableEvent {\n}\n\n/**\n * Arguments for the `select` event of the PanelBar.\n */\nclass PanelBarSelectEvent extends PreventableEvent {\n}\n\n/**\n * Arguments for the `stateChange` event of the PanelBar.\n */\nclass PanelBarStateChangeEvent {\n}\n\n/**\n * Represents the [Kendo UI PanelBar component for Angular]({% slug overview_panelbar %}).\n */\n// TODO: add styles as input prop\nclass PanelBarComponent {\n constructor(elementRef, eventService, localization) {\n this.localization = localization;\n /**\n * Sets the expand mode of the PanelBar through the `PanelBarExpandMode` enum ([see example]({% slug expandmodes_panelbar %})).\n *\n * The available modes are:\n * - `\"single\"`—Expands only one item at a time. Expanding an item collapses the item that was previously expanded.\n * - `\"multiple\"`—The default mode of the PanelBar.\n * Expands more than one item at a time. Items can also be toggled.\n * - `\"full\"`—Expands only one item at a time.\n * The expanded area occupies the entire height of the PanelBar. Requires you to set the `height` property.\n */\n this.expandMode = PanelBarExpandMode.Default;\n /**\n * Allows the PanelBar to modify the selected state of the items.\n */\n this.selectable = true;\n /**\n * Sets the animate state of the PanelBar ([see example]({% slug animations_panelbar %})).\n */\n this.animate = true;\n /**\n * Sets the height of the component when the `\"full\"` expand mode is used.\n * This option is ignored in the `\"multiple\"` and `\"single\"` expand modes.\n */\n this.height = '400px';\n /**\n * Fires each time the user interacts with a PanelBar item\n * ([see example]({% slug routing_panelbar %}#toc-getting-the-selected-item)).\n * The event data contains a collection of all items that are modified.\n */\n this.stateChange = new EventEmitter();\n /**\n * Fires when an item is about to be selected.\n * ([see example]({% slug events_panelbar %}))\n * This event is preventable. If you cancel it, the item will not be selected.\n */\n this.select = new EventEmitter();\n /**\n * Fires when an item is about to be expanded.\n * ([see example]({% slug events_panelbar %}))\n * This event is preventable. If you cancel it, the item will remain collapsed.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when an item is about to be collapsed.\n * ([see example]({% slug events_panelbar %}))\n * This event is preventable. If you cancel it, the item will remain expanded.\n */\n this.collapse = new EventEmitter();\n this.tabIndex = 0;\n this.role = 'tree';\n this.hostClass = true;\n this.activeDescendant = '';\n this.isViewInit = true;\n this.focused = false;\n this._keepItemContent = false;\n this.updateChildrenHeight = () => {\n let childrenHeight = 0;\n const panelbarHeight = this.elementRef.nativeElement.offsetHeight;\n const contentOverflow = this.expandMode === PanelBarExpandMode.Full ? 'auto' : 'visible';\n this.childrenItems.forEach(item => {\n childrenHeight += item.headerHeight();\n });\n this.childrenItems.forEach(item => {\n item.contentHeight = PanelBarExpandMode.Full === this.expandMode ? (panelbarHeight - childrenHeight) + 'px' : 'auto';\n item.contentOverflow = contentOverflow;\n });\n };\n validatePackage(packageMetadata);\n /* eslint-disable-line*/\n this.keyBindings = this.computedKeys;\n this.elementRef = elementRef;\n this.eventService = eventService;\n this.eventService.children$.subscribe(event => this.onItemAction(event));\n }\n /**\n * When set to `true`, the PanelBar renders the content of all items and they are persisted in the DOM\n * ([see example]({% slug templates_panelbar %}#toc-collections)).\n * By default, this option is set to `false`.\n */\n get keepItemContent() {\n return this._keepItemContent;\n }\n set keepItemContent(keepItemContent) {\n this._keepItemContent = keepItemContent;\n this.eventService.onKeepContent(keepItemContent);\n }\n /**\n * Sets the items of the PanelBar as an array of `PanelBarItemModel` instances\n * ([see example]({% slug items_panelbar %})).\n */\n set items(data) {\n if (data) {\n this._items = parsePanelBarItems(data);\n }\n }\n get items() {\n return this._items;\n }\n get hostHeight() {\n return this.expandMode === PanelBarExpandMode.Full ? this.height : 'auto';\n }\n get overflow() {\n return this.expandMode === PanelBarExpandMode.Full ? 'hidden' : 'visible';\n }\n get dir() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n /**\n * @hidden\n */\n invertKeys(original, inverted) {\n return this.localization.rtl ? inverted : original;\n }\n get computedKeys() {\n return {\n [Keys.Space]: () => this.selectFocusedItem(),\n [Keys.Enter]: () => this.selectFocusedItem(),\n [Keys.ArrowUp]: () => this.focusPreviousItem(),\n [this.invertKeys(Keys.ArrowLeft, Keys.ArrowRight)]: () => this.collapseItem(),\n [Keys.ArrowDown]: () => this.focusNextItem(),\n [this.invertKeys(Keys.ArrowRight, Keys.ArrowLeft)]: () => this.expandItem(),\n [Keys.End]: () => this.focusLastItem(),\n [Keys.Home]: () => this.focusFirstItem()\n };\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(() => this.keyBindings = this.computedKeys);\n this.eventService.animate = this.animate;\n this.eventService.expandMode = this.expandMode;\n }\n ngAfterViewChecked() {\n if (this.items) {\n this.childrenItems = this.viewChildItems.toArray();\n this.allItems = this.viewItems;\n }\n else {\n this.childrenItems = this.contentChildItems.toArray();\n this.allItems = this.contentItems.toArray();\n }\n if (this.isViewInit && this.childrenItems.length) {\n this.isViewInit = false;\n setTimeout(() => this.updateChildrenHeight());\n }\n this.validateConfiguration();\n }\n ngOnChanges(changes) {\n if (changes['height'] || changes['expandMode'] || changes['items']) { // eslint-disable-line\n if (this.childrenItems) {\n setTimeout(this.updateChildrenHeight);\n }\n }\n if (changes.animate) {\n this.eventService.animate = this.animate;\n }\n if (changes.expandMode) {\n this.eventService.expandMode = this.expandMode;\n }\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n /**\n * @hidden\n */\n onComponentClick(event) {\n const itemClicked = this.visibleItems().some((item) => {\n return item.header.nativeElement.contains(event.target);\n });\n if (!isFocusable(event.target) && !this.focused && itemClicked) {\n this.elementRef.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n onComponentFocus() {\n this.eventService.onFocus();\n this.focused = true;\n if (this.allItems.length > 0) {\n const visibleItems = this.visibleItems();\n const focusedItems = visibleItems.filter(item => item.focused);\n if (!focusedItems.length && visibleItems.length > 0) {\n visibleItems[0].focused = true;\n this.activeDescendant = visibleItems[0].itemId;\n }\n }\n }\n /**\n * @hidden\n */\n onComponentBlur() {\n this.eventService.onBlur();\n this.focused = false;\n this.activeDescendant = '';\n }\n /**\n * @hidden\n */\n onComponentKeyDown(event) {\n if (event.target === this.elementRef.nativeElement) {\n if (event.keyCode === Keys.Space || event.keyCode === Keys.ArrowUp || event.keyCode === Keys.ArrowDown ||\n event.keyCode === Keys.ArrowLeft || event.keyCode === Keys.ArrowRight || event.keyCode === Keys.Home ||\n event.keyCode === Keys.End || event.keyCode === Keys.PageUp || event.keyCode === Keys.PageDown) {\n event.preventDefault();\n }\n const handler = this.keyBindings[event.keyCode];\n //TODO: check if next item is disabled and skip operation?\n if (handler) {\n handler();\n }\n }\n }\n /**\n * @hidden\n */\n emitEvent(event, item) {\n let eventArgs;\n switch (event) {\n case 'select':\n eventArgs = new PanelBarSelectEvent();\n break;\n case 'collapse':\n eventArgs = new PanelBarCollapseEvent();\n break;\n default:\n eventArgs = new PanelBarExpandEvent();\n break;\n }\n eventArgs.item = item.serialize();\n this[event].emit(eventArgs);\n return eventArgs;\n }\n get viewItems() {\n let treeItems = [];\n this.viewChildItems.toArray().forEach(item => {\n treeItems.push(item);\n treeItems = treeItems.concat(item.subTreeViewItems());\n });\n return treeItems;\n }\n validateConfiguration() {\n if (isDevMode()) {\n if (this.items && (this.contentItems && this.contentItems.length > 0)) {\n throw new Error('Invalid configuration: mixed template components and items property.');\n }\n }\n }\n onItemAction(item) {\n if (!item) {\n return;\n }\n let modifiedItems = new Array();\n let selectPreventedItems = [];\n this.allItems\n .forEach((currentItem) => {\n let selectedState = currentItem === item;\n let focusedState = selectedState;\n selectedState = this.selectable ? selectedState : currentItem.selected;\n if (currentItem.selected !== selectedState || currentItem.focused !== focusedState) {\n const isSelectPrevented = selectedState ? this.emitEvent('select', currentItem).isDefaultPrevented() : false;\n if (!isSelectPrevented) {\n currentItem.selected = selectedState;\n currentItem.focused = focusedState;\n this.activeDescendant = focusedState ? currentItem.itemId : '';\n modifiedItems.push(currentItem);\n }\n else {\n selectPreventedItems.push(currentItem);\n }\n }\n });\n if (this.expandMode === PanelBarExpandMode.Multiple) {\n if ((item.hasChildItems || item.hasContent) && !selectPreventedItems.includes(item)) {\n const isEventPrevented = item.expanded ?\n this.emitEvent('collapse', item).isDefaultPrevented() :\n this.emitEvent('expand', item).isDefaultPrevented();\n if (!isEventPrevented) {\n item.expanded = !item.expanded;\n if (modifiedItems.indexOf(item) < 0) {\n modifiedItems.push(item);\n }\n }\n }\n }\n else {\n let siblings = item.parent ? item.parent.childrenItems : this.childrenItems;\n let preventedCollapseItem;\n let expandedItems = [];\n if ((item.hasChildItems || item.hasContent) && !selectPreventedItems.includes(item)) {\n siblings\n .forEach((currentItem) => {\n let expandedState = currentItem === item;\n if (currentItem.expanded !== expandedState) {\n const isEventPrevented = currentItem.expanded ?\n this.emitEvent('collapse', currentItem).isDefaultPrevented() :\n this.emitEvent('expand', currentItem).isDefaultPrevented();\n if (!isEventPrevented) {\n currentItem.expanded = expandedState;\n if (currentItem.expanded) {\n expandedItems.push(currentItem);\n }\n if (modifiedItems.indexOf(currentItem) < 0) {\n modifiedItems.push(currentItem);\n }\n }\n else if (isEventPrevented && currentItem.expanded) {\n preventedCollapseItem = currentItem;\n }\n }\n else if (currentItem.expanded === expandedState && expandedState) {\n const isCollapsePrevented = this.emitEvent('collapse', currentItem).isDefaultPrevented();\n if (!isCollapsePrevented) {\n currentItem.expanded = !currentItem.expanded;\n if (modifiedItems.indexOf(currentItem) < 0) {\n modifiedItems.push(currentItem);\n }\n }\n }\n });\n expandedItems.forEach(item => {\n if (preventedCollapseItem && item.id !== preventedCollapseItem.id) {\n item.expanded = false;\n if (isDevMode()) {\n const expandMode = PanelBarExpandMode[this.expandMode].toLowerCase();\n console.warn(`\n The ${expandMode} expandMode allows the expansion of only one item at a time.\n See https://www.telerik.com/kendo-angular-ui-develop/components/layout/panelbar/expand-modes/`);\n }\n }\n });\n }\n }\n if (modifiedItems.length > 0) {\n let eventArgs = new PanelBarStateChangeEvent();\n eventArgs.items = modifiedItems.map(currentItem => currentItem.serialize());\n this.stateChange.emit(eventArgs);\n }\n }\n isVisible(item) {\n const visibleItems = this.visibleItems();\n return visibleItems.some(i => i === item);\n }\n getVisibleParent(item) {\n const visibleItems = this.visibleItems();\n if (!item.parent) {\n return item;\n }\n return visibleItems.some(i => i === item.parent) ? item.parent : this.getVisibleParent(item.parent);\n }\n focusItem(action) {\n const visibleItems = this.visibleItems();\n let currentIndex = visibleItems.findIndex(item => item.focused);\n let currentItem = visibleItems[currentIndex];\n let nextItem;\n if (currentIndex === -1) {\n let focusedItem = this.allItems.find(item => item.focused);\n focusedItem.focused = false;\n currentItem = this.getVisibleParent(focusedItem);\n currentIndex = visibleItems.findIndex(item => item === currentItem);\n }\n switch (action) {\n case 'lastItem':\n nextItem = visibleItems[visibleItems.length - 1];\n break;\n case 'firstItem':\n nextItem = visibleItems[0];\n break;\n case 'nextItem':\n nextItem = visibleItems[currentIndex < visibleItems.length - 1 ? currentIndex + 1 : 0];\n break;\n case 'previousItem':\n nextItem = visibleItems[currentIndex > 0 ? currentIndex - 1 : visibleItems.length - 1];\n break;\n default:\n }\n if (currentItem && nextItem && currentItem !== nextItem) {\n this.moveFocus(currentItem, nextItem);\n }\n }\n moveFocus(from, to) {\n from.focused = false;\n to.focused = true;\n this.activeDescendant = to.itemId;\n const modifiedItems = new Array(from.serialize(), to.serialize());\n let eventArgs = new PanelBarStateChangeEvent();\n eventArgs.items = modifiedItems;\n this.stateChange.emit(eventArgs);\n }\n focusLastItem() {\n this.focusItem('lastItem');\n }\n focusFirstItem() {\n this.focusItem('firstItem');\n }\n focusNextItem() {\n this.focusItem('nextItem');\n }\n focusPreviousItem() {\n this.focusItem('previousItem');\n }\n expandItem() {\n let currentItem = this.allItems.filter(item => item.focused)[0];\n if (!this.isVisible(currentItem)) {\n currentItem.focused = false;\n currentItem = this.getVisibleParent(currentItem);\n }\n if (currentItem.hasChildItems || currentItem.hasContent) {\n if (!currentItem.expanded) {\n this.onItemAction(currentItem);\n }\n else if (currentItem.hasChildItems) {\n const firstChildIndex = currentItem.childrenItems.findIndex(item => !item.disabled);\n if (firstChildIndex > -1) {\n this.moveFocus(currentItem, currentItem.childrenItems[firstChildIndex]);\n }\n }\n }\n }\n collapseItem() {\n const currentItem = this.allItems.filter(item => item.focused)[0];\n if (currentItem.expanded) {\n this.onItemAction(currentItem);\n }\n else if (currentItem.parent) {\n this.moveFocus(currentItem, currentItem.parent);\n }\n }\n selectFocusedItem() {\n let focusedItem = this.allItems.filter(item => item.focused)[0];\n if (!this.isVisible(focusedItem)) {\n focusedItem.focused = false;\n focusedItem = this.getVisibleParent(focusedItem);\n }\n if (focusedItem) {\n focusedItem.onItemAction();\n }\n }\n visibleItems() {\n return this.flatVisibleItems(this.childrenItems);\n }\n flatVisibleItems(listOfItems = new Array(), flattedItems = new Array()) {\n listOfItems.forEach(item => {\n flattedItems.push(item);\n if (item.expanded && item.hasChildItems) {\n this.flatVisibleItems(item.childrenItems, flattedItems);\n }\n });\n return flattedItems;\n }\n}\nPanelBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarComponent, deps: [{ token: i0.ElementRef }, { token: PanelBarService }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nPanelBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PanelBarComponent, selector: \"kendo-panelbar\", inputs: { expandMode: \"expandMode\", selectable: \"selectable\", animate: \"animate\", height: \"height\", keepItemContent: \"keepItemContent\", items: \"items\" }, outputs: { stateChange: \"stateChange\", select: \"select\", expand: \"expand\", collapse: \"collapse\" }, host: { listeners: { \"click\": \"onComponentClick($event)\", \"focus\": \"onComponentFocus()\", \"blur\": \"onComponentBlur()\", \"keydown\": \"onComponentKeyDown($event)\" }, properties: { \"attr.tabIndex\": \"this.tabIndex\", \"attr.role\": \"this.role\", \"class.k-panelbar\": \"this.hostClass\", \"attr.aria-activedescendant\": \"this.activeDescendant\", \"style.height\": \"this.hostHeight\", \"style.overflow\": \"this.overflow\", \"attr.dir\": \"this.dir\" } }, providers: [\n PanelBarService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.panelbar'\n }\n ], queries: [{ propertyName: \"template\", first: true, predicate: PanelBarItemTemplateDirective, descendants: true }, { propertyName: \"contentItems\", predicate: PanelBarItemComponent, descendants: true }, { propertyName: \"contentChildItems\", predicate: PanelBarItemComponent }], viewQueries: [{ propertyName: \"viewChildItems\", predicate: PanelBarItemComponent, descendants: true }], exportAs: [\"kendoPanelbar\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n `, isInline: true, components: [{ type: PanelBarItemComponent, selector: \"kendo-panelbar-item\", inputs: [\"title\", \"id\", \"icon\", \"iconClass\", \"imageUrl\", \"disabled\", \"expanded\", \"selected\", \"content\", \"items\", \"template\"], exportAs: [\"kendoPanelbarItem\"] }], directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoPanelbar',\n providers: [\n PanelBarService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.panelbar'\n }\n ],\n selector: 'kendo-panelbar',\n template: `\n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: PanelBarService }, { type: i1.LocalizationService }]; }, propDecorators: { expandMode: [{\n type: Input\n }], selectable: [{\n type: Input\n }], animate: [{\n type: Input\n }], height: [{\n type: Input\n }], keepItemContent: [{\n type: Input\n }], items: [{\n type: Input\n }], stateChange: [{\n type: Output\n }], select: [{\n type: Output\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-panelbar']\n }], activeDescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], hostHeight: [{\n type: HostBinding,\n args: ['style.height']\n }], overflow: [{\n type: HostBinding,\n args: ['style.overflow']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], template: [{\n type: ContentChild,\n args: [PanelBarItemTemplateDirective, { static: false }]\n }], contentItems: [{\n type: ContentChildren,\n args: [PanelBarItemComponent, { descendants: true }]\n }], contentChildItems: [{\n type: ContentChildren,\n args: [PanelBarItemComponent]\n }], viewChildItems: [{\n type: ViewChildren,\n args: [PanelBarItemComponent]\n }], onComponentClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], onComponentFocus: [{\n type: HostListener,\n args: ['focus']\n }], onComponentBlur: [{\n type: HostListener,\n args: ['blur']\n }], onComponentKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\n/**\n * Represents the pane component of the Splitter.\n */\nclass SplitterPaneComponent {\n constructor(element, renderer, cdr) {\n this.element = element;\n this.renderer = renderer;\n this.cdr = cdr;\n /**\n * Specifies if the user is allowed to resize the pane and provide space for other panes.\n */\n this.resizable = true;\n /**\n * Specifies if the user is allowed to hide the pane and provide space for other panes.\n */\n this.collapsible = false;\n /**\n * Specifies if overflowing content is scrollable or hidden.\n */\n this.scrollable = true;\n /**\n * Specifies if the pane is initially collapsed.\n */\n this.collapsed = false;\n /**\n * @hidden\n */\n this.orientation = 'horizontal';\n /**\n * @hidden\n */\n this.overlayContent = false;\n /**\n * Fires each time the user resizes the Splitter pane.\n * The event data contains the new pane size.\n * Allows a two-way binding of the pane `size` property.\n */\n this.sizeChange = new EventEmitter();\n /**\n * Fires each time the `collapsed` property changes.\n * The event data contains the new property state.\n * Allows a two-way binding of the `collapsed` pane property.\n */\n this.collapsedChange = new EventEmitter();\n this.ariaRole = 'group';\n this.hostClass = true;\n /**\n * @hidden\n */\n this.forceExpand = false;\n /**\n * @hidden\n */\n this.isResized = false;\n }\n /**\n * @hidden\n */\n set order(paneOrder) {\n this._order = paneOrder;\n this.setOrderStyles();\n }\n get order() {\n return this._order;\n }\n /**\n * Sets the initial size of the pane.\n * Has to be between the `min` and `max` properties.\n */\n set size(newSize) {\n this._size = newSize;\n const element = this.element.nativeElement;\n this.renderer.setStyle(element, '-ms-flex-preferred-size', newSize);\n this.renderer.setStyle(element, 'flex-basis', newSize);\n if (this.staticPaneClass) {\n this.renderer.addClass(element, 'k-pane-static');\n }\n else {\n this.renderer.removeClass(element, 'k-pane-static');\n }\n }\n get size() {\n return this._size;\n }\n /**\n * @hidden\n */\n set containsSplitter(value) {\n const element = this.element.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-pane-flex');\n }\n else {\n this.renderer.removeClass(element, 'k-pane-flex');\n }\n }\n get isHidden() {\n return this.collapsed;\n }\n get staticPaneClass() {\n if (this.forceExpand) {\n return false;\n }\n return !this.resizable && !this.collapsible || this.fixedSize;\n }\n get scrollablePaneClass() {\n return this.scrollable;\n }\n get fixedSize() {\n return this.size && this.size.length > 0;\n }\n ngAfterViewChecked() {\n const element = this.element.nativeElement;\n if (this.isHidden) {\n this.renderer.addClass(element, 'k-state-hidden');\n this.renderer.addClass(element, 'hidden');\n }\n else {\n this.renderer.removeClass(element, 'k-state-hidden');\n this.renderer.removeClass(element, 'hidden');\n }\n }\n /**\n * @hidden\n */\n get computedSize() {\n if (this.orientation === 'vertical') {\n return this.element.nativeElement.offsetHeight;\n }\n else {\n return this.element.nativeElement.offsetWidth;\n }\n }\n /**\n * @hidden\n */\n toggleOverlay(show) {\n this.overlayContent = show;\n this.cdr.detectChanges();\n }\n /**\n * @hidden\n */\n detectChanges() {\n this.cdr.detectChanges();\n }\n setOrderStyles() {\n const element = this.element.nativeElement;\n this.renderer.setStyle(element, '-ms-flex-order', this.order);\n this.renderer.setStyle(element, 'order', this.order);\n }\n}\nSplitterPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterPaneComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSplitterPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SplitterPaneComponent, selector: \"kendo-splitter-pane\", inputs: { order: \"order\", size: \"size\", min: \"min\", max: \"max\", resizable: \"resizable\", collapsible: \"collapsible\", scrollable: \"scrollable\", collapsed: \"collapsed\", orientation: \"orientation\", containsSplitter: \"containsSplitter\", overlayContent: \"overlayContent\" }, outputs: { sizeChange: \"sizeChange\", collapsedChange: \"collapsedChange\" }, host: { properties: { \"attr.role\": \"this.ariaRole\", \"class.k-pane\": \"this.hostClass\", \"class.k-pane-static\": \"this.staticPaneClass\", \"class.k-scrollable\": \"this.scrollablePaneClass\" } }, exportAs: [\"kendoSplitterPane\"], ngImport: i0, template: `\n \n
    \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterPaneComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitterPane',\n selector: 'kendo-splitter-pane',\n template: `\n \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { order: [{\n type: Input\n }], size: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], resizable: [{\n type: Input\n }], collapsible: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], collapsed: [{\n type: Input\n }], orientation: [{\n type: Input\n }], containsSplitter: [{\n type: Input\n }], overlayContent: [{\n type: Input\n }], sizeChange: [{\n type: Output\n }], collapsedChange: [{\n type: Output\n }], ariaRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-pane']\n }], staticPaneClass: [{\n type: HostBinding,\n args: ['class.k-pane-static']\n }], scrollablePaneClass: [{\n type: HostBinding,\n args: ['class.k-scrollable']\n }] } });\n\nconst SIZING_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/layout/splitter/panes/#toc-size';\n/**\n * @hidden\n */\nclass SplitterService {\n constructor(zone) {\n this.zone = zone;\n this.layoutChange = new EventEmitter();\n this.containerSize = () => { };\n }\n tryToggle(paneIndex) {\n const pane = this.pane(paneIndex);\n if (pane.collapsible) {\n pane.collapsed = !pane.collapsed;\n pane.collapsedChange.emit(pane.collapsed);\n this.emit(this.layoutChange, {});\n if (pane.collapsed) {\n pane.detectChanges();\n }\n }\n const notCollapsed = this.panes.filter(p => !p.collapsed);\n const allHaveFixedSize = notCollapsed.every(p => p.fixedSize);\n notCollapsed[notCollapsed.length - 1].forceExpand = allHaveFixedSize ? true : false;\n return pane.collapsible;\n }\n toggleContentOverlay(index, show) {\n this.pane(index).toggleOverlay(show);\n this.pane(index + 1).toggleOverlay(show);\n }\n dragState(splitbarIndex) {\n let prev = this.pane(splitbarIndex);\n let next = this.pane(splitbarIndex + 1);\n const total = prev.computedSize + next.computedSize;\n const px = s => this.toPixels(s);\n return {\n prev: {\n index: splitbarIndex,\n initialSize: prev.computedSize,\n min: px(prev.min) || total - px(next.max) || 0,\n max: px(prev.max) || total - px(next.min) || total\n },\n next: {\n index: splitbarIndex + 1,\n initialSize: next.computedSize,\n min: px(next.min) || total - px(prev.max) || 0,\n max: px(next.max) || total - px(prev.min) || total\n }\n };\n }\n setSize(state, delta) {\n const clamp = (min, max, v) => Math.min(max, Math.max(min, v));\n const resize = (paneState, change) => {\n const pane = this.pane(paneState.index);\n const splitterSize = this.containerSize();\n const newSize = clamp(paneState.min, paneState.max, paneState.initialSize + change);\n let size = \"\";\n if (this.isPercent(pane.size)) {\n size = (100 * newSize / splitterSize) + \"%\";\n }\n else {\n size = newSize + \"px\";\n }\n pane.size = size;\n pane.isResized = true;\n this.emit(pane.sizeChange, size);\n };\n const prev = this.pane(state.prev.index);\n const next = this.pane(state.next.index);\n // determine which pane to resize\n if (prev.fixedSize && next.fixedSize) {\n // resizing both panes\n resize(state.prev, delta);\n resize(state.next, -delta);\n }\n else if (next.collapsible || next.fixedSize) {\n // resizing next\n resize(state.next, -delta);\n }\n else {\n // resizing prev\n resize(state.prev, delta);\n }\n this.emit(this.layoutChange, {});\n }\n isDraggable(splitBarIndex) {\n const prev = this.pane(splitBarIndex);\n const next = this.pane(splitBarIndex + 1);\n const betweenResizablePanes = prev.resizable && next.resizable;\n const nearCollapsedPane = prev.collapsed || next.collapsed;\n return betweenResizablePanes && !nearCollapsedPane;\n }\n isStatic(splitBarIndex) {\n const prev = this.pane(splitBarIndex);\n const next = this.pane(splitBarIndex + 1);\n const betweenResizablePanes = prev.resizable && next.resizable;\n const nearCollapsiblePane = prev.collapsible || next.collapsible;\n return !betweenResizablePanes && !nearCollapsiblePane;\n }\n pane(index) {\n if (!this.panes) {\n throw new Error(\"Panes not initialized\");\n }\n if (index < 0 || index >= this.panes.length) {\n throw new Error(\"Index out of range\");\n }\n return this.panes[index];\n }\n configure({ panes, orientation, containerSize }) {\n this.panes = panes;\n this.panes.forEach((pane, index) => {\n pane.order = index * 2;\n pane.orientation = orientation;\n });\n if (isDevMode()) {\n const allPanesWithSize = panes.length && !panes.some(pane => !pane.fixedSize);\n const hasResizedPane = panes.length && panes.some(pane => pane.isResized);\n if (allPanesWithSize && !hasResizedPane) {\n throw new Error(`\n The Splitter should have at least one pane without a set size.\n See ${SIZING_DOC_LINK} for more information.\n `);\n }\n }\n this.containerSize = containerSize;\n }\n isPercent(size) {\n return /%$/.test(size);\n }\n toPixels(size) {\n let result = parseFloat(size);\n if (this.isPercent(size)) {\n result = (this.containerSize() * result / 100);\n }\n return result;\n }\n emit(emitter, args) {\n if (emitter.observers.length) {\n this.zone.run(() => emitter.emit(args));\n }\n }\n}\nSplitterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nSplitterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\nconst stopPropagation = ({ originalEvent: event }) => {\n event.stopPropagation();\n event.preventDefault();\n};\nconst preventOnDblClick = release => mouseDown => of(mouseDown).pipe(delay(150), takeUntil(release));\nconst classFromObject = classes => Object.keys(classes).filter(c => classes[c]).join(' ');\nconst createMoveStream = (draggable) => mouseDown => draggable.kendoDrag\n .pipe(takeUntil(draggable.kendoRelease), map(({ pageX, pageY }) => ({\n originalX: mouseDown.pageX,\n originalY: mouseDown.pageY,\n pageX,\n pageY\n})));\n/**\n * @hidden\n */\nclass SplitterBarComponent {\n constructor(draggable, element, splitter, localization) {\n this.draggable = draggable;\n this.element = element;\n this.splitter = splitter;\n this.localization = localization;\n this.orientation = 'horizontal';\n this.index = 0;\n this.ariaRole = 'separator';\n this.focused = false;\n this.subscriptions = new Subscription();\n }\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n get tabIndex() {\n return this.splitter.isStatic(this.index) ? -1 : 0;\n }\n get hostClasses() {\n const isHorizontal = this.orientation === 'horizontal';\n const isDraggable = this.splitter.isDraggable(this.index);\n const isStatic = this.splitter.isStatic(this.index);\n return classFromObject({\n 'k-focus': this.focused,\n 'k-splitbar': true,\n 'k-splitbar-horizontal': isHorizontal,\n 'k-splitbar-vertical': !isHorizontal,\n 'k-splitbar-draggable-horizontal': isHorizontal && isDraggable,\n 'k-splitbar-draggable-vertical': !isHorizontal && isDraggable,\n 'k-splitbar-static-horizontal': isHorizontal && isStatic,\n 'k-splitbar-static-vertical': !isHorizontal && isStatic,\n 'k-touch-action-none': isDraggable\n });\n }\n get order() {\n return 2 * this.index + 1;\n }\n collapseAny() {\n if (this.expandLast) {\n this.toggleNext();\n }\n else {\n this.tryToggleNearest();\n }\n }\n onFocusIn() {\n this.focused = true;\n }\n onFocusOut() {\n this.focused = false;\n }\n onKeyDown(event) {\n const keyCode = event && event.keyCode;\n const isHorizontal = this.orientation === 'horizontal';\n const resize = delta => {\n event.preventDefault();\n const state = this.splitter.dragState(this.index);\n this.splitter.setSize(state, delta);\n };\n if (keyCode === Keys.Enter) {\n event.preventDefault();\n this.collapseAny();\n }\n else if (isHorizontal && keyCode === Keys.ArrowLeft) {\n resize(-10);\n }\n else if (isHorizontal && keyCode === Keys.ArrowRight) {\n resize(10);\n }\n else if (!isHorizontal && keyCode === Keys.ArrowUp) {\n resize(-10);\n }\n else if (!isHorizontal && keyCode === Keys.ArrowDown) {\n resize(10);\n }\n }\n get expandLast() {\n const panes = this.splitter.panes;\n return panes.length === 2 && panes[1].collapsed;\n }\n ngOnInit() {\n let state;\n const listener = this.draggable.kendoPress.pipe(tap(stopPropagation), filter(() => this.splitter.isDraggable(this.index)), tap(() => state = this.splitter.dragState(this.index)), tap(() => this.splitter.toggleContentOverlay(this.index, true)), switchMap(preventOnDblClick(this.draggable.kendoRelease)), switchMap(createMoveStream(this.draggable))).subscribe(({ pageX, pageY, originalX, originalY }) => {\n let delta;\n if (this.orientation === 'vertical') {\n delta = pageY - originalY;\n }\n else if (this.direction === 'rtl') {\n delta = originalX - pageX;\n }\n else {\n delta = pageX - originalX;\n }\n this.splitter.setSize(state, delta);\n });\n this.subscriptions.add(listener);\n this.subscriptions.add(this.draggable.kendoRelease.subscribe(() => this.splitter.toggleContentOverlay(this.index, false)));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n togglePrevious() {\n this.splitter.tryToggle(this.index);\n }\n toggleNext() {\n this.splitter.tryToggle(this.index + 1);\n }\n previousArrowClass() {\n const pane = this.splitter.pane(this.index);\n const nextPane = this.splitter.pane(this.index + 1);\n const isCollapsible = pane.collapsible;\n const isCollapsed = pane.collapsed;\n const isHorizontal = this.orientation === 'horizontal';\n return classFromObject({\n 'k-icon': true,\n 'k-hidden': !isCollapsible || nextPane.isHidden,\n 'k-collapse-prev': isCollapsible,\n 'k-i-arrow-60-left': isCollapsible && isHorizontal && !isCollapsed,\n 'k-i-arrow-60-right': isCollapsible && isHorizontal && isCollapsed,\n 'k-i-arrow-60-up': isCollapsible && !isHorizontal && !isCollapsed,\n 'k-i-arrow-60-down': isCollapsible && !isHorizontal && isCollapsed\n });\n }\n nextArrowClass() {\n const pane = this.splitter.pane(this.index + 1);\n const prevPane = this.splitter.pane(this.index);\n const isCollapsible = pane.collapsible;\n const isCollapsed = pane.collapsed;\n const isHorizontal = this.orientation === 'horizontal';\n return classFromObject({\n 'k-icon': true,\n 'k-hidden': !isCollapsible || prevPane.isHidden,\n 'k-collapse-next': isCollapsible,\n 'k-i-arrow-60-right': isCollapsible && isHorizontal && !isCollapsed,\n 'k-i-arrow-60-left': isCollapsible && isHorizontal && isCollapsed,\n 'k-i-arrow-60-down': isCollapsible && !isHorizontal && !isCollapsed,\n 'k-i-arrow-60-up': isCollapsible && !isHorizontal && isCollapsed\n });\n }\n tryToggleNearest() {\n const prev = this.index;\n const next = this.index + 1;\n if (!this.splitter.tryToggle(prev)) {\n this.splitter.tryToggle(next);\n }\n }\n}\nSplitterBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterBarComponent, deps: [{ token: i1$1.DraggableDirective, host: true }, { token: i0.ElementRef }, { token: SplitterService }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nSplitterBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SplitterBarComponent, selector: \"kendo-splitter-bar\", inputs: { orientation: \"orientation\", index: \"index\" }, host: { listeners: { \"dblclick\": \"collapseAny()\", \"focusin\": \"onFocusIn()\", \"focusout\": \"onFocusOut()\", \"keydown\": \"onKeyDown($event)\" }, properties: { \"attr.aria-orientation\": \"this.orientation\", \"attr.role\": \"this.ariaRole\", \"class.k-focus\": \"this.focused\", \"attr.tabindex\": \"this.tabIndex\", \"class\": \"this.hostClasses\", \"style.-ms-flex-order\": \"this.order\", \"style.order\": \"this.order\" } }, ngImport: i0, template: `\n
    \n
    \n
    \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterBarComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-splitter-bar',\n template: `\n
    \n
    \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i1$1.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: i0.ElementRef }, { type: SplitterService }, { type: i1.LocalizationService }]; }, propDecorators: { orientation: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-orientation']\n }], index: [{\n type: Input\n }], ariaRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], focused: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class']\n }], order: [{\n type: HostBinding,\n args: ['style.-ms-flex-order']\n }, {\n type: HostBinding,\n args: ['style.order']\n }], collapseAny: [{\n type: HostListener,\n args: ['dblclick']\n }], onFocusIn: [{\n type: HostListener,\n args: ['focusin']\n }], onFocusOut: [{\n type: HostListener,\n args: ['focusout']\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\n/**\n * Represents the [Kendo UI Splitter component for Angular]({% slug overview_splitter %}).\n *\n * ```ts-preview\n *\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n *\n * \n *

    Inner splitter / left pane

    \n *

    Resizable and collapsible.

    \n *
    \n *\n * \n *

    Inner splitter / center pane

    \n *

    Resizable only.

    \n *
    \n *\n * \n *

    Inner splitter / right pane

    \n *

    Resizable and collapsible.

    \n *
    \n *\n *
    \n * `,\n * styles: [ `\n * h3 { font-size: 1.2em; }\n * h3, p { margin: 10px; padding: 0; }\n * ` ]\n * })\n * class AppComponent {}\n * ```\n */\nclass SplitterComponent {\n constructor(element, splitterService, localization, renderer, enclosingPane) {\n this.element = element;\n this.splitterService = splitterService;\n this.localization = localization;\n this.renderer = renderer;\n this.enclosingPane = enclosingPane;\n /**\n * Specifies the orientation of the panes within the Splitter.\n * Panes in a horizontal Splitter are placed horizontally.\n * Panes in a vertical Splitter are placed vertically.\n */\n this.orientation = 'horizontal';\n validatePackage(packageMetadata);\n if (enclosingPane) {\n enclosingPane.containsSplitter = true;\n }\n // the handler only runs in NgZone if there are bound handlers\n // this line merges both streams\n this.layoutChange = this.splitterService.layoutChange;\n this.configure = this.configure.bind(this);\n }\n get hostClasses() {\n return true;\n }\n get horizontalHostClasses() {\n return this.orientation === 'horizontal';\n }\n get verticalHostClasses() {\n return this.orientation === 'vertical';\n }\n get dir() {\n return this.direction;\n }\n set splitbars(splitbars) {\n if (!isPresent(splitbars) || !isPresent(this.panes)) {\n return;\n }\n const components = [...this.panes.toArray(), ...splitbars.toArray()]\n .sort((a, b) => a.order - b.order);\n const elements = components.map(component => component.element.nativeElement);\n elements.forEach(element => this.renderer.appendChild(this.element.nativeElement, element));\n }\n ngAfterContentInit() {\n this.reconfigure();\n }\n ngOnChanges(changes) {\n if (changes.orientation && !changes.orientation.isFirstChange()) {\n this.reconfigure();\n }\n }\n ngOnDestroy() {\n if (this.enclosingPane) {\n this.enclosingPane.containsSplitter = false;\n }\n this.unsubscribeChanges();\n }\n reconfigure() {\n this.unsubscribeChanges();\n this.configure();\n this.paneChangesSubscription = this.panes.changes.subscribe(this.configure);\n }\n unsubscribeChanges() {\n if (this.paneChangesSubscription) {\n this.paneChangesSubscription.unsubscribe();\n this.paneChangesSubscription = null;\n }\n }\n configure() {\n this.splitterService.configure({\n panes: this.panes.toArray(),\n orientation: this.orientation,\n containerSize: () => {\n if (this.orientation === 'vertical') {\n return this.element.nativeElement.clientHeight;\n }\n else {\n return this.element.nativeElement.clientWidth;\n }\n }\n });\n }\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n}\nSplitterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterComponent, deps: [{ token: i0.ElementRef }, { token: SplitterService }, { token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: SplitterPaneComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nSplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SplitterComponent, selector: \"kendo-splitter\", inputs: { orientation: \"orientation\" }, outputs: { layoutChange: \"layoutChange\" }, host: { properties: { \"class.k-splitter\": \"this.hostClasses\", \"class.k-splitter-flex\": \"this.hostClasses\", \"class.k-splitter-horizontal\": \"this.horizontalHostClasses\", \"class.k-splitter-vertical\": \"this.verticalHostClasses\", \"attr.dir\": \"this.dir\" } }, providers: [\n SplitterService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.spliter'\n }\n ], queries: [{ propertyName: \"panes\", predicate: SplitterPaneComponent }], viewQueries: [{ propertyName: \"splitbars\", predicate: SplitterBarComponent, descendants: true }], exportAs: [\"kendoSplitter\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n `, isInline: true, components: [{ type: SplitterBarComponent, selector: \"kendo-splitter-bar\", inputs: [\"orientation\", \"index\"] }], directives: [{ type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i1$1.DraggableDirective, selector: \"[kendoDraggable]\", inputs: [\"enableDrag\"], outputs: [\"kendoPress\", \"kendoDrag\", \"kendoRelease\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitter',\n selector: 'kendo-splitter',\n providers: [\n SplitterService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.spliter'\n }\n ],\n template: `\n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: SplitterService }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: SplitterPaneComponent, decorators: [{\n type: Optional\n }, {\n type: Host\n }, {\n type: Inject,\n args: [SplitterPaneComponent]\n }] }]; }, propDecorators: { orientation: [{\n type: Input\n }], layoutChange: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-splitter']\n }, {\n type: HostBinding,\n args: ['class.k-splitter-flex']\n }], horizontalHostClasses: [{\n type: HostBinding,\n args: ['class.k-splitter-horizontal']\n }], verticalHostClasses: [{\n type: HostBinding,\n args: ['class.k-splitter-vertical']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], splitbars: [{\n type: ViewChildren,\n args: [SplitterBarComponent]\n }], panes: [{\n type: ContentChildren,\n args: [SplitterPaneComponent]\n }] } });\n\n/**\n * Represents the content template of the Kendo UI TabStrip.\n * To define the template, nest a `` tag with the `kendoTabContent` inside the component tag.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n *

    Content 1

    \n *
    \n *
    \n *\n * \n * \n *

    Content 2

    \n *
    \n *
    \n *
    \n * `\n * })\n *\n * class AppComponent {}\n *\n * ```\n */\nclass TabContentDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTabContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nTabContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabContentDirective, selector: \"[kendoTabContent]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabContentDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTabContent]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Represents the title template of the Kendo UI TabStrip.\n * To define the template, nest a `` tag with the `kendoTabTitle` directive inside the component tag.\n *\n * > The `kendoTabTitle` directive overrides the TabStripTab [title]({% slug api_layout_tabstriptabcomponent %}#toc-title) option.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n *

    Custom Title

    \n *
    \n * \n *

    Content 1

    \n *
    \n *
    \n *\n * \n * \n *

    Content 2

    \n *
    \n *
    \n *
    \n * `\n * })\n *\n * class AppComponent {}\n *\n * ```\n */\nclass TabTitleDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTabTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabTitleDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nTabTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabTitleDirective, selector: \"[kendoTabTitle]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTabTitle]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Represents the tab component of the TabStrip.\n */\nclass TabStripTabComponent {\n constructor() {\n /**\n * Used to disable a tab ([see example]({% slug tabs_tabstrip %}#toc-disabled-tabs)).\n *\n * Defaults to `false`.\n */\n this.disabled = false;\n this._tabContent = new QueryList();\n /**\n * @hidden\n *\n * Currently only disabled tabs can be focused. Otherwise they will be\n * immediately selected\n */\n this.focused = false;\n }\n get tabContent() {\n return this._tabContent.first;\n }\n get tabTitle() {\n return this._tabTitleDirective.first;\n }\n}\nTabStripTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nTabStripTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabStripTabComponent, selector: \"kendo-tabstrip-tab\", inputs: { title: \"title\", disabled: \"disabled\", cssClass: \"cssClass\", cssStyle: \"cssStyle\", selected: \"selected\", closable: \"closable\", closeIcon: \"closeIcon\" }, queries: [{ propertyName: \"_tabContent\", predicate: TabContentDirective }, { propertyName: \"_tabTitleDirective\", predicate: TabTitleDirective }], exportAs: [\"kendoTabStripTab\"], ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripTabComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoTabStripTab',\n selector: 'kendo-tabstrip-tab',\n template: ``\n }]\n }], propDecorators: { title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], cssClass: [{\n type: Input\n }], cssStyle: [{\n type: Input\n }], selected: [{\n type: Input\n }], closable: [{\n type: Input\n }], closeIcon: [{\n type: Input\n }], _tabContent: [{\n type: ContentChildren,\n args: [TabContentDirective]\n }], _tabTitleDirective: [{\n type: ContentChildren,\n args: [TabTitleDirective]\n }] } });\n\n/**\n * Arguments for the `tabClose` event of the TabStrip.\n * The `tabClose` event fires when the close button of the tab is clicked.\n *\n */\nclass TabCloseEvent {\n /**\n * Constructs the event arguments for the `tabClose` event.\n * @param index - The index of the closed tab.\n * @param tab - The closed tab instance\n */\n constructor(index, tab) {\n this.index = index;\n this.tab = tab;\n }\n}\n\n/**\n * Arguments for the `select` event of the TabStrip.\n * The `select` event fires when a tab is selected (clicked).\n */\nclass SelectEvent extends PreventableEvent$1 {\n /**\n * Constructs the event arguments for the `select` event.\n * @param index - The index of the selected tab.\n * @param title - The title of the selected tab.\n */\n constructor(index, title) {\n super();\n this.index = index;\n this.title = title;\n }\n}\n\n/**\n * @hidden\n *\n * Checks if the current target is a TabStrip tab element\n */\nconst isTabElement = (target) => {\n const targetId = target.getAttribute('id');\n if (isPresent(targetId) || targetId.indexOf('k-tabstrip-tab-') >= 0) {\n return true;\n }\n return false;\n};\n/**\n * @hidden\n *\n * Checks if the current tab is closable. Depends on the value of the TabStrip closable property.\n */\nconst isTabClosable = (tab, tabStripClosable) => {\n if (tab.closable !== undefined) {\n return tab.closable;\n }\n return tabStripClosable;\n};\n/**\n * @hidden\n *\n * Checks if the TabStrip scroll buttons will be rendered. Depends on the value of the TabStrip scrollable settings.\n */\nconst tabStripHasScrollButtons = (scrollableSettings) => {\n return scrollableSettings.enabled && scrollableSettings.scrollButtons !== 'hidden';\n};\n/**\n * @hidden\n *\n * Checks if the TabStrip mouse scroll will be enabled. Depends on the value of the TabStrip scrollable settings.\n */\nconst mouseScrollEnabled = (scrollableSettings) => {\n return scrollableSettings.enabled && scrollableSettings.mouseScroll;\n};\n/**\n * @hidden\n *\n * Retrieves the current active tab element and its index.\n * This could either be the currently selected tab or the currently focused tab.\n */\nconst getActiveTab = (tabs) => {\n let focusedTab;\n let selectedTab;\n let focusedIndex = -1;\n let selectedIndex = -1;\n tabs.forEach((tab, index) => {\n if (tab.selected) {\n selectedTab = tab;\n selectedIndex = index;\n }\n else if (tab.focused) {\n focusedTab = tab;\n focusedIndex = index;\n }\n });\n return focusedIndex >= 0 ?\n { tab: focusedTab, index: focusedIndex } :\n { tab: selectedTab, index: selectedIndex };\n};\n/**\n * @hidden\n */\nconst getTabByIndex = (tabs, index) => {\n const filtered = tabs.filter((_tab, i) => i === index);\n if (filtered.length > 0) {\n return filtered[0];\n }\n return null;\n};\n/**\n * @hidden\n */\nconst getTabHeaderByIndex = (tabHeaderContainers, index) => {\n const filtered = tabHeaderContainers.filter((_tabHeader, i) => i === index);\n if (filtered.length > 0) {\n return filtered[0];\n }\n return null;\n};\n/**\n * @hidden\n */\nconst resetTabFocus = (tabs) => {\n tabs.forEach((tab) => {\n tab.focused = false;\n });\n};\n/**\n * @hidden\n */\nconst resetTabSelection = (tabs) => {\n tabs.forEach((tab) => {\n tab.selected = false;\n });\n};\n/**\n * @hidden\n */\nconst isTablistHorizontal = (tabPosition) => tabPosition === 'top' || tabPosition === 'bottom';\n\n/**\n * @hidden\n */\nclass TabStripService {\n constructor(localization, ngZone) {\n this.localization = localization;\n this.ngZone = ngZone;\n }\n onKeyDown(event) {\n if (!isTabElement(event.target)) {\n return;\n }\n const key = event.keyCode;\n if (this.shouldHandleKey(key)) {\n event.preventDefault();\n }\n else {\n return;\n }\n if (isNavigationKey(key) || isArrowKey(key)) {\n this.onNavigate(key);\n }\n else if (key === Keys.Delete) {\n this.onDelete();\n }\n }\n onTabSelect(tab, index) {\n const selectArgs = new SelectEvent(index, tab.title);\n this.owner.tabSelect.emit(selectArgs);\n if (!selectArgs.isDefaultPrevented()) {\n if (tab.selected) {\n this.focusTabHeader(index);\n return;\n }\n this.selectTab(tab, index);\n }\n }\n selectTab(tab, index) {\n resetTabSelection(this.owner.tabs);\n this.focusTabHeader(index);\n tab.selected = true;\n if (this.owner.isScrollable) {\n this.owner.scrollToSelectedTab();\n }\n }\n onNavigate(keyCode) {\n let { tab: activeTab, index: activeIndex } = getActiveTab(this.owner.tabs);\n if (!NgZone.isInAngularZone()) {\n this.ngZone.run(() => {\n if (activeIndex < 0) {\n this.owner.selectTab(this.firstNavigatableIndex());\n return;\n }\n activeTab.focused = false;\n const nextIndex = this.computeNextIndex(activeIndex, keyCode);\n this.activateTab(nextIndex);\n });\n }\n }\n onDelete() {\n let { tab: activeTab, index: activeTabIndex } = getActiveTab(this.owner.tabs);\n if (isTabClosable(activeTab, this.owner.closable) && !activeTab.disabled) {\n this.ngZone.run(() => {\n this.owner.tabClose.emit({ tab: activeTab, index: activeTabIndex });\n });\n }\n }\n activateTab(index) {\n const tab = getTabByIndex(this.owner.tabs, index);\n if (tab.disabled) {\n this.focusTabHeader(index);\n tab.focused = true;\n }\n else {\n this.onTabSelect(tab, index);\n }\n }\n focusTabHeader(index) {\n const tabHeader = getTabHeaderByIndex(this.owner.tabHeaderContainers, index);\n tabHeader.nativeElement.focus();\n }\n shouldHandleKey(keyCode) {\n if (isNavigationKey(keyCode)) {\n return true;\n }\n if (isTablistHorizontal(this.owner.tabPosition) && isHorizontalArrowKey(keyCode)) {\n return true;\n }\n if (!isTablistHorizontal(this.owner.tabPosition) && isVerticalArrowKey(keyCode)) {\n return true;\n }\n if (keyCode === Keys.Delete) {\n return true;\n }\n return false;\n }\n computeNextIndex(activeIndex, keyCode) {\n switch (keyCode) {\n case this.invertKeys(Keys.ArrowLeft, Keys.ArrowRight):\n case this.invertKeys(Keys.ArrowUp, Keys.ArrowDown):\n return this.prevNavigatableIndex(activeIndex);\n case this.invertKeys(Keys.ArrowRight, Keys.ArrowLeft):\n case this.invertKeys(Keys.ArrowDown, Keys.ArrowUp):\n return this.nextNavigatableIndex(activeIndex);\n case Keys.Home:\n return this.firstNavigatableIndex();\n case Keys.End:\n return this.lastNavigatableIndex();\n default:\n return;\n }\n }\n invertKeys(original, inverted) {\n return this.localization.rtl ? inverted : original;\n }\n firstNavigatableIndex() {\n return 0;\n }\n lastNavigatableIndex() {\n return this.owner.tabs.length - 1;\n }\n prevNavigatableIndex(selectedIndex) {\n if (selectedIndex - 1 < 0) {\n return this.lastNavigatableIndex();\n }\n return selectedIndex - 1;\n }\n nextNavigatableIndex(selectedIndex) {\n if (selectedIndex + 1 >= this.owner.tabs.length) {\n return this.firstNavigatableIndex();\n }\n return selectedIndex + 1;\n }\n}\nTabStripService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripService, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nTabStripService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.NgZone }]; } });\n\n/**\n * @hidden\n */\nconst MOUSE_SCROLL_SPEED = 10;\n/**\n * @hidden\n */\nconst BUTTON_SCROLL_SPEED = 100;\n/**\n * @hidden\n */\nconst SCROLLABLE_CLASS = 'k-tabstrip-scrollable';\n/**\n * @hidden\n */\nconst HIDDEN_CLASS = 'k-hidden';\n/**\n * @hidden\n */\nconst DIRECTION_CLASSES = {\n left: 'k-i-arrow-60-left',\n right: 'k-i-arrow-60-right',\n up: 'k-i-arrow-60-up',\n down: 'k-i-arrow-60-down'\n};\n/**\n * @hidden\n */\nconst DEFAULT_SCROLL_BEHAVIOR = 'smooth';\n\n/**\n * @hidden\n */\nclass ScrollService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.position = 0;\n this.scrollButtonActiveStateChange = new Subject();\n this.isDisabled = (buttonType) => this.owner[`${buttonType}ScrollButton`].host.nativeElement.classList.contains('k-disabled');\n }\n get tablistElement() {\n return this.owner.tablist.nativeElement;\n }\n get tabstripSize() {\n const hostElement = this.owner.wrapper.nativeElement;\n const wrapperWidth = parseFloat(getComputedStyle(hostElement).width);\n const wrapperHeight = parseFloat(getComputedStyle(hostElement).height);\n return isTablistHorizontal(this.owner.tabPosition) ? wrapperWidth : wrapperHeight;\n }\n get tablistOverflowSize() {\n if (!isDocumentAvailable()) {\n return 0;\n }\n const isHorizontal = isTablistHorizontal(this.owner.tabPosition);\n const overflowSize = Math.floor(this.tablistElement[isHorizontal ? 'scrollWidth' : 'scrollHeight']\n - this.tablistElement.getBoundingClientRect()[isHorizontal ? 'width' : 'height']);\n return overflowSize < 0 ? 0 : overflowSize;\n }\n get tabsOverflow() {\n return this.tablistOverflowSize > 0;\n }\n get scrollButtonsSize() {\n if (!this.owner.hasScrollButtons) {\n return 0;\n }\n const prevRect = this.owner.prevScrollButton.hostBoundingClientRect;\n const prevSize = isTablistHorizontal(this.owner.tabPosition) ? prevRect.width : prevRect.height;\n const nextRect = this.owner.nextScrollButton.hostBoundingClientRect;\n const nextSize = isTablistHorizontal(this.owner.tabPosition) ? nextRect.width : nextRect.height;\n return prevSize + nextSize;\n }\n toggleScrollButtonsState() {\n const tabStrip = this.owner;\n if (!tabStrip.hasScrollButtons) {\n return;\n }\n const currentPrevButtonActive = !this.isDisabled('prev');\n const currentNextButtonActive = !this.isDisabled('next');\n const calculatedPrevButtonActive = this.position > 0 && this.tablistOverflowSize > 0;\n const calculatedNextButtonActive = this.position < this.tablistOverflowSize + this.scrollButtonsSize && this.tablistOverflowSize > 0;\n if (calculatedPrevButtonActive !== currentPrevButtonActive) {\n this.ngZone.run(() => this.toggleButtonActiveState('prev', calculatedPrevButtonActive));\n }\n if (calculatedNextButtonActive !== currentNextButtonActive) {\n this.ngZone.run(() => this.toggleButtonActiveState('next', calculatedNextButtonActive));\n }\n }\n scrollToSelectedTab() {\n if (!this.tabsOverflow) {\n return;\n }\n let { index: activeIndex } = getActiveTab(this.owner.tabs);\n if (activeIndex === -1) {\n return;\n }\n this.position += this.getScrollOffset(activeIndex);\n if (isTablistHorizontal(this.owner.tabPosition)) {\n this.tablistElement.scrollLeft = this.position;\n }\n else {\n this.tablistElement.scrollTop = this.position;\n }\n this.toggleScrollButtonsState();\n const tabStrip = this.owner;\n if (!tabStrip.hasScrollButtons) {\n return;\n }\n const isFirstTabActive = activeIndex === 0;\n const isLastTabActive = activeIndex === this.owner.tabs.length - 1;\n if (isFirstTabActive && !this.isDisabled('prev')) {\n this.ngZone.run(() => this.toggleButtonActiveState('prev', false));\n }\n if (isLastTabActive && !this.isDisabled('next')) {\n this.ngZone.run(() => this.toggleButtonActiveState('next', false));\n }\n }\n getScrollOffset(activeIndex) {\n if (!isDocumentAvailable()) {\n return 0;\n }\n const isHorizontal = isTablistHorizontal(this.owner.tabPosition);\n this.tablistElement[`scroll${isHorizontal ? 'Left' : 'Top'}`] = this.position;\n const activeTabRect = this.tablistElement.children[activeIndex].getBoundingClientRect();\n const tablistRect = this.tablistElement.getBoundingClientRect();\n const end = isHorizontal ? 'right' : 'bottom';\n const start = isHorizontal ? 'left' : 'top';\n const activeTabStart = activeTabRect[start];\n const activeTabEnd = activeTabRect[end];\n const tablistStart = tablistRect[start];\n const tablistEnd = tablistRect[end];\n const tabEndIsInVisibleRange = activeTabEnd <= tablistEnd;\n const tabStartIsInVisibleRange = activeTabStart >= tablistStart;\n const isWholeTabVisible = tabEndIsInVisibleRange && tabStartIsInVisibleRange;\n if (isWholeTabVisible) {\n return 0;\n }\n if (!tabEndIsInVisibleRange) {\n return activeTabEnd - tablistEnd;\n }\n if (!tabStartIsInVisibleRange) {\n return activeTabStart - tablistStart;\n }\n }\n onMouseScroll(event) {\n event.preventDefault();\n if (!mouseScrollEnabled(this.owner.scrollable)) {\n return;\n }\n const direction = event.deltaY < 0 ? 'prev' : 'next';\n this.calculateListPosition(direction, this.owner.scrollable.mouseScrollSpeed);\n if (isTablistHorizontal(this.owner.tabPosition)) {\n this.tablistElement.scrollLeft = this.position;\n }\n else {\n this.tablistElement.scrollTop = this.position;\n }\n this.toggleScrollButtonsState();\n }\n scrollTabs(direction) {\n this.calculateListPosition(direction, this.owner.scrollable.buttonScrollSpeed);\n if (isTablistHorizontal(this.owner.tabPosition)) {\n this.tablistElement.scrollTo({ left: this.position, behavior: DEFAULT_SCROLL_BEHAVIOR });\n }\n else {\n this.tablistElement.scrollTo({ top: this.position, behavior: DEFAULT_SCROLL_BEHAVIOR });\n }\n this.toggleScrollButtonsState();\n }\n calculateListPosition(direction, scrollSpeed) {\n const adjustedMaxScroll = this.tablistOverflowSize + this.scrollButtonsSize;\n if (direction === 'prev' && this.position > 0) {\n this.position = this.position - scrollSpeed <= 0 ? 0 : this.position - scrollSpeed;\n }\n else if (direction === 'next' && this.position < adjustedMaxScroll) {\n if (this.position + scrollSpeed > adjustedMaxScroll) {\n this.position = adjustedMaxScroll;\n return;\n }\n this.position += scrollSpeed;\n }\n }\n restoreScrollPosition() {\n if (isTablistHorizontal(this.owner.tabPosition)) {\n this.tablistElement.scrollTo({ left: this.position });\n }\n else {\n this.tablistElement.scrollTo({ top: this.position });\n }\n this.toggleScrollButtonsState();\n }\n toggleButtonActiveState(buttonType, active) {\n this.scrollButtonActiveStateChange.next({ buttonType, active });\n }\n}\nScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\n/**\n * @hidden\n */\nconst normalizeSettings = ({ enabled = true, scrollButtons = 'auto', mouseScroll = true, buttonScrollSpeed = BUTTON_SCROLL_SPEED, mouseScrollSpeed = MOUSE_SCROLL_SPEED, prevButtonIcon, nextButtonIcon }) => ({\n enabled,\n scrollButtons,\n mouseScroll,\n buttonScrollSpeed,\n mouseScrollSpeed,\n prevButtonIcon,\n nextButtonIcon\n});\n/**\n * @hidden\n */\nconst normalizeScrollableSettings = (settings) => normalizeSettings(settings === false ? { enabled: false } : settings);\n\n/**\n * Arguments for the `tabScroll` event of the TabStrip.\n * The `tabScroll` event fires when the tabs are being scrolled.\n *\n */\nclass TabScrollEvent extends PreventableEvent$1 {\n /**\n * @hidden\n */\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * @hidden\n */\nclass TabStripScrollableButtonComponent {\n constructor(host, renderer, ngZone) {\n this.host = host;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.btnClasses = true;\n this.prev = false;\n this.tabScroll = new EventEmitter();\n this.onClick = new EventEmitter();\n this.subs = new Subscription();\n this.clickHandler = (scrollEvent) => {\n const tabStripScrollEvent = this.emitScrollEvent(scrollEvent);\n const isTabStripScrollEventPrevented = tabStripScrollEvent.isDefaultPrevented();\n if (isTabStripScrollEventPrevented) {\n return;\n }\n const buttonType = this.prev ? 'prev' : 'next';\n this.onClick.emit(buttonType);\n };\n }\n get prevClass() {\n return this.prev;\n }\n get nextClass() {\n return !this.prev;\n }\n get hostBoundingClientRect() {\n return this.host.nativeElement.getBoundingClientRect();\n }\n get iconClass() {\n return this.scrollButtonIconClass[this.prev ? 'prevScrollButton' : 'nextScrollButton'];\n }\n ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n this.subs.add(this.renderer.listen(this.host.nativeElement, 'click', this.clickHandler));\n });\n }\n ngOnDestroy() {\n this.subs.unsubscribe();\n }\n toggle(show) {\n this.renderer[show ? 'removeClass' : 'addClass'](this.host.nativeElement, HIDDEN_CLASS);\n }\n get scrollButtonIconClass() {\n const defaultPrevIcon = isTablistHorizontal(this.tabPosition) ? DIRECTION_CLASSES.left : DIRECTION_CLASSES.up;\n const defaultNextIcon = isTablistHorizontal(this.tabPosition) ? DIRECTION_CLASSES.right : DIRECTION_CLASSES.down;\n if (typeof this.scrollable === 'object') {\n const prevIcon = typeof this.scrollable.prevButtonIcon === 'undefined' ? defaultPrevIcon : this.scrollable.prevButtonIcon;\n const nextIcon = typeof this.scrollable.nextButtonIcon === 'undefined' ? defaultNextIcon : this.scrollable.nextButtonIcon;\n return { prevScrollButton: prevIcon, nextScrollButton: nextIcon };\n }\n return { prevScrollButton: defaultPrevIcon, nextScrollButton: defaultNextIcon };\n }\n emitScrollEvent(event) {\n const scrollEvent = new TabScrollEvent({\n originalEvent: event\n });\n this.tabScroll.emit(scrollEvent);\n return scrollEvent;\n }\n}\nTabStripScrollableButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripScrollableButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nTabStripScrollableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabStripScrollableButtonComponent, selector: \"[kendoTabStripScrollableButton]\", inputs: { prev: \"prev\", tabPosition: \"tabPosition\", scrollable: \"scrollable\" }, outputs: { tabScroll: \"tabScroll\", onClick: \"onClick\" }, host: { properties: { \"class.k-button\": \"this.btnClasses\", \"class.k-button-md\": \"this.btnClasses\", \"class.k-icon-button\": \"this.btnClasses\", \"class.k-rounded-md\": \"this.btnClasses\", \"class.k-button-flat\": \"this.btnClasses\", \"class.k-button-flat-base\": \"this.btnClasses\", \"class.k-tabstrip-prev\": \"this.prevClass\", \"class.k-tabstrip-next\": \"this.nextClass\" } }, ngImport: i0, template: `\n \n `, isInline: true, directives: [{ type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripScrollableButtonComponent, decorators: [{\n type: Component,\n args: [{\n template: `\n \n `,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoTabStripScrollableButton]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { btnClasses: [{\n type: HostBinding,\n args: ['class.k-button']\n }, {\n type: HostBinding,\n args: ['class.k-button-md']\n }, {\n type: HostBinding,\n args: ['class.k-icon-button']\n }, {\n type: HostBinding,\n args: ['class.k-rounded-md']\n }, {\n type: HostBinding,\n args: ['class.k-button-flat']\n }, {\n type: HostBinding,\n args: ['class.k-button-flat-base']\n }], prevClass: [{\n type: HostBinding,\n args: ['class.k-tabstrip-prev']\n }], nextClass: [{\n type: HostBinding,\n args: ['class.k-tabstrip-next']\n }], prev: [{\n type: Input\n }], tabPosition: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], tabScroll: [{\n type: Output\n }], onClick: [{\n type: Output\n }] } });\n\n/**\n * @hidden\n */\nclass TabComponent {\n constructor(localization) {\n this.localization = localization;\n this.tabClose = new EventEmitter();\n this.hostClasses = true;\n }\n get activeClass() {\n return this.tab.selected;\n }\n get disabledClass() {\n return this.tab.disabled;\n }\n get focusedClass() {\n return this.tab.focused;\n }\n get tabIndex() {\n return this.tab.selected || this.tab.focused ? 0 : -1;\n }\n get tabClosable() {\n if (this.tab.closable !== undefined) {\n return this.tab.closable;\n }\n return this.tabStripClosable;\n }\n get closeButtonClasses() {\n if (isPresent(this.tab.closeIcon)) {\n return this.tab.closeIcon;\n }\n return this.tabStripCloseIcon;\n }\n get closeButtonTitle() {\n return this.localization.get('closeTitle');\n }\n closeTab(index) {\n const closeArgs = new TabCloseEvent(index, this.tab);\n this.tabClose.emit(closeArgs);\n }\n}\nTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabComponent, selector: \"[kendoTabStripTab]\", inputs: { tab: \"tab\", index: \"index\", tabStripClosable: \"tabStripClosable\", tabStripCloseIcon: \"tabStripCloseIcon\" }, outputs: { tabClose: \"tabClose\" }, host: { properties: { \"class.k-item\": \"this.hostClasses\", \"class.k-state-default\": \"this.hostClasses\", \"attr.aria-selected]\": \"this.activeClass\", \"class.k-active\": \"this.activeClass\", \"attr.aria-disabled]\": \"this.disabledClass\", \"class.k-disabled\": \"this.disabledClass\", \"class.k-focus\": \"this.focusedClass\", \"attr.tabindex\": \"this.tabIndex\" } }, ngImport: i0, template: `\n {{ tab.title }}\n \n \n \n \n \n \n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoTabStripTab]',\n template: `\n {{ tab.title }}\n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { tab: [{\n type: Input\n }], index: [{\n type: Input\n }], tabStripClosable: [{\n type: Input\n }], tabStripCloseIcon: [{\n type: Input\n }], tabClose: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-item']\n }, {\n type: HostBinding,\n args: ['class.k-state-default']\n }], activeClass: [{\n type: HostBinding,\n args: ['attr.aria-selected]']\n }, {\n type: HostBinding,\n args: ['class.k-active']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled]']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }] } });\n\n/**\n * @hidden\n */\nclass TabStripMessages extends ComponentMessages {\n}\nTabStripMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nTabStripMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabStripMessages, selector: \"kendo-tabstrip-messages-base\", inputs: { closeTitle: \"closeTitle\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-tabstrip-messages-base'\n }]\n }], propDecorators: { closeTitle: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedTabStripMessagesDirective extends TabStripMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedTabStripMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedTabStripMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedTabStripMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedTabStripMessagesDirective, selector: \"[kendoTabStripLocalizedMessages]\", providers: [\n {\n provide: TabStripMessages,\n useExisting: forwardRef(() => LocalizedTabStripMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedTabStripMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TabStripMessages,\n useExisting: forwardRef(() => LocalizedTabStripMessagesDirective)\n }\n ],\n selector: `[kendoTabStripLocalizedMessages]`\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Represents the [Kendo UI TabStrip component for Angular]({% slug overview_tabstrip %}).\n */\nclass TabStripComponent {\n constructor(localization, renderer, wrapper, tabstripService, scrollService, ngZone) {\n this.localization = localization;\n this.renderer = renderer;\n this.wrapper = wrapper;\n this.tabstripService = tabstripService;\n this.scrollService = scrollService;\n this.ngZone = ngZone;\n /**\n * Enables the tab animation.\n *\n * @default true\n */\n this.animate = true;\n /**\n * Sets the position of the tabs. Defaults to `top`.\n *\n * @default 'top'\n */\n this.tabPosition = 'top';\n /**\n * When set to `true`, the component renders all tabs and they are persisted in the DOM.\n * By default, `keepTabContent` is `false`.\n *\n * @default false\n */\n this.keepTabContent = false;\n /**\n * When set to `true`, a close button will be rendered inside each tab.\n * By default, `closable` is `false`.\n *\n * @default false\n */\n this.closable = false;\n /**\n * Allows defining a custom CSS class, or multiple classes separated by spaces, which will be applied to the close button span element.\n * Allows the usage of custom icons.\n */\n this.closeIcon = 'k-icon k-i-x';\n /**\n * Fires each time the user selects a tab ([see example]({% slug overview_tabstrip %}#toc-basic-usage)).\n * The event data contains the index of the selected tab and its title.\n */\n this.tabSelect = new EventEmitter();\n /**\n * Fires each time the user closes a tab.\n * The event data contains the index of the closed tab and its instance.\n */\n this.tabClose = new EventEmitter();\n /**\n * Fires each time the user scrolls the TabStrip list.\n * The event is preventable.\n */\n this.tabScroll = new EventEmitter();\n this.hostClasses = true;\n /**\n * A query list of all declared tabs.\n */\n this.tabs = new QueryList();\n this._scrollableSettings = normalizeScrollableSettings(false);\n this.subscriptions = new Subscription();\n this.subscriptionsArePresent = false;\n validatePackage(packageMetadata);\n this.tabstripService.owner = this;\n this.scrollService.owner = this;\n this.subscriptions.add(this.scrollService.scrollButtonActiveStateChange.subscribe((activeButtonSettings) => {\n if (this.hasScrollButtons) {\n const action = activeButtonSettings.active ? 'remove' : 'add';\n this.renderer[`${action}Class`](this[`${activeButtonSettings.buttonType}ScrollButton`].host.nativeElement, 'k-disabled');\n }\n }));\n }\n /**\n * Sets the height of the TabStrip.\n */\n set height(value) {\n this._height = value;\n this.renderer.setStyle(this.wrapper.nativeElement, 'height', value);\n }\n get height() {\n return this._height;\n }\n /**\n * Enables the scrolling of the tab list. When set to `true` and the total size of all tabs\n * is greater than the size of the TabStrip container, scroll buttons will be rendered on each end of the tab list.\n *\n * By default, `scrollable` is `false`.\n *\n * @default false\n */\n set scrollable(value) {\n this._scrollableSettings = normalizeScrollableSettings(value);\n if (this.tablist) {\n this.toggleScrollButtons(this.scrollService.tabsOverflow);\n this.attachWheelHandler(this.tablist.nativeElement);\n }\n }\n get scrollable() {\n return this._scrollableSettings;\n }\n get tabsAtTop() {\n return this.tabPosition === 'top';\n }\n get tabsAtRight() {\n return this.tabPosition === 'right';\n }\n get tabsAtBottom() {\n return this.tabPosition === 'bottom';\n }\n get tabsAtLeft() {\n return this.tabPosition === 'left';\n }\n get dir() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n get tabStripScrollable() {\n return this._scrollableSettings.enabled;\n }\n ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n if (this.scrollService.tabsOverflow) {\n this.toggleScrollButtons(true);\n }\n else {\n this.toggleScrollButtons(false);\n }\n setTimeout(() => {\n this.scrollToSelectedTab();\n });\n });\n this.initDomEvents();\n }\n ngOnChanges(changes) {\n const positionChange = changes.tabPosition;\n if (positionChange) {\n const tabsAtBottomChanged = positionChange.previousValue === 'bottom' || positionChange.currentValue === 'bottom';\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n if (tabsAtBottomChanged) {\n if (this.subscriptionsArePresent) {\n this.subscriptions.unsubscribe();\n this.subscriptions = new Subscription();\n this.subscriptionsArePresent = false;\n }\n this.initDomEvents();\n }\n this.scrollService.restoreScrollPosition();\n });\n }\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get tabsAlignmentStyles() {\n return {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n justify: 'space-between'\n }[this.tabAlignment];\n }\n /**\n * @hidden\n */\n get tabListWidth() {\n if (this.tabPosition === 'top' || this.tabPosition === 'bottom') {\n return '100%';\n }\n return null;\n }\n /**\n * @hidden\n */\n get tabListHeight() {\n if (this.tabPosition === 'left' || this.tabPosition === 'right') {\n return '100%';\n }\n return null;\n }\n /**\n * @hidden\n */\n get isScrollable() {\n return this._scrollableSettings.enabled;\n }\n /**\n * @hidden\n */\n get hasScrollButtons() {\n return tabStripHasScrollButtons(this._scrollableSettings);\n }\n /**\n * @hidden\n */\n get mouseScrollEnabled() {\n return mouseScrollEnabled(this._scrollableSettings);\n }\n /**\n * @hidden\n */\n get itemsWrapperClass() {\n return isTablistHorizontal(this.tabPosition) ? 'k-hstack' : 'k-vstack';\n }\n /**\n * Allows the user to select a tab programmatically.\n * @param {number} index - The index of the tab that will be selected.\n */\n selectTab(index) {\n const tab = getTabByIndex(this.tabs, index);\n if (!tab || tab.disabled) {\n return;\n }\n this.tabstripService.selectTab(tab, index);\n this.scrollToSelectedTab();\n }\n /**\n * @hidden\n */\n onTabClick(originalEvent, tabIndex) {\n if (isFocusable(originalEvent.target)) {\n return;\n }\n const targetElement = originalEvent.target;\n const isTargetCloseButton = hasClass(targetElement, 'k-remove-tab') || hasClass(targetElement.parentElement, 'k-remove-tab');\n if (isTargetCloseButton) {\n return;\n }\n const tab = getTabByIndex(this.tabs, tabIndex);\n this.tabstripService.onTabSelect(tab, tabIndex);\n this.scrollToSelectedTab();\n }\n /**\n * @hidden\n */\n onResize() {\n if (this.scrollService.tabsOverflow) {\n this.toggleScrollButtons(true);\n }\n else {\n this.toggleScrollButtons(false);\n }\n this.ngZone.runOutsideAngular(() => {\n this.scrollService.toggleScrollButtonsState();\n });\n }\n /**\n * @hidden\n */\n scrollToSelectedTab() {\n if (this._scrollableSettings.enabled) {\n this.scrollService.scrollToSelectedTab();\n }\n }\n /**\n * @hidden\n */\n onScrollButtonClick(buttonType) {\n this.scrollService.scrollTabs(buttonType);\n }\n initDomEvents() {\n if (!this.wrapper || this.subscriptionsArePresent) {\n return;\n }\n const tablist = this.tablist.nativeElement;\n this.ngZone.runOutsideAngular(() => {\n this.subscriptions.add(this.renderer.listen(tablist, 'keydown', (ev) => {\n this.tabstripService.onKeyDown(ev);\n }));\n });\n this.subscriptions.add(this.renderer.listen(tablist, 'focusout', () => {\n resetTabFocus(this.tabs);\n }));\n if (this.isScrollable && this.mouseScrollEnabled) {\n this.attachWheelHandler(tablist);\n }\n this.subscriptionsArePresent = true;\n }\n toggleScrollButtons(tabsOverflow) {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n const scrollButtonsSetting = this._scrollableSettings.scrollButtons;\n const scrollButtonsArePresent = this.prevScrollButton && this.nextScrollButton;\n const shouldShowButtons = scrollButtonsArePresent && tabsOverflow;\n const shouldHideButtons = scrollButtonsArePresent &&\n !tabsOverflow &&\n scrollButtonsSetting !== 'visible';\n const alwaysVisible = scrollButtonsSetting === 'visible';\n if (shouldHideButtons) {\n this.prevScrollButton.toggle(false);\n this.nextScrollButton.toggle(false);\n }\n else if (shouldShowButtons || alwaysVisible) {\n this.prevScrollButton.toggle(true);\n this.nextScrollButton.toggle(true);\n }\n if (scrollButtonsArePresent && alwaysVisible) {\n this.ngZone.runOutsideAngular(() => {\n this.scrollService.toggleScrollButtonsState();\n });\n }\n });\n }\n attachWheelHandler(tablist) {\n this.ngZone.runOutsideAngular(() => {\n this.subscriptions.add(this.renderer.listen(tablist, 'wheel', (wheelEvent) => {\n const scrollEvent = new TabScrollEvent({\n originalEvent: wheelEvent\n });\n this.tabScroll.emit(scrollEvent);\n const isTabStripScrollEventPrevented = scrollEvent.isDefaultPrevented();\n if (isTabStripScrollEventPrevented || !this.scrollService.tabsOverflow) {\n return;\n }\n this.scrollService.onMouseScroll(wheelEvent);\n }));\n });\n }\n}\nTabStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TabStripService }, { token: ScrollService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nTabStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabStripComponent, selector: \"kendo-tabstrip\", inputs: { height: \"height\", animate: \"animate\", tabAlignment: \"tabAlignment\", tabPosition: \"tabPosition\", keepTabContent: \"keepTabContent\", closable: \"closable\", scrollable: \"scrollable\", closeIcon: \"closeIcon\" }, outputs: { tabSelect: \"tabSelect\", tabClose: \"tabClose\", tabScroll: \"tabScroll\" }, host: { properties: { \"class.k-tabstrip\": \"this.hostClasses\", \"class.k-floatwrap\": \"this.hostClasses\", \"class.k-tabstrip-top\": \"this.tabsAtTop\", \"class.k-tabstrip-right\": \"this.tabsAtRight\", \"class.k-tabstrip-bottom\": \"this.tabsAtBottom\", \"class.k-tabstrip-left\": \"this.tabsAtLeft\", \"attr.dir\": \"this.dir\", \"class.k-tabstrip-scrollable\": \"this.tabStripScrollable\" } }, providers: [\n TabStripService,\n ScrollService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tabstrip'\n }\n ], queries: [{ propertyName: \"tabs\", predicate: TabStripTabComponent }], viewQueries: [{ propertyName: \"tablist\", first: true, predicate: [\"tablist\"], descendants: true }, { propertyName: \"prevScrollButton\", first: true, predicate: [\"prevScrollButton\"], descendants: true }, { propertyName: \"nextScrollButton\", first: true, predicate: [\"nextScrollButton\"], descendants: true }, { propertyName: \"tabHeaderContainers\", predicate: [\"tabHeaderContainer\"], descendants: true, read: ElementRef }], exportAs: [\"kendoTabStrip\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
    \n \n
      \n \n \n \n
    \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n `, isInline: true, components: [{ type: TabStripScrollableButtonComponent, selector: \"[kendoTabStripScrollableButton]\", inputs: [\"prev\", \"tabPosition\", \"scrollable\"], outputs: [\"tabScroll\", \"onClick\"] }, { type: TabComponent, selector: \"[kendoTabStripTab]\", inputs: [\"tab\", \"index\", \"tabStripClosable\", \"tabStripCloseIcon\"], outputs: [\"tabClose\"] }, { type: i1$1.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: LocalizedTabStripMessagesDirective, selector: \"[kendoTabStripLocalizedMessages]\" }, { type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], animations: [\n trigger('state', [\n state('active', style({ opacity: 1 })),\n transition('* => active', [\n style({ opacity: 0 }),\n animate('400ms ease-in')\n ])\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripComponent, decorators: [{\n type: Component,\n args: [{\n animations: [\n trigger('state', [\n state('active', style({ opacity: 1 })),\n transition('* => active', [\n style({ opacity: 0 }),\n animate('400ms ease-in')\n ])\n ])\n ],\n providers: [\n TabStripService,\n ScrollService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tabstrip'\n }\n ],\n exportAs: 'kendoTabStrip',\n selector: 'kendo-tabstrip',\n template: `\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
    \n \n
      \n \n \n \n
    \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: TabStripService }, { type: ScrollService }, { type: i0.NgZone }]; }, propDecorators: { height: [{\n type: Input\n }], animate: [{\n type: Input\n }], tabAlignment: [{\n type: Input\n }], tabPosition: [{\n type: Input\n }], keepTabContent: [{\n type: Input\n }], closable: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], closeIcon: [{\n type: Input\n }], tabSelect: [{\n type: Output\n }], tabClose: [{\n type: Output\n }], tabScroll: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-tabstrip']\n }, {\n type: HostBinding,\n args: ['class.k-floatwrap']\n }], tabsAtTop: [{\n type: HostBinding,\n args: ['class.k-tabstrip-top']\n }], tabsAtRight: [{\n type: HostBinding,\n args: ['class.k-tabstrip-right']\n }], tabsAtBottom: [{\n type: HostBinding,\n args: ['class.k-tabstrip-bottom']\n }], tabsAtLeft: [{\n type: HostBinding,\n args: ['class.k-tabstrip-left']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], tabStripScrollable: [{\n type: HostBinding,\n args: ['class.k-tabstrip-scrollable']\n }], tabs: [{\n type: ContentChildren,\n args: [TabStripTabComponent]\n }], tablist: [{\n type: ViewChild,\n args: ['tablist', { static: false }]\n }], tabHeaderContainers: [{\n type: ViewChildren,\n args: ['tabHeaderContainer', { read: ElementRef }]\n }], prevScrollButton: [{\n type: ViewChild,\n args: ['prevScrollButton', { static: false }]\n }], nextScrollButton: [{\n type: ViewChild,\n args: ['nextScrollButton', { static: false }]\n }] } });\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_layout %})).\n */\nclass TabStripCustomMessagesComponent extends TabStripMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTabStripCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nTabStripCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TabStripCustomMessagesComponent, selector: \"kendo-tabstrip-messages\", providers: [\n {\n provide: TabStripMessages,\n useExisting: forwardRef(() => TabStripCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TabStripMessages,\n useExisting: forwardRef(() => TabStripCustomMessagesComponent)\n }\n ],\n selector: 'kendo-tabstrip-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * Represents a template that defines the content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerTemplate` directive inside the `` tag.\n * Using this template directive will override all other templates,\n * for example, `kendoDrawerHeaderTemplate` and `kendoDrawerItemTemplate`.\n */\nclass DrawerTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDrawerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerTemplateDirective, selector: \"[kendoDrawerTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents a template that defines the item content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerItemTemplate` directive inside the `` tag.\n */\nclass DrawerItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerItemTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDrawerItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerItemTemplateDirective, selector: \"[kendoDrawerItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents a template that defines the header content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerHeaderTemplate` directive inside the `` tag.\n */\nclass DrawerHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerHeaderTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDrawerHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerHeaderTemplateDirective, selector: \"[kendoDrawerHeaderTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerHeaderTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerHeaderTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents a template that defines the footer content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerFooterTemplate` directive inside the `` tag.\n */\nclass DrawerFooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerFooterTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerFooterTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDrawerFooterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerFooterTemplateDirective, selector: \"[kendoDrawerFooterTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerFooterTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerFooterTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nconst defaultIsItemExpanded = (_item) => false;\n/**\n * @hidden\n */\nclass DrawerService {\n constructor() {\n this.selectedIndices = [];\n this.originalItems = [];\n this.idxCounter = 0;\n this.isItemExpanded = defaultIsItemExpanded;\n }\n init() {\n this.resetViewData();\n this.originalItems = this.owner.items || [];\n let rootItems = this.originalItems.filter(item => !isPresent(item.parentId));\n this.populateViewData(rootItems);\n }\n get view() {\n return Array.from(this.viewData);\n }\n populateViewData(items, level = 0) {\n items.forEach((item) => {\n this.setSelection(item);\n const children = this.loadChildren(item);\n const isExpanded = this.isItemExpanded(item);\n this.viewData.add({\n item: item,\n index: this.idxCounter++,\n level: level,\n hasChildren: children.length > 0,\n isExpanded: isExpanded\n });\n if (children.length > 0 && isExpanded) {\n this.populateViewData(children, level + 1);\n }\n });\n }\n resetViewData() {\n this.idxCounter = 0;\n this.viewData = new Set();\n }\n loadChildren(item) {\n return this.originalItems.filter(i => {\n return isPresent(i.parentId) && (i.parentId === item.id);\n });\n }\n onSelect(selectedIdx) {\n this.selectedIndices = [selectedIdx];\n const drawer = this.owner;\n if (drawer.autoCollapse && !drawer.minimized) {\n drawer.toggle(false);\n }\n }\n setSelection(item) {\n if (this.selectedIndices.length === 0 && item.selected) {\n this.selectedIndices.push(this.idxCounter);\n }\n }\n resetSelection() {\n this.selectedIndices = [];\n }\n}\nDrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nfunction miniExpandPush(duration, width, miniWidth) {\n return [\n style({ overflow: 'hidden', flexBasis: `${miniWidth}px` }),\n animate(`${duration}ms ease-in`, style({ flexBasis: `${width}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction miniCollapsePush(duration, width, miniWidth) {\n return [\n style({ overflow: 'hidden', flexBasis: `${width}px` }),\n animate(`${duration}ms ease-in`, style({ flexBasis: `${miniWidth}px` }))\n ];\n}\n/**\n * @hidden\n *\n */\nfunction miniExpandOverlay(duration, width, miniWidth) {\n return [\n style({ width: `${miniWidth}px` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', width: `${width}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandPush(duration, width) {\n return [\n style({ overflow: 'hidden', flexBasis: '0px' }),\n animate(`${duration}ms ease-in`, style({ flexBasis: `${width}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction collapsePush(duration, width) {\n return [\n style({ flexBasis: `${width}px` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', flexBasis: `0px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandRTLOverlay(duration) {\n return [\n style({ transform: `translateX(100%)` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(0)` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandOverlay(duration, position) {\n const translateDir = position !== 'end' ? `-100%` : `100%`;\n return [\n style({ transform: `translateX(${translateDir})` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(0)` }))\n ];\n}\n/**\n * @hidden\n */\nfunction miniCollapseOverlay(duration, width, miniWidth) {\n return [\n style({ width: `${width}px` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', width: `${miniWidth}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction collapseOverlay(duration, position) {\n const translateDir = position !== 'end' ? '-100%' : '100%';\n return [\n style({ transform: `translateX(0)` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(${translateDir})` }))\n ];\n}\n/**\n * @hidden\n */\nfunction collapseRTLOverlay(duration) {\n return [\n style({ transform: `translateX(0)` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(100%)` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandAnimation(settings) {\n const duration = settings.animation.duration;\n const width = settings.width;\n const miniWidth = settings.miniWidth;\n const mode = settings.mode;\n const mini = settings.mini;\n const rtl = settings.rtl;\n const position = settings.position;\n if (mini && mode === 'push') {\n return miniExpandPush(duration, width, miniWidth);\n }\n if (!mini && mode === 'push') {\n return expandPush(duration, width);\n }\n if (!mini && mode === 'overlay') {\n return rtl ? expandRTLOverlay(duration) : expandOverlay(duration, position);\n }\n if (mini && mode === 'overlay') {\n return miniExpandOverlay(duration, width, miniWidth);\n }\n}\n/**\n * @hidden\n */\nfunction collapseAnimation(settings) {\n const duration = settings.animation.duration;\n const width = settings.width;\n const miniWidth = settings.miniWidth;\n const mode = settings.mode;\n const mini = settings.mini;\n const rtl = settings.rtl;\n const position = settings.position;\n if (mini && mode === 'push') {\n return miniCollapsePush(duration, width, miniWidth);\n }\n if (!mini && mode === 'push') {\n return collapsePush(duration, width);\n }\n if (!mini && mode === 'overlay') {\n return rtl ? collapseRTLOverlay(duration) : collapseOverlay(duration, position);\n }\n if (mini && mode === 'overlay') {\n return miniCollapseOverlay(duration, width, miniWidth);\n }\n}\n\n/**\n * @hidden\n */\nconst DRAWER_ITEM_INDEX = 'data-kendo-drawer-index';\n\n/**\n * @hidden\n */\nconst DRAWER_LINK_SELECTOR = '.k-drawer-link';\n/**\n * @hidden\n */\nconst ACTIVE_NESTED_LINK_SELECTOR = ':focus:not(.k-disabled) .k-drawer-link';\n/**\n * @hidden\n */\nconst nestedLink = (element, selector) => element.querySelector(selector);\n\n/**\n * @hidden\n */\nclass DrawerListSelectEvent extends PreventableEvent$1 {\n /**\n * @hidden\n */\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * @hidden\n */\nclass DrawerItemComponent {\n constructor(drawer, element, renderer) {\n this.drawer = drawer;\n this.element = element;\n this.renderer = renderer;\n }\n get disabledClass() {\n return this.item.disabled;\n }\n get selectedClass() {\n return this.drawer.selectedIndices.indexOf(this.index) >= 0;\n }\n get label() {\n return this.item.text ? this.item.text : null;\n }\n ngAfterViewInit() {\n const elem = this.element.nativeElement;\n const link = nestedLink(elem, DRAWER_LINK_SELECTOR);\n if (link) {\n this.renderer.removeAttribute(link, 'tabindex');\n }\n }\n get iconClasses() {\n const classes = [];\n if (this.item.icon) {\n classes.push(`k-icon ${this.item.icon}`);\n }\n if (this.item.iconClass) {\n classes.push(`${this.item.iconClass}`);\n }\n return classes;\n }\n get item() {\n return this.viewItem.item;\n }\n}\nDrawerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerItemComponent, deps: [{ token: DrawerService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nDrawerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerItemComponent, selector: \"[kendoDrawerItem]\", inputs: { viewItem: \"viewItem\", index: \"index\", itemTemplate: \"itemTemplate\", mini: \"mini\", expanded: \"expanded\", disabled: \"disabled\", cssClass: \"cssClass\", cssStyle: \"cssStyle\" }, host: { properties: { \"attr.aria-disabled\": \"this.disabledClass\", \"class.k-disabled\": \"this.disabledClass\", \"attr.aria-current\": \"this.selectedClass\", \"class.k-selected\": \"this.selectedClass\", \"attr.aria-label\": \"this.label\" } }, ngImport: i0, template: `\n \n \n\n \n \n \n {{ item.text }}\n \n \n \n \n \n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerItemComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoDrawerItem]',\n template: `\n \n \n\n \n \n \n {{ item.text }}\n \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: DrawerService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { viewItem: [{\n type: Input\n }], index: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], mini: [{\n type: Input\n }], expanded: [{\n type: Input\n }], disabled: [{\n type: Input\n }], cssClass: [{\n type: Input\n }], cssStyle: [{\n type: Input\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], selectedClass: [{\n type: HostBinding,\n args: ['attr.aria-current']\n }, {\n type: HostBinding,\n args: ['class.k-selected']\n }], label: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }] } });\n\n/**\n * @hidden\n */\nclass DrawerListComponent {\n constructor(drawerService, renderer, ngZone, element) {\n this.drawerService = drawerService;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.element = element;\n this.view = [];\n this.select = new EventEmitter();\n this.subscriptions = new Subscription();\n }\n ngOnInit() {\n this.initDomEvents();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n identifyItem(_index, viewItem) {\n var _a;\n return (_a = viewItem.item.id) !== null && _a !== void 0 ? _a : viewItem.index;\n }\n initDomEvents() {\n if (!this.element) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n const nativeElement = this.element.nativeElement;\n this.subscriptions.add(this.renderer.listen(nativeElement, 'click', this.clickHandler.bind(this)));\n this.subscriptions.add(this.renderer.listen(nativeElement, 'keydown', this.keyDownHandler.bind(this)));\n });\n }\n clickHandler(e) {\n const viewItemIdx = this.getDrawerItemIndex(e.target);\n const viewItem = this.view[viewItemIdx];\n if (!viewItem) {\n return;\n }\n if (viewItem.item.disabled) {\n e.preventDefault();\n return;\n }\n const args = {\n index: viewItem.index,\n item: viewItem.item,\n originalEvent: e\n };\n this.ngZone.run(() => {\n const event = new DrawerListSelectEvent(args);\n this.select.emit(event);\n if (!event.isDefaultPrevented()) {\n this.drawerService.onSelect(viewItemIdx);\n this.drawerService.init();\n this.view = this.drawerService.view;\n }\n });\n }\n keyDownHandler(e) {\n const isEnterOrSpace = e.keyCode === Keys.Enter || e.keyCode === Keys.Space;\n if (!isEnterOrSpace) {\n return;\n }\n this.clickHandler(e);\n const link = nestedLink(this.element.nativeElement, ACTIVE_NESTED_LINK_SELECTOR);\n if (link) {\n link.click();\n }\n return false;\n }\n getDrawerItemIndex(target) {\n const item = closestItem(target, DRAWER_ITEM_INDEX, this.element.nativeElement);\n if (item) {\n return itemIndex(item, DRAWER_ITEM_INDEX);\n }\n }\n}\nDrawerListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerListComponent, deps: [{ token: DrawerService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nDrawerListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerListComponent, selector: \"[kendoDrawerList]\", inputs: { itemTemplate: \"itemTemplate\", mini: \"mini\", expanded: \"expanded\", view: \"view\" }, outputs: { select: \"select\" }, ngImport: i0, template: \"\\n \\n
  • \\n
  • \\n\\n
  • \\n  \\n
  • \\n
    \\n \", isInline: true, components: [{ type: DrawerItemComponent, selector: \"[kendoDrawerItem]\", inputs: [\"viewItem\", \"index\", \"itemTemplate\", \"mini\", \"expanded\", \"disabled\", \"cssClass\", \"cssStyle\"] }], directives: [{ type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerListComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoDrawerList]',\n template: `\n \n
  • \n
  • \n\n
  • \n  \n
  • \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: DrawerService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { itemTemplate: [{\n type: Input\n }], mini: [{\n type: Input\n }], expanded: [{\n type: Input\n }], view: [{\n type: Input\n }], select: [{\n type: Output\n }] } });\n\nconst DEFAULT_ANIMATION = { type: 'slide', duration: 200 };\n/**\n * Represents the [Kendo UI Drawer component for Angular]({% slug overview_drawer %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public expanded = false;\n *\n * public items: any[] = [\n * { text: 'Inbox', icon: 'k-i-inbox' },\n * { text: 'Notifications', icon: 'k-i-bell' },\n * { text: 'Date', icon: 'k-i-calendar' }\n * ];\n * }\n * ```\n */\nclass DrawerComponent {\n constructor(element, builder, localizationService, drawerService) {\n this.element = element;\n this.builder = builder;\n this.localizationService = localizationService;\n this.drawerService = drawerService;\n this.hostClasses = true;\n /**\n * Specifies the mode in which the Drawer will be displayed.\n *\n * The possible values are:\n * * (Default) `overlay`\n * * `push`\n */\n this.mode = 'overlay';\n /**\n * Specifies the position of the Drawer\n * ([see example]({% slug positioning_drawer %})).\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.position = 'start';\n /**\n * Enables the mini (compact) view of the Drawer which is displayed when the component is collapsed\n * ([see example]({% slug expandmodespositions_drawer %}#toc-mini-view)).\n */\n this.mini = false;\n /**\n * Specifies the state of the Drawer.\n */\n this.expanded = false;\n /**\n * Defines the width of the Drawer when it is expanded.\n * Defaults to `240`.\n */\n this.width = 240;\n /**\n * Defines the width of the Drawer when the mini view is enabled\n * and the component is collapsed. Defaults to `60`.\n */\n this.miniWidth = 50;\n /**\n * Specifies if the Drawer will be automatically collapsed when an item\n * or the overlay is clicked. Defaults to `true`.\n */\n this.autoCollapse = true;\n /**\n * The collection of items that will be rendered in the Drawer.\n */\n this.items = [];\n /**\n * Specifies the animation settings of the Drawer.\n * ([see example]({% slug interaction_drawer %}#toc-toggling-between-states)).\n *\n * The possible values are:\n * * Boolean\n * * (Default) `true`\n * * `false`\n * * `DrawerAnimation`\n * * (Default) `type?: 'slide'`\n * * `duration`—Accepts a number in milliseconds. Defaults to `300ms`.\n */\n this.animation = DEFAULT_ANIMATION;\n /**\n * Fires when the Drawer is expanded and its animation is complete.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the Drawer is collapsed and its animation is complete.\n */\n this.collapse = new EventEmitter();\n /**\n * Fires when a Drawer item is selected. This event is preventable.\n */\n this.select = new EventEmitter();\n /**\n * Fires when the `expanded` property of the component was updated.\n * Used to provide a two-way binding for the `expanded` property.\n */\n this.expandedChange = new EventEmitter();\n this.animationEnd = new EventEmitter();\n this.rtl = false;\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n this.drawerService.owner = this;\n }\n get startPositionClass() {\n return this.position === 'start';\n }\n get endPositionClass() {\n return this.position === 'end';\n }\n get overlayTransofrmStyles() {\n if (this.mode === 'push') {\n return;\n }\n if (this.expanded || this.minimized) {\n return `translateX(0px)`;\n }\n return `translateX(-100%)`;\n }\n get flexStyles() {\n if (this.mode === 'overlay') {\n return;\n }\n if (!this.expanded && !this.minimized) {\n return 0;\n }\n return this.drawerWidth;\n }\n /**\n * Defines a callback function which determines if an item should be expanded.\n */\n set isItemExpanded(fn) {\n if (isDevMode && isPresent(fn) && typeof fn !== 'function') {\n throw new Error(`isItemExpanded must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.drawerService.isItemExpanded = fn;\n }\n get isItemExpanded() {\n return this.drawerService.isItemExpanded;\n }\n ngOnChanges(changes) {\n if (changes && changes['items']) {\n this.drawerService.resetSelection();\n this.drawerService.init();\n this.viewItems = this.drawerService.view;\n }\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get minimized() {\n return this.mini && !this.expanded;\n }\n /**\n * @hidden\n */\n get drawerWidth() {\n return this.minimized ? this.miniWidth : this.width;\n }\n /**\n * Toggles the visibility of the Drawer.\n *\n * @param expanded? - Boolean. Specifies if the Drawer will be expanded or collapsed.\n */\n toggle(expanded) {\n const previous = this.expanded;\n const current = isPresent(expanded) ? expanded : !previous;\n if (current === previous) {\n return;\n }\n if (current === true) {\n this.setExpanded(true);\n }\n else if (current === false && !this.animation) {\n this.setExpanded(false);\n }\n if (this.animation) {\n this.animationEnd.pipe(take(1))\n .subscribe(() => { this.onAnimationEnd(current); });\n this.animate(current);\n }\n else {\n this[current ? 'expand' : 'collapse'].emit();\n }\n }\n /**\n * @hidden\n */\n onSelect(e) {\n this.select.emit(Object.assign(e, { sender: this }));\n }\n onAnimationEnd(currentExpanded) {\n if (currentExpanded) {\n this.expand.emit();\n }\n else {\n this.setExpanded(false);\n this.collapse.emit();\n }\n }\n setExpanded(value) {\n this.expanded = value;\n this.expandedChange.emit(value);\n }\n animate(expanded) {\n const settings = {\n mode: this.mode,\n mini: this.mini,\n miniWidth: this.miniWidth,\n width: this.width,\n rtl: this.rtl,\n position: this.position,\n animation: (typeof this.animation !== 'boolean') ? this.animation : DEFAULT_ANIMATION\n };\n const animation = expanded ? expandAnimation(settings) : collapseAnimation(settings);\n const player = this.createPlayer(animation, this.element.nativeElement);\n player.play();\n }\n createPlayer(animation, animatedElement) {\n const factory = this.builder.build(animation);\n let player = factory.create(animatedElement);\n player.onDone(() => {\n if (player) {\n this.animationEnd.emit();\n player.destroy();\n player = null;\n }\n });\n return player;\n }\n}\nDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerComponent, deps: [{ token: i0.ElementRef }, { token: i1$2.AnimationBuilder }, { token: i1.LocalizationService }, { token: DrawerService }], target: i0.ɵɵFactoryTarget.Component });\nDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerComponent, selector: \"kendo-drawer\", inputs: { mode: \"mode\", position: \"position\", mini: \"mini\", expanded: \"expanded\", width: \"width\", miniWidth: \"miniWidth\", autoCollapse: \"autoCollapse\", items: \"items\", isItemExpanded: \"isItemExpanded\", animation: \"animation\" }, outputs: { expand: \"expand\", collapse: \"collapse\", select: \"select\", expandedChange: \"expandedChange\" }, host: { properties: { \"class.k-widget\": \"this.hostClasses\", \"class.k-drawer\": \"this.hostClasses\", \"class.k-drawer-start\": \"this.startPositionClass\", \"class.k-drawer-end\": \"this.endPositionClass\", \"style.transform\": \"this.overlayTransofrmStyles\", \"style.flexBasis.px\": \"this.flexStyles\", \"attr.dir\": \"this.direction\" } }, providers: [\n LocalizationService,\n DrawerService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer'\n }\n ], queries: [{ propertyName: \"drawerTemplate\", first: true, predicate: DrawerTemplateDirective, descendants: true }, { propertyName: \"footerTemplate\", first: true, predicate: DrawerFooterTemplateDirective, descendants: true }, { propertyName: \"headerTemplate\", first: true, predicate: DrawerHeaderTemplateDirective, descendants: true }, { propertyName: \"itemTemplate\", first: true, predicate: DrawerItemTemplateDirective, descendants: true }], exportAs: [\"kendoDrawer\"], usesOnChanges: true, ngImport: i0, template: `\n
    \n \n \n \n\n
      \n
    \n\n \n \n
    \n\n \n \n
    \n `, isInline: true, components: [{ type: DrawerListComponent, selector: \"[kendoDrawerList]\", inputs: [\"itemTemplate\", \"mini\", \"expanded\", \"view\"], outputs: [\"select\"] }], directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoDrawer',\n providers: [\n LocalizationService,\n DrawerService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer'\n }\n ],\n selector: 'kendo-drawer',\n template: `\n
    \n \n \n \n\n
      \n
    \n\n \n \n
    \n\n \n \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$2.AnimationBuilder }, { type: i1.LocalizationService }, { type: DrawerService }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-drawer']\n }], startPositionClass: [{\n type: HostBinding,\n args: ['class.k-drawer-start']\n }], endPositionClass: [{\n type: HostBinding,\n args: ['class.k-drawer-end']\n }], overlayTransofrmStyles: [{\n type: HostBinding,\n args: ['style.transform']\n }], flexStyles: [{\n type: HostBinding,\n args: ['style.flexBasis.px']\n }], mode: [{\n type: Input\n }], position: [{\n type: Input\n }], mini: [{\n type: Input\n }], expanded: [{\n type: Input\n }], width: [{\n type: Input\n }], miniWidth: [{\n type: Input\n }], autoCollapse: [{\n type: Input\n }], items: [{\n type: Input\n }], isItemExpanded: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], animation: [{\n type: Input\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], select: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], drawerTemplate: [{\n type: ContentChild,\n args: [DrawerTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [DrawerFooterTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [DrawerHeaderTemplateDirective, { static: false }]\n }], itemTemplate: [{\n type: ContentChild,\n args: [DrawerItemTemplateDirective, { static: false }]\n }] } });\n\n/**\n * Serves as a container for the [Kendo UI Drawer component for Angular]({% slug overview_drawer %}) and its content.\n */\nclass DrawerContainerComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.rtl = false;\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n }\n get hostClass() {\n return true;\n }\n get overlayClass() {\n return this.drawer.mode === 'overlay';\n }\n get miniClass() {\n return this.drawer.mini;\n }\n get pushClass() {\n return this.drawer.mode === 'push';\n }\n get isExpandedClass() {\n return this.drawer.expanded;\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get overlay() {\n return isPresent(this.drawer) &&\n this.drawer.expanded &&\n this.drawer.mode === 'overlay';\n }\n /**\n * @hidden\n */\n closeDrawer() {\n if (this.overlay && this.drawer.autoCollapse) {\n this.drawer.toggle(false);\n }\n }\n}\nDrawerContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerContainerComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nDrawerContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerContainerComponent, selector: \"kendo-drawer-container\", host: { properties: { \"class.k-drawer-container\": \"this.hostClass\", \"class.k-drawer-overlay\": \"this.overlayClass\", \"class.k-drawer-mini\": \"this.miniClass\", \"class.k-drawer-push\": \"this.pushClass\", \"class.k-drawer-expanded\": \"this.isExpandedClass\", \"attr.dir\": \"this.direction\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer.container'\n }\n ], queries: [{ propertyName: \"drawer\", first: true, predicate: DrawerComponent, descendants: true }], ngImport: i0, template: `\n
    \n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerContainerComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-drawer-container',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer.container'\n }\n ],\n template: `\n
    \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-drawer-container']\n }], overlayClass: [{\n type: HostBinding,\n args: ['class.k-drawer-overlay']\n }], miniClass: [{\n type: HostBinding,\n args: ['class.k-drawer-mini']\n }], pushClass: [{\n type: HostBinding,\n args: ['class.k-drawer-push']\n }], isExpandedClass: [{\n type: HostBinding,\n args: ['class.k-drawer-expanded']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], drawer: [{\n type: ContentChild,\n args: [DrawerComponent, { static: false }]\n }] } });\n\n/**\n * Represents the content of the [Kendo UI Drawer component for Angular]({% slug overview_drawer %}).\n */\nclass DrawerContentComponent {\n constructor() {\n this.hostClasses = true;\n }\n}\nDrawerContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nDrawerContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DrawerContentComponent, selector: \"kendo-drawer-content\", host: { properties: { \"class.k-drawer-content\": \"this.hostClasses\" } }, ngImport: i0, template: `\n \n `, isInline: true, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerContentComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-drawer-content',\n template: `\n \n `,\n encapsulation: ViewEncapsulation.None\n }]\n }], ctorParameters: function () { return []; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-drawer-content']\n }] } });\n\n/**\n * Arguments for the `select` event of the Drawer.\n */\nclass DrawerSelectEvent extends PreventableEvent$1 {\n /**\n * @hidden\n */\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * Represents a template that defines the content of the whole Step.\n * To define the template, nest an `` tag\n * with the `kendoStepperStepTemplate` directive inside the `` tag.\n */\nclass StepperStepTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nStepperStepTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperStepTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nStepperStepTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperStepTemplateDirective, selector: \"[kendoStepperStepTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperStepTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoStepperStepTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents a template that defines the content of the Step label.\n * To define the template, nest an `` tag\n * with the `kendoStepperLabelTemplate` directive inside the `` tag.\n */\nclass StepperLabelTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nStepperLabelTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperLabelTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nStepperLabelTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperLabelTemplateDirective, selector: \"[kendoStepperLabelTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperLabelTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoStepperLabelTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents a template that defines the content of the Step indicator.\n * To define the template, nest an `` tag\n * with the `kendoStepperIndicatorTemplate` directive inside the `` tag.\n */\nclass StepperIndicatorTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nStepperIndicatorTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperIndicatorTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nStepperIndicatorTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperIndicatorTemplateDirective, selector: \"[kendoStepperIndicatorTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperIndicatorTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoStepperIndicatorTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\nconst DEFAULT_CURRENT_STEP = 0;\nconst handlers = {};\nhandlers[Keys.ArrowLeft] = 'left';\nhandlers[Keys.ArrowRight] = 'right';\nhandlers[Keys.ArrowUp] = 'up';\nhandlers[Keys.ArrowDown] = 'down';\nhandlers[Keys.Home] = 'home';\nhandlers[Keys.End] = 'end';\nhandlers[Keys.Enter] = 'enter';\nhandlers[Keys.Space] = 'enter';\nconst handlersRTL = Object.assign({}, handlers);\nhandlersRTL[Keys.ArrowLeft] = 'right';\nhandlersRTL[Keys.ArrowRight] = 'left';\n// error NG3003: One or more import cycles would need to be created to compile this component,\n// which is not supported by the current compiler configuration\n/**\n * @hidden\n */\nclass StepperActivateEvent$1 extends PreventableEvent$1 {\n /**\n * @hidden\n */\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n/**\n * @hidden\n */\nclass StepperService {\n constructor(localization, ngZone, changeDetector) {\n this.localization = localization;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.currentStep = DEFAULT_CURRENT_STEP;\n this.triggerValidation = new EventEmitter();\n this.focusedStepChange = new EventEmitter();\n }\n get handlers() {\n return this.localization.rtl ? handlersRTL : handlers;\n }\n emit(event, eventArgs) {\n const stepper = this.owner;\n if (hasObservers(stepper[event])) {\n stepper[event].emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n onActivate(currentIdx, originalEvent) {\n const eventArgs = new StepperActivateEvent$1({\n index: currentIdx,\n step: this.owner.steps[currentIdx],\n originalEvent: originalEvent,\n sender: this.owner\n });\n this.ngZone.run(() => {\n if (!this.emit('activate', eventArgs)) {\n this.currentStep = currentIdx;\n this.owner['currentStepChange'].emit(currentIdx);\n this.changeDetector.detectChanges();\n }\n });\n }\n validateSteps() {\n this.triggerValidation.emit();\n }\n keydown(e) {\n const current = this.focusedStep || this.currentStep;\n const handler = this.handlers[e.keyCode];\n if (!isPresent(current)) {\n return;\n }\n if (handler) {\n e.preventDefault();\n this[handler](e);\n }\n }\n left() {\n if (!this.isHorizontal) {\n return;\n }\n this.focusPrevStep();\n }\n right() {\n if (!this.isHorizontal) {\n return;\n }\n this.focusNextStep();\n }\n up() {\n if (this.isHorizontal) {\n return;\n }\n this.focusPrevStep();\n }\n down() {\n if (this.isHorizontal) {\n return;\n }\n this.focusNextStep();\n }\n home() {\n this.focusedStep = 0;\n this.focusedStepChange.emit();\n }\n end() {\n this.focusedStep = this.owner.steps.length - 1;\n this.focusedStepChange.emit();\n }\n enter(event) {\n if (this.focusedStep === this.currentStep) {\n return;\n }\n if (this.isStepDisabled(this.focusedStep)) {\n return;\n }\n if (this.owner.linear && this.isPrevOrNextStep(this.focusedStep) === false) {\n return;\n }\n this.onActivate(this.focusedStep, event);\n }\n focus(focusedIdx) {\n this.focusedStep = focusedIdx;\n }\n focusNextStep() {\n if (this.focusedStep < this.owner.steps.length) {\n this.focusedStep += 1;\n this.focusedStepChange.emit();\n }\n }\n focusPrevStep() {\n if (this.focusedStep > 0) {\n this.focusedStep -= 1;\n this.focusedStepChange.emit();\n }\n }\n isStepDisabled(index) {\n return this.owner.steps[index].disabled;\n }\n isPrevOrNextStep(index) {\n return index === this.currentStep + 1 || index === this.currentStep - 1;\n }\n get isHorizontal() {\n return this.owner.orientation === 'horizontal';\n }\n}\nStepperService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperService, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Injectable });\nStepperService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });\n\n/**\n * @hidden\n */\nconst STEPPER_STEP_INDEX = 'data-kendo-stepper-index';\n\n/**\n * @hidden\n */\nclass StepperStepComponent {\n constructor(service, localization, ngZone) {\n this.service = service;\n this.localization = localization;\n this.ngZone = ngZone;\n this.isStepValid = undefined;\n this.shouldCheckValidity = undefined;\n validatePackage(packageMetadata);\n this.subs = this.service.focusedStepChange.subscribe(() => {\n this.onFocusedStepChange();\n });\n this.subs.add(this.service.triggerValidation.subscribe(() => {\n this.handleValidityChecks();\n }));\n }\n get errorStepClass() {\n if (isPresent(this.isStepValid)) {\n return !this.isStepValid;\n }\n return false;\n }\n get successStepClass() {\n if (isPresent(this.isStepValid)) {\n return this.isStepValid;\n }\n return false;\n }\n ngOnInit() {\n this.handleValidityChecks();\n }\n ngOnChanges(changes) {\n if (changes.current && !changes.current.firstChange) {\n this.handleValidityChecks();\n }\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n onFocusedStepChange() {\n this.ngZone.runOutsideAngular(() => {\n if (this.index === this.service.focusedStep) {\n this.stepLink.nativeElement.focus();\n }\n });\n }\n onFocus() {\n this.service.focus(this.index);\n }\n get tabIndexAttr() {\n const active = this.service.focusedStep || this.service.currentStep;\n return this.index === active ? 0 : -1;\n }\n get indicatorIconClasses() {\n if (this.step.icon) {\n return `k-icon k-i-${this.step.icon}`;\n }\n if (this.step.iconClass) {\n return `${this.step.iconClass}`;\n }\n if (this.shouldCheckValidity) {\n return this.validationIconClasses;\n }\n }\n get showIndicatorIcon() {\n if (this.shouldCheckValidity) {\n return true;\n }\n if (this.step.icon || this.step.iconClass) {\n return true;\n }\n return false;\n }\n get showLabelIcon() {\n if (this.shouldCheckValidity) {\n if (this.type === 'label') {\n return true;\n }\n if (this.step.icon || this.step.iconClass) {\n return true;\n }\n }\n return false;\n }\n get showLabelText() {\n return this.type === 'label' || this.type === 'full';\n }\n get validationIconClasses() {\n if (this.isStepValid) {\n return this.successIcon ? `${this.successIcon}` : 'k-icon k-i-check';\n }\n else {\n return this.errorIcon ? `${this.errorIcon}` : 'k-icon k-i-warning';\n }\n }\n get indicatorText() {\n const text = this.step.text;\n return text ? text : this.index + 1;\n }\n updateStepValidity() {\n if (typeof this.step.isValid === 'boolean') {\n return this.step.isValid;\n }\n if (typeof this.step.isValid === 'function') {\n return this.step.isValid(this.index);\n }\n return undefined;\n }\n get showIndicator() {\n return this.type === 'indicator' || this.type === 'full';\n }\n get showLabel() {\n if (this.type === 'label' || this.type === 'full') {\n return true;\n }\n return this.step.optional;\n }\n get optionalText() {\n return this.localization.get('optional');\n }\n get transitionDuration() {\n return this.service.owner.animationDuration;\n }\n _shouldCheckValidity() {\n if (isPresent(this.step.validate)) {\n if (typeof this.step.validate === 'boolean') {\n return this.step.validate;\n }\n if (typeof this.step.validate === 'function') {\n return this.step.validate(this.index);\n }\n }\n return isPresent(this.step.isValid) && this.index < this.current;\n }\n handleValidityChecks() {\n this.isStepValid = undefined;\n this.shouldCheckValidity = this._shouldCheckValidity();\n if (this.shouldCheckValidity) {\n this.isStepValid = this.updateStepValidity();\n }\n }\n}\nStepperStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperStepComponent, deps: [{ token: StepperService }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nStepperStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperStepComponent, selector: \"[kendoStepperStep]\", inputs: { step: \"step\", index: \"index\", current: \"current\", type: \"type\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", indicatorTemplate: \"indicatorTemplate\", labelTemplate: \"labelTemplate\", stepTemplate: \"stepTemplate\" }, host: { properties: { \"class.k-step-error\": \"this.errorStepClass\", \"class.k-step-success\": \"this.successStepClass\" } }, viewQueries: [{ propertyName: \"stepLink\", first: true, predicate: [\"stepLink\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n\n \n \n\n \n \n \n\n \n {{ step.label }}\n \n ({{optionalText}})\n \n \n \n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperStepComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoStepperStep]',\n template: `\n \n \n \n\n \n \n\n \n \n \n\n \n {{ step.label }}\n \n ({{optionalText}})\n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: StepperService }, { type: i1.LocalizationService }, { type: i0.NgZone }]; }, propDecorators: { step: [{\n type: Input\n }], index: [{\n type: Input\n }], current: [{\n type: Input\n }], type: [{\n type: Input\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], indicatorTemplate: [{\n type: Input\n }], labelTemplate: [{\n type: Input\n }], stepTemplate: [{\n type: Input\n }], stepLink: [{\n type: ViewChild,\n args: ['stepLink', { static: true }]\n }], errorStepClass: [{\n type: HostBinding,\n args: ['class.k-step-error']\n }], successStepClass: [{\n type: HostBinding,\n args: ['class.k-step-success']\n }] } });\n\n/**\n * @hidden\n */\nclass StepperListComponent {\n constructor(renderer, ngZone, element) {\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.element = element;\n this.listKeydown = new EventEmitter();\n this.listClick = new EventEmitter();\n }\n ngOnInit() {\n this.initDomEvents();\n }\n ngOnDestroy() {\n if (this.domSubs) {\n this.domSubs();\n }\n }\n get maxStepWidth() {\n return this.maxStepDimension('width');\n }\n get maxStepHeight() {\n return this.maxStepDimension('height');\n }\n maxStepDimension(dimension) {\n if (dimension === 'width' && this.orientation === 'vertical') {\n return null;\n }\n if (dimension === 'height' && this.orientation === 'horizontal') {\n return null;\n }\n return 100 / this.steps.length;\n }\n initDomEvents() {\n if (!this.element) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n const nativeElement = this.element.nativeElement;\n const clickSubscription = this.renderer.listen(nativeElement, 'click', this.clickHandler.bind(this));\n const keydownSubscription = this.renderer.listen(nativeElement, 'keydown', (e) => {\n if (hasClass(e.target, 'k-step-link')) {\n this.listKeydown.emit(e);\n }\n });\n this.domSubs = () => {\n clickSubscription();\n keydownSubscription();\n };\n });\n }\n clickHandler(e) {\n e.preventDefault();\n const stepIdx = this.getStepIndex(e.target);\n const step = this.steps[stepIdx];\n if (!step || step.disabled) {\n return;\n }\n const eventArgs = {\n stepIdx,\n currentStep: this.currentStep,\n linear: this.linear,\n originalEvent: e\n };\n this.listClick.emit(eventArgs);\n }\n getStepIndex(target) {\n const step = closestItem(target, STEPPER_STEP_INDEX, this.element.nativeElement);\n if (step) {\n return itemIndex(step, STEPPER_STEP_INDEX);\n }\n }\n}\nStepperListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperListComponent, deps: [{ token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nStepperListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperListComponent, selector: \"[kendoStepperList]\", inputs: { linear: \"linear\", stepType: \"stepType\", orientation: \"orientation\", currentStep: \"currentStep\", steps: \"steps\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", indicatorTemplate: \"indicatorTemplate\", labelTemplate: \"labelTemplate\", stepTemplate: \"stepTemplate\" }, outputs: { listKeydown: \"listKeydown\", listClick: \"listClick\" }, ngImport: i0, template: \"\\n \\n
  • \\n
  • \\n
    \\n \", isInline: true, components: [{ type: StepperStepComponent, selector: \"[kendoStepperStep]\", inputs: [\"step\", \"index\", \"current\", \"type\", \"successIcon\", \"errorIcon\", \"indicatorTemplate\", \"labelTemplate\", \"stepTemplate\"] }], directives: [{ type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperListComponent, decorators: [{\n type: Component,\n args: [{\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[kendoStepperList]',\n template: `\n \n
  • \n
  • \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { linear: [{\n type: Input\n }], stepType: [{\n type: Input\n }], orientation: [{\n type: Input\n }], currentStep: [{\n type: Input\n }], steps: [{\n type: Input\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], indicatorTemplate: [{\n type: Input\n }], labelTemplate: [{\n type: Input\n }], stepTemplate: [{\n type: Input\n }], listKeydown: [{\n type: Output\n }], listClick: [{\n type: Output\n }] } });\n\n/**\n * @hidden\n */\nclass StepperMessages extends ComponentMessages {\n}\nStepperMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nStepperMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperMessages, selector: \"kendo-stepper-messages-base\", inputs: { optional: \"optional\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperMessages, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'kendo-stepper-messages-base'\n }]\n }], propDecorators: { optional: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LocalizedStepperMessagesDirective extends StepperMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedStepperMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedStepperMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });\nLocalizedStepperMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LocalizedStepperMessagesDirective, selector: \"\\n [kendoStepperLocalizedMessages]\\n \", providers: [\n {\n provide: StepperMessages,\n useExisting: forwardRef(() => LocalizedStepperMessagesDirective)\n }\n ], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LocalizedStepperMessagesDirective, decorators: [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: StepperMessages,\n useExisting: forwardRef(() => LocalizedStepperMessagesDirective)\n }\n ],\n selector: `\n [kendoStepperLocalizedMessages]\n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst DEFAULT_ANIMATION_DURATION = 400;\n/**\n * Represents the [Kendo UI Stepper component for Angular]({% slug overview_stepper %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public steps: Array = [\n * { label: 'Step One' }, { label: 'Step Two' }, { label: 'Step Three' }\n * ];\n * }\n * ```\n */\nclass StepperComponent {\n constructor(renderer, elem, localization, stepperService) {\n this.renderer = renderer;\n this.elem = elem;\n this.localization = localization;\n this.stepperService = stepperService;\n this.hostClasses = true;\n this.ariaRole = 'navigation';\n this.displayStyle = 'grid';\n /**\n * Specifies the type of the steps in the Stepper.\n *\n * The possible values are:\n * * (Default) `indicator`\n * * `label`\n * * `full`\n */\n this.stepType = 'indicator';\n /**\n * Specifies the linear flow of the Stepper.\n *\n * @default true\n */\n this.linear = true;\n /**\n * Specifies the orientation of the Stepper\n * ([see example]({% slug orientation_stepper %})).\n *\n * The possible values are:\n * * (Default) `horizontal`\n * * `vertical`\n */\n this.orientation = 'horizontal';\n /**\n * Specifies the duration of the progress indicator animation in milliseconds. Defaults to `400ms`.\n *\n * The possible values are:\n * * Boolean\n * * (Default) `true`\n * * false\n * * Number\n */\n this.animation = true;\n /**\n * Fires when a step is about to be activated. This event is preventable.\n */\n this.activate = new EventEmitter();\n /**\n * Fires when the `currentStep` property of the component was updated.\n * Used to provide a two-way binding for the `currentStep` property.\n */\n this.currentStepChange = new EventEmitter();\n this._steps = [];\n this.dynamicRTLSubscription = this.localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.stepperService.owner = this;\n }\n get linearClass() {\n return this.linear;\n }\n /**\n * The index of the current step.\n */\n set currentStep(value) {\n this.stepperService.currentStep = value;\n }\n get currentStep() {\n return this.stepperService.currentStep;\n }\n /**\n * The collection of steps that will be rendered in the Stepper.\n * ([see example]({% slug step_appearance_stepper %}))\n */\n set steps(steps) {\n if (isPresent(steps) && steps.length > 0) {\n this._steps = steps;\n }\n }\n get steps() {\n return this._steps;\n }\n ngOnInit() {\n this.applyHostStyling();\n }\n ngOnChanges(changes) {\n if (changes.steps && !changes.steps.firstChange) {\n this.applyHostStyling();\n }\n if (changes.orientation) {\n this.resetHostStyling();\n this.applyHostStyling();\n }\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * Manually triggers the validity check configured by the [isValid]({% slug api_layout_stepperstep %}#toc-isvalid) property of the steps ([see example]({% slug step_validation_stepper %}#toc-triggering-the-validation)).\n *\n * Steps that have their [validate]({% slug api_layout_stepperstep %}#toc-validate) property set to `false`, will not be validated.\n */\n validateSteps() {\n this.stepperService.validateSteps();\n }\n applyHostStyling() {\n const stepFramesStyle = this.orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n const stepFramesValue = `repeat(${this.steps.length * 2}, 1fr)`;\n this.renderer.setStyle(this.elem.nativeElement, stepFramesStyle, stepFramesValue);\n }\n resetHostStyling() {\n this.renderer.removeStyle(this.elem.nativeElement, 'grid-template-columns');\n this.renderer.removeStyle(this.elem.nativeElement, 'grid-template-rows');\n }\n /**\n * @hidden\n */\n get progressAnimation() {\n return { duration: this.animationDuration };\n }\n /**\n * @hidden\n */\n get animationDuration() {\n if (typeof this.animation === 'number') {\n return this.animation;\n }\n if (typeof this.animation === 'boolean' && this.animation) {\n return DEFAULT_ANIMATION_DURATION;\n }\n return 0;\n }\n /**\n * @hidden\n */\n get stepsListStyling() {\n if (this.orientation === 'horizontal') {\n return { 'grid-column-start': 1, 'grid-column-end': -1 };\n }\n return { 'grid-row-start': 1, 'grid-row-end': -1 };\n }\n /**\n * @hidden\n */\n get progressBarStyling() {\n if (this.orientation === 'horizontal') {\n return {\n 'grid-column-start': 2,\n 'grid-column-end': this.steps.length * 2\n };\n }\n return {\n 'grid-row-start': 2,\n 'grid-row-end': this.steps.length * 2\n };\n }\n /**\n * @hidden\n */\n onListKeydown(e) {\n this.stepperService.keydown(e);\n }\n /**\n * @hidden\n */\n onListClick(e) {\n if (e.stepIdx === e.currentStep) {\n this.stepperService.focus(e.stepIdx);\n return;\n }\n if (e.linear && this.stepperService.isPrevOrNextStep(e.stepIdx) === false) {\n return;\n }\n this.stepperService.onActivate(e.stepIdx, e.originalEvent);\n }\n /**\n * @hidden\n */\n get isHorizontal() {\n return this.orientation === 'horizontal';\n }\n}\nStepperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.LocalizationService }, { token: StepperService }], target: i0.ɵɵFactoryTarget.Component });\nStepperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperComponent, selector: \"kendo-stepper\", inputs: { stepType: \"stepType\", linear: \"linear\", orientation: \"orientation\", currentStep: \"currentStep\", steps: \"steps\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", animation: \"animation\" }, outputs: { activate: \"activate\", currentStepChange: \"currentStepChange\" }, host: { properties: { \"class.k-widget\": \"this.hostClasses\", \"class.k-stepper\": \"this.hostClasses\", \"class.k-stepper-linear\": \"this.linearClass\", \"attr.role\": \"this.ariaRole\", \"attr.dir\": \"this.direction\", \"style.display\": \"this.displayStyle\" } }, providers: [\n LocalizationService,\n StepperService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.stepper'\n }\n ], queries: [{ propertyName: \"stepTemplate\", first: true, predicate: StepperStepTemplateDirective, descendants: true }, { propertyName: \"labelTemplate\", first: true, predicate: StepperLabelTemplateDirective, descendants: true }, { propertyName: \"indicatorTemplate\", first: true, predicate: StepperIndicatorTemplateDirective, descendants: true }], exportAs: [\"kendoStepper\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n
      \n
    \n\n \n \n `, isInline: true, components: [{ type: StepperListComponent, selector: \"[kendoStepperList]\", inputs: [\"linear\", \"stepType\", \"orientation\", \"currentStep\", \"steps\", \"successIcon\", \"errorIcon\", \"indicatorTemplate\", \"labelTemplate\", \"stepTemplate\"], outputs: [\"listKeydown\", \"listClick\"] }, { type: i4.ProgressBarComponent, selector: \"kendo-progressbar\", inputs: [\"label\", \"progressCssStyle\", \"progressCssClass\", \"emptyCssStyle\", \"emptyCssClass\", \"animation\"], outputs: [\"animationEnd\"], exportAs: [\"kendoProgressBar\"] }], directives: [{ type: LocalizedStepperMessagesDirective, selector: \"\\n [kendoStepperLocalizedMessages]\\n \" }, { type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoStepper',\n providers: [\n LocalizationService,\n StepperService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.stepper'\n }\n ],\n selector: 'kendo-stepper',\n template: `\n \n \n
      \n
    \n\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: StepperService }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-stepper']\n }], linearClass: [{\n type: HostBinding,\n args: ['class.k-stepper-linear']\n }], ariaRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], displayStyle: [{\n type: HostBinding,\n args: ['style.display']\n }], stepType: [{\n type: Input\n }], linear: [{\n type: Input\n }], orientation: [{\n type: Input\n }], currentStep: [{\n type: Input\n }], steps: [{\n type: Input\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], animation: [{\n type: Input\n }], activate: [{\n type: Output\n }], currentStepChange: [{\n type: Output\n }], stepTemplate: [{\n type: ContentChild,\n args: [StepperStepTemplateDirective, { static: false }]\n }], labelTemplate: [{\n type: ContentChild,\n args: [StepperLabelTemplateDirective, { static: false }]\n }], indicatorTemplate: [{\n type: ContentChild,\n args: [StepperIndicatorTemplateDirective, { static: false }]\n }] } });\n\n/**\n * Arguments for the `activate` event of the Stepper.\n */\nclass StepperActivateEvent extends PreventableEvent$1 {\n /**\n * @hidden\n */\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_layout %})).\n */\nclass StepperCustomMessagesComponent extends StepperMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nStepperCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nStepperCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StepperCustomMessagesComponent, selector: \"kendo-stepper-messages\", providers: [\n {\n provide: StepperMessages,\n useExisting: forwardRef(() => StepperCustomMessagesComponent)\n }\n ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperCustomMessagesComponent, decorators: [{\n type: Component,\n args: [{\n providers: [\n {\n provide: StepperMessages,\n useExisting: forwardRef(() => StepperCustomMessagesComponent)\n }\n ],\n selector: 'kendo-stepper-messages',\n template: ``\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\nconst DEFAULT_ROUNDED = 'full';\nconst DEFAULT_SIZE = 'medium';\nconst DEFAULT_THEME_COLOR = 'primary';\nconst DEFAULT_FILL_MODE = 'solid';\n/**\n * Displays images, icons or initials representing people or other entities.\n */\nclass AvatarComponent {\n constructor(renderer, element) {\n this.renderer = renderer;\n this.element = element;\n this.hostClass = true;\n /**\n * Sets a border to the avatar.\n */\n this.border = false;\n this._themeColor = DEFAULT_THEME_COLOR;\n this._size = DEFAULT_SIZE;\n this._fillMode = DEFAULT_FILL_MODE;\n this._rounded = DEFAULT_ROUNDED;\n validatePackage(packageMetadata);\n }\n /**\n * @hidden\n */\n get borderClass() {\n return this.border;\n }\n /**\n * @hidden\n */\n get flexBasis() {\n return this.width;\n }\n /**\n * Sets the shape for the avatar.\n * @hidden\n */\n set shape(shape) {\n this.rounded = mapShapeToRounded(shape);\n }\n /**\n * Specifies the size of the avatar\n * ([see example]({% slug appearance_avatar %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n * * `none`\n */\n set size(size) {\n if (size !== this._size) {\n const newSize = size ? size : DEFAULT_SIZE;\n this.handleClasses('size', newSize);\n this._size = newSize;\n }\n }\n get size() {\n return this._size;\n }\n /**\n * Specifies the rounded styling of the avatar\n * ([see example]({% slug appearance_avatar %}#toc-rounded-corners)).\n *\n * The possible values are:\n * * `small`\n * * `medium`\n * * `large`\n * * `full` (Default)\n * * `none`\n */\n set rounded(rounded) {\n if (rounded !== this._rounded) {\n const newRounded = rounded ? rounded : DEFAULT_ROUNDED;\n this.handleClasses('rounded', newRounded);\n this._rounded = newRounded;\n }\n }\n get rounded() {\n return this._rounded;\n }\n /**\n * Specifies the theme color of the avatar.\n * The theme color will be applied as background and border color, while also amending the text color accordingly.\n *\n * The possible values are:\n * * `base`— Applies the base coloring value.\n * * `primary` (Default)—Applies coloring based on primary theme color.\n * * `secondary`—Applies coloring based on secondary theme color.\n * * `tertiary`— Applies coloring based on tertiary theme color.\n * * `info`—Applies coloring based on info theme color.\n * * `success`— Applies coloring based on success theme color.\n * * `warning`— Applies coloring based on warning theme color.\n * * `error`— Applies coloring based on error theme color.\n * * `dark`— Applies coloring based on dark theme color.\n * * `light`— Applies coloring based on light theme color.\n * * `inverse`— Applies coloring based on inverted theme color.\n * * `none`— Removes the styling associated with the theme color.\n */\n set themeColor(themeColor) {\n if (themeColor !== this._themeColor) {\n const newThemeColor = themeColor ? themeColor : DEFAULT_THEME_COLOR;\n this._themeColor = newThemeColor;\n this.handleFillModeAndThemeColorClasses(this.fillMode, this.themeColor);\n }\n }\n get themeColor() {\n return this._themeColor;\n }\n /**\n * Specifies the appearance fill style of the avatar.\n *\n * The possible values are:\n * * `solid` (Default)\n * * `outline`\n * * `none`\n */\n set fillMode(fillMode) {\n if (fillMode !== this.fillMode) {\n const newFillMode = fillMode ? fillMode : DEFAULT_FILL_MODE;\n this._fillMode = newFillMode;\n this.handleFillModeAndThemeColorClasses(this.fillMode, this.themeColor);\n }\n }\n get fillMode() {\n return this._fillMode;\n }\n /**\n * Specifies the appearance fill style of the avatar.\n * Deprecated, left for backward compatibility.\n *\n * @hidden\n */\n set fill(fillMode) {\n this.fillMode = fillMode;\n }\n /**\n * @hidden\n */\n get avatarWidth() {\n return this.width;\n }\n /**\n * @hidden\n */\n get avatarHeight() {\n return this.height;\n }\n ngOnInit() {\n this.verifyProperties();\n }\n ngAfterViewInit() {\n const stylingInputs = ['size', 'rounded'];\n stylingInputs.forEach(input => {\n this.handleClasses(input, this[input]);\n });\n this.handleFillModeAndThemeColorClasses(this.fillMode, this.themeColor);\n }\n /**\n * @hidden\n */\n iconClasses() {\n if (this.icon) {\n return `k-icon k-i-${this.icon}`;\n }\n if (this.iconClass) {\n return `${this.iconClass}`;\n }\n }\n /**\n * @hidden\n */\n get customAvatar() {\n return !(this.imageSrc || this.initials || this.icon || this.iconClass);\n }\n verifyProperties() {\n if (!isDevMode()) {\n return;\n }\n const inputs = [this.icon || this.iconClass, this.imageSrc, this.initials];\n const inputsLength = inputs.filter((value) => value).length;\n if (inputsLength > 1) {\n throw new Error(`\n Invalid property configuration given.\n The kendo-avatar component can accept only one of:\n icon, imageSrc or initials properties.\n `);\n }\n }\n handleClasses(styleType, value) {\n const elem = this.element.nativeElement;\n const classes = getStylingClasses('avatar', styleType, this[styleType], value);\n if (classes.toRemove) {\n this.renderer.removeClass(elem, classes.toRemove);\n }\n if (classes.toAdd) {\n this.renderer.addClass(elem, classes.toAdd);\n }\n }\n handleFillModeAndThemeColorClasses(fill, themeColor) {\n const wrapperElement = this.element.nativeElement;\n // remove existing fill and theme color classes\n const currentClasses = Array.from(wrapperElement.classList);\n const classesToRemove = currentClasses.filter(cl => {\n return cl.startsWith('k-avatar-solid') || cl.startsWith('k-avatar-outline');\n });\n classesToRemove.forEach((cl => this.renderer.removeClass(wrapperElement, cl)));\n // add fill if needed\n if (fill !== 'none') {\n this.renderer.addClass(wrapperElement, `k-avatar-${fill}`);\n }\n // add theme color class if fill and theme color\n if (fill !== 'none' && themeColor !== 'none') {\n this.renderer.addClass(wrapperElement, `k-avatar-${fill}-${themeColor}`);\n }\n }\n}\nAvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AvatarComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nAvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: AvatarComponent, selector: \"kendo-avatar\", inputs: { shape: \"shape\", size: \"size\", rounded: \"rounded\", themeColor: \"themeColor\", fillMode: \"fillMode\", fill: \"fill\", border: \"border\", iconClass: \"iconClass\", width: \"width\", height: \"height\", cssStyle: \"cssStyle\", initials: \"initials\", icon: \"icon\", imageSrc: \"imageSrc\" }, host: { properties: { \"class.k-avatar\": \"this.hostClass\", \"class.k-avatar-bordered\": \"this.borderClass\", \"style.flexBasis\": \"this.flexBasis\", \"style.width\": \"this.avatarWidth\", \"style.height\": \"this.avatarHeight\" } }, ngImport: i0, template: `\n \n\n \n \n \n \n \n\n \n {{ initials.substring(0, 2) }}\n \n\n \n \n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AvatarComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-avatar',\n template: `\n \n\n \n \n \n \n \n\n \n {{ initials.substring(0, 2) }}\n \n\n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-avatar']\n }], borderClass: [{\n type: HostBinding,\n args: ['class.k-avatar-bordered']\n }], flexBasis: [{\n type: HostBinding,\n args: ['style.flexBasis']\n }], shape: [{\n type: Input\n }], size: [{\n type: Input\n }], rounded: [{\n type: Input\n }], themeColor: [{\n type: Input\n }], fillMode: [{\n type: Input\n }], fill: [{\n type: Input\n }], border: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], width: [{\n type: Input\n }], avatarWidth: [{\n type: HostBinding,\n args: ['style.width']\n }], height: [{\n type: Input\n }], avatarHeight: [{\n type: HostBinding,\n args: ['style.height']\n }], cssStyle: [{\n type: Input\n }], initials: [{\n type: Input\n }], icon: [{\n type: Input\n }], imageSrc: [{\n type: Input\n }] } });\n\n/**\n * Represents the [Kendo UI Card component for Angular]({% slug overview_card %})\n */\nclass CardComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.hostClass = true;\n /**\n * Specifies the layout of the Card content.\n *\n * The possible values are:\n * * (Default) `vertical`\n * * `horizontal`\n *\n */\n this.orientation = 'vertical';\n /**\n * Defines the width of the Card.\n * Defaults to `285px`.\n */\n this.width = '285px';\n this.rtl = false;\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n }\n get widthStyle() {\n return this.width;\n }\n get vertical() {\n return this.orientation === 'vertical';\n }\n get horizontal() {\n return this.orientation === 'horizontal';\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n}\nCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardComponent, selector: \"kendo-card\", inputs: { orientation: \"orientation\", width: \"width\" }, host: { properties: { \"class.k-widget\": \"this.hostClass\", \"class.k-card\": \"this.hostClass\", \"style.width\": \"this.widthStyle\", \"class.k-card-vertical\": \"this.vertical\", \"class.k-card-horizontal\": \"this.horizontal\", \"attr.dir\": \"this.direction\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.card.component'\n }\n ], ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-card',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.card.component'\n }\n ],\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-card']\n }], widthStyle: [{\n type: HostBinding,\n args: ['style.width']\n }], vertical: [{\n type: HostBinding,\n args: ['class.k-card-vertical']\n }], horizontal: [{\n type: HostBinding,\n args: ['class.k-card-horizontal']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], orientation: [{\n type: Input\n }], width: [{\n type: Input\n }] } });\n\n/**\n * Specifies the content in the Card header.\n */\nclass CardHeaderComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nCardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardHeaderComponent, selector: \"kendo-card-header\", host: { properties: { \"class.k-card-header\": \"this.hostClass\" } }, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardHeaderComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-card-header',\n template: `\n \n `\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-header']\n }] } });\n\n/**\n * Specifies the content in the Card body.\n */\nclass CardBodyComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nCardBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCardBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardBodyComponent, selector: \"kendo-card-body\", host: { properties: { \"class.k-card-body\": \"this.hostClass\" } }, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardBodyComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-card-body',\n template: `\n \n `\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-body']\n }] } });\n\n/**\n * Specifies the content in the Card footer.\n */\nclass CardFooterComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nCardFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCardFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardFooterComponent, selector: \"kendo-card-footer\", host: { properties: { \"class.k-card-footer\": \"this.hostClass\" } }, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardFooterComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-card-footer',\n template: `\n \n `\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-footer']\n }] } });\n\n/**\n * Specifies the action buttons of the Card.\n * * ([see example]({% slug actions_card %})).\n */\nclass CardActionsComponent {\n constructor() {\n this.hostClass = true;\n /**\n * Specifies the layout of the Card action buttons.\n *\n * * The possible values are:\n * * (Default) `horizontal`\n * * `vertical`\n *\n */\n this.orientation = 'horizontal';\n /**\n * Specifies the layout of the Card action buttons.\n *\n * The possible values are:\n * * (Default) `start`\n * * `center`\n * * `end`\n * * `stretched`\n *\n */\n this.layout = 'start';\n /**\n * Fires when the user clicks an action button.\n */\n this.action = new EventEmitter();\n }\n get stretchedClass() {\n return this.layout === 'stretched';\n }\n get startClass() {\n return this.layout === 'start';\n }\n get endClass() {\n return this.layout === 'end';\n }\n get centerClass() {\n return this.layout === 'center';\n }\n get verticalClass() {\n return this.orientation === 'vertical';\n }\n get horizontalClass() {\n return this.orientation === 'horizontal';\n }\n /**\n * Allows the declarative specification of the Card actions.\n */\n set actions(value) {\n if (Array.isArray(value)) {\n this.actionsArray = value;\n }\n else if (value instanceof TemplateRef) {\n this.actionsTemplate = value;\n }\n }\n /**\n * @hidden\n */\n onClick(action) {\n this.action.emit(action);\n }\n}\nCardActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nCardActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardActionsComponent, selector: \"kendo-card-actions\", inputs: { orientation: \"orientation\", layout: \"layout\", actions: \"actions\" }, outputs: { action: \"action\" }, host: { properties: { \"class.k-card-actions\": \"this.hostClass\", \"class.k-card-actions-stretched\": \"this.stretchedClass\", \"class.k-card-actions-start\": \"this.startClass\", \"class.k-card-actions-end\": \"this.endClass\", \"class.k-card-actions-center\": \"this.centerClass\", \"class.k-card-actions-vertical\": \"this.verticalClass\", \"class.k-card-actions-horizontal\": \"this.horizontalClass\" } }, ngImport: i0, template: `\n \n\n \n \n \n\n \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardActionsComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-card-actions',\n template: `\n \n\n \n \n \n\n \n `\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-actions']\n }], stretchedClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-stretched']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-end']\n }], centerClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-center']\n }], verticalClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-vertical']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-horizontal']\n }], orientation: [{\n type: Input\n }], layout: [{\n type: Input\n }], actions: [{\n type: Input\n }], action: [{\n type: Output\n }] } });\n\n/**\n * Specifies a separator in the content of the Card.\n */\nclass CardSeparatorDirective {\n constructor() {\n this.hostClass = true;\n /**\n * Specifies the orientation of the Card separator.\n *\n * The possible values are:\n * (Default) `horizontal`\n * `vertical`\n */\n this.orientation = 'horizontal';\n }\n get verticalClass() {\n return this.orientation === 'vertical';\n }\n get horizontalClass() {\n return this.orientation === 'horizontal';\n }\n}\nCardSeparatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardSeparatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCardSeparatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardSeparatorDirective, selector: \"[kendoCardSeparator]\", inputs: { color: \"color\", orientation: \"orientation\" }, host: { properties: { \"class.k-card-separator\": \"this.hostClass\", \"class.k-separator-vertical\": \"this.verticalClass\", \"class.k-separator-horizontal\": \"this.horizontalClass\", \"style.color\": \"this.color\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardSeparatorDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCardSeparator]'\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-separator']\n }], verticalClass: [{\n type: HostBinding,\n args: ['class.k-separator-vertical']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-separator-horizontal']\n }], color: [{\n type: HostBinding,\n args: ['style.color']\n }, {\n type: Input\n }], orientation: [{\n type: Input\n }] } });\n\n/**\n * Specifies the text and styles for the title of the Card.\n */\nclass CardTitleDirective {\n constructor() {\n this.hostClass = true;\n }\n}\nCardTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCardTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardTitleDirective, selector: \"[kendoCardTitle]\", host: { properties: { \"class.k-card-title\": \"this.hostClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCardTitle]'\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-title']\n }] } });\n\n/**\n * Specifies the text and styles for the subtitle of the Card.\n */\nclass CardSubtitleDirective {\n constructor() {\n this.hostClass = true;\n }\n}\nCardSubtitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardSubtitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCardSubtitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardSubtitleDirective, selector: \"[kendoCardSubtitle]\", host: { properties: { \"class.k-card-subtitle\": \"this.hostClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardSubtitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCardSubtitle]'\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-subtitle']\n }] } });\n\n/**\n * Specifies any media that will be displayed and aligned in the Card.\n */\nclass CardMediaDirective {\n constructor() {\n this.hostClass = true;\n }\n}\nCardMediaDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardMediaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nCardMediaDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CardMediaDirective, selector: \"[kendoCardMedia]\", host: { properties: { \"class.k-card-media\": \"this.hostClass\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardMediaDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoCardMedia]'\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-media']\n }] } });\n\n/**\n * The settings of the Card action buttons.\n */\nclass CardAction {\n}\n\n/**\n * Represents a template that defines the content of the ExpansionPanel title.\n * To define the template, nest an `` tag\n * with the `kendoExpansionPanelTitleDirective` directive inside the `` tag.\n * ([see example]({% slug title_expansionpanel %}#toc-title-template)).\n */\nclass ExpansionPanelTitleDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nExpansionPanelTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelTitleDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nExpansionPanelTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ExpansionPanelTitleDirective, selector: \"[kendoExpansionPanelTitleDirective]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelTitleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoExpansionPanelTitleDirective]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nfunction expand(duration, height) {\n return [\n style({ overflow: 'hidden', display: 'block', height: 0 }),\n animate(`${duration}ms ease-in`, style({ height: `${height}` }))\n ];\n}\n/**\n * @hidden\n */\nfunction collapse(duration, height) {\n return [\n style({ overflow: 'hidden', height: `${height}` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', height: 0 }))\n ];\n}\n\n/**\n * Arguments for the `action` event of the ExpansionPanel.\n */\nclass ExpansionPanelActionEvent extends PreventableEvent$1 {\n /**\n * @hidden\n */\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\nconst DEFAULT_DURATION = 200;\nconst CONTENT_HIDDEN_CLASS = 'k-hidden';\n/**\n * Represents the [Kendo UI ExpansionPanel component for Angular]({% slug overview_expansionpanel %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * There are various theories about the origin of the word Chile.\n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass ExpansionPanelComponent {\n constructor(renderer, hostElement, ngZone, localizationService, builder) {\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.ngZone = ngZone;\n this.localizationService = localizationService;\n this.builder = builder;\n /**\n * Specifies the primary text in the header of the ExpansionPanel\n * ([see example]({% slug title_expansionpanel %}#toc-title-and-subtitle)).\n */\n this.title = '';\n /**\n * Specifies the secondary text in the header of the ExpansionPanel, which is rendered next to the collapse/expand icon\n * ([see example]({% slug title_expansionpanel %}#toc-title-and-subtitle)).\n */\n this.subtitle = '';\n /**\n * Specifies whether the ExpansionPanel is disabled. If disabled, the ExpansionPanel can be neither expanded nor collapsed\n * ([see example]({% slug disabled_expansionpanel %})).\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Specifies the animation settings of the ExpansionPanel\n * ([see example]({% slug animations_expansionpanel %})).\n *\n * The possible values are:\n * * Boolean\n * * (Default) `true` Numeric values represent duration. Default duration is 200ms.\n * * false\n * * Number\n */\n this.animation = true;\n /**\n * Fires when the `expanded` property of the component is updated.\n * Used to provide a two-way binding for the `expanded` property\n * ([see example]({% slug overview_expansionpanel %}#toc-events)).\n */\n this.expandedChange = new EventEmitter();\n /**\n * Fires when the expanded state of the ExpansionPanel is about to change. This event is preventable\n * ([see example]({% slug overview_expansionpanel %}#toc-events)).\n */\n this.action = new EventEmitter();\n /**\n * Fires when the ExpansionPanel is expanded. If there is animation it will fire when the animation is complete\n * ([see example]({% slug overview_expansionpanel %}#toc-events)).\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the ExpansionPanel is collapsed. If there is animation it will fire when the animation is complete\n * ([see example]({% slug overview_expansionpanel %}#toc-events)).\n */\n this.collapse = new EventEmitter();\n this.hostClass = true;\n this.tabindex = 0;\n /**\n * @hidden\n */\n this.focused = false;\n this.animationEnd = new EventEmitter();\n this.subscriptions = new Subscription();\n this._expanded = false;\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * Specifies whether the ExpansionPanel is expanded. The property supports two-way binding.\n * ([see example]({% slug interaction_expansionpanel %}#toc-setting-the-initial-state)).\n *\n * @default false\n */\n set expanded(value) {\n if (value === this.expanded) {\n return;\n }\n this._expanded = value;\n if (this.expanded) {\n this.removeContentHiddenClass();\n }\n else {\n this.addContentHiddenClass();\n }\n }\n get expanded() {\n return this._expanded;\n }\n get expandedClass() {\n return this.expanded && !this.disabled;\n }\n get focusClass() {\n return this.focused;\n }\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n onComponentBlur() {\n if (this.focused) {\n this.focused = false;\n }\n }\n /**\n * @hidden\n */\n onComponentFocus() {\n if (!this.focused) {\n this.focused = true;\n }\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.hostElement.nativeElement, 'title');\n this.subscriptions = this.localizationService.changes.subscribe(({ rtl }) => { this.direction = rtl ? 'rtl' : 'ltr'; });\n }\n ngAfterViewInit() {\n this.initDomEvents();\n if (!this.expanded) {\n this.renderer.addClass(this.content.nativeElement, CONTENT_HIDDEN_CLASS);\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n initDomEvents() {\n if (!this.hostElement) {\n return;\n }\n if (!this.disabled) {\n this.ngZone.runOutsideAngular(() => {\n const nativeElement = this.hostElement.nativeElement;\n this.subscriptions.add(this.renderer.listen(nativeElement, 'keydown', this.keyDownHandler.bind(this)));\n });\n }\n }\n /**\n * @hidden\n */\n keyDownHandler(ev) {\n const isEnterOrSpace = ev.keyCode === Keys.Enter || ev.keyCode === Keys.Space;\n if (!isEnterOrSpace) {\n return;\n }\n if (hasClass(ev.target, 'k-expander')) {\n ev.preventDefault();\n this.ngZone.run(() => {\n this.onHeaderAction();\n });\n }\n }\n /**\n * @hidden\n */\n onHeaderClick(ev) {\n if (!isFocusable(ev.target) && !this.disabled) {\n this.onHeaderAction();\n }\n }\n /**\n * @hidden\n */\n onHeaderAction() {\n this.focused = true;\n const eventArgs = new ExpansionPanelActionEvent();\n eventArgs.action = this.expanded ? 'collapse' : 'expand';\n this.action.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.setExpanded(!this.expanded);\n if (this.expanded) {\n this.removeContentHiddenClass();\n }\n if (this.animation) {\n this.animateContent();\n return;\n }\n if (!this.expanded) {\n this.addContentHiddenClass();\n }\n this.emitExpandCollapseEvent();\n }\n }\n /**\n * @hidden\n */\n get indicatorClasses() {\n if (this.expanded) {\n return this.collapseIcon ? this.collapseIcon : `k-icon k-i-arrow-chevron-up`;\n }\n else {\n return this.expandIcon ? this.expandIcon : `k-icon k-i-arrow-chevron-down`;\n }\n }\n /**\n * Toggles the visibility of the ExpansionPanel\n * ([see example]({% slug interaction_expansionpanel %}#toc-toggling-the-content)).\n *\n * @param expanded? - Boolean. Specifies, whether the ExpansionPanel will be expanded or collapsed.\n */\n toggle(expanded) {\n const previous = this.expanded;\n const current = isPresent(expanded) ? expanded : !previous;\n if (current === previous) {\n return;\n }\n this.setExpanded(current);\n if (this.expanded) {\n this.removeContentHiddenClass();\n }\n if (this.animation) {\n this.animateContent();\n return;\n }\n if (!this.expanded) {\n this.addContentHiddenClass();\n }\n this.emitExpandCollapseEvent();\n }\n setExpanded(value) {\n this._expanded = value;\n this.expandedChange.emit(value);\n }\n animateContent() {\n const duration = typeof this.animation === 'boolean' ? DEFAULT_DURATION : this.animation;\n const contentHeight = getComputedStyle(this.content.nativeElement).height;\n const animation = this.expanded ? expand(duration, contentHeight) : collapse(duration, contentHeight);\n const player = this.createPlayer(animation, this.content.nativeElement);\n this.animationEnd.pipe(take(1)).subscribe(() => {\n if (!this.expanded) {\n this.addContentHiddenClass();\n }\n this.emitExpandCollapseEvent();\n });\n player.play();\n }\n createPlayer(animation, animatedElement) {\n const factory = this.builder.build(animation);\n let player = factory.create(animatedElement);\n player.onDone(() => {\n if (player) {\n this.animationEnd.emit();\n player.destroy();\n player = null;\n }\n });\n return player;\n }\n emitExpandCollapseEvent() {\n this[this.expanded ? 'expand' : 'collapse'].emit();\n }\n addContentHiddenClass() {\n this.renderer.addClass(this.content.nativeElement, CONTENT_HIDDEN_CLASS);\n }\n removeContentHiddenClass() {\n this.renderer.removeClass(this.content.nativeElement, CONTENT_HIDDEN_CLASS);\n }\n}\nExpansionPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.LocalizationService }, { token: i1$2.AnimationBuilder }], target: i0.ɵɵFactoryTarget.Component });\nExpansionPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ExpansionPanelComponent, selector: \"kendo-expansionpanel\", inputs: { title: \"title\", subtitle: \"subtitle\", disabled: \"disabled\", expanded: \"expanded\", expandIcon: \"expandIcon\", collapseIcon: \"collapseIcon\", animation: \"animation\" }, outputs: { expandedChange: \"expandedChange\", action: \"action\", expand: \"expand\", collapse: \"collapse\" }, host: { listeners: { \"blur\": \"onComponentBlur()\", \"focus\": \"onComponentFocus()\" }, properties: { \"class.k-expander\": \"this.hostClass\", \"class.k-expanded\": \"this.expandedClass\", \"class.k-focus\": \"this.focusClass\", \"attr.aria-disabled\": \"this.disabledClass\", \"class.k-disabled\": \"this.disabledClass\", \"attr.dir\": \"this.direction\", \"attr.tabindex\": \"this.tabindex\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.expansionpanel'\n }\n ], queries: [{ propertyName: \"titleTemplate\", first: true, predicate: ExpansionPanelTitleDirective, descendants: true }], viewQueries: [{ propertyName: \"content\", first: true, predicate: [\"content\"], descendants: true, static: true }], exportAs: [\"kendoExpansionPanel\"], ngImport: i0, template: `\n \n \n
    {{ title }}
    \n \n
    \n {{ subtitle }}\n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n \n
    \n
    \n `, isInline: true, directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoExpansionPanel',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.expansionpanel'\n }\n ],\n selector: 'kendo-expansionpanel',\n template: `\n \n \n
    {{ title }}
    \n \n
    \n {{ subtitle }}\n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n \n
    \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.LocalizationService }, { type: i1$2.AnimationBuilder }]; }, propDecorators: { title: [{\n type: Input\n }], subtitle: [{\n type: Input\n }], disabled: [{\n type: Input\n }], expanded: [{\n type: Input\n }], expandIcon: [{\n type: Input\n }], collapseIcon: [{\n type: Input\n }], animation: [{\n type: Input\n }], expandedChange: [{\n type: Output\n }], action: [{\n type: Output\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], titleTemplate: [{\n type: ContentChild,\n args: [ExpansionPanelTitleDirective, { static: false }]\n }], content: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-expander']\n }], expandedClass: [{\n type: HostBinding,\n args: ['class.k-expanded']\n }], focusClass: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], tabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], onComponentBlur: [{\n type: HostListener,\n args: ['blur']\n }], onComponentFocus: [{\n type: HostListener,\n args: ['focus']\n }] } });\n\n/**\n * @hidden\n */\nconst normalizeValue = (value) => {\n return value ? +value : undefined;\n};\n/**\n * @hidden\n */\nconst isRowItemPresent = (items) => {\n return items.some(item => isPresent(item.row));\n};\n/**\n * @hidden\n */\nconst propsChanged = (initialProps, newProps) => {\n for (let i = 0; i < initialProps.length; i++) {\n if (initialProps[i] !== newProps[i]) {\n return true;\n }\n }\n return false;\n};\n/**\n * @hidden\n *\n * Extracts the event target from the viewport coords. Required for touch devices\n * where the `event.target` of a `pointermove` event is always the initially dragged item.\n */\nconst getDropTarget = (event) => {\n if (!(isDocumentAvailable() && isPresent(document.elementsFromPoint))) {\n return [event.target];\n }\n return document.elementsFromPoint(event.clientX, event.clientY)\n .filter(item => item.classList && (item.classList.contains('k-tilelayout-item') || item.classList.contains('k-layout-item-hint')));\n};\n/**\n * @hidden\n */\nconst setElementStyles = (renderer, elem, styles) => {\n const props = Object.keys(styles);\n props.forEach(p => {\n renderer.setStyle(elem, p, styles[p]);\n });\n};\n/**\n * @hidden\n */\nconst calculateCellFromPosition = (coordinates, tileLayoutElement, gap, cellSize, columns, rtl = false) => {\n const tileLayoutRect = tileLayoutElement.getBoundingClientRect();\n const totalRows = (tileLayoutRect.height - gap.rows) / (cellSize.height + gap.rows);\n const distanceFromTop = coordinates.y - tileLayoutRect.y;\n const distanceFromLeft = coordinates.x - tileLayoutRect.x;\n const distanceFromRight = tileLayoutRect.right - coordinates.x;\n const distanceToCellWidthRatio = Math.floor((rtl ? distanceFromRight : distanceFromLeft) / (gap.columns + cellSize.width));\n const cappedColumnPosition = Math.min(distanceToCellWidthRatio + 1, columns);\n const distanceToCellHeightRatio = Math.floor(distanceFromTop / (gap.rows + cellSize.height));\n const cappedRowPosition = Math.min(distanceToCellHeightRatio + 1, totalRows);\n const col = Math.max(cappedColumnPosition, 0);\n const row = Math.max(cappedRowPosition, 0);\n return {\n row, col\n };\n};\n/**\n * @hidden\n */\nconst calculateOrderFromCell = (row, col, items, draggedItem, tileLayoutElement, gap, cellSize, columns) => {\n let order = 0;\n items.forEach(item => {\n const rect = item.elem.nativeElement.getBoundingClientRect();\n const start = calculateCellFromPosition({\n x: rect.x,\n y: rect.y\n }, tileLayoutElement, gap, cellSize, columns);\n if (item !== draggedItem && ((start.row === row && start.col < col) || start.row < row)) {\n order++;\n }\n });\n return order;\n};\n\n/**\n * @hidden\n */\nconst RESIZE_HANDLE_UNIDIRECTIONAL_SIZE = 9;\n/**\n * @hidden\n */\nconst RESIZE_HANDLE_BIDIRECTIONAL_SIZE = 25;\n/**\n * @hidden\n */\nconst RESIZE_HANDLE_UNIDIRECTIONAL_OVERLAP = 5;\n/**\n * @hidden\n */\nconst RESIZE_HANDLE_BIDIRECTIONAL_OVERLAP = 18;\n/**\n * @hidden\n */\nconst DRAGGED_ZINDEX = 10;\n/**\n * @hidden\n */\nconst RESIZE_DIRECTIONS = ['ew', 'ns', 'nwse'];\n/**\n * @hidden\n */\nconst RTL_RESIZE_DIRECTIONS = ['ew', 'ns', 'nesw'];\n/**\n * @hidden\n */\nconst RESIZE_HANDLE_DIMENSIONS = {\n // numeric values represent pixels\n ew: {\n width: RESIZE_HANDLE_UNIDIRECTIONAL_SIZE,\n overlapX: RESIZE_HANDLE_UNIDIRECTIONAL_OVERLAP\n },\n ns: {\n height: RESIZE_HANDLE_UNIDIRECTIONAL_SIZE,\n overlapY: RESIZE_HANDLE_UNIDIRECTIONAL_OVERLAP\n },\n nwse: {\n width: RESIZE_HANDLE_BIDIRECTIONAL_SIZE,\n height: RESIZE_HANDLE_BIDIRECTIONAL_SIZE,\n overlapX: RESIZE_HANDLE_BIDIRECTIONAL_OVERLAP,\n overlapY: RESIZE_HANDLE_BIDIRECTIONAL_OVERLAP\n },\n nesw: {\n width: RESIZE_HANDLE_BIDIRECTIONAL_SIZE,\n height: RESIZE_HANDLE_BIDIRECTIONAL_SIZE,\n overlapX: RESIZE_HANDLE_BIDIRECTIONAL_OVERLAP,\n overlapY: RESIZE_HANDLE_BIDIRECTIONAL_OVERLAP\n }\n};\n/**\n * @hidden\n */\nconst OVERLAP_THRESHOLD = 0.3;\n/**\n * @hidden\n */\nconst REVERSE_OVERLAP_THRESHOLD = -0.7;\n/**\n * @hidden\n */\nconst HINT_BORDERS_HEIGHT = 2;\n\n/**\n * Arguments for the `reorder` event. The event fires when the order or starting\n * positions of the items is changed via the UI. If you prevent the event, the change is canceled ([see example]({% slug reordering_tilelayout %}#toc-handling-the-reorder-event)).\n */\nclass TileLayoutReorderEvent extends PreventableEvent$1 {\n /**\n * Constructs the event arguments for the `reorder` event.\n * @param item - The TileLayoutItem being reordered.\n * @param items - The TileLayoutItem collection that holds the currently rendered items and their internal state.\n * @param newIndex - The new order index of the reordered item used to determine its positioning relative to the other items.\n * @param oldIndex - The initial order index of the reordered item used to determine its positioning relative to the other items.\n * @param newCol - The new start column of the reordered item.\n * @param oldCol - The initial start column of the reordered item.\n * @param newRow - The new start row of the reordered item.\n * @param oldRow - The initial start row of the reordered item.\n * @hidden\n */\n constructor(item, items, newIndex, oldIndex, newCol, oldCol, newRow, oldRow) {\n super();\n this.item = item;\n this.items = items;\n this.newIndex = newIndex;\n this.oldIndex = oldIndex;\n this.newCol = newCol;\n this.oldCol = oldCol;\n this.newRow = newRow;\n this.oldRow = oldRow;\n }\n}\n\n/**\n * Arguments for the `resize` event. The `resize` event fires when any item size\n * is changed from the UI. If you cancel the event, the change is prevented ([see example]({% slug resizing_tilelayout %}#toc-handling-the-resize-event)).\n */\nclass TileLayoutResizeEvent extends PreventableEvent$1 {\n /**\n * Constructs the event arguments for the `resize` event.\n * @param item - The TileLayoutItem being resized\n * @param items - The TileLayoutItem collection\n * @param newRowSpan - The new rowSpan of the resized item\n * @param oldRowSpan - The initial rowSpan of the resized item\n * @param newColSpan - The new colSpan of the resized item\n * @param oldColSpan - The initial colSpan of the resized item\n * @hidden\n */\n constructor(item, items, newRowSpan, oldRowSpan, newColSpan, oldColSpan) {\n super();\n this.item = item;\n this.items = items;\n this.newRowSpan = newRowSpan;\n this.oldRowSpan = oldRowSpan;\n this.newColSpan = newColSpan;\n this.oldColSpan = oldColSpan;\n }\n}\n\n/**\n * @hidden\n */\nclass TileLayoutDraggingService {\n constructor(zone, renderer, localization) {\n this.zone = zone;\n this.renderer = renderer;\n this.localization = localization;\n this.reorderable = new BehaviorSubject(null);\n this.resizable = new BehaviorSubject(null);\n this.reorder = new Subject();\n this.resize = new Subject();\n this.lastDragCursorOffset = {\n x: 0,\n y: 0\n };\n this.localizationSubscription = this.localization.changes.subscribe(({ rtl }) => this.rtl = rtl);\n }\n get colStart() {\n return this.currentColStart;\n }\n get rowStart() {\n return this.currentRowStart;\n }\n get itemWrapper() {\n return this.draggedItemWrapper;\n }\n get order() {\n return this.targetOrder;\n }\n ngOnDestroy() {\n this.localizationSubscription.unsubscribe();\n }\n handlePress(originalEvent) {\n const resizing = !!originalEvent.target.classList.contains('k-resize-handle');\n const closestTile = closestInScope(originalEvent.target, el => el.classList.contains('k-tilelayout-item'), this.tileLayoutSettings.tileLayoutElement);\n const closestHeader = closestInScope(originalEvent.target, el => el.classList.contains('k-tilelayout-item-header'), this.tileLayoutSettings.tileLayoutElement);\n if (!closestTile) {\n return;\n }\n this.zone.run(() => {\n this.draggedItemWrapper = closestTile;\n this.draggedItem = this.tileLayoutSettings.items\n .find(item => item.order === +closestTile.style.order);\n });\n const reordering = !resizing && this.reorderable.getValue() && this.draggedItem.reorderable && closestHeader;\n const focusableTarget = isFocusable(originalEvent.target);\n if (!(reordering || resizing) || focusableTarget) {\n return;\n }\n else {\n originalEvent.preventDefault();\n }\n this.zone.run(() => {\n this.reordering = reordering;\n this.resizing = resizing;\n });\n const tileRect = this.draggedItemWrapper.getBoundingClientRect();\n this.zone.run(() => {\n this.offset = {\n top: originalEvent.clientY - tileRect.top,\n left: originalEvent.clientX - tileRect.left,\n x: tileRect.x,\n y: tileRect.y,\n width: tileRect.width,\n height: tileRect.height\n };\n this.targetSize = {\n rowSpan: this.draggedItem.rowSpan,\n colSpan: this.draggedItem.colSpan\n };\n this.cellSize = {\n width: (tileRect.width - ((this.targetSize.colSpan - 1) * this.tileLayoutSettings.gap.columns)) / this.targetSize.colSpan,\n height: (tileRect.height - ((this.targetSize.rowSpan - 1) * this.tileLayoutSettings.gap.rows)) / this.targetSize.rowSpan\n };\n this.lastDragCursorOffset = {\n x: originalEvent.clientX,\n y: originalEvent.clientY\n };\n });\n setElementStyles(this.renderer, this.draggedItemWrapper, {\n left: tileRect.left + window.pageXOffset + 'px',\n top: tileRect.top + window.pageYOffset + 'px',\n width: tileRect.width + 'px',\n height: tileRect.height + 'px',\n zIndex: DRAGGED_ZINDEX\n });\n setElementStyles(this.renderer, this.tileLayoutSettings.hintElement, {\n display: 'flex',\n height: (tileRect.height - HINT_BORDERS_HEIGHT) + 'px'\n });\n this.zone.run(() => this.targetOrder = this.draggedItem.order);\n setElementStyles(this.renderer, this.draggedItemWrapper, {\n position: 'absolute'\n });\n if (this.reorderable.getValue() && !resizing) {\n this.zone.run(() => {\n this.currentColStart = this.draggedItem.colStart;\n this.currentRowStart = this.draggedItem.rowStart;\n });\n const headerEl = this.draggedItem.elem.nativeElement.querySelector('.k-tilelayout-item-header');\n this.renderer.addClass(headerEl, 'k-cursor-grabbing');\n }\n else if (this.resizable && resizing) {\n this.zone.run(() => {\n this.startingPoint = {\n top: originalEvent.clientY,\n left: originalEvent.clientX\n };\n this.currentResizingColSpan = this.draggedItem.colSpan;\n this.currentResizingRowSpan = this.draggedItem.rowSpan;\n if (this.draggedItem.col) {\n this.currentColStart = this.draggedItem.col.toString();\n }\n if (this.draggedItem.row) {\n this.currentRowStart = this.draggedItem.row.toString();\n }\n this.direction = originalEvent.target.classList[1];\n });\n }\n }\n handleDrag(originalEvent) {\n if (this.draggedItemWrapper) {\n if (this.reordering) {\n this.reorderItems(originalEvent);\n }\n else if (this.resizing) {\n this.resizeItem(originalEvent);\n }\n this.lastDragCursorOffset = {\n x: originalEvent.clientX,\n y: originalEvent.clientY\n };\n }\n }\n handleRelease(originalEvent) {\n originalEvent.preventDefault();\n if (this.reordering) {\n const initialOrder = this.draggedItem.order;\n const initialCol = this.draggedItem.col;\n const initialRow = this.draggedItem.row;\n const targetCol = normalizeValue(this.currentColStart);\n const targetRow = normalizeValue(this.currentRowStart);\n if (propsChanged([this.targetOrder, targetCol, targetRow], [initialOrder, initialCol, initialRow])) {\n const reorderEvent = new TileLayoutReorderEvent(this.draggedItem, this.tileLayoutSettings.items, this.targetOrder, initialOrder, normalizeValue(this.currentColStart), initialCol, targetRow, initialRow);\n this.reorder.next(reorderEvent);\n if (!reorderEvent.isDefaultPrevented()) {\n if (this.targetOrder > initialOrder) {\n this.zone.run(() => {\n for (let i = initialOrder + 1; i <= this.targetOrder; i++) {\n this.tileLayoutSettings.items.find(item => item.order === i).order = i - 1;\n }\n });\n }\n else {\n this.zone.run(() => {\n for (let i = this.targetOrder; i < initialOrder; i++) {\n this.tileLayoutSettings.items.find(item => item.order === i).order = i + 1;\n }\n });\n }\n this.draggedItem.order = this.targetOrder;\n if (this.draggedItem.col) {\n this.draggedItem.col = +this.currentColStart;\n }\n if (this.draggedItem.row) {\n this.draggedItem.row = +this.currentRowStart;\n }\n }\n }\n this.tileLayoutSettings.tileLayoutElement.appendChild(this.tileLayoutSettings.hintElement);\n this.zone.run(() => this.cleanUp());\n }\n else if (!this.reordering && this.resizing) {\n const initialRowSpan = this.draggedItem.rowSpan;\n const initialColSpan = this.draggedItem.colSpan;\n const { targetColSpan, targetRowSpan } = isRowItemPresent(this.tileLayoutSettings.items) ?\n this.targetSpan() :\n { targetColSpan: this.currentResizingColSpan, targetRowSpan: this.currentResizingRowSpan };\n if (propsChanged([initialRowSpan, initialColSpan], [targetRowSpan, targetColSpan])) {\n const resizeEvent = new TileLayoutResizeEvent(this.draggedItem, this.tileLayoutSettings.items, targetRowSpan, initialRowSpan, targetColSpan, initialColSpan);\n this.resize.next(resizeEvent);\n if (!resizeEvent.isDefaultPrevented()) {\n this.draggedItem.colSpan = this.currentResizingColSpan;\n this.draggedItem.rowSpan = this.currentResizingRowSpan;\n }\n }\n this.zone.run(() => this.cleanUp());\n }\n }\n reorderItems(event) {\n const targets = getDropTarget(event);\n const closestTile = targets.find(t => t !== this.draggedItemWrapper);\n let tileOrder = closestTile ? +closestTile.style.order : +this.draggedItemWrapper.style.order;\n if (this.tileLayoutSettings.autoFlow !== 'none') {\n const deltaX = event.clientX - this.lastDragCursorOffset.x;\n const deltaY = event.clientY - this.lastDragCursorOffset.y;\n const directionX = deltaX > 0 ? 'right' : deltaX < 0 ? 'left' : undefined;\n const directionY = deltaY > 0 ? 'down' : deltaX < 0 ? 'up' : undefined;\n const rect = this.draggedItemWrapper.getBoundingClientRect();\n const horizontalGap = this.tileLayoutSettings.gap.columns;\n const verticalGap = this.tileLayoutSettings.gap.rows;\n if (directionX && this.draggedItem.col) {\n const { col } = calculateCellFromPosition({\n x: directionX === 'right' ? rect.right - horizontalGap : rect.left + horizontalGap,\n y: event.clientY\n }, this.tileLayoutSettings.tileLayoutElement, this.tileLayoutSettings.gap, this.cellSize, this.tileLayoutSettings.columns, this.rtl);\n const targetStartCol = this.getTargetCol(col, directionX);\n this.currentColStart = targetStartCol.toString();\n }\n if (directionY && this.draggedItem.row) {\n const { row } = calculateCellFromPosition({\n x: event.clientX,\n y: directionY === 'down' ? rect.bottom - verticalGap : rect.top + verticalGap\n }, this.tileLayoutSettings.tileLayoutElement, this.tileLayoutSettings.gap, this.cellSize, this.tileLayoutSettings.columns, this.rtl);\n const targetStartRow = this.getTargetRow(row, directionY);\n this.currentRowStart = targetStartRow.toString();\n }\n }\n const hintBefore = tileOrder < this.targetOrder;\n const hintAfter = tileOrder > this.targetOrder;\n this.zone.run(() => this.targetOrder = tileOrder);\n if (hintBefore) {\n this.tileLayoutSettings.tileLayoutElement\n .insertBefore(this.tileLayoutSettings.hintElement, this.tileLayoutSettings.tileLayoutElement.firstChild);\n }\n else if (hintAfter) {\n this.tileLayoutSettings.tileLayoutElement.appendChild(this.tileLayoutSettings.hintElement);\n }\n setElementStyles(this.renderer, this.draggedItemWrapper, {\n top: (event.pageY - this.offset.top) + 'px',\n left: (event.pageX - this.offset.left) + 'px'\n });\n }\n resizeItem(event) {\n setElementStyles(this.renderer, this.tileLayoutSettings.tileLayoutElement, {\n cursor: this.direction.split('k-cursor-')[1]\n });\n const currentWidth = this.rtl ?\n this.offset.width + (this.offset.x - event.clientX) :\n this.offset.width + (event.clientX - this.startingPoint.left);\n const currentHeight = this.offset.height + (event.clientY - this.startingPoint.top);\n const hintRect = this.tileLayoutSettings.hintElement.getBoundingClientRect();\n const hintWidth = hintRect.width;\n const hintHeight = hintRect.height;\n const horizontalDragDirection = event.clientX - this.lastDragCursorOffset.x;\n const verticalDragDirection = event.clientY - this.lastDragCursorOffset.y;\n const startCol = this.draggedItem.col ? this.draggedItem.col : calculateCellFromPosition({\n x: this.rtl ? hintRect.right : hintRect.x,\n y: hintRect.y\n }, this.tileLayoutSettings.tileLayoutElement, this.tileLayoutSettings.gap, this.cellSize, this.tileLayoutSettings.columns, this.rtl).col;\n const maxWidth = (this.tileLayoutSettings.columns - startCol) * (this.cellSize.width + this.tileLayoutSettings.gap.columns) + this.cellSize.width;\n const resizeHorizontally = () => {\n setElementStyles(this.renderer, this.draggedItemWrapper, {\n width: Math.min(Math.max(currentWidth, this.cellSize.width), maxWidth) + 'px'\n });\n if (this.rtl && currentWidth > this.cellSize.width) {\n const totalWidth = this.tileLayoutSettings.columns * (this.cellSize.width + this.tileLayoutSettings.gap.columns);\n const leftBoundary = this.tileLayoutSettings.tileLayoutElement.getBoundingClientRect().right - totalWidth;\n setElementStyles(this.renderer, this.draggedItemWrapper, {\n left: Math.max(event.clientX, leftBoundary) + 'px'\n });\n }\n const deltaX = currentWidth - hintWidth;\n const { x, y, right } = this.draggedItem.elem.nativeElement.getBoundingClientRect();\n const { col } = calculateCellFromPosition({ x: (this.rtl ? right : x), y: y }, this.tileLayoutSettings.tileLayoutElement, this.tileLayoutSettings.gap, this.cellSize, this.tileLayoutSettings.columns, this.rtl);\n const resizedColSpan = col + this.currentResizingColSpan;\n const expandingCondition = this.rtl ? horizontalDragDirection < 0 : horizontalDragDirection > 0;\n const shrinkingCondition = this.rtl ? horizontalDragDirection > 0 : horizontalDragDirection < 0;\n if (deltaX > OVERLAP_THRESHOLD * this.cellSize.width &&\n expandingCondition &&\n resizedColSpan <= this.tileLayoutSettings.columns) {\n this.currentResizingColSpan++;\n }\n else if (this.currentResizingColSpan > 1 &&\n shrinkingCondition &&\n deltaX < REVERSE_OVERLAP_THRESHOLD * this.cellSize.width) {\n this.currentResizingColSpan--;\n }\n setElementStyles(this.renderer, this.tileLayoutSettings.hintElement, {\n gridColumnEnd: `span ${this.currentResizingColSpan}`\n });\n };\n const resizeVertically = () => {\n setElementStyles(this.renderer, this.draggedItemWrapper, {\n height: Math.max(currentHeight, this.cellSize.height) + 'px'\n });\n const deltaY = currentHeight - hintHeight;\n if (deltaY > OVERLAP_THRESHOLD * this.cellSize.height && verticalDragDirection > 0) {\n this.currentResizingRowSpan++;\n }\n else if (this.currentResizingRowSpan > 1 &&\n verticalDragDirection < 0 && deltaY < REVERSE_OVERLAP_THRESHOLD * this.cellSize.height) {\n this.currentResizingRowSpan--;\n }\n setElementStyles(this.renderer, this.tileLayoutSettings.hintElement, {\n gridRowEnd: `span ${this.currentResizingRowSpan}`\n });\n setElementStyles(this.renderer, this.tileLayoutSettings.hintElement, {\n height: `${this.calculateHintHeight()}px`\n });\n };\n if (this.direction.indexOf('ew') > -1) {\n resizeHorizontally();\n }\n else if (this.direction.indexOf('ns') > -1) {\n resizeVertically();\n }\n else {\n resizeHorizontally();\n resizeVertically();\n }\n }\n cleanUp() {\n this.targetOrder = this.currentResizingColSpan = this.currentColStart = this.currentResizingRowSpan = this.currentRowStart = undefined;\n this.resizing = this.reordering = false;\n this.direction = null;\n if (this.draggedItemWrapper) {\n const grabHandle = this.draggedItemWrapper.querySelector('.k-cursor-grab');\n if (grabHandle) {\n this.renderer.removeClass(grabHandle, 'k-cursor-grabbing');\n }\n setElementStyles(this.renderer, this.draggedItemWrapper, {\n top: '',\n left: '',\n display: '',\n width: '',\n height: '',\n zIndex: '',\n position: ''\n });\n setElementStyles(this.renderer, this.tileLayoutSettings.hintElement, {\n display: 'none',\n height: 'auto'\n });\n setElementStyles(this.renderer, this.tileLayoutSettings.tileLayoutElement, {\n cursor: 'default'\n });\n this.draggedItemWrapper =\n this.offset =\n this.draggedItem =\n this.resizing =\n this.reordering =\n this.currentResizingColSpan =\n this.currentResizingRowSpan =\n this.startingPoint = undefined;\n this.lastDragCursorOffset = {\n x: 0,\n y: 0\n };\n }\n }\n targetSpan() {\n const itemRect = this.draggedItem.elem.nativeElement.getBoundingClientRect();\n const startingCell = calculateCellFromPosition({ x: this.rtl ? itemRect.right : itemRect.x, y: itemRect.y }, this.tileLayoutSettings.tileLayoutElement, this.tileLayoutSettings.gap, this.cellSize, this.tileLayoutSettings.columns, this.rtl);\n const targetEndCell = calculateCellFromPosition({\n x: this.rtl ? itemRect.x + OVERLAP_THRESHOLD * this.cellSize.width : itemRect.right - OVERLAP_THRESHOLD * this.cellSize.width,\n y: itemRect.bottom - OVERLAP_THRESHOLD * this.cellSize.height\n }, this.tileLayoutSettings.tileLayoutElement, this.tileLayoutSettings.gap, this.cellSize, this.tileLayoutSettings.columns, this.rtl);\n return {\n targetColSpan: targetEndCell.col - startingCell.col + 1,\n targetRowSpan: targetEndCell.row - startingCell.row + 1\n };\n }\n getTargetCol(col, direction) {\n if (this.rtl) {\n return direction === 'left' ? col - this.draggedItem.colSpan + 1 : col;\n }\n return direction === 'right' ? col - this.draggedItem.colSpan + 1 : col;\n }\n getTargetRow(row, direction) {\n return direction === 'down' ? row - this.draggedItem.rowSpan + 1 : row;\n }\n calculateHintHeight() {\n const totalHintCellsHeight = this.currentResizingRowSpan * this.cellSize.height;\n const totalHintGapsHeight = (this.currentResizingRowSpan - 1) * this.tileLayoutSettings.gap.rows;\n const hintHeight = totalHintCellsHeight + totalHintGapsHeight - HINT_BORDERS_HEIGHT;\n return hintHeight;\n }\n}\nTileLayoutDraggingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutDraggingService, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });\nTileLayoutDraggingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutDraggingService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutDraggingService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.LocalizationService }]; } });\n\n/**\n * Holds the content of the header section of the TileLayoutItem component.\n * This is the area which can be dragged to reorder the items if reordering is enabled for this item.\n */\nclass TileLayoutItemHeaderComponent {\n constructor(hostEl, renderer) {\n this.hostEl = hostEl;\n this.renderer = renderer;\n this.hostClass = true;\n }\n /**\n * @hidden\n */\n set reorderable(value) {\n const hostElement = this.hostEl.nativeElement;\n if (value) {\n this.renderer.addClass(hostElement, 'k-touch-action-none');\n this.renderer.removeClass(hostElement, 'k-touch-action-auto');\n }\n else {\n this.renderer.addClass(hostElement, 'k-touch-action-auto');\n this.renderer.removeClass(hostElement, 'k-touch-action-none');\n }\n }\n}\nTileLayoutItemHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutItemHeaderComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });\nTileLayoutItemHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TileLayoutItemHeaderComponent, selector: \"kendo-tilelayout-item-header\", inputs: { reorderable: \"reorderable\" }, host: { properties: { \"class.k-tilelayout-item-header\": \"this.hostClass\", \"class.k-card-header\": \"this.hostClass\" } }, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutItemHeaderComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-tilelayout-item-header',\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-tilelayout-item-header']\n }, {\n type: HostBinding,\n args: ['class.k-card-header']\n }], reorderable: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass TileLayoutResizeHandleDirective {\n constructor(el, renderer) {\n this.el = el;\n this.renderer = renderer;\n }\n ngOnInit() {\n this.sizeHandle();\n }\n setHorizontalPosition(element) {\n this.renderer.setStyle(element, this.rtl ? 'left' : 'right', -RESIZE_HANDLE_DIMENSIONS[this.resizeDirection].overlapX + 'px');\n }\n setBottom(element) {\n this.renderer.setStyle(element, 'bottom', -RESIZE_HANDLE_DIMENSIONS[this.resizeDirection].overlapY + 'px');\n }\n sizeHandle() {\n const element = this.el.nativeElement;\n const handleWidth = RESIZE_HANDLE_DIMENSIONS[this.resizeDirection].width ?\n `${RESIZE_HANDLE_DIMENSIONS[this.resizeDirection].width}px` : '100%';\n const handleHeight = RESIZE_HANDLE_DIMENSIONS[this.resizeDirection].height ?\n `${RESIZE_HANDLE_DIMENSIONS[this.resizeDirection].height}px` : '100%';\n this.renderer.setStyle(element, 'width', handleWidth);\n this.renderer.setStyle(element, 'height', handleHeight);\n if (this.resizeDirection === 'ew') {\n this.setHorizontalPosition(element);\n }\n else if (this.resizeDirection === 'ns') {\n this.setBottom(element);\n }\n else {\n this.setHorizontalPosition(element);\n this.setBottom(element);\n }\n }\n}\nTileLayoutResizeHandleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutResizeHandleDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nTileLayoutResizeHandleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TileLayoutResizeHandleDirective, selector: \"[kendoTileLayoutResizeHandle]\", inputs: { resizeDirection: \"resizeDirection\", rtl: \"rtl\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutResizeHandleDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTileLayoutResizeHandle]'\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { resizeDirection: [{\n type: Input\n }], rtl: [{\n type: Input\n }] } });\n\n/**\n * Represents a tile item within the TileLayoutComponent.\n */\nclass TileLayoutItemComponent {\n constructor(elem, renderer, localization, draggingService) {\n this.elem = elem;\n this.renderer = renderer;\n this.localization = localization;\n this.draggingService = draggingService;\n /**\n * Determines how many rows will the tile item span ([see example]({% slug tiles_tilelayout %}#toc-tile-size-and-position)).\n * @default 1\n */\n this.rowSpan = 1;\n /**\n * Determines how many columns will the tile item span ([see example]({% slug tiles_tilelayout %}#toc-tile-size-and-position)).\n * @default 1\n */\n this.colSpan = 1;\n /**\n * Determines whether the item can be reordered. By default all items are reorderable when the [reorderable]({% slug api_layout_tilelayoutcomponent %}#toc-reorderable) property of the TileLayoutComponent is set to `true` ([see example]({% slug reordering_tilelayout %}#toc-disable-reordering)).\n *\n * @default true\n */\n this.reorderable = true;\n /**\n * Determines whether the item can be resized. By default all items are resizable when the [resizable]({% slug api_layout_tilelayoutcomponent %}#resizable) property of the TileLayoutComponent is set to `true` ([see example]({% slug resizing_tilelayout %}#toc-disable-resizing)).\n * @default true\n */\n this.resizable = true;\n this.itemClass = true;\n this.subs = new Subscription();\n this.subs.add(this.localization.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n }));\n this.subs.add(this.draggingService.resizable.subscribe(resizable => {\n this.resizeDirections = resizable && this.resizable ?\n this.rtl ? RTL_RESIZE_DIRECTIONS : RESIZE_DIRECTIONS : undefined;\n }));\n }\n /**\n * Determines the order of the tile items within the TileLayout.\n * If not set, the items will receive increasing sequential order in accordance with\n * their position in the DOM when initially rendered.\n */\n set order(value) {\n this._order = value;\n this.renderer.setStyle(this.elem.nativeElement, 'order', `${this._order}`);\n }\n get order() {\n return this._order;\n }\n get colEnd() {\n return `span ${this.colSpan}`;\n }\n get rowEnd() {\n return `span ${this.rowSpan}`;\n }\n get colStart() {\n return isPresent(this.col) ? this.col.toString() : undefined;\n }\n get rowStart() {\n return isPresent(this.row) ? this.row.toString() : undefined;\n }\n /**\n * @hidden\n */\n get reorderableHeader() {\n return this.reorderable && this.draggingService.reorderable.getValue();\n }\n ngAfterViewInit() {\n this.subs.add(this.draggingService.reorderable.subscribe(reorderable => {\n var _a;\n this.toggleCursorClass(reorderable && this.reorderable);\n if ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.first) {\n this.headers.first.reorderable = reorderable && this.reorderable;\n }\n }));\n }\n ngOnChanges(changes) {\n if (changes.reorderable && !changes.reorderable.firstChange) {\n this.toggleCursorClass(changes.reorderable.currentValue && this.draggingService.reorderable.getValue());\n }\n if (changes.resizable) {\n this.resizeDirections = this.resizable && this.draggingService.resizable.getValue() ?\n this.rtl ? RTL_RESIZE_DIRECTIONS : RESIZE_DIRECTIONS : undefined;\n }\n }\n ngOnDestroy() {\n this.subs.unsubscribe();\n }\n toggleCursorClass(isReorderable) {\n const headerEl = this.elem.nativeElement.querySelector('.k-tilelayout-item-header');\n if (!headerEl) {\n return;\n }\n if (isReorderable) {\n this.renderer.addClass(headerEl, 'k-cursor-grab');\n }\n else {\n this.renderer.removeClass(headerEl, 'k-cursor-grab');\n }\n }\n}\nTileLayoutItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutItemComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: TileLayoutDraggingService }], target: i0.ɵɵFactoryTarget.Component });\nTileLayoutItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TileLayoutItemComponent, selector: \"kendo-tilelayout-item\", inputs: { title: \"title\", rowSpan: \"rowSpan\", colSpan: \"colSpan\", order: \"order\", col: \"col\", row: \"row\", reorderable: \"reorderable\", resizable: \"resizable\" }, host: { properties: { \"class.k-tilelayout-item\": \"this.itemClass\", \"class.k-card\": \"this.itemClass\", \"style.grid-column-end\": \"this.colEnd\", \"style.grid-row-end\": \"this.rowEnd\", \"style.grid-column-start\": \"this.colStart\", \"style.grid-row-start\": \"this.rowStart\" } }, queries: [{ propertyName: \"headers\", predicate: TileLayoutItemHeaderComponent }], usesOnChanges: true, ngImport: i0, template: `\n \n
    {{ title }}
    \n
    \n \n \n \n \n \n `, isInline: true, components: [{ type: TileLayoutItemHeaderComponent, selector: \"kendo-tilelayout-item-header\", inputs: [\"reorderable\"] }], directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: TileLayoutResizeHandleDirective, selector: \"[kendoTileLayoutResizeHandle]\", inputs: [\"resizeDirection\", \"rtl\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-tilelayout-item',\n template: `\n \n
    {{ title }}
    \n
    \n \n \n \n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: TileLayoutDraggingService }]; }, propDecorators: { title: [{\n type: Input\n }], rowSpan: [{\n type: Input\n }], colSpan: [{\n type: Input\n }], order: [{\n type: Input\n }], col: [{\n type: Input\n }], row: [{\n type: Input\n }], reorderable: [{\n type: Input\n }], resizable: [{\n type: Input\n }], itemClass: [{\n type: HostBinding,\n args: ['class.k-tilelayout-item']\n }, {\n type: HostBinding,\n args: ['class.k-card']\n }], colEnd: [{\n type: HostBinding,\n args: ['style.grid-column-end']\n }], rowEnd: [{\n type: HostBinding,\n args: ['style.grid-row-end']\n }], colStart: [{\n type: HostBinding,\n args: ['style.grid-column-start']\n }], rowStart: [{\n type: HostBinding,\n args: ['style.grid-row-start']\n }], headers: [{\n type: ContentChildren,\n args: [TileLayoutItemHeaderComponent]\n }] } });\n\nconst autoFlowClasses = {\n column: 'k-grid-flow-col',\n row: 'k-grid-flow-row',\n 'column-dense': 'k-grid-flow-col-dense',\n 'row-dense': 'k-grid-flow-row-dense'\n};\n/**\n * Represents the [Kendo UI TileLayout component for Angular]({% slug overview_tilelayout %})\n */\nclass TileLayoutComponent {\n constructor(elem, renderer, localization, draggingService, zone) {\n this.elem = elem;\n this.renderer = renderer;\n this.localization = localization;\n this.draggingService = draggingService;\n this.zone = zone;\n /**\n * Defines the number of columns ([see example]({% slug tiles_tilelayout %}#toc-tile-size-and-position)).\n * @default 1\n */\n this.columns = 1;\n /**\n * Determines the width of the columns. Numeric values are treated as pixels ([see example]({% slug tiles_tilelayout %}#toc-tile-size-and-position)).\n * @default '1fr'\n */\n this.columnWidth = '1fr';\n /**\n * Determines whether the reordering functionality will be enabled ([see example]({% slug reordering_tilelayout %})).\n * @default false\n */\n this.reorderable = false;\n /**\n * Determines whether the resizing functionality will be enabled ([see example]({% slug resizing_tilelayout %})).\n * @default false\n */\n this.resizable = false;\n /**\n * Determines the height of the rows. Numeric values are treated as pixels ([see example]({% slug tiles_tilelayout %}#toc-tile-size-and-position)).\n * @default '1fr'\n */\n this.rowHeight = '1fr';\n /**\n * Controls how the auto-placement algorithm works, specifying exactly how auto-placed items are flowed in the TileLayout ([see example]({% slug tiles_autoflow_tilelayout %})).\n * For further reference, check the [grid-auto-flow CSS article](https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow).\n *\n * The possible values are:\n * * (Default) `column`\n * * `row`\n * * `row dense`\n * * `column dense`\n * * `none`\n *\n */\n this.autoFlow = 'column';\n /**\n * Fires when the user completes the reordering of the item ([see example]({% slug reordering_tilelayout %})).\n * This event is preventable. If you cancel it, the item will not be reordered.\n */\n this.reorder = new EventEmitter();\n /**\n * Fires when the user completes the resizing of the item ([see example]({% slug resizing_tilelayout %})).\n * This event is preventable. If you cancel it, the item will not be resized.\n */\n this.resize = new EventEmitter();\n this.hostClass = true;\n this.subs = new Subscription();\n this._gap = {\n rows: 16,\n columns: 16\n };\n validatePackage(packageMetadata);\n }\n /**\n * The numeric values which determine the spacing in pixels between the layout items horizontally and vertically.\n * Properties:\n * * rows - the vertical spacing. Numeric values are treated as pixels. Defaults to `16`.\n * * columns - the horizontal spacing. Numeric values are treated as pixels. Defaults to `16`.\n *\n * When bound to a single numeric value, it will be set to both `rows` and `columns` properties.\n */\n set gap(value) {\n this._gap = (typeof value === 'number') ? { rows: value, columns: value } : Object.assign(this._gap, value);\n }\n get gap() {\n return this._gap;\n }\n get gapStyle() {\n return `${this.gap.rows}px ${this.gap.columns}px`;\n }\n get currentColStart() {\n return this.draggingService.colStart;\n }\n get currentRowStart() {\n return this.draggingService.rowStart;\n }\n get draggedItemWrapper() {\n return this.draggingService.itemWrapper;\n }\n get targetOrder() {\n return this.draggingService.order;\n }\n ngOnInit() {\n this.applyColStyling();\n this.applyRowStyling();\n this.draggingService.reorderable.next(this.reorderable);\n this.draggingService.resizable.next(this.resizable);\n if (hasObservers(this.reorder)) {\n this.subs.add(this.draggingService.reorder.subscribe(e => this.reorder.emit(e)));\n }\n if (hasObservers(this.resize)) {\n this.subs.add(this.draggingService.resize.subscribe(e => this.resize.emit(e)));\n }\n this.subs.add(this.draggingService.reorderable.subscribe(reorderable => {\n if (reorderable && !this.draggable) {\n this.initializeDraggable();\n }\n }));\n this.subs.add(this.draggingService.resizable.subscribe(resizable => {\n if (resizable && !this.draggable) {\n this.initializeDraggable();\n }\n }));\n this.subs.add(this.localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n }));\n }\n ngAfterViewInit() {\n this.draggingService.tileLayoutSettings = this.draggingServiceConfig();\n this.applyAutoFlow(null, autoFlowClasses[this.autoFlow]);\n this.items.changes.subscribe(() => {\n this.setItemsOrder();\n this.draggingService.tileLayoutSettings.items = this.items.toArray();\n });\n }\n ngAfterContentInit() {\n this.setItemsOrder();\n }\n ngOnChanges(changes) {\n if (changes.columns || changes.columnWidth) {\n this.applyColStyling();\n }\n if (changes.rowHeight) {\n this.applyRowStyling();\n }\n if (changes.reorderable) {\n this.draggingService.reorderable.next(changes.reorderable.currentValue);\n }\n if (changes.resizable) {\n this.draggingService.resizable.next(changes.resizable.currentValue);\n }\n if (changes.gap || changes.autoFlow || changes.columns) {\n this.draggingService.tileLayoutSettings = this.draggingServiceConfig();\n if (changes.autoFlow) {\n this.applyAutoFlow(autoFlowClasses[changes.autoFlow.previousValue] || '', autoFlowClasses[changes.autoFlow.currentValue]);\n }\n }\n }\n ngOnDestroy() {\n if (this.draggable) {\n this.draggable.destroy();\n }\n this.subs.unsubscribe();\n }\n handlePress({ originalEvent }) {\n this.draggingService.handlePress(originalEvent);\n }\n handleDrag({ originalEvent }) {\n this.draggingService.handleDrag(originalEvent);\n }\n handleRelease({ originalEvent }) {\n this.draggingService.handleRelease(originalEvent);\n }\n applyColStyling() {\n const colWidth = typeof this.columnWidth === 'number' ? `${this.columnWidth}px` : this.columnWidth;\n const gridTemplateColumnsStyle = `repeat(${this.columns}, ${colWidth})`;\n this.renderer.setStyle(this.elem.nativeElement, 'grid-template-columns', gridTemplateColumnsStyle);\n }\n applyRowStyling() {\n const rowHeight = typeof this.rowHeight === 'number' ? `${this.rowHeight}px` : this.rowHeight;\n const gridAutoRowsStyle = `${rowHeight}`;\n this.renderer.setStyle(this.elem.nativeElement, 'grid-auto-rows', gridAutoRowsStyle);\n }\n draggingServiceConfig() {\n return {\n tileLayoutElement: this.elem ? this.elem.nativeElement : undefined,\n hintElement: this.hint ? this.hint.nativeElement : undefined,\n gap: this.gap,\n columns: this.columns,\n autoFlow: this.autoFlow,\n items: this.items ? this.items.toArray() : []\n };\n }\n initializeDraggable() {\n this.draggable = new Draggable({\n press: this.handlePress.bind(this),\n drag: this.handleDrag.bind(this),\n release: this.handleRelease.bind(this)\n });\n this.zone.runOutsideAngular(() => this.draggable.bindTo(this.elem.nativeElement));\n }\n applyAutoFlow(classToRemove, classToAdd) {\n const element = this.elem.nativeElement;\n if (classToRemove) {\n this.renderer.removeClass(element, classToRemove);\n }\n if (this.autoFlow !== 'none' && isPresent(classToAdd)) {\n this.renderer.addClass(element, classToAdd);\n }\n }\n setItemsOrder() {\n this.items.forEach((item, index) => {\n if (!isPresent(item.order)) {\n item.order = index;\n }\n });\n }\n}\nTileLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: TileLayoutDraggingService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nTileLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TileLayoutComponent, selector: \"kendo-tilelayout\", inputs: { columns: \"columns\", columnWidth: \"columnWidth\", gap: \"gap\", reorderable: \"reorderable\", resizable: \"resizable\", rowHeight: \"rowHeight\", autoFlow: \"autoFlow\" }, outputs: { reorder: \"reorder\", resize: \"resize\" }, host: { properties: { \"class.k-widget\": \"this.hostClass\", \"class.k-tilelayout\": \"this.hostClass\", \"style.gap\": \"this.gapStyle\", \"style.padding\": \"this.gapStyle\", \"attr.dir\": \"this.direction\" } }, providers: [\n LocalizationService,\n TileLayoutDraggingService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tilelayout.component'\n }\n ], queries: [{ propertyName: \"items\", predicate: TileLayoutItemComponent }], viewQueries: [{ propertyName: \"hint\", first: true, predicate: [\"hint\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `\n \n
    \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-tilelayout',\n providers: [\n LocalizationService,\n TileLayoutDraggingService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tilelayout.component'\n }\n ],\n template: `\n \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: TileLayoutDraggingService }, { type: i0.NgZone }]; }, propDecorators: { columns: [{\n type: Input\n }], columnWidth: [{\n type: Input\n }], gap: [{\n type: Input\n }], reorderable: [{\n type: Input\n }], resizable: [{\n type: Input\n }], rowHeight: [{\n type: Input\n }], autoFlow: [{\n type: Input\n }], reorder: [{\n type: Output\n }], resize: [{\n type: Output\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-tilelayout']\n }], gapStyle: [{\n type: HostBinding,\n args: ['style.gap']\n }, {\n type: HostBinding,\n args: ['style.padding']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], items: [{\n type: ContentChildren,\n args: [TileLayoutItemComponent]\n }], hint: [{\n type: ViewChild,\n args: ['hint', { static: false }]\n }] } });\n\n/**\n * Holds the main content of the TileLayoutItem component.\n */\nclass TileLayoutItemBodyComponent {\n constructor() {\n this.hostClass = true;\n this.minHeight = 0;\n }\n}\nTileLayoutItemBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutItemBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nTileLayoutItemBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TileLayoutItemBodyComponent, selector: \"kendo-tilelayout-item-body\", host: { properties: { \"class.k-tilelayout-item-body\": \"this.hostClass\", \"class.k-card-body\": \"this.hostClass\", \"style.min-height\": \"this.minHeight\" } }, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutItemBodyComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-tilelayout-item-body',\n template: `\n \n `\n }]\n }], propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-tilelayout-item-body']\n }, {\n type: HostBinding,\n args: ['class.k-card-body']\n }], minHeight: [{\n type: HostBinding,\n args: ['style.min-height']\n }] } });\n\nconst exportedModules$a = [\n AvatarComponent\n];\nconst declarations$a = [\n ...exportedModules$a\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Avatar component.\n */\nclass AvatarModule {\n}\nAvatarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AvatarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nAvatarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AvatarModule, declarations: [AvatarComponent], imports: [CommonModule], exports: [AvatarComponent] });\nAvatarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AvatarModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AvatarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$a],\n exports: [exportedModules$a],\n imports: [CommonModule]\n }]\n }] });\n\nconst cardDirectives = [\n CardTitleDirective,\n CardSubtitleDirective,\n CardSeparatorDirective,\n CardMediaDirective\n];\nconst exportedModules$9 = [\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n CardActionsComponent,\n ...cardDirectives\n];\nconst declarations$9 = [...exportedModules$9];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Card component.\n */\nclass CardModule {\n}\nCardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardModule, declarations: [CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n CardActionsComponent, CardTitleDirective,\n CardSubtitleDirective,\n CardSeparatorDirective,\n CardMediaDirective], imports: [CommonModule], exports: [CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n CardActionsComponent, CardTitleDirective,\n CardSubtitleDirective,\n CardSeparatorDirective,\n CardMediaDirective] });\nCardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CardModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$9],\n exports: [exportedModules$9],\n imports: [CommonModule]\n }]\n }] });\n\nconst templateDirectives$1 = [\n DrawerTemplateDirective,\n DrawerHeaderTemplateDirective,\n DrawerFooterTemplateDirective,\n DrawerItemTemplateDirective\n];\nconst exportedModules$8 = [\n DrawerComponent,\n DrawerContainerComponent,\n DrawerContentComponent,\n ...templateDirectives$1\n];\nconst declarations$8 = [\n DrawerItemComponent,\n DrawerListComponent,\n ...exportedModules$8\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Drawer component.\n */\nclass DrawerModule {\n}\nDrawerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nDrawerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerModule, declarations: [DrawerItemComponent,\n DrawerListComponent, DrawerComponent,\n DrawerContainerComponent,\n DrawerContentComponent, DrawerTemplateDirective,\n DrawerHeaderTemplateDirective,\n DrawerFooterTemplateDirective,\n DrawerItemTemplateDirective], imports: [CommonModule], exports: [DrawerComponent,\n DrawerContainerComponent,\n DrawerContentComponent, DrawerTemplateDirective,\n DrawerHeaderTemplateDirective,\n DrawerFooterTemplateDirective,\n DrawerItemTemplateDirective] });\nDrawerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DrawerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$8],\n exports: [exportedModules$8],\n imports: [CommonModule]\n }]\n }] });\n\nconst exportedModules$7 = [\n ExpansionPanelComponent,\n ExpansionPanelTitleDirective\n];\nconst declarations$7 = [\n ...exportedModules$7\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the ExpansionPanel component.\n */\nclass ExpansionPanelModule {\n}\nExpansionPanelModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nExpansionPanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelModule, declarations: [ExpansionPanelComponent,\n ExpansionPanelTitleDirective], imports: [CommonModule, EventsModule], exports: [ExpansionPanelComponent,\n ExpansionPanelTitleDirective] });\nExpansionPanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelModule, imports: [[CommonModule, EventsModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpansionPanelModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$7],\n exports: [exportedModules$7],\n imports: [CommonModule, EventsModule]\n }]\n }] });\n\nconst exportedModules$6 = [\n PanelBarComponent,\n PanelBarItemComponent,\n PanelBarContentDirective,\n PanelBarItemTemplateDirective,\n PanelBarItemTitleDirective\n];\nconst declarations$6 = [\n ...exportedModules$6\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the PanelBar component.\n *\n * The module registers:\n * - `PanelBarComponent`—The `PanelBar` component class.\n * - `PanelBarItemComponent`—The `PanelBarItem` component class.\n * - `PanelBarContentComponent`—The `PanelBarContent` component class.\n * - `PanelBarItemTemplateDirective—The `PanelBarItemTemplate` directive.\n * - `PanelBarItemTitleDirective—The `PanelBarItemTitle` directive.\n */\nclass PanelBarModule {\n}\nPanelBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nPanelBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarModule, declarations: [PanelBarComponent,\n PanelBarItemComponent,\n PanelBarContentDirective,\n PanelBarItemTemplateDirective,\n PanelBarItemTitleDirective], imports: [CommonModule], exports: [PanelBarComponent,\n PanelBarItemComponent,\n PanelBarContentDirective,\n PanelBarItemTemplateDirective,\n PanelBarItemTitleDirective] });\nPanelBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PanelBarModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$6],\n exports: [exportedModules$6],\n imports: [CommonModule]\n }]\n }] });\n\nconst exportedModules$5 = [\n SplitterComponent,\n SplitterPaneComponent\n];\nconst declarations$5 = [\n SplitterBarComponent,\n ...exportedModules$5\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Splitter component.\n *\n * The module registers:\n * - `SplitterComponent`—The `Splitter` component class.\n * - `SplitterPaneComponent`—The `SplitterPane` component class.\n */\nclass SplitterModule {\n}\nSplitterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSplitterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterModule, declarations: [SplitterBarComponent, SplitterComponent,\n SplitterPaneComponent], imports: [CommonModule,\n DraggableModule], exports: [SplitterComponent,\n SplitterPaneComponent] });\nSplitterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterModule, imports: [[\n CommonModule,\n DraggableModule\n ]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SplitterModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$5],\n exports: [exportedModules$5],\n imports: [\n CommonModule,\n DraggableModule\n ]\n }]\n }] });\n\nconst templateDirectives = [\n StepperStepTemplateDirective,\n StepperLabelTemplateDirective,\n StepperIndicatorTemplateDirective\n];\nconst exportedModules$4 = [\n StepperComponent,\n StepperCustomMessagesComponent,\n ...templateDirectives\n];\nconst declarations$4 = [\n StepperStepComponent,\n StepperListComponent,\n LocalizedStepperMessagesDirective,\n ...exportedModules$4\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Stepper component.\n */\nclass StepperModule {\n}\nStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperModule, declarations: [StepperStepComponent,\n StepperListComponent,\n LocalizedStepperMessagesDirective, StepperComponent,\n StepperCustomMessagesComponent, StepperStepTemplateDirective,\n StepperLabelTemplateDirective,\n StepperIndicatorTemplateDirective], imports: [CommonModule, ProgressBarModule], exports: [StepperComponent,\n StepperCustomMessagesComponent, StepperStepTemplateDirective,\n StepperLabelTemplateDirective,\n StepperIndicatorTemplateDirective] });\nStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperModule, imports: [[CommonModule, ProgressBarModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StepperModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$4],\n exports: [exportedModules$4],\n imports: [CommonModule, ProgressBarModule]\n }]\n }] });\n\nconst exportedModules$3 = [\n TabStripComponent,\n TabStripTabComponent,\n TabContentDirective,\n TabTitleDirective,\n TabComponent,\n TabStripCustomMessagesComponent,\n LocalizedTabStripMessagesDirective\n];\nconst declarations$3 = [\n ...exportedModules$3,\n TabStripScrollableButtonComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TabStrip component.\n *\n * The module registers:\n * - `TabStripComponent`—The `TabStrip` component class.\n * - `TabStripTabComponent`—The `TabStripTab` component class.\n * - `TabContentDirective`—The tab content directive used on the `` tag.\n * - `TabTitleDirective`—The tab title directive used on the `` tag.\n */\nclass TabStripModule {\n}\nTabStripModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTabStripModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripModule, declarations: [TabStripComponent,\n TabStripTabComponent,\n TabContentDirective,\n TabTitleDirective,\n TabComponent,\n TabStripCustomMessagesComponent,\n LocalizedTabStripMessagesDirective, TabStripScrollableButtonComponent], imports: [CommonModule, ResizeSensorModule], exports: [TabStripComponent,\n TabStripTabComponent,\n TabContentDirective,\n TabTitleDirective,\n TabComponent,\n TabStripCustomMessagesComponent,\n LocalizedTabStripMessagesDirective] });\nTabStripModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripModule, imports: [[CommonModule, ResizeSensorModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TabStripModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$3],\n exports: [exportedModules$3],\n imports: [CommonModule, ResizeSensorModule]\n }]\n }] });\n\nconst exportedModules$2 = [\n TileLayoutComponent,\n TileLayoutItemComponent,\n TileLayoutItemHeaderComponent,\n TileLayoutItemBodyComponent,\n TileLayoutResizeHandleDirective\n];\nconst declarations$2 = [\n ...exportedModules$2\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TileLayout component.\n *\n * The module registers:\n * - `TileLayoutComponent`—The `TileLayoutComponent` component class.\n * - `TileLayoutItemComponent`—The `TileLayoutItemComponent` component class.\n * - `TileLayoutItemHeaderComponent`—The `TileLayoutItemHeaderComponent` component class.\n * - `TileLayoutItemBodyComponent`—The `TileLayoutItemBodyComponent` component class.\n */\nclass TileLayoutModule {\n}\nTileLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTileLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutModule, declarations: [TileLayoutComponent,\n TileLayoutItemComponent,\n TileLayoutItemHeaderComponent,\n TileLayoutItemBodyComponent,\n TileLayoutResizeHandleDirective], imports: [CommonModule], exports: [TileLayoutComponent,\n TileLayoutItemComponent,\n TileLayoutItemHeaderComponent,\n TileLayoutItemBodyComponent,\n TileLayoutResizeHandleDirective] });\nTileLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TileLayoutModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$2],\n exports: [exportedModules$2],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * @hidden\n */\nconst VERTICAL_SUFFIX = {\n top: 'start',\n middle: 'center',\n bottom: 'end',\n stretch: 'stretch'\n};\n/**\n * @hidden\n */\nconst JUSTIFY_PREFIX = `k-justify-content`;\n/**\n * @hidden\n */\nconst GRID_JUSTIFY_PREFIX = `k-justify-items`;\n/**\n * @hidden\n */\nconst ALIGN_PREFIX = `k-align-items`;\n/**\n * @hidden\n */\nconst normalizeGap = (gap) => {\n if (typeof gap === 'number' || typeof gap === 'string') {\n return { cols: gap, rows: gap };\n }\n else {\n let parsedGap = {};\n parsedGap.rows = gap.rows ? gap.rows : 0;\n parsedGap.cols = gap.cols ? gap.cols : 0;\n return parsedGap;\n }\n};\n/**\n * @hidden\n */\nconst generateGapStyle = (gap) => {\n if (gap.rows === gap.cols) {\n return typeof gap.rows === 'number' ? `${gap.rows}px` : gap.rows;\n }\n else {\n let rowStyle = `${typeof gap.rows === 'number' ? gap.rows + 'px' : gap.rows}`;\n let colStyle = `${typeof gap.cols === 'number' ? gap.cols + 'px' : gap.cols}`;\n return `${rowStyle} ${colStyle}`;\n }\n};\n/**\n * @hidden\n */\nconst generateGridStyle = (items, itemType) => {\n let styling = [];\n items.forEach((item) => {\n if (typeof item === 'number') {\n styling.push(`${item}px`);\n }\n else if (typeof item === 'string') {\n styling.push(item);\n }\n else {\n if (itemType === 'rows') {\n const rowHeight = item.height;\n if (rowHeight) {\n styling.push(typeof rowHeight === 'number' ? `${rowHeight}px` : rowHeight);\n }\n else {\n styling.push('0px');\n }\n }\n else {\n const colWidth = item.width;\n if (colWidth) {\n styling.push(typeof colWidth === 'number' ? `${colWidth}px` : colWidth);\n }\n else {\n styling.push('0px');\n }\n }\n }\n });\n return styling;\n};\n/**\n * @hidden\n */\nconst validateGridLayoutRowsCols = (arr) => {\n for (const el of arr) {\n const isNum = typeof el === 'number';\n const isStr = typeof el === 'string';\n const isObject = typeof el === 'object' && el !== null;\n if (!isNum && !isStr && !isObject) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Represents the [Kendo UI StackLayout component for Angular]({% slug overview_stacklayout %}).\n */\nclass StackLayoutComponent {\n constructor(renderer, element, localization) {\n this.renderer = renderer;\n this.element = element;\n this.localization = localization;\n this.hostClass = true;\n /**\n * Specifies the gap between the inner StackLayout elements. The default value is `0`\n * ([see example]({% slug layout_stacklayout %}#toc-gaps)).\n */\n this.gap = 0;\n /**\n * Specifies the orientation of the StackLayout\n * ([see example]({% slug layout_stacklayout %}#toc-orientation)).\n *\n * The possible values are:\n * (Default) `horizontal`\n * `vertical`\n */\n this.orientation = 'horizontal';\n this._align = {\n horizontal: 'stretch',\n vertical: 'stretch'\n };\n validatePackage(packageMetadata);\n }\n get horizontalClass() {\n return this.orientation === 'horizontal';\n }\n get verticalClass() {\n return this.orientation === 'vertical';\n }\n get dir() {\n return this.direction;\n }\n /**\n * Specifies the horizontal and vertical alignment of the inner StackLayout elements\n * ([see example]({% slug layout_stacklayout %}#toc-alignment)).\n */\n set align(align) {\n this._align = Object.assign({}, this._align, align);\n this.handleAlignClasses();\n }\n get align() {\n return this._align;\n }\n ngAfterViewInit() {\n this.handleAlignClasses();\n this.setGap();\n }\n ngOnChanges(changes) {\n if (isChanged('gap', changes)) {\n this.setGap();\n }\n if (isChanged('orientation', changes)) {\n this.handleAlignClasses();\n }\n }\n handleAlignClasses() {\n const elem = this.element.nativeElement;\n if (isPresent(this.justifyClass)) {\n this.renderer.removeClass(elem, this.justifyClass);\n }\n if (isPresent(this.alignClass)) {\n this.renderer.removeClass(elem, this.alignClass);\n }\n if (this.orientation === 'horizontal') {\n this.justifyClass = `${JUSTIFY_PREFIX}-${this.align.horizontal}`;\n this.alignClass = `${ALIGN_PREFIX}-${VERTICAL_SUFFIX[this.align.vertical]}`;\n }\n else {\n this.justifyClass = `${JUSTIFY_PREFIX}-${VERTICAL_SUFFIX[this.align.vertical]}`;\n this.alignClass = `${ALIGN_PREFIX}-${this.align.horizontal}`;\n }\n this.renderer.addClass(elem, this.justifyClass);\n this.renderer.addClass(elem, this.alignClass);\n }\n setGap() {\n const parsedGap = isNumber(this.gap) ? `${this.gap}px` : this.gap;\n this.renderer.setStyle(this.element.nativeElement, 'gap', parsedGap);\n }\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n}\nStackLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StackLayoutComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nStackLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: StackLayoutComponent, selector: \"kendo-stacklayout\", inputs: { align: \"align\", gap: \"gap\", orientation: \"orientation\" }, host: { properties: { \"class.k-stack-layout\": \"this.hostClass\", \"class.k-hstack\": \"this.horizontalClass\", \"class.k-vstack\": \"this.verticalClass\", \"attr.dir\": \"this.dir\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.stacklayout'\n }\n ], exportAs: [\"kendoStackLayout\"], usesOnChanges: true, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StackLayoutComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoStackLayout',\n selector: 'kendo-stacklayout',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.stacklayout'\n }\n ],\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.LocalizationService }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-stack-layout']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-hstack']\n }], verticalClass: [{\n type: HostBinding,\n args: ['class.k-vstack']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], align: [{\n type: Input\n }], gap: [{\n type: Input\n }], orientation: [{\n type: Input\n }] } });\n\nconst exportedModules$1 = [\n StackLayoutComponent\n];\nconst declarations$1 = [\n ...exportedModules$1\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the StackLayout component.\n */\nclass StackLayoutModule {\n}\nStackLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StackLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nStackLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StackLayoutModule, declarations: [StackLayoutComponent], imports: [CommonModule], exports: [StackLayoutComponent] });\nStackLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StackLayoutModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: StackLayoutModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations$1],\n exports: [exportedModules$1],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * Represents the [Kendo UI GridLayout component for Angular]({% slug overview_gridlayout %}).\n */\nclass GridLayoutComponent {\n constructor(renderer, element, localization) {\n this.renderer = renderer;\n this.element = element;\n this.localization = localization;\n this.hostClass = true;\n /**\n * Specifies the gaps between the elements. The default value is `0`\n * ([see example]({% slug layout_gridlayout %}#toc-gaps)).\n */\n this.gap = 0;\n this._align = {\n horizontal: 'stretch',\n vertical: 'stretch'\n };\n validatePackage(packageMetadata);\n }\n get dir() {\n return this.direction;\n }\n /**\n * Specifies the horizontal and vertical alignment of the inner GridLayout elements\n * ([see example]({% slug layout_gridlayout %}#toc-alignment)).\n */\n set align(align) {\n this._align = Object.assign({}, this._align, align);\n this.handleAlignClasses();\n }\n get align() {\n return this._align;\n }\n ngAfterViewInit() {\n this.handleAlignClasses();\n this.handleGridTemplateStyling('rows');\n this.handleGridTemplateStyling('cols');\n this.setGap();\n }\n ngOnChanges(changes) {\n if (isChanged('gap', changes)) {\n this.setGap();\n }\n if (isChanged('rows', changes)) {\n this.handleGridTemplateStyling('rows');\n }\n if (isChanged('cols', changes)) {\n this.handleGridTemplateStyling('cols');\n }\n }\n handleAlignClasses() {\n const elem = this.element.nativeElement;\n if (isPresent(this.justifyClass)) {\n this.renderer.removeClass(elem, this.justifyClass);\n }\n if (isPresent(this.alignClass)) {\n this.renderer.removeClass(elem, this.alignClass);\n }\n this.justifyClass = `${GRID_JUSTIFY_PREFIX}-${this.align.horizontal}`;\n this.alignClass = `${ALIGN_PREFIX}-${VERTICAL_SUFFIX[this.align.vertical]}`;\n this.renderer.addClass(elem, this.justifyClass);\n this.renderer.addClass(elem, this.alignClass);\n }\n setGap() {\n let parsedGap = normalizeGap(this.gap);\n let gapStyle = generateGapStyle(parsedGap);\n this.renderer.setStyle(this.element.nativeElement, 'gap', gapStyle);\n }\n handleGridTemplateStyling(type) {\n if (!isPresent(this[type])) {\n return;\n }\n const isValid = validateGridLayoutRowsCols(this[type]);\n if (!isValid && isDevMode()) {\n const valueType = type === 'rows' ? 'GridLayoutRowSize' : 'GridLayoutColSize';\n throw new Error(`The provided ${type} value contains invalid elements. The array supports values of type number, string or ${valueType}.`);\n }\n const gridTemplateStyle = type === 'rows' ? 'grid-template-rows' : 'grid-template-columns';\n const gridStyle = generateGridStyle(this[type], type);\n this.renderer.setStyle(this.element.nativeElement, gridTemplateStyle, gridStyle.join(' '));\n }\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n}\nGridLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nGridLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: GridLayoutComponent, selector: \"kendo-gridlayout\", inputs: { rows: \"rows\", cols: \"cols\", gap: \"gap\", align: \"align\" }, host: { properties: { \"class.k-grid-layout\": \"this.hostClass\", \"attr.dir\": \"this.dir\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.gridlayout'\n }\n ], exportAs: [\"kendoGridLayout\"], usesOnChanges: true, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoGridLayout',\n selector: 'kendo-gridlayout',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.gridlayout'\n }\n ],\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.LocalizationService }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-grid-layout']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], rows: [{\n type: Input\n }], cols: [{\n type: Input\n }], gap: [{\n type: Input\n }], align: [{\n type: Input\n }] } });\n\nclass GridLayoutItemComponent {\n constructor(renderer, element) {\n this.renderer = renderer;\n this.element = element;\n }\n ngOnInit() {\n this.setItemStyle();\n }\n ngOnChanges() {\n this.setItemStyle();\n }\n setItemStyle() {\n const row = this.row || 'auto';\n const col = this.col || 'auto';\n const rowSpan = this.rowSpan ? `span ${this.rowSpan}` : 'auto';\n const colSpan = this.colSpan ? `span ${this.colSpan}` : 'auto';\n const gridAreaStyle = `${row} / ${col} / ${rowSpan} / ${colSpan}`;\n this.renderer.setStyle(this.element.nativeElement, 'grid-area', gridAreaStyle);\n }\n}\nGridLayoutItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutItemComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nGridLayoutItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: GridLayoutItemComponent, selector: \"kendo-gridlayout-item\", inputs: { row: \"row\", col: \"col\", rowSpan: \"rowSpan\", colSpan: \"colSpan\" }, usesOnChanges: true, ngImport: i0, template: `\n \n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-gridlayout-item',\n template: `\n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { row: [{\n type: Input\n }], col: [{\n type: Input\n }], rowSpan: [{\n type: Input\n }], colSpan: [{\n type: Input\n }] } });\n\nconst exportedModules = [\n GridLayoutComponent,\n GridLayoutItemComponent\n];\nconst declarations = [\n ...exportedModules\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the GridLayout component.\n */\nclass GridLayoutModule {\n}\nGridLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nGridLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutModule, declarations: [GridLayoutComponent,\n GridLayoutItemComponent], imports: [CommonModule], exports: [GridLayoutComponent,\n GridLayoutItemComponent] });\nGridLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: GridLayoutModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules],\n imports: [CommonModule]\n }]\n }] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Layout components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Layout module\n * import { LayoutModule } from '@progress/kendo-angular-layout';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, LayoutModule], // import Layout module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass LayoutModule {\n}\nLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LayoutModule, exports: [AvatarModule,\n CardModule,\n DrawerModule,\n PanelBarModule,\n ExpansionPanelModule,\n SplitterModule,\n StepperModule,\n TabStripModule,\n TileLayoutModule,\n StackLayoutModule,\n GridLayoutModule] });\nLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LayoutModule, imports: [AvatarModule,\n CardModule,\n DrawerModule,\n PanelBarModule,\n ExpansionPanelModule,\n SplitterModule,\n StepperModule,\n TabStripModule,\n TileLayoutModule,\n StackLayoutModule,\n GridLayoutModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LayoutModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [\n AvatarModule,\n CardModule,\n DrawerModule,\n PanelBarModule,\n ExpansionPanelModule,\n SplitterModule,\n StepperModule,\n TabStripModule,\n TileLayoutModule,\n StackLayoutModule,\n GridLayoutModule\n ]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AvatarComponent, AvatarModule, CardAction, CardActionsComponent, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CardMediaDirective, CardModule, CardSeparatorDirective, CardSubtitleDirective, CardTitleDirective, DrawerComponent, DrawerContainerComponent, DrawerContentComponent, DrawerFooterTemplateDirective, DrawerHeaderTemplateDirective, DrawerItemTemplateDirective, DrawerModule, DrawerSelectEvent, DrawerTemplateDirective, ExpansionPanelActionEvent, ExpansionPanelComponent, ExpansionPanelModule, ExpansionPanelTitleDirective, GridLayoutComponent, GridLayoutItemComponent, GridLayoutModule, LayoutModule, LocalizedStepperMessagesDirective, LocalizedTabStripMessagesDirective, PanelBarCollapseEvent, PanelBarComponent, PanelBarContentDirective, PanelBarExpandEvent, PanelBarExpandMode, PanelBarItemComponent, PanelBarItemTemplateDirective, PanelBarItemTitleDirective, PanelBarModule, PanelBarSelectEvent, PanelBarStateChangeEvent, SelectEvent, SplitterComponent, SplitterModule, SplitterPaneComponent, StackLayoutComponent, StackLayoutModule, StepperActivateEvent, StepperComponent, StepperCustomMessagesComponent, StepperIndicatorTemplateDirective, StepperLabelTemplateDirective, StepperModule, StepperStepTemplateDirective, TabCloseEvent, TabComponent, TabContentDirective, TabStripComponent, TabStripCustomMessagesComponent, TabStripModule, TabStripTabComponent, TabTitleDirective, TileLayoutComponent, TileLayoutItemBodyComponent, TileLayoutItemComponent, TileLayoutItemHeaderComponent, TileLayoutModule, TileLayoutReorderEvent, TileLayoutResizeEvent, TileLayoutResizeHandleDirective };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, Inject, Optional, EventEmitter, isDevMode, Component, Input, Output, ViewChild, TemplateRef, NgModule } from '@angular/core';\nimport { siblingContainer, parents, addScroll, align, boundingOffset, offset, positionWithScroll, removeScroll, restrictToView, scrollPosition, getWindowViewPort } from '@progress/kendo-popup-common';\nimport * as i7 from '@progress/kendo-angular-common';\nimport { isDocumentAvailable, hasObservers, ResizeSensorComponent, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { fromEvent, merge, from } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport * as i1 from '@angular/animations';\nimport { style, animate } from '@angular/animations';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport * as i8 from '@angular/common';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @hidden\n */\nconst eitherRect = (rect, offset) => {\n if (!rect) {\n return { height: 0, left: offset.left, top: offset.top, width: 0 };\n }\n return rect;\n};\n/**\n * @hidden\n */\nconst replaceOffset = (rect, offset) => {\n if (!offset) {\n return rect;\n }\n const result = {\n height: rect.height,\n left: offset.left,\n top: offset.top,\n width: rect.width\n };\n return result;\n};\n/**\n * @hidden\n */\nconst removeStackingOffset = (rect, stackingOffset) => {\n if (!stackingOffset) {\n return rect;\n }\n const result = {\n height: rect.height,\n left: rect.left - stackingOffset.left,\n top: rect.top - stackingOffset.top,\n width: rect.width\n };\n return result;\n};\n/**\n * @hidden\n */\nconst isDifferentOffset = (oldOffset, newOffset) => {\n const { left: oldLeft, top: oldTop } = oldOffset;\n const { left: newLeft, top: newTop } = newOffset;\n return Math.abs(oldLeft - newLeft) >= 1 || Math.abs(oldTop - newTop) >= 1;\n};\n/**\n * @hidden\n */\nconst isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n/**\n * @hidden\n */\nconst hasBoundingRect = (elem) => !!elem.getBoundingClientRect;\n/**\n * @hidden\n */\nconst OVERFLOW_REGEXP = /auto|scroll/;\nconst overflowElementStyle = (element) => {\n return `${element.style.overflow}${element.style.overflowX}${element.style.overflowY}`;\n};\nconst overflowComputedStyle = (element) => {\n const styles = window.getComputedStyle(element);\n return `${styles.overflow}${styles.overflowX}${styles.overflowY}`;\n};\nconst overflowStyle = (element) => {\n return overflowElementStyle(element) || overflowComputedStyle(element);\n};\n/**\n * @hidden\n */\nconst scrollableParents = (element) => {\n const parentElements = [];\n if (!isDocumentAvailable() || !isWindowAvailable()) {\n return parentElements;\n }\n let parent = element.parentElement;\n while (parent) {\n if (OVERFLOW_REGEXP.test(overflowStyle(parent)) || parent.hasAttribute('data-scrollable')) {\n parentElements.push(parent);\n }\n parent = parent.parentElement;\n }\n parentElements.push(window);\n return parentElements;\n};\n/**\n * @hidden\n */\nconst FRAME_DURATION = 1000 / 60; //1000ms divided by 60fps\nfunction memoize(fun) {\n let result;\n let called = false;\n return (...args) => {\n if (called) {\n return result;\n }\n result = fun(...args);\n called = true;\n return result;\n };\n}\n/**\n * @hidden\n */\nconst hasRelativeStackingContext = memoize(() => {\n if (!isDocumentAvailable() && document.body !== null) {\n return false;\n }\n const top = 10;\n const parent = document.createElement(\"div\");\n parent.style.transform = \"matrix(10, 0, 0, 10, 0, 0)\";\n parent.innerHTML = `
    child
    `;\n document.body.appendChild(parent);\n const isDifferent = parent.children[0].getBoundingClientRect().top !== top;\n document.body.removeChild(parent);\n return isDifferent;\n});\n/**\n * @hidden\n */\nconst zIndex = (anchor, container) => {\n if (!anchor || !isDocumentAvailable() || !isWindowAvailable()) {\n return null;\n }\n const sibling = siblingContainer(anchor, container);\n if (!sibling) {\n return null;\n }\n const result = [anchor].concat(parents(anchor, sibling)).reduce((index, p) => {\n const zIndexStyle = p.style.zIndex || window.getComputedStyle(p).zIndex;\n const current = parseInt(zIndexStyle, 10);\n return current > index ? current : index;\n }, 0);\n return result ? (result + 1) : null;\n};\n/**\n * @hidden\n */\nconst scaleRect = (rect, scale) => {\n if (!rect || scale === 1) {\n return rect;\n }\n return {\n height: rect.height / scale,\n left: rect.left / scale,\n top: rect.top / scale,\n width: rect.width / scale\n };\n};\n\n/**\n * Used to set the document scale when using a [scale transform](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scale).\n *\n * The document or container scale is required to compute the popup position correctly. Detecting the scale is not reliable and must be set by providing a value for SCALE. See [Support for Document Scale]({% slug documentscale_popup %}).\n *\n * > Using this token is not necessary for user-applied browser zoom.\n *\n * {% meta height:300 %}\n * {% embed_file scale/app.component.ts preview %}\n * {% embed_file shared/app.module.ts %}\n * {% embed_file shared/main.ts %}\n * {% endmeta %}\n *\n *\n */\nconst SCALE = new InjectionToken('Popup Document Scale');\n\nconst STYLES = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n];\n/**\n * @hidden\n */\nclass DOMService {\n addOffset(current, addition) {\n return {\n left: current.left + addition.left,\n top: current.top + addition.top\n };\n }\n addScroll(rect, scroll) {\n return addScroll(rect, scroll);\n }\n align(settings) {\n return align(settings);\n }\n boundingOffset(el) {\n return boundingOffset(el);\n }\n getFontStyles(el) {\n const window = this.getWindow();\n if (!window || !el) {\n return [];\n }\n const computedStyles = window.getComputedStyle(el);\n return STYLES.map(font => ({ key: font, value: computedStyles[font] }));\n }\n getWindow() {\n return isWindowAvailable() ? window : null;\n }\n hasOffsetParent(el) {\n if (!el) {\n return false;\n }\n return !!this.nativeElement(el).offsetParent;\n }\n offset(el) {\n if (!el) {\n return null;\n }\n return offset(el);\n }\n offsetAtPoint(el, currentLocation) {\n if (!el) {\n return null;\n }\n const element = this.nativeElement(el);\n const { left, top, transition } = element.style;\n element.style.transition = 'none';\n element.style.left = `${currentLocation.left}px`;\n element.style.top = `${currentLocation.top}px`;\n const currentOffset = offset(element);\n element.style.left = left;\n element.style.top = top;\n // prevents elements with transition to be animated because of the change\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight;\n element.style.transition = transition;\n return currentOffset;\n }\n nativeElement(el) {\n if (!el) {\n return null;\n }\n return el.nativeElement || el;\n }\n position(element, popup, scale = 1) {\n if (!element || !popup) {\n return null;\n }\n return positionWithScroll(element, this.nativeElement(popup), scale);\n }\n removeScroll(rect, scroll) {\n return removeScroll(rect, scroll);\n }\n restrictToView(settings) {\n return restrictToView(settings);\n }\n scrollPosition(el) {\n return scrollPosition(this.nativeElement(el));\n }\n scrollableParents(el) {\n return scrollableParents(el);\n }\n stackingElementOffset(el) {\n const relativeContextElement = this.getRelativeContextElement(el);\n if (!relativeContextElement) {\n return null;\n }\n return offset(relativeContextElement);\n }\n stackingElementScroll(el) {\n const relativeContextElement = this.getRelativeContextElement(el);\n if (!relativeContextElement) {\n return { x: 0, y: 0 };\n }\n return {\n x: relativeContextElement.scrollLeft,\n y: relativeContextElement.scrollTop\n };\n }\n getRelativeContextElement(el) {\n if (!el || !hasRelativeStackingContext()) {\n return null;\n }\n let parent = this.nativeElement(el).parentElement;\n while (parent) {\n if (window.getComputedStyle(parent).transform !== 'none') {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n useRelativePosition(el) {\n return !!this.getRelativeContextElement(el);\n }\n windowViewPort(el) {\n return getWindowViewPort(this.nativeElement(el));\n }\n zIndex(anchor, container) {\n return zIndex(anchor, this.nativeElement(container));\n }\n zoomLevel() {\n if (!isDocumentAvailable() || !isWindowAvailable()) {\n return 1;\n }\n return parseFloat((document.documentElement.clientWidth / window.innerWidth).toFixed(2)) || 1;\n }\n isZoomed() {\n return this.zoomLevel() > 1;\n }\n}\nDOMService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DOMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDOMService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DOMService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DOMService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass AlignService {\n constructor(_dom, scale = 1) {\n this._dom = _dom;\n this.scale = scale;\n }\n alignElement(settings) {\n const { anchor, element, anchorAlign, elementAlign, margin, offset, positionMode } = settings;\n const scale = this.scale || 1;\n const fixedMode = positionMode === 'fixed' || !this._dom.hasOffsetParent(element);\n const anchorRect = fixedMode ? this.absoluteRect(anchor, element, offset, scale) : this.relativeRect(anchor, element, offset, scale);\n const elementRect = scaleRect(this._dom.offset(element.nativeElement), scale);\n const result = this._dom.align({\n anchorAlign: anchorAlign,\n anchorRect: anchorRect,\n elementAlign: elementAlign,\n elementRect: elementRect,\n margin\n });\n return result;\n }\n absoluteRect(anchor, element, offset, scale) {\n const scrollPos = this.elementScrollPosition(anchor, element);\n const rect = eitherRect(this._dom.offset(anchor), offset);\n const stackScale = 2 * scale;\n const stackScroll = this._dom.stackingElementScroll(element);\n if (scale !== 1 && stackScroll) {\n stackScroll.x /= stackScale;\n stackScroll.y /= stackScale;\n }\n const stackOffset = this._dom.stackingElementOffset(element);\n if (scale !== 1 && stackOffset) {\n stackOffset.left /= stackScale;\n stackOffset.top /= stackScale;\n }\n return this._dom.removeScroll(this._dom.addScroll(removeStackingOffset(scaleRect(rect, scale), stackOffset), stackScroll), scrollPos);\n }\n elementScrollPosition(anchor, element) {\n return anchor ? { x: 0, y: 0 } : this._dom.scrollPosition(element);\n }\n relativeRect(anchor, element, offset, scale) {\n const rect = eitherRect(this._dom.position(anchor, element, scale), offset);\n return scaleRect(rect, scale);\n }\n}\nAlignService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AlignService, deps: [{ token: DOMService }, { token: SCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nAlignService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AlignService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AlignService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: DOMService }, { type: undefined, decorators: [{\n type: Inject,\n args: [SCALE]\n }, {\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nclass PositionService {\n constructor(_dom, scale = 1) {\n this._dom = _dom;\n this.scale = scale;\n }\n positionElement(settings) {\n const { anchor, currentLocation, element, anchorAlign, elementAlign, collisions, margin } = settings;\n const dom = this._dom;\n const scale = this.scale || 1;\n const elementOffset = dom.offsetAtPoint(element, currentLocation);\n const elementRect = scaleRect(elementOffset, scale);\n const anchorOffset = scaleRect(dom.offset(anchor), scale);\n const anchorRect = eitherRect(anchorOffset, currentLocation);\n const viewPort = settings.viewPort || dom.windowViewPort(element);\n viewPort.width = viewPort.width / scale;\n viewPort.height = viewPort.height / scale;\n const result = dom.restrictToView({\n anchorAlign,\n anchorRect,\n collisions,\n elementAlign,\n elementRect,\n margin,\n viewPort\n });\n const offset = dom.addOffset(currentLocation, result.offset);\n return {\n flip: result.flip,\n flipped: result.flipped,\n offset: offset\n };\n }\n}\nPositionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PositionService, deps: [{ token: DOMService }, { token: SCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nPositionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PositionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PositionService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: DOMService }, { type: undefined, decorators: [{\n type: Inject,\n args: [SCALE]\n }, {\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n */\nclass ResizeService {\n constructor(_dom, _zone) {\n this._dom = _dom;\n this._zone = _zone;\n }\n subscribe(callback) {\n if (!isDocumentAvailable()) {\n return;\n }\n this._zone.runOutsideAngular(() => {\n this.subscription = fromEvent(this._dom.getWindow(), \"resize\")\n .pipe(auditTime(FRAME_DURATION))\n .subscribe(() => callback());\n });\n }\n unsubscribe() {\n if (!this.subscription) {\n return;\n }\n this.subscription.unsubscribe();\n }\n isUnsubscribed() {\n return this.subscription && this.subscription.closed;\n }\n}\nResizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeService, deps: [{ token: DOMService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nResizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ResizeService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: DOMService }, { type: i0.NgZone }]; } });\n\n/**\n * @hidden\n */\nconst THRESHOLD_DIFF = 1;\n/**\n * @hidden\n */\nclass ScrollableService {\n constructor(_dom, _zone) {\n this._dom = _dom;\n this._zone = _zone;\n }\n forElement(element) {\n this.unsubscribe();\n this.element = element;\n return this;\n }\n subscribe(callback) {\n if (!callback || !isDocumentAvailable() || !this.element) {\n return;\n }\n const parents = this._dom.scrollableParents(this.element);\n this._zone.runOutsideAngular(() => {\n const observables = parents.map(p => fromEvent(p, \"scroll\").pipe(auditTime(FRAME_DURATION)));\n const subscriber = (e) => {\n const target = e.target;\n const isParent = parents.filter(p => p === target).length > 0;\n const isDocument = target === document;\n const isWindow = target === window;\n if (isParent || isDocument || isWindow) {\n callback(this.isVisible(this.element, target));\n }\n };\n this.subscription = merge(...observables).subscribe(subscriber);\n });\n }\n unsubscribe() {\n if (!this.subscription) {\n return;\n }\n this.subscription.unsubscribe();\n }\n isVisible(elem, container) {\n const elemRect = this._dom.boundingOffset(elem);\n const containerRect = this._dom.boundingOffset(this._dom.nativeElement(container));\n if (THRESHOLD_DIFF < (containerRect.top - elemRect.bottom)) {\n return false;\n }\n if (THRESHOLD_DIFF < (elemRect.top - containerRect.bottom)) {\n return false;\n }\n if (THRESHOLD_DIFF < (elemRect.left - containerRect.right)) {\n return false;\n }\n if (THRESHOLD_DIFF < (containerRect.left - elemRect.right)) {\n return false;\n }\n return true;\n }\n}\nScrollableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollableService, deps: [{ token: DOMService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nScrollableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollableService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ScrollableService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: DOMService }, { type: i0.NgZone }]; } });\n\nconst LEFT = 'left';\nconst RIGHT = 'right';\nconst DOWN = 'down';\nconst UP = 'up';\nconst DEFAULT_TYPE = 'slide';\nconst DEFAULT_DURATION = 100;\nconst animationTypes = {};\nanimationTypes.expand = (direction) => {\n const scale = direction === UP || direction === DOWN ? 'scaleY' : 'scaleX';\n const startScale = 0;\n const endScale = 1;\n let origin;\n if (direction === DOWN) {\n origin = 'top';\n }\n else if (direction === LEFT) {\n origin = RIGHT;\n }\n else if (direction === RIGHT) {\n origin = LEFT;\n }\n else {\n origin = 'bottom';\n }\n return {\n start: { transform: `${scale}(${startScale})`, transformOrigin: origin },\n end: { transform: `${scale}(${endScale})` }\n };\n};\nanimationTypes.slide = (direction) => {\n const translate = direction === LEFT || direction === RIGHT ? 'translateX' : 'translateY';\n const start = direction === RIGHT || direction === DOWN ? -100 : 100;\n const end = 0;\n return {\n start: { transform: `${translate}(${start}%)` },\n end: { transform: `${translate}(${end}%)` }\n };\n};\nanimationTypes.fade = () => {\n return {\n start: { opacity: 0 },\n end: { opacity: 1 }\n };\n};\nanimationTypes.zoom = () => {\n const start = 0;\n const end = 1;\n return {\n start: { transform: `scale(${start})` },\n end: { transform: `scale(${end})` }\n };\n};\n/**\n * @hidden\n */\nclass AnimationService {\n constructor(animationBuilder) {\n this.animationBuilder = animationBuilder;\n this.start = new EventEmitter();\n this.end = new EventEmitter();\n }\n play(element, options, flip) {\n if (!this.flip || this.flip.horizontal !== flip.horizontal ||\n this.flip.vertical !== flip.vertical) {\n this.flip = flip;\n const type = options.type || DEFAULT_TYPE;\n const statesFn = animationTypes[type];\n if (statesFn) {\n const direction = this.getDirection(flip, options);\n const states = statesFn(direction);\n this.playStates(element, states, options);\n }\n else if (isDevMode()) {\n throw new Error(`Unsupported animation type: \"${type}\". The supported types are slide, expand, fade and zoom.`);\n }\n }\n }\n ngOnDestroy() {\n this.stopPlayer();\n }\n playStates(element, states, options) {\n this.stopPlayer();\n const duration = options.duration || DEFAULT_DURATION;\n const factory = this.animationBuilder.build([\n style(states.start),\n animate(`${duration}ms ease-in`, style(states.end))\n ]);\n const player = this.player = factory.create(element);\n player.onDone(() => {\n this.end.emit();\n this.stopPlayer();\n });\n this.start.emit();\n player.play();\n }\n getDirection(flip, options) {\n let direction = options.direction || DOWN;\n if (flip.horizontal) {\n if (direction === LEFT) {\n direction = RIGHT;\n }\n else if (direction === RIGHT) {\n direction = LEFT;\n }\n }\n if (flip.vertical) {\n if (direction === DOWN) {\n direction = UP;\n }\n else if (direction === UP) {\n direction = DOWN;\n }\n }\n return direction;\n }\n stopPlayer() {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n }\n}\nAnimationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AnimationService, deps: [{ token: i1.AnimationBuilder }], target: i0.ɵɵFactoryTarget.Injectable });\nAnimationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AnimationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: AnimationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.AnimationBuilder }]; } });\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-popup',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1668698035,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\nconst DEFAULT_OFFSET = { left: -10000, top: 0 };\nconst ANIMATION_CONTAINER = 'k-animation-container';\nconst ANIMATION_CONTAINER_FIXED = 'k-animation-container-fixed';\n/**\n * Represents the [Kendo UI Popup component for Angular]({% slug overview_popup %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * Popup content!\n * \n * `\n * })\n * class AppComponent {\n * public show: boolean = false;\n * }\n * ```\n */\nclass PopupComponent {\n constructor(container, _alignService, domService, _positionService, _resizeService, _scrollableService, animationService, _renderer, _zone) {\n this.container = container;\n this._alignService = _alignService;\n this.domService = domService;\n this._positionService = _positionService;\n this._resizeService = _resizeService;\n this._scrollableService = _scrollableService;\n this.animationService = animationService;\n this._renderer = _renderer;\n this._zone = _zone;\n /**\n * Controls the Popup animation. By default, the opening and closing animations\n * are enabled ([see example]({% slug animations_popup %})).\n */\n this.animate = true;\n /**\n * Specifies the anchor pivot point\n * ([see example]({% slug alignmentpositioning_popup %}#toc-positioning)).\n */\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n /**\n * Configures the collision behavior of the Popup\n * ([see example]({% slug viewportboundarydetection_popup %})).\n */\n this.collision = { horizontal: 'fit', vertical: 'flip' };\n /**\n * Specifies the pivot point of the Popup\n * ([see example]({% slug alignmentpositioning_popup %}#toc-positioning)).\n */\n this.popupAlign = { horizontal: 'left', vertical: 'top' };\n /**\n * Controls whether the component will copy the `anchor` font styles.\n */\n this.copyAnchorStyles = false;\n /**\n * Specifies the position mode of the component. By default, the Popup uses fixed positioning.\n * To make the Popup acquire absolute positioning, set this option to `absolute`.\n *\n * > If you need to support mobile browsers with the zoom option,\n * use the `absolute` positioning of the Popup.\n *\n * @example\n * ```html\n * \n * ```\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
    \n * Position mode:\n * \n * \n *
    \n *
    \n * Append to\n * \n * \n * \n *
    \n *
    \n *
    \n *
    \n * \n * \n *
      \n *
    • Item1
    • \n *
    • Item2
    • \n *
    • Item3
    • \n *
    \n *
    \n * Bottom/Right\n *
    \n * \n *
      \n *
    • Item1
    • \n *
    • Item2
    • \n *
    • Item3
    • \n *
    \n *
    \n * Bottom/Right\n *
    \n * \n *
      \n *
    • Item1
    • \n *
    • Item2
    • \n *
    • Item3
    • \n *
    \n *
    \n *
    \n * `\n * })\n * class AppComponent {\n * public checked: number = 3;\n * public mode: string = 'absolute';\n * public show: boolean = true;\n * }\n * ```\n */\n this.positionMode = 'fixed';\n /**\n * Specifies the absolute position of the element\n * ([see example]({% slug alignmentpositioning_popup %}#toc-aligning-to-absolute-points)).\n * The Popup opens next to that point. The Popup pivot point is defined by the `popupAlign` configuration option.\n * The boundary detection is applied by using the window viewport.\n */\n this.offset = DEFAULT_OFFSET;\n /**\n * Fires when the anchor is scrolled outside the screen boundaries.\n * ([see example]({% slug closing_popup %}#toc-after-leaving-the-viewport)).\n */\n this.anchorViewportLeave = new EventEmitter();\n /**\n * Fires after the component is closed.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the component is opened and the opening animation ends.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the component is opened and the Popup is positioned.\n */\n this.positionChange = new EventEmitter();\n this.resolvedPromise = Promise.resolve(null);\n this.initialCheck = true;\n validatePackage(packageMetadata);\n this._renderer.addClass(container.nativeElement, ANIMATION_CONTAINER);\n this.updateFixedClass();\n }\n ngOnInit() {\n this.reposition = this.reposition.bind(this);\n this._resizeService.subscribe(this.reposition);\n this.animationSubscriptions = this.animationService.start.subscribe(this.onAnimationStart.bind(this));\n this.animationSubscriptions.add(this.animationService.end.subscribe(this.onAnimationEnd.bind(this)));\n this._scrollableService.forElement(this.domService.nativeElement(this.anchor) || this.container.nativeElement).subscribe(this.onScroll.bind(this));\n this.currentOffset = DEFAULT_OFFSET;\n this.setZIndex();\n this.copyFontStyles();\n this.updateFixedClass();\n this.reposition();\n }\n ngOnChanges(changes) {\n if (changes.copyAnchorStyles) {\n this.copyFontStyles();\n }\n if (changes.positionMode) {\n this.updateFixedClass();\n }\n }\n ngAfterViewInit() {\n if (!this.animate) {\n this.resolvedPromise.then(() => {\n this.onAnimationEnd();\n });\n }\n }\n ngAfterViewChecked() {\n if (this.initialCheck) {\n this.initialCheck = false;\n return;\n }\n this._zone.runOutsideAngular(() => {\n // workarounds https://github.com/angular/angular/issues/19094\n // uses promise because it is executed synchronously after the content is updated\n // does not use onStable in case the current zone is not the angular one.\n this.unsubscribeReposition();\n this.repositionSubscription = from(this.resolvedPromise)\n .subscribe(this.reposition);\n });\n }\n ngOnDestroy() {\n this.anchorViewportLeave.complete();\n this.positionChange.complete();\n this.close.emit();\n this.close.complete();\n this._resizeService.unsubscribe();\n this._scrollableService.unsubscribe();\n this.animationSubscriptions.unsubscribe();\n this.unsubscribeReposition();\n }\n /**\n * @hidden\n */\n onResize() {\n this.reposition();\n }\n onAnimationStart() {\n this._renderer.removeClass(this.container.nativeElement, 'k-animation-container-shown');\n }\n onAnimationEnd() {\n this._renderer.addClass(this.container.nativeElement, 'k-animation-container-shown');\n this.open.emit();\n this.open.complete();\n }\n get currentOffset() {\n return this._currentOffset;\n }\n set currentOffset(offset) {\n this.setContainerStyle('left', `${offset.left}px`);\n this.setContainerStyle('top', `${offset.top}px`);\n this._currentOffset = offset;\n }\n setZIndex() {\n if (this.anchor) {\n this.setContainerStyle('z-index', String(this.domService.zIndex(this.domService.nativeElement(this.anchor), this.container)));\n }\n }\n reposition() {\n if (!isDocumentAvailable()) {\n return;\n }\n const { flip, offset } = this.position();\n if (!this.currentOffset || isDifferentOffset(this.currentOffset, offset)) {\n this.currentOffset = offset;\n if (hasObservers(this.positionChange)) {\n this._zone.run(() => this.positionChange.emit({ offset, flip }));\n }\n }\n if (this.animate) {\n this.animationService.play(this.contentContainer.nativeElement, this.animate, flip);\n }\n this.resizeSensor.acceptSize();\n }\n position() {\n const alignedOffset = this._alignService.alignElement({\n anchor: this.domService.nativeElement(this.anchor),\n anchorAlign: this.anchorAlign,\n element: this.container,\n elementAlign: this.popupAlign,\n margin: this.margin,\n offset: this.offset,\n positionMode: this.positionMode\n });\n return this._positionService.positionElement({\n anchor: this.domService.nativeElement(this.anchor),\n anchorAlign: this.anchorAlign,\n collisions: this.collision,\n currentLocation: alignedOffset,\n element: this.container,\n elementAlign: this.popupAlign,\n margin: this.margin\n });\n }\n onScroll(isInViewPort) {\n const hasLeaveObservers = hasObservers(this.anchorViewportLeave);\n if (isInViewPort || !hasLeaveObservers) {\n this.reposition();\n }\n else if (hasLeaveObservers) {\n this._zone.run(() => {\n this.anchorViewportLeave.emit();\n });\n }\n }\n copyFontStyles() {\n if (!this.anchor || !this.copyAnchorStyles) {\n return;\n }\n this.domService.getFontStyles(this.domService.nativeElement(this.anchor))\n .forEach(s => this.setContainerStyle(s.key, s.value));\n }\n updateFixedClass() {\n const action = this.positionMode === 'fixed' ? 'addClass' : 'removeClass';\n this._renderer[action](this.container.nativeElement, ANIMATION_CONTAINER_FIXED);\n }\n setContainerStyle(name, value) {\n this._renderer.setStyle(this.container.nativeElement, name, value);\n }\n unsubscribeReposition() {\n if (this.repositionSubscription) {\n this.repositionSubscription.unsubscribe();\n }\n }\n}\nPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupComponent, deps: [{ token: i0.ElementRef }, { token: AlignService }, { token: DOMService }, { token: PositionService }, { token: ResizeService }, { token: ScrollableService }, { token: AnimationService }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PopupComponent, selector: \"kendo-popup\", inputs: { animate: \"animate\", anchor: \"anchor\", anchorAlign: \"anchorAlign\", collision: \"collision\", popupAlign: \"popupAlign\", copyAnchorStyles: \"copyAnchorStyles\", popupClass: \"popupClass\", positionMode: \"positionMode\", offset: \"offset\", margin: \"margin\" }, outputs: { anchorViewportLeave: \"anchorViewportLeave\", close: \"close\", open: \"open\", positionChange: \"positionChange\" }, providers: [AlignService, AnimationService, DOMService, PositionService, ResizeService, ScrollableService], viewQueries: [{ propertyName: \"contentContainer\", first: true, predicate: [\"container\"], descendants: true, static: true }, { propertyName: \"resizeSensor\", first: true, predicate: ResizeSensorComponent, descendants: true, static: true }], exportAs: [\"kendo-popup\"], usesOnChanges: true, ngImport: i0, template: `\n
    \n \n \n \n \n
    \n `, isInline: true, components: [{ type: i7.ResizeSensorComponent, selector: \"kendo-resize-sensor\", inputs: [\"rateLimit\"], outputs: [\"resize\"] }], directives: [{ type: i8.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i8.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i8.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendo-popup',\n providers: [AlignService, AnimationService, DOMService, PositionService, ResizeService, ScrollableService],\n selector: 'kendo-popup',\n template: `\n
    \n \n \n \n \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: AlignService }, { type: DOMService }, { type: PositionService }, { type: ResizeService }, { type: ScrollableService }, { type: AnimationService }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { animate: [{\n type: Input\n }], anchor: [{\n type: Input\n }], anchorAlign: [{\n type: Input\n }], collision: [{\n type: Input\n }], popupAlign: [{\n type: Input\n }], copyAnchorStyles: [{\n type: Input\n }], popupClass: [{\n type: Input\n }], positionMode: [{\n type: Input\n }], offset: [{\n type: Input\n }], margin: [{\n type: Input\n }], anchorViewportLeave: [{\n type: Output\n }], close: [{\n type: Output\n }], open: [{\n type: Output\n }], positionChange: [{\n type: Output\n }], contentContainer: [{\n type: ViewChild,\n args: ['container', { static: true }]\n }], resizeSensor: [{\n type: ViewChild,\n args: [ResizeSensorComponent, { static: true }]\n }] } });\n\nconst removeElement = (element) => {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n};\n/**\n * Used to inject the Popup container. If not provided, the first root component of\n * the application is used.\n *\n * > The `POPUP_CONTAINER` can be used only with the [`PopupService`]({% slug service_popup %}) class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Popup module\n * import { PopupModule, POPUP_CONTAINER } from '@progress/kendo-angular-popup';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { ElementRef, NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, PopupModule], // import Popup module\n * bootstrap: [AppComponent],\n * providers: [{\n * provide: POPUP_CONTAINER,\n * useFactory: () => {\n * //return the container ElementRef, where the popup will be injected\n * return { nativeElement: document.body } as ElementRef;\n * }\n * }]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n * ```\n */\nconst POPUP_CONTAINER = new InjectionToken('Popup Container');\n/**\n * A service for opening Popup components dynamically\n * ([see example]({% slug service_popup %})).\n *\n * @export\n * @class PopupService\n */\nclass PopupService {\n constructor(applicationRef, componentFactoryResolver, injector, container) {\n this.applicationRef = applicationRef;\n this.componentFactoryResolver = componentFactoryResolver;\n this.injector = injector;\n this.container = container;\n }\n /**\n * Gets the root view container into which the component will be injected.\n *\n * @returns {ComponentRef}\n */\n get rootViewContainer() {\n // https://github.com/angular/angular/blob/4.0.x/packages/core/src/application_ref.ts#L571\n const rootComponents = this.applicationRef.components || [];\n if (rootComponents[0]) {\n return rootComponents[0];\n }\n throw new Error(`\n View Container not found! Inject the POPUP_CONTAINER or define a specific ViewContainerRef via the appendTo option.\n See http://www.telerik.com/kendo-angular-ui/components/popup/api/POPUP_CONTAINER/ for more details.\n `);\n }\n /**\n * Sets or gets the HTML element of the root component container.\n *\n * @returns {HTMLElement}\n */\n get rootViewContainerNode() {\n return this.container ? this.container.nativeElement : this.getComponentRootNode(this.rootViewContainer);\n }\n /**\n * Opens a Popup component. Created Popups are mounted\n * in the DOM directly in the root application component.\n *\n * @param {PopupSettings} options - The options which define the Popup.\n * @returns {ComponentRef} - A reference to the Popup object.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Popup content\n * \n * \n * `\n * })\n * export class AppComponent {\n * public popupRef: PopupRef;\n *\n * constructor( private popupService: PopupService ) {}\n *\n * public open(anchor: ElementRef, template: TemplateRef): void {\n * if (this.popupRef) {\n * this.popupRef.close();\n * this.popupRef = null;\n * return;\n * }\n *\n * this.popupRef = this.popupService.open({\n * anchor: anchor,\n * content: template\n * });\n * }\n * }\n * ```\n */\n open(options = {}) {\n const { component, nodes } = this.contentFrom(options.content);\n const popupComponentRef = this.appendPopup(nodes, options.appendTo);\n const popupInstance = popupComponentRef.instance;\n this.projectComponentInputs(popupComponentRef, options);\n popupComponentRef.changeDetectorRef.detectChanges();\n if (component) {\n component.changeDetectorRef.detectChanges();\n }\n const popupElement = this.getComponentRootNode(popupComponentRef);\n return {\n close: () => {\n if (component) {\n component.destroy();\n }\n popupComponentRef.destroy();\n // Angular will not remove the element unless the change detection is triggered\n removeElement(popupElement);\n },\n content: component,\n popup: popupComponentRef,\n popupAnchorViewportLeave: popupInstance.anchorViewportLeave,\n popupClose: popupInstance.close,\n popupElement: popupElement,\n popupOpen: popupInstance.open,\n popupPositionChange: popupInstance.positionChange\n };\n }\n appendPopup(nodes, container) {\n const popupComponentRef = this.createComponent(PopupComponent, nodes, container);\n if (!container) {\n this.rootViewContainerNode.appendChild(this.getComponentRootNode(popupComponentRef));\n }\n return popupComponentRef;\n }\n /**\n * Gets the HTML element for a component reference.\n *\n * @param {ComponentRef} componentRef\n * @returns {HTMLElement}\n */\n getComponentRootNode(componentRef) {\n return componentRef.location.nativeElement;\n }\n /**\n * Gets the `ComponentFactory` instance by its type.\n *\n * @param {*} componentClass\n * @param {*} nodes\n * @returns {ComponentRef}\n */\n getComponentFactory(componentClass) {\n return this.componentFactoryResolver.resolveComponentFactory(componentClass);\n }\n /**\n * Creates a component reference from a `Component` type class.\n *\n * @param {*} componentClass\n * @param {*} nodes\n * @returns {ComponentRef}\n */\n createComponent(componentClass, nodes, container) {\n const factory = this.getComponentFactory(componentClass);\n if (container) {\n return container.createComponent(factory, undefined, this.injector, nodes);\n }\n else {\n const component = factory.create(this.injector, nodes);\n this.applicationRef.attachView(component.hostView);\n return component;\n }\n }\n /**\n * Projects the inputs on the component.\n *\n * @param {ComponentRef} component\n * @param {*} options\n * @returns {ComponentRef}\n */\n projectComponentInputs(component, options) {\n Object.getOwnPropertyNames(options)\n .filter(prop => prop !== 'content' || options.content instanceof TemplateRef)\n .map((prop) => {\n component.instance[prop] = options[prop];\n });\n return component;\n }\n /**\n * Gets the component and the nodes to append from the `content` option.\n *\n * @param {*} content\n * @returns {any}\n */\n contentFrom(content) {\n if (!content || content instanceof TemplateRef) {\n return { component: null, nodes: [[]] };\n }\n const component = this.createComponent(content);\n const nodes = component ? [component.location.nativeElement] : [];\n return {\n component: component,\n nodes: [\n nodes // \n ]\n };\n }\n}\nPopupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupService, deps: [{ token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: POPUP_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nPopupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ElementRef, decorators: [{\n type: Inject,\n args: [POPUP_CONTAINER]\n }, {\n type: Optional\n }] }]; } });\n\nconst POPUP_DIRECTIVES = [PopupComponent];\n/**\n * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])\n * definition for the Popup component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Popup module\n * import { PopupModule } from '@progress/kendo-angular-popup';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, PopupModule], // import Popup module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass PopupModule {\n}\nPopupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nPopupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupModule, declarations: [PopupComponent], imports: [CommonModule, ResizeSensorModule], exports: [PopupComponent] });\nPopupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupModule, providers: [PopupService], imports: [[CommonModule, ResizeSensorModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PopupModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [POPUP_DIRECTIVES],\n entryComponents: [POPUP_DIRECTIVES],\n exports: [POPUP_DIRECTIVES],\n imports: [CommonModule, ResizeSensorModule],\n providers: [PopupService]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { POPUP_CONTAINER, PopupComponent, PopupModule, PopupService, SCALE };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { Injectable, Directive, Input, HostBinding, EventEmitter, forwardRef, TemplateRef, Component, ContentChildren, ViewChildren, ViewChild, Output, NgModule } from '@angular/core';\nimport { Subject, merge } from 'rxjs';\nimport { isDocumentAvailable, isChanged } from '@progress/kendo-angular-common';\nimport { filter, tap, take, switchMap } from 'rxjs/operators';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport Draggable from '@progress/kendo-draggable';\nimport * as i3 from '@angular/common';\nimport { CommonModule } from '@angular/common';\n\nconst NODE_NAME_PREDICATES = {};\nconst NODE_ATTR_PREDICATES = {};\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\n/**\n * @hidden\n */\nconst matchesNodeName = (nodeName) => {\n if (!NODE_NAME_PREDICATES[nodeName]) {\n NODE_NAME_PREDICATES[nodeName] = (element) => String(element.nodeName).toLowerCase() === nodeName.toLowerCase();\n }\n return NODE_NAME_PREDICATES[nodeName];\n};\n/**\n * @hidden\n */\nconst matchesNodeAttr = (nodeAttr) => {\n if (!NODE_ATTR_PREDICATES[nodeAttr]) {\n NODE_ATTR_PREDICATES[nodeAttr] = (element) => element.hasAttribute ? element.hasAttribute(nodeAttr) : false;\n }\n return NODE_ATTR_PREDICATES[nodeAttr];\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n/**\n * Returns an object specifiying whether there is a DraggableDirective under the cursor.\n * @hidden\n */\nconst draggableFromPoint = (x, y) => {\n if (!isDocumentAvailable()) {\n return;\n }\n let el = document.elementFromPoint(x, y);\n if (!el) {\n return;\n }\n const isDraggable = el.hasAttribute(\"kendoDraggable\");\n const isChild = closest(el, matchesNodeAttr(\"kendoDraggable\")) !== null;\n const parentDraggable = closest(el, matchesNodeAttr(\"kendoDraggable\"));\n const index = parentDraggable ? parseInt(parentDraggable.getAttribute(\"data-sortable-index\"), 10) : -1;\n return {\n element: el,\n index: index,\n isDraggable: isDraggable,\n isDraggableChild: isChild,\n parentDraggable: parentDraggable,\n rect: el.getBoundingClientRect()\n };\n};\n/**\n * Returns the DraggableDirective under the cursor.\n * @hidden\n */\nconst draggableFromEvent = (event, sortable) => {\n let target;\n if (event.changedTouches) {\n const touch = event.changedTouches[0];\n target = draggableFromPoint(touch.clientX, touch.clientY);\n }\n else {\n target = draggableFromPoint(event.clientX, event.clientY);\n }\n // TODO: refactor sortable. Add draggable getter\n return sortable.draggables.toArray()[target ? target.index : -1];\n};\n/**\n * @hidden\n */\nconst isFocusable = (element) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const skipTab = tabIndex === '-1';\n let focusable = tabIndex !== null && !skipTab;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled && !skipTab;\n }\n return focusable;\n }\n return false;\n};\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\nconst isSortable = matchesNodeName('kendo-sortable');\n/**\n * @hidden\n */\nconst widgetTarget = (target) => {\n const element = closest(target, node => hasClasses(node, 'k-widget') || isSortable(node));\n return element && !isSortable(element);\n};\nconst hasRelativeStackingContext = () => {\n if (!isDocumentAvailable()) {\n return false;\n }\n const top = 10;\n const parent = document.createElement(\"div\");\n parent.style.transform = \"matrix(10, 0, 0, 10, 0, 0)\";\n parent.innerHTML = `
    child
    `;\n document.body.appendChild(parent);\n const isDifferent = parent.children[0].getBoundingClientRect().top !== top;\n document.body.removeChild(parent);\n return isDifferent;\n};\nconst HAS_RELATIVE_STACKING_CONTEXT = hasRelativeStackingContext();\n/**\n * @hidden\n */\nconst relativeContextElement = (element) => {\n if (!element || !HAS_RELATIVE_STACKING_CONTEXT) {\n return null;\n }\n let node = element.parentElement;\n while (node) {\n if (window.getComputedStyle(node).transform !== 'none') {\n return node;\n }\n node = node.parentElement;\n }\n};\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-sortable',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1659510435,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nclass SortableContainer {\n}\nSortableContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableContainer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nSortableContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableContainer });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableContainer, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass DraggableDirective {\n constructor(parent, el, renderer) {\n this.parent = parent;\n this.el = el;\n this.renderer = renderer;\n }\n set hidden(value) {\n this._hidden = value;\n this.updateDisplayStyle();\n }\n ;\n get hidden() {\n return this._hidden;\n }\n get _focused() {\n return this.disabled ? false : (this.index === this.parent.activeIndex);\n }\n get _disabled() {\n return this.disabled;\n }\n get display() {\n return this.hidden ? \"none\" : this._display;\n }\n set display(display) {\n this._display = display;\n this.updateDisplayStyle();\n }\n ngOnInit() {\n const nativeElement = this.el.nativeElement;\n this.display = nativeElement.style.display;\n if (nativeElement) { // Remove the inline styles after a few releases of the themes with the style.\n this.renderer.setStyle(nativeElement, 'user-select', 'none');\n this.renderer.setStyle(nativeElement, '-ms-user-select', 'none');\n this.renderer.setStyle(nativeElement, '-moz-user-select', 'none');\n this.renderer.setStyle(nativeElement, '-webkit-user-select', 'none');\n }\n }\n updateDisplayStyle() {\n this.renderer.setStyle(this.el.nativeElement, 'display', this.display);\n }\n}\nDraggableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableDirective, deps: [{ token: SortableContainer }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nDraggableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DraggableDirective, selector: \"[kendoDraggable]\", inputs: { index: \"index\", disabled: \"disabled\", hidden: \"hidden\" }, host: { properties: { \"class.k-focus\": \"this._focused\", \"attr.aria-disabled\": \"this._disabled\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DraggableDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoDraggable]'\n }]\n }], ctorParameters: function () { return [{ type: SortableContainer }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { index: [{\n type: Input\n }], disabled: [{\n type: Input\n }], hidden: [{\n type: Input\n }], _focused: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], _disabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }] } });\n\n//TODO: RENAME FILE AND UPDATE EXPORTS AND MODULES\n/**\n * @hidden\n */\nclass ItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ItemTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ItemTemplateDirective, selector: \"[kendoSortableItemTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ItemTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoSortableItemTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n/**\n * @hidden\n */\nclass PlaceholderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPlaceholderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PlaceholderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nPlaceholderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: PlaceholderTemplateDirective, selector: \"[kendoSortablePlaceholderTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: PlaceholderTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoSortablePlaceholderTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * Defines an event whose default action can be prevented\n * by calling the `preventDefault` method.\n *\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event was prevented\n * by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * The `navigate` event is emitted when using the keyboard arrows.\n */\nclass NavigateEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super();\n Object.assign(this, options);\n }\n}\n\n/**\n * The arguments for the `DraggableDirective` events.\n * @hidden\n */\nclass DraggableEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super();\n Object.assign(this, options);\n }\n}\n\n/**\n * Arguments for the `dragStart` event.\n */\nclass DragStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super();\n Object.assign(this, options);\n }\n}\n/**\n * Arguments for the `dragOver` event.\n */\nclass DragOverEvent extends DragStartEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super(options);\n Object.assign(this, options);\n }\n}\n/**\n * Arguments for the `dragEnd` event.\n */\nclass DragEndEvent extends DragOverEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super(options);\n Object.assign(this, options);\n }\n}\n\nconst allowDrag = (e) => {\n const target = e.originalEvent.target;\n return target.hasAttribute('data-sortable-item') || !(isFocusable(target) || widgetTarget(target));\n};\n/**\n * The service that provides the drag-and-drop functionality for\n * transferring items between Sortable components within the same page.\n *\n */\nclass SortableService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n /**\n * Specifies the Draggable item that is currently being moved.\n */\n this.activeDraggable = null;\n /**\n * Specifies the Draggable item from which the dragging started.\n */\n this.originDraggable = null;\n /**\n * @hidden\n */\n this.targetSortable = null;\n /**\n * Specifies the Draggable item that last emitted an event.\n */\n this.lastDraggable = null;\n /**\n * @hidden\n */\n this.onPressSubject = new Subject();\n /**\n * @hidden\n */\n this.onDragSubject = new Subject();\n /**\n * @hidden\n */\n this.onReleaseSubject = new Subject();\n this.source = null;\n this._target = null;\n this.sortableCounter = 0;\n this.sortableRegister = {};\n if (!isDocumentAvailable()) {\n return;\n }\n this.subscriptions = this.onPressSubject.pipe(filter(allowDrag), tap(press => {\n this.targetSortable = this.getSortableComponentFromTouch(press);\n }), filter(_ => Boolean(this.targetSortable)), tap(press => {\n this.onReleaseSubject.pipe(take(1)).subscribe(event => this.release(event));\n this.pressArgs = press;\n if (press.isTouch) {\n press.originalEvent.preventDefault();\n }\n }), switchMap(_drag => this.onDragSubject.pipe(filter(_ => Boolean(this.targetSortable)), //stop further events if dragStart is prevented\n tap((e) => this.drag(e))))).subscribe();\n }\n /**\n * Specifies the `SortableComponent` instance under the currently dragged item.\n */\n set target(target) {\n this._target = target;\n }\n get target() {\n return this._target;\n }\n /**\n * @hidden\n */\n onPress(e) {\n this.onPressSubject.next(e);\n }\n /**\n * @hidden\n */\n onDrag(e) {\n this.onDragSubject.next(e);\n }\n /**\n * @hidden\n */\n onRelease(e) {\n this.onReleaseSubject.next(e);\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * Registers a `SortableComponent` with which the service operates.\n *\n * @param sortableComponent - The `SortableComponent`.\n * @return - The unique key that the current `SortableComponent` gets when registered.\n */\n registerComponent(sortableComponent) {\n const id = this.sortableCounter.toString();\n this.sortableRegister[id] = sortableComponent;\n this.sortableCounter++;\n return id;\n }\n /**\n * Removes a `SortableComponent` from the registered `SortableComponents` with which the service operates.\n *\n * @param key - The key of the `SortableComponent` which will be removed from the register.\n * Obtained when `registerComponent` is called.\n */\n unregisterComponent(key) {\n this.sortableRegister[key] = null;\n }\n /**\n * Sets the `SortableComponent` as a source component. When dragging an item from one Sortable to another,\n * the source component is the one from which the item originates.\n *\n * @param sortable - The `SortableComponent`.\n */\n setSource(sortable) {\n this.source = sortable;\n }\n /**\n * Returns the source `SortableComponent` from which\n * an item is dragged to other Sortable components.\n *\n * @return - The `SourceComponent`.\n */\n getSource() {\n return this.source;\n }\n /**\n * The method that finds the `SortableComponent` which is registered to\n * the `SortableService` by using the arguments of the `touch` event.\n *\n * @param touch - A Touch-Object of the `Touch` type interface.\n * Represents a single contact point (finger or stylus)\n * on a touch-sensitive device (touchscreen or trackpad).\n *\n * @return { component: SortableComponent, index: number } - An object\n * where the component is the `SortableComponent` that owns the item\n * and the index is the index of the touched item.\n */\n getSortableComponentFromTouch(touch) {\n if (!isDocumentAvailable()) {\n return { component: undefined, index: undefined };\n }\n let realTarget = document.elementFromPoint(touch.clientX, touch.clientY);\n while (realTarget) {\n const id = realTarget.getAttribute('data-sortable-id');\n const index = realTarget.getAttribute('data-sortable-index');\n if (id) {\n const targetSortable = this.sortableRegister[id];\n if (targetSortable) {\n return { component: targetSortable, index: parseInt(index, 10) };\n }\n }\n realTarget = realTarget.parentElement;\n }\n }\n start() {\n const pressArgs = this.pressArgs;\n if (pressArgs) {\n this.pressArgs = null;\n const startTarget = draggableFromEvent(pressArgs, this.targetSortable.component);\n if (this.targetSortable.component.startDrag({ target: startTarget, originalEvent: pressArgs })) {\n this.targetSortable = null;\n return true;\n }\n }\n }\n release(event) {\n if (this.source) {\n this.ngZone.run(() => {\n if (this.targetSortable) {\n const dropTarget = draggableFromEvent(event, this.targetSortable.component);\n this.source.endDrag({ target: dropTarget, originalEvent: event });\n }\n this.source.positionHintFromEvent(null);\n this.source.markForCheck();\n });\n }\n this.targetSortable = null;\n this.pressArgs = null;\n }\n drag(event) {\n this.ngZone.run(() => {\n if (this.start()) {\n return;\n }\n this.source.positionHintFromEvent(event);\n const sortable = this.getSortableComponentFromTouch(event);\n if (!sortable || sortable && sortable.component !== this.target) {\n if (this.target) {\n this.target.leave({ target: undefined, originalEvent: event });\n }\n else if (this.source !== this.target) {\n this.source.leave({ target: undefined, originalEvent: event });\n }\n }\n if (sortable && sortable.component) {\n const draggable = draggableFromEvent(event, sortable.component);\n sortable.component.drag({ target: draggable, originalEvent: event });\n }\n this.source.markForCheck();\n });\n }\n}\nSortableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });\nSortableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });\n\n/**\n * Represents the [Kendo UI Sortable component for Angular]({% slug overview_sortable %}).\n *\n * {% embed_file sortable-api/app.component.ts %}\n * {% embed_file shared/app.module.ts preview %}\n * {% embed_file shared/main.ts hidden %}\n */\n/**\n * Represents the Kendo UI Sortable component for Angular.\n */\nclass SortableComponent {\n constructor(ngZone, localization, changeDetector, wrapper, sortableService) {\n this.ngZone = ngZone;\n this.localization = localization;\n this.changeDetector = changeDetector;\n /**\n * Specifies the tab index of the Sortable component.\n */\n this.tabIndex = null;\n /**\n * Enables or disables the [keyboard navigation]({% slug keyboard_navigation_sortable %}).\n * The default value is `false`.\n */\n this.navigable = false;\n /**\n * Enables or disables the built-in animations.\n * The default value is `false`.\n */\n this.animation = false;\n /**\n * Sets an array of integers, which represent the indexes of the disabled items from the data array\n * ([see example]({% slug items_sortable %}#toc-disabled-items)).\n */\n this.disabledIndexes = [];\n /**\n * Sets a string that represents the name of the zone to which the Sortable belongs\n * ([see example]({% slug items_sortable %}#toc-transfer-of-items)). Items can be transferred\n * between Sortables which belong to the same zone.\n */\n this.zone = undefined;\n /**\n * Defines the zones from which items can be transferred onto the current Sortable component\n * ([see example]({% slug items_sortable %}#toc-transfer-of-items)). If the `acceptZones` property\n * of the target Sortable is set, allows you to transfer items between Sortables which belong\n * to different zones.\n */\n this.acceptZones = undefined;\n /**\n * Represents the CSS styles which are applied to each Sortable item.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n * import { SortableModule } from '@progress/kendo-angular-sortable';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent {\n * }\n * ```\n */\n this.itemStyle = {};\n /**\n * Defines the CSS styles applied to an empty item ([see example]({% slug templates_sortable %})).\n */\n this.emptyItemStyle = undefined;\n /**\n * Defines the CSS styles which are applied to the currently dragged item ([see example]({% slug templates_sortable %})).\n */\n this.activeItemStyle = undefined;\n /**\n * Defines the CSS styles which are applied to all disabled items.\n */\n this.disabledItemStyle = undefined;\n /**\n * Defines the class which is applied to each Sortable item.\n */\n this.itemClass = \"\";\n /**\n * Defines the class which is applied to the active Sortable item.\n */\n this.activeItemClass = null;\n /**\n * Defines the class which is applied to the empty item when the Sortable has empty data.\n */\n this.emptyItemClass = null;\n /**\n * Defines the class which is applied to each disabled Sortable item.\n */\n this.disabledItemClass = null;\n /**\n * Sets the text message that will be displayed when the Sortable has no items.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n * import { SortableModule } from '@progress/kendo-angular-sortable';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.emptyText = \"Empty\";\n /**\n * @hidden\n */\n this.defaultTemplateRef = null;\n /**\n * Defines the template that will be used for rendering the items.\n * @hidden\n */\n this.itemTemplateDirectiveRef = null;\n /**\n * Defines the template that will be used for rendering the placeholder.\n * @hidden\n */\n this.placeholderTemplateDirectiveRef = null;\n this.itemWrappers = null;\n /**\n * Fires when the dragging of an item is started.\n */\n this.dragStart = new EventEmitter();\n /**\n * Fires when the dragging of an item is completed.\n */\n this.dragEnd = new EventEmitter();\n /**\n * Fires while the dragging of an item is in progress.\n */\n this.dragOver = new EventEmitter();\n /**\n * Fires when dragging an item outside of the component.\n */\n this.dragLeave = new EventEmitter();\n /**\n * Fires while the moving an item from one position to another.\n */\n this.dataMove = new EventEmitter();\n /**\n * Fires when a new item is added to the Sortable.\n */\n this.dataAdd = new EventEmitter();\n /**\n * Fires when an item is removed from the Sortable.\n */\n this.dataRemove = new EventEmitter();\n /**\n * Fires when navigating using the keyboard.\n */\n this.navigate = new EventEmitter();\n /**\n * The index of the currently focused item.\n * If no item is focused, set to `-1`.\n */\n this.activeIndex = -1;\n /**\n * Flag indicating if the component is currently playing animations.\n * @hidden\n */\n this.animating = false;\n /**\n * The index of the currently dragged item.\n */\n this.dragIndex = -1;\n /**\n * The index of the item above which the dragged item is.\n */\n this.dragOverIndex = -1;\n this.onDragStartSubject = new Subject();\n this.onDragOverSubject = new Subject();\n this.onDragLeaveSubject = new Subject();\n this.onDragEndSubject = new Subject();\n /**\n * The location of the hint indicator when dragging on mobile devices.\n */\n this.hintLocation = null;\n this._localData = [];\n this.animationDuration = 300;\n this.afterKeyPress = false;\n this.sortableService = null;\n this._hideActiveItem = false;\n validatePackage(packageMetadata);\n this.wrapper = wrapper.nativeElement;\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.sortableService = sortableService;\n this.subscribeEvents();\n }\n /**\n * Sets an array of any data that is used as a data source for the Sortable.\n *\n * {% embed_file sortable-palettes/app.component.ts %}\n * {% embed_file shared/app.module.ts %}\n * {% embed_file shared/main.ts hidden %}\n */\n set data(data) {\n this._data = data;\n //Cache each _data item instance locally to avoid repaint due to the ngTemplateOutletContext (generated by itemData)\n //This prevents destroying the kendoDraggable instance, which otherwise leads to losing the dragEnd event\n //due to non-exisitng HTML element\n this.cacheData();\n }\n get data() {\n return this._data;\n }\n /**\n * @hidden\n *\n * A misspelled alias for `navigable`.\n */\n set navigatable(value) {\n this.navigable = value;\n }\n get touchAction() {\n return \"none\";\n }\n get dir() {\n return this.direction;\n }\n setItemData(data, i) {\n this._localData[i].item = data.item;\n this._localData[i].index = data.index;\n this._localData[i].hidden = data.hidden;\n }\n /**\n * @hidden\n */\n itemTemplate(index) {\n let template = this.itemTemplateRef;\n if (index === this.dragOverIndex) {\n template = this.placeholderTemplateRef;\n }\n else if (index === this.dragIndex) {\n template = this.itemTemplateRef;\n }\n return template;\n }\n ngOnInit() {\n if (!this.data) {\n this.data = [];\n }\n this.id = this.sortableService.registerComponent(this);\n this.dragIndex = -1;\n const display = \"display\";\n if (this.activeItemStyle && !this.activeItemStyle[display]) {\n this.activeItemStyle[display] = \"\";\n }\n if (!this.itemStyle[display]) {\n this.itemStyle[display] = \"\";\n }\n if (this.wrapper) {\n this.draggable = new Draggable({\n press: (e) => this.sortableService.onPress(e),\n drag: (e) => this.sortableService.onDrag(e),\n release: (e) => this.sortableService.onRelease(e)\n });\n this.ngZone.runOutsideAngular(() => {\n this.draggable.bindTo(this.wrapper);\n });\n }\n }\n ngOnChanges(changes) {\n if (this.data && isChanged('disabledIndexes', changes, false)) {\n this.cacheData();\n }\n }\n ngOnDestroy() {\n this.unsubscribeEvents();\n this.sortableService.unregisterComponent(this.id);\n if (this.draggable) {\n this.draggable.destroy();\n }\n }\n ngAfterContentInit() {\n this.itemTemplateRef = this.itemTemplateDirectiveRef.first || this.defaultTemplateRef.first;\n this.placeholderTemplateRef = this.placeholderTemplateDirectiveRef.first || this.defaultTemplateRef.first;\n }\n ngAfterViewChecked() {\n if (this.afterKeyPress) {\n if (this.itemWrappers) {\n const elems = this.itemWrappers.toArray();\n if (elems && elems.length > 0 && this.activeIndex > -1) {\n elems[this.activeIndex].nativeElement.focus();\n }\n }\n this.afterKeyPress = false;\n }\n }\n /**\n * @hidden\n */\n updateCacheIndices() {\n this._localData.forEach((item, index) => {\n item.index = index;\n });\n }\n /**\n * @hidden\n */\n cacheData() {\n this._localData = [];\n this._data.forEach((item, index) => {\n this._localData.push({ item: item, active: false, disabled: !this.itemEnabled(index), index: index, hidden: false });\n });\n }\n /**\n * @hidden\n */\n startDrag(event) {\n const startEvent = new DraggableEvent(event);\n this.onDragStartSubject.next(startEvent);\n const prevented = startEvent.isDefaultPrevented();\n if (!prevented) {\n this.offsetParent = relativeContextElement(this.wrapper);\n }\n return prevented;\n }\n /**\n * @hidden\n */\n drag(event) {\n const dragEvent = new DraggableEvent(event);\n this.onDragOverSubject.next(dragEvent);\n return dragEvent.isDefaultPrevented();\n }\n /**\n * @hidden\n */\n leave(event) {\n const leaveEvent = new DraggableEvent(event);\n this.onDragLeaveSubject.next(leaveEvent);\n return leaveEvent.isDefaultPrevented();\n }\n /**\n * @hidden\n */\n endDrag(event) {\n const endEvent = new DraggableEvent(event);\n this.onDragEndSubject.next(endEvent);\n return endEvent.isDefaultPrevented();\n }\n /**\n * @hidden\n */\n hintVisible() {\n return this.dragIndex >= 0 && this.hintLocation && this === this.sortableService.getSource();\n }\n /**\n * @hidden\n */\n currentItemStyle(index) {\n if (index === -1) {\n return this.emptyItemStyle ? this.emptyItemStyle : this.itemStyle;\n }\n if (!this.itemEnabled(index) && this.disabledItemStyle) {\n return this.disabledItemStyle;\n }\n if (index === this.dragIndex || (this.dragIndex === -1 && index === this.activeIndex)) {\n if (this.hideActiveItem) {\n return { \"display\": \"none\" };\n }\n if (this.activeItemStyle) {\n return this.activeItemStyle;\n }\n }\n return this.itemStyle;\n }\n /**\n * @hidden\n */\n currentItemClass(index) {\n if (index === -1) {\n return this.emptyItemClass ? this.emptyItemClass : this.itemClass;\n }\n if (!this.itemEnabled(index) && this.disabledItemClass) {\n return this.disabledItemClass;\n }\n if ((index === this.dragIndex || this.dragIndex === -1 && index === this.activeIndex) && this.activeItemClass) {\n return this.activeItemClass;\n }\n return this.itemClass;\n }\n /**\n * @hidden\n */\n hintStyle() {\n const position = {\n \"left\": this.hintLocation.x + 10 + \"px\",\n \"position\": \"fixed\",\n \"top\": this.hintLocation.y + 10 + \"px\"\n };\n let style = {};\n Object.assign(style, this.currentItemStyle(this.dragIndex), position);\n return style;\n }\n /**\n * @hidden\n */\n itemEnabled(index) {\n return this.disabledIndexes.indexOf(index) === -1;\n }\n /**\n * @hidden\n */\n acceptDragFrom(sortableComponent) {\n if (this.acceptZones === undefined) {\n return (this.zone === sortableComponent.zone);\n }\n else if (sortableComponent.zone !== undefined) {\n return (this.acceptZones.indexOf(sortableComponent.zone) !== -1);\n }\n return false;\n }\n /**\n * @hidden\n */\n ariaDropEffect(index) {\n return this.itemEnabled(index) ? \"move\" : \"none\";\n }\n /**\n * @hidden\n */\n focusHandler(index) {\n if (this.navigable) {\n this.activeIndex = index;\n }\n }\n /**\n * @hidden\n */\n blurHandler() {\n if (this.navigable && !this.afterKeyPress) {\n this.activeIndex = -1;\n }\n }\n /**\n * @hidden\n */\n keydownHandler(event) {\n const code = event.keyCode;\n const navigate = this.navigable && code >= 37 && code <= 40;\n const hasFocus = this.activeIndex !== -1;\n if (!navigate || !hasFocus) {\n return;\n }\n const leftKey = this.direction === 'rtl' ? 39 : 37;\n const dir = code === 38 || code === leftKey ? -1 : 1;\n const limit = this.data.length - 1;\n let targetIndex = this.activeIndex + dir;\n while (!this.itemEnabled(targetIndex) && targetIndex <= limit) {\n targetIndex += dir;\n }\n targetIndex = Math.min(Math.max(targetIndex, 0), limit);\n if (!this.itemEnabled(targetIndex)) {\n return;\n }\n if (navigate) {\n const ctrl = event.ctrlKey || event.metaKey;\n let navigateEvent = new NavigateEvent({ index: targetIndex, oldIndex: this.activeIndex, ctrlKey: ctrl });\n this.navigate.emit(navigateEvent);\n if (!navigateEvent.isDefaultPrevented()) {\n this.activeIndex = targetIndex;\n }\n this.dragIndex = -1;\n this.dragOverIndex = -1;\n }\n event.stopPropagation();\n event.preventDefault();\n this.afterKeyPress = true;\n }\n /**\n * Removes the currently active item from the Data collection that the Sortable uses.\n */\n removeDataItem(index) {\n this.dragIndex = -1;\n this.dragOverIndex = -1;\n this._localData.splice(index, 1);\n this.data.splice(index, 1);\n this.updateCacheIndices();\n }\n /**\n * Sets a Boolean value that indicates whether the item will be hidden or not.\n * @hidden\n */\n hideItem(index, hidden = true) {\n this._localData[index].hidden = hidden;\n }\n /**\n * Sets a Boolean value that indicates whether the currently dragged item will be hidden.\n */\n set hideActiveItem(value) {\n this.activeIndex = -1;\n this._hideActiveItem = value;\n }\n /**\n * If the currently dragged item is hidden, returns `true`.\n * If the currently dragged item is visible, returns `false`.\n */\n get hideActiveItem() {\n return this._hideActiveItem;\n }\n /**\n * Clears the active item.\n * An active item is the item which becomes focused when the user navigates with the keyboard.\n */\n clearActiveItem() {\n if (this.navigable) {\n this.fixFocus();\n }\n else {\n this.activeIndex = -1;\n }\n this.dragIndex = -1;\n }\n /**\n * Returns the currently active item when the user navigates with the keyboard.\n * @return - The data item which is currently active.\n */\n getActiveItem() {\n if (this.data && this.dragIndex >= 0 && this.dragIndex < this.data.length) {\n return this.data[this.dragIndex];\n }\n }\n /**\n * Adds a new data item to a particular index.\n * @param dataItem - The data item.\n * @param index - The index at which the data item is inserted.\n */\n addDataItem(dataItem, index) {\n const originDraggable = this.sortableService.originDraggable;\n if (originDraggable && originDraggable.parent === this) {\n const animation = this.animation;\n this.hideItem(originDraggable.index, false);\n this.animation = false;\n this.moveItem(originDraggable.index, index);\n this.animation = animation;\n }\n else {\n this.data.splice(index, 0, dataItem);\n this._localData.splice(index, 0, { item: dataItem, active: false, disabled: !this.itemEnabled(index), index: index, hidden: false });\n this.updateCacheIndices();\n }\n this.dragIndex = index;\n this.dragOverIndex = index;\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.sortableService.target = this;\n this.sortableService.setSource(this);\n this.sortableService.activeDraggable = this.draggables.toArray()[index];\n this.sortableService.lastDraggable = null;\n });\n }\n /**\n * Moves data item to a particular index.\n * @param fromIndex - The data item's index.\n * @param toIndex - The index which the data item should be moved to. Item currently sitting at that index is pushed back one position.\n */\n moveItem(fromIndex, toIndex) {\n if (toIndex === fromIndex) {\n return;\n }\n let dragIndex = fromIndex;\n const d = toIndex > dragIndex ? 1 : -1;\n const originalIndexAnimate = dragIndex;\n const toAnimate = [];\n let prevIndex = dragIndex;\n let tmp;\n while (dragIndex !== toIndex) {\n dragIndex += d;\n if (this.itemEnabled(dragIndex) || dragIndex === toIndex) {\n if (this.animation) {\n toAnimate.push({ next: dragIndex, prev: prevIndex });\n }\n tmp = this._localData[prevIndex].index;\n this._localData[prevIndex].index = this._localData[dragIndex].index;\n this._localData[dragIndex].index = tmp;\n tmp = this._localData[prevIndex];\n this._localData[prevIndex] = this._localData[dragIndex];\n this._localData[dragIndex] = tmp;\n tmp = this.data[prevIndex];\n this.data[prevIndex] = this.data[dragIndex];\n this.data[dragIndex] = tmp;\n prevIndex = dragIndex;\n }\n }\n this.dragIndex = dragIndex;\n this.dragOverIndex = dragIndex;\n this.activeIndex = dragIndex;\n if (this.animation) {\n setTimeout(() => {\n toAnimate.push({ next: originalIndexAnimate, prev: dragIndex });\n this.animating = true;\n this.animate(toAnimate);\n });\n }\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.sortableService.activeDraggable = this.draggables.toArray()[dragIndex];\n this.sortableService.lastDraggable = null;\n });\n }\n /**\n * @hidden\n */\n animate(draggables) {\n const itemArray = this.itemWrappers.toArray();\n const prevClientRect = [];\n const nextClientRect = [];\n const that = this;\n clearTimeout(this._animating);\n for (let i = 0; i < draggables.length; i++) {\n prevClientRect.push(itemArray[draggables[i].prev].nativeElement.getBoundingClientRect());\n nextClientRect.push(itemArray[draggables[i].next].nativeElement.getBoundingClientRect());\n }\n for (let i = 0; i < draggables.length; i++) {\n const nextIndex = draggables[i].prev;\n const targetRect = nextClientRect[i];\n const currentRect = prevClientRect[i];\n const target = itemArray[nextIndex].nativeElement;\n this.applyAnimationStyle(target, 'transition', 'none');\n this.applyAnimationStyle(target, 'transform', 'translate3d('\n + (targetRect.left - currentRect.left).toString() + 'px,'\n + (targetRect.top - currentRect.top).toString() + 'px,0)');\n this.reflow(target);\n }\n for (let i = 0; i < draggables.length; i++) {\n const nextIndex = draggables[i].prev;\n const target = itemArray[nextIndex].nativeElement;\n this.applyAnimationStyle(target, 'transition', 'all ' + this.animationDuration + 'ms');\n this.applyAnimationStyle(target, 'transform', 'translate3d(0,0,0)');\n clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n that.applyAnimationStyle(target, 'transition', '');\n that.applyAnimationStyle(target, 'transform', '');\n target.animated = false;\n }, this.animationDuration);\n }\n this._animating = setTimeout(() => {\n this.animating = false;\n }, this.animationDuration);\n }\n /**\n * @hidden\n */\n positionHintFromEvent(event) {\n const offset = this.parentOffset();\n this.hintLocation = event ? { x: event.clientX - offset.left, y: event.clientY - offset.top } : null;\n }\n /**\n * @hidden\n */\n parentOffset() {\n const offsetParent = this.offsetParent;\n if (offsetParent) {\n const rect = offsetParent.getBoundingClientRect();\n return {\n left: rect.left - offsetParent.scrollLeft,\n top: rect.top - offsetParent.scrollTop\n };\n }\n return { left: 0, top: 0 };\n }\n /**\n * @hidden\n */\n markForCheck() {\n this.changeDetector.markForCheck();\n }\n /**\n * @hidden\n */\n reflow(element) {\n return element.offsetWidth;\n }\n /**\n * @hidden\n */\n applyAnimationStyle(el, prop, val) {\n const style = el && el.style;\n if (style) {\n if (!(prop in style)) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val;\n }\n }\n subscribeEvents() {\n this.localizationChangeSubscription = this.localization\n .changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n this.dragStartSubscription = this.onDragStartSubject\n .subscribe((event) => {\n this.sortableService.originDraggable = event.target;\n this.sortableService.originIndex = event.target.index;\n this.sortableService.activeDraggable = event.target;\n this.sortableService.lastDraggable = event.target;\n this.sortableService.target = this;\n this.sortableService.setSource(this);\n let dragStartEvent = new DragStartEvent({ index: event.target.index });\n this.dragStart.emit(dragStartEvent);\n if (dragStartEvent.isDefaultPrevented()) {\n event.preventDefault();\n }\n else {\n if (!event.target.disabled) {\n if (this.sortableService.target) {\n this.sortableService.target.dragOverIndex = -1;\n this.sortableService.target.dragIndex = -1;\n }\n this.dragOverIndex = event.target.index;\n this.dragIndex = event.target.index;\n }\n }\n });\n this.dragOverSubscription = this.onDragOverSubject.pipe(filter(event => event.target && event.target.el.nativeElement.style.transition.length === 0), filter(() => {\n // Drag started from a disabled item\n return this.sortableService.originDraggable && !this.sortableService.originDraggable.disabled;\n }), filter(() => {\n return this.sortableService && this.acceptDragFrom(this.sortableService.getSource());\n }), filter((event) => {\n return event.target !== this.sortableService.lastDraggable;\n }))\n .subscribe((event) => {\n this.sortableService.lastDraggable = event.target;\n const originDraggable = this.sortableService.originDraggable;\n let targetIndex = event.target.index;\n if (originDraggable.hidden && originDraggable.parent === this) {\n if (originDraggable.index < event.target.index) {\n targetIndex = event.target.index - 1;\n }\n }\n this.sortableService.target = this;\n const oldIndex = this.sortableService.activeDraggable ? this.sortableService.activeDraggable.index : 0;\n let dragOverEvent = new DragOverEvent({ index: targetIndex, oldIndex: oldIndex });\n this.dragOver.emit(dragOverEvent);\n if (!dragOverEvent.isDefaultPrevented() && event.target && event.target.index >= 0) {\n this.dragOverIndex = event.target.index;\n this.placeHolderItemData(event.target);\n }\n });\n this.dragEndSubscription = this.onDragEndSubject\n .subscribe((event) => {\n const source = this.sortableService.getSource();\n if (!source) {\n return;\n }\n const target = this.sortableService.target;\n const index = event.target ? event.target.index : -1;\n const oldIndex = this.sortableService.originDraggable ? this.sortableService.originIndex : -1;\n this.hintLocation = null;\n let dragEndEvent = new DragEndEvent({ index: index, oldIndex: oldIndex });\n this.dragEnd.emit(dragEndEvent);\n if (!dragEndEvent.isDefaultPrevented()) {\n source.dragIndex = -1;\n source.dragOverIndex = -1;\n source.activeIndex = -1;\n if (target && target !== source) {\n target.dragIndex = -1;\n target.dragOverIndex = -1;\n }\n setTimeout(() => {\n this.sortableService.activeDraggable = null;\n this.sortableService.lastDraggable = null;\n this.sortableService.originDraggable = null;\n this.sortableService.target = null;\n this.sortableService.setSource(null);\n });\n }\n });\n this.dragLeaveSubscription = this.onDragLeaveSubject.pipe(filter((e) => {\n if (!isDocumentAvailable()) {\n return false;\n }\n return this.wrapper !== document.elementFromPoint(e.originalEvent.pageX, e.originalEvent.pageY);\n }), filter((_e) => {\n return !this.animating;\n }), filter(_ => this.sortableService.target && this.sortableService.target.dragOverIndex > -1))\n .subscribe(() => {\n this.dragLeave.emit({ index: this.sortableService.originDraggable.index });\n this.sortableService.lastDraggable = null;\n this.dragOverIndex = -1;\n this.sortableService.target = null;\n });\n }\n unsubscribeEvents() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n this.dragStartSubscription.unsubscribe();\n this.dragOverSubscription.unsubscribe();\n this.dragEndSubscription.unsubscribe();\n this.dragLeaveSubscription.unsubscribe();\n }\n placeHolderItemData(draggable) {\n if (draggable.disabled) {\n return;\n }\n const target = this.sortableService.target;\n const source = this.sortableService.getSource();\n const originalData = Object.assign({}, this._localData[draggable.index]);\n const newData = source._localData[source.dragIndex];\n this.setItemData(newData, draggable.index);\n const endSub = source.onDragEndSubject.pipe(take(1)).subscribe(() => {\n this.setItemData(originalData, draggable.index);\n });\n const leaveSub = target.onDragLeaveSubject.pipe(take(1)).subscribe(() => {\n this.setItemData(originalData, draggable.index);\n });\n const overSub = merge(this.onDragOverSubject.pipe(filter(() => {\n return draggable.index !== this.dragOverIndex;\n })), this.onDragLeaveSubject).subscribe(() => {\n this.setItemData(originalData, draggable.index);\n endSub.unsubscribe();\n overSub.unsubscribe();\n leaveSub.unsubscribe();\n });\n }\n fixFocus() {\n if (this.itemWrappers) {\n const itemArray = this.itemWrappers.toArray();\n if (this.dragIndex > -1 && itemArray && itemArray.length > 0) {\n itemArray[this.dragIndex].nativeElement.focus();\n this.activeIndex = this.dragIndex;\n }\n }\n }\n}\nSortableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableComponent, deps: [{ token: i0.NgZone }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: SortableService }], target: i0.ɵɵFactoryTarget.Component });\nSortableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SortableComponent, selector: \"kendo-sortable\", inputs: { tabIndex: \"tabIndex\", data: \"data\", navigable: \"navigable\", navigatable: \"navigatable\", animation: \"animation\", disabledIndexes: \"disabledIndexes\", zone: \"zone\", acceptZones: \"acceptZones\", itemStyle: \"itemStyle\", emptyItemStyle: \"emptyItemStyle\", activeItemStyle: \"activeItemStyle\", disabledItemStyle: \"disabledItemStyle\", itemClass: \"itemClass\", activeItemClass: \"activeItemClass\", emptyItemClass: \"emptyItemClass\", disabledItemClass: \"disabledItemClass\", emptyText: \"emptyText\", activeIndex: \"activeIndex\" }, outputs: { dragStart: \"dragStart\", dragEnd: \"dragEnd\", dragOver: \"dragOver\", dragLeave: \"dragLeave\", dataMove: \"dataMove\", dataAdd: \"dataAdd\", dataRemove: \"dataRemove\", navigate: \"navigate\" }, host: { properties: { \"style.touch-action\": \"this.touchAction\", \"attr.dir\": \"this.dir\" } }, providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.sortable'\n },\n {\n provide: SortableContainer,\n useExisting: forwardRef(() => SortableComponent)\n }\n ], queries: [{ propertyName: \"defaultTemplateRef\", predicate: TemplateRef }, { propertyName: \"itemTemplateDirectiveRef\", predicate: ItemTemplateDirective, read: TemplateRef }, { propertyName: \"placeholderTemplateDirectiveRef\", predicate: PlaceholderTemplateDirective, read: TemplateRef }], viewQueries: [{ propertyName: \"noDataContainer\", first: true, predicate: [\"noDataRef\"], descendants: true }, { propertyName: \"hint\", first: true, predicate: [\"hint\"], descendants: true }, { propertyName: \"itemWrappers\", predicate: [\"itemWrapper\"], descendants: true }, { propertyName: \"draggables\", predicate: DraggableDirective, descendants: true }], exportAs: [\"kendoSortable\"], usesOnChanges: true, ngImport: i0, template: `\n
    \n \n \n {{item.item}}\n
    \n\n \n {{emptyText}}\n \n
    \n \n \n {{_localData[dragIndex].item}}\n
    \n `, isInline: true, directives: [{ type: i3.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: DraggableDirective, selector: \"[kendoDraggable]\", inputs: [\"index\", \"disabled\", \"hidden\"] }, { type: i3.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i3.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableComponent, decorators: [{\n type: Component,\n args: [{\n exportAs: 'kendoSortable',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.sortable'\n },\n {\n provide: SortableContainer,\n useExisting: forwardRef(() => SortableComponent)\n }\n ],\n selector: 'kendo-sortable',\n template: `\n
    \n \n \n {{item.item}}\n
    \n\n \n {{emptyText}}\n \n
    \n \n \n {{_localData[dragIndex].item}}\n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: SortableService }]; }, propDecorators: { tabIndex: [{\n type: Input\n }], data: [{\n type: Input\n }], navigable: [{\n type: Input\n }], navigatable: [{\n type: Input\n }], animation: [{\n type: Input\n }], disabledIndexes: [{\n type: Input\n }], zone: [{\n type: Input\n }], acceptZones: [{\n type: Input\n }], itemStyle: [{\n type: Input\n }], emptyItemStyle: [{\n type: Input\n }], activeItemStyle: [{\n type: Input\n }], disabledItemStyle: [{\n type: Input\n }], itemClass: [{\n type: Input\n }], activeItemClass: [{\n type: Input\n }], emptyItemClass: [{\n type: Input\n }], disabledItemClass: [{\n type: Input\n }], emptyText: [{\n type: Input\n }], defaultTemplateRef: [{\n type: ContentChildren,\n args: [TemplateRef, { descendants: false }]\n }], itemTemplateDirectiveRef: [{\n type: ContentChildren,\n args: [ItemTemplateDirective, { read: TemplateRef, descendants: false }]\n }], placeholderTemplateDirectiveRef: [{\n type: ContentChildren,\n args: [PlaceholderTemplateDirective, { read: TemplateRef, descendants: false }]\n }], itemWrappers: [{\n type: ViewChildren,\n args: ['itemWrapper']\n }], draggables: [{\n type: ViewChildren,\n args: [DraggableDirective]\n }], noDataContainer: [{\n type: ViewChild,\n args: ['noDataRef', { static: false }]\n }], hint: [{\n type: ViewChild,\n args: ['hint', { static: false }]\n }], dragStart: [{\n type: Output\n }], dragEnd: [{\n type: Output\n }], dragOver: [{\n type: Output\n }], dragLeave: [{\n type: Output\n }], dataMove: [{\n type: Output\n }], dataAdd: [{\n type: Output\n }], dataRemove: [{\n type: Output\n }], navigate: [{\n type: Output\n }], activeIndex: [{\n type: Input\n }], touchAction: [{\n type: HostBinding,\n args: ['style.touch-action']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }] } });\n\n/**\n * The arguments for the `SortableComponent` `dataAdd` event.\n */\nclass DataAddEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super();\n Object.assign(this, options);\n }\n}\n/**\n * The arguments for the `SortableComponent` `dataRemove` event.\n */\nclass DataRemoveEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super();\n Object.assign(this, options);\n }\n}\n/**\n * The arguments for the `SortableComponent` `dataMove` event.\n */\nclass DataMoveEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(options) {\n super();\n Object.assign(this, options);\n }\n}\n\n/**\n * A Directive which handles the most common scenarios such reordering and moving items between Sortables, thus minimizng boilerplate code.\n * This is achieved by subscribing to the Sortable's events and handling them using the API methods it provides.\n */\nclass SortableBindingDirective {\n constructor(sortable, sortableService) {\n this.sortable = sortable;\n this.sortableService = sortableService;\n this.sortableService = sortableService;\n }\n /**\n * Sets a data-bound array that is used as a data source for the Sortable.\n *\n * {% embed_file overview/app.component.ts %}\n * {% embed_file shared/app.module.ts %}\n * {% embed_file shared/main.ts hidden %}\n */\n set data(data) {\n this.sortable.data = data;\n }\n nextEnabledIndex(index, sortable) {\n for (let i = index; i <= sortable.data.length; i++) {\n if (sortable.itemEnabled(i)) {\n return i;\n }\n }\n }\n addItem(event, sortable) {\n let index = event.index;\n const dataItem = this.sortableService.getSource().data[event.oldIndex];\n const addEvent = new DataAddEvent({ index: index, dataItem: dataItem });\n sortable.dataAdd.emit(addEvent);\n if (!addEvent.isDefaultPrevented()) {\n if (index === sortable.itemWrappers.length - 1 && !sortable.noDataContainer) {\n index++;\n }\n sortable.addDataItem(dataItem, index);\n }\n return !addEvent.isDefaultPrevented();\n }\n removeItem(event, sortable) {\n const originDraggable = this.sortableService.originDraggable;\n const removeEvent = new DataRemoveEvent({ index: event.oldIndex, dataItem: sortable.data[event.oldIndex] });\n sortable.dataRemove.emit(removeEvent);\n if (!removeEvent.isDefaultPrevented()) {\n if (originDraggable && originDraggable.parent === sortable) {\n sortable.hideItem(event.oldIndex, true);\n }\n else {\n sortable.removeDataItem(event.oldIndex);\n }\n }\n return !removeEvent.isDefaultPrevented();\n }\n moveItem(event, sortable) {\n if (event.index === event.oldIndex) {\n return false;\n }\n const moveEvent = new DataMoveEvent({\n dataItem: sortable.data[event.oldIndex],\n index: event.index,\n oldIndex: event.oldIndex\n });\n sortable.dataMove.emit(moveEvent);\n if (!moveEvent.isDefaultPrevented()) {\n sortable.moveItem(event.oldIndex, event.index);\n }\n return !moveEvent.isDefaultPrevented();\n }\n /**\n * Removes the Draggable item from which the drag started.\n * @hidden\n */\n removeOriginDraggable() {\n if (this.removeHiddenSubscription) {\n this.removeHiddenSubscription.unsubscribe();\n }\n this.removeHiddenSubscription = this.sortableService.onReleaseSubject.pipe(take(1), filter(_ => this.sortableService.originDraggable !== null && this.sortableService.originDraggable.hidden)).subscribe((e) => {\n const originDraggable = this.sortableService.originDraggable;\n const newSource = this.sortableService.getSource();\n if (originDraggable.parent !== this.sortableService.target) {\n const isTargetDraggable = e.target ? (e.target.isDraggable || e.target.isDraggableChild) : false;\n if (isTargetDraggable || originDraggable.parent !== newSource) {\n if (originDraggable.parent !== this.sortableService.target) {\n originDraggable.parent.removeDataItem(originDraggable.index);\n }\n }\n this.sortableService.originDraggable = null;\n }\n });\n }\n onDragOver(event) {\n const source = this.sortableService.getSource();\n const target = this.sortableService.target;\n const targetDraggables = target.draggables.toArray();\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n if (target === source) {\n // Skip moveItem if target is the draggable after which item was just added\n // Ensures item added to the end stays there until further user action\n if (targetDraggables[event.index] !== this.lastTarget) {\n this.moveItem(event, target);\n }\n this.lastTarget = undefined;\n }\n else {\n if (!target.itemEnabled(event.index)) {\n event.index = this.nextEnabledIndex(event.index, target);\n }\n //Add to target and remove from source\n if (this.addItem(event, target) && this.removeItem(event, source)) {\n this.lastTarget = target.draggables.toArray()[event.index];\n this.removeOriginDraggable();\n target.activeIndex = event.index;\n source.activeIndex = -1;\n }\n }\n }\n onNavigate(event) {\n if (event.ctrlKey) {\n let moveEvent = new DataMoveEvent({\n dataItem: this.sortable.data[event.oldIndex],\n index: event.index,\n oldIndex: event.oldIndex\n });\n this.sortable.dataMove.emit(moveEvent);\n if (!moveEvent.isDefaultPrevented()) {\n this.sortable.moveItem(event.oldIndex, event.index);\n }\n }\n else {\n this.sortable.activeIndex = event.index;\n }\n }\n ngOnInit() {\n this.dragOverSubscription = this.sortable.dragOver.subscribe(this.onDragOver.bind(this));\n this.navigateSubscription = this.sortable.navigate.subscribe(this.onNavigate.bind(this));\n }\n ngOnDestroy() {\n this.dragOverSubscription.unsubscribe();\n this.navigateSubscription.unsubscribe();\n if (this.removeHiddenSubscription) {\n this.removeHiddenSubscription.unsubscribe();\n }\n }\n}\nSortableBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableBindingDirective, deps: [{ token: SortableComponent }, { token: SortableService }], target: i0.ɵɵFactoryTarget.Directive });\nSortableBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SortableBindingDirective, selector: \"[kendoSortableBinding]\", inputs: { data: [\"kendoSortableBinding\", \"data\"] }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableBindingDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoSortableBinding]'\n }]\n }], ctorParameters: function () { return [{ type: SortableComponent }, { type: SortableService }]; }, propDecorators: { data: [{\n type: Input,\n args: [\"kendoSortableBinding\"]\n }] } });\n\nconst COMPONENT_DIRECTIVES = [\n SortableComponent,\n DraggableDirective,\n PlaceholderTemplateDirective,\n ItemTemplateDirective,\n SortableBindingDirective\n];\n/**\n *\n * Represents the [`NgModule`]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Sortable component.\n *\n * @example\n *\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * // Import the Sortable module\n * import { SortableModule } from '@progress/kendo-angular-sortable';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent],\n * imports: [BrowserModule, SortableModule],\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass SortableModule {\n}\nSortableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSortableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableModule, declarations: [SortableComponent,\n DraggableDirective,\n PlaceholderTemplateDirective,\n ItemTemplateDirective,\n SortableBindingDirective], imports: [CommonModule], exports: [SortableComponent,\n DraggableDirective,\n PlaceholderTemplateDirective,\n ItemTemplateDirective,\n SortableBindingDirective] });\nSortableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableModule, providers: [SortableService], imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SortableModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES],\n imports: [CommonModule],\n providers: [SortableService]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DataMoveEvent, DragEndEvent, DragOverEvent, DragStartEvent, DraggableDirective, DraggableEvent, ItemTemplateDirective, NavigateEvent, PlaceholderTemplateDirective, PreventableEvent, SortableBindingDirective, SortableComponent, SortableContainer, SortableModule, SortableService };\n\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport * as i0 from '@angular/core';\nimport { EventEmitter, Injectable, Directive, Optional, Component, HostBinding, Input, Output, forwardRef, isDevMode, ViewContainerRef, ChangeDetectionStrategy, ViewChild, ContentChild, Host, NgModule } from '@angular/core';\nimport { isDocumentAvailable, Keys, guid, anyChanged, hasObservers, isChanged } from '@progress/kendo-angular-common';\nimport * as i1 from '@progress/kendo-angular-l10n';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { Subject, of, Subscription, EMPTY, BehaviorSubject, merge } from 'rxjs';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { getter, setter } from '@progress/kendo-common';\nimport * as i8 from '@progress/kendo-angular-inputs';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { filter, tap, switchMap, delay, takeUntil, catchError, finalize, take, map } from 'rxjs/operators';\nimport * as i9 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { Draggable } from '@progress/kendo-draggable';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-treeview',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1668698257,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nclass DataChangeNotificationService {\n constructor() {\n this.changes = new EventEmitter();\n }\n notify() {\n this.changes.emit();\n }\n}\n\n/**\n * @hidden\n */\nconst hasChildren = () => false;\n/**\n * @hidden\n */\nconst isChecked = () => 'none';\n/**\n * @hidden\n */\nconst isDisabled = () => false;\n/**\n * @hidden\n */\nconst isExpanded = () => true;\n/**\n * @hidden\n */\nconst isSelected = () => false;\n/**\n * @hidden\n */\nconst isVisible = () => true;\n/**\n * @hidden\n */\nconst trackBy = (_, item) => item;\n\n/**\n * @hidden\n */\nclass ExpandStateService {\n constructor() {\n this.changes = new Subject();\n }\n expand(index, dataItem) {\n this.changes.next({ dataItem, index, expand: true });\n }\n collapse(index, dataItem) {\n this.changes.next({ dataItem, index, expand: false });\n }\n}\nExpandStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nExpandStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandStateService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandStateService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass IndexBuilderService {\n constructor() {\n this.INDEX_SEPARATOR = '_';\n }\n nodeIndex(index = '', parentIndex = '') {\n return `${parentIndex}${parentIndex ? this.INDEX_SEPARATOR : ''}${index}`;\n }\n indexForLevel(index, level) {\n return index.split(this.INDEX_SEPARATOR).slice(0, level).join(this.INDEX_SEPARATOR);\n }\n lastLevelIndex(index = '') {\n const parts = index.split(this.INDEX_SEPARATOR);\n if (!parts.length) {\n return NaN;\n }\n return parseInt(parts[parts.length - 1], 10);\n }\n level(index) {\n return index.split(this.INDEX_SEPARATOR).length;\n }\n}\nIndexBuilderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IndexBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nIndexBuilderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IndexBuilderService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: IndexBuilderService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass LoadingNotificationService {\n constructor() {\n this.changes = new Subject();\n }\n notifyLoaded(index) {\n this.changes.next(index);\n }\n}\nLoadingNotificationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadingNotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nLoadingNotificationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadingNotificationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadingNotificationService, decorators: [{\n type: Injectable\n }] });\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\n/**\n * @hidden\n */\nconst match = (element, selector) => {\n const matcher = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (!matcher) {\n return false;\n }\n return matcher.call(element, selector);\n};\n/**\n * @hidden\n */\nconst closestWithMatch = (element, selector) => {\n if (!document.documentElement.contains(element)) {\n return null;\n }\n let parent = element;\n while (parent !== null && parent.nodeType === 1) {\n if (match(parent, selector)) {\n return parent;\n }\n parent = parent.parentElement || parent.parentNode;\n }\n return null;\n};\n/**\n * @hidden\n */\nconst noop = () => { };\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isBlank = (value) => value === null || value === undefined;\n/**\n * @hidden\n */\nconst isArray = (value) => Array.isArray(value);\n/**\n * @hidden\n */\nconst isNullOrEmptyString = (value) => isBlank(value) || value.trim().length === 0;\n/**\n * @hidden\n */\nconst isBoolean = (value) => typeof value === 'boolean';\n/**\n * @hidden\n */\nconst closestNode = (element) => {\n const selector = 'li.k-treeview-item';\n if (!isDocumentAvailable()) {\n return null;\n }\n if (element.closest) {\n return element.closest(selector);\n }\n else {\n return closestWithMatch(element, selector);\n }\n};\n/**\n * @hidden\n */\nconst isFocusable = (element) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const skipTab = tabIndex === '-1';\n let focusable = tabIndex !== null && !skipTab;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled && !skipTab;\n }\n return focusable;\n }\n return false;\n};\n/**\n * @hidden\n */\nconst isContent = (element) => {\n const scopeSelector = '.k-treeview-leaf:not(.k-treeview-load-more-button),.k-treeview-item,.k-treeview';\n if (!isDocumentAvailable()) {\n return null;\n }\n let node = element;\n while (node && !match(node, scopeSelector)) {\n node = node.parentNode;\n }\n if (node) {\n return match(node, '.k-treeview-leaf:not(.k-treeview-load-more-button)');\n }\n};\n/**\n * @hidden\n *\n * Returns the nested .k-treeview-leaf:not(.k-treeview-load-more-button) element.\n * If the passed parent item is itself a content node, it is returned.\n */\nconst getContentElement = (parent) => {\n if (!isPresent(parent)) {\n return null;\n }\n const selector = '.k-treeview-leaf:not(.k-treeview-load-more-button)';\n if (match(parent, selector)) {\n return parent;\n }\n return parent.querySelector(selector);\n};\n/**\n * @hidden\n */\nconst isLoadMoreButton = (element) => {\n return isPresent(closestWithMatch(element, '.k-treeview-leaf.k-treeview-load-more-button'));\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n */\nconst hasParent = (element, container) => {\n return Boolean(closest(element, (node) => node === container));\n};\n/**\n * @hidden\n */\nconst focusableNode = (element) => element.nativeElement.querySelector('li[tabindex=\"0\"]');\n/**\n * @hidden\n */\nconst hasActiveNode = (target, node) => {\n const closestItem = node || closestNode(target);\n return closestItem && (closestItem === target || target.tabIndex < 0);\n};\n/**\n * @hidden\n */\nconst nodeId = (node) => node ? node.getAttribute('data-treeindex') : '';\n/**\n * @hidden\n */\nconst nodeIndex = (item) => (item || {}).index;\n/**\n * @hidden\n */\nconst dataItemsEqual = (first, second) => {\n if (!isPresent(first) && !isPresent(second)) {\n return true;\n }\n return isPresent(first) && isPresent(second) && first.item.dataItem === second.item.dataItem;\n};\n/**\n * @hidden\n */\nconst getDataItem = (lookup) => {\n if (!isPresent(lookup)) {\n return lookup;\n }\n return lookup.item.dataItem;\n};\n/**\n * @hidden\n */\nconst isArrayWithAtLeastOneItem = v => v && Array.isArray(v) && v.length !== 0;\n/**\n * @hidden\n * A recursive tree-filtering algorithm that returns:\n * - all child nodes of matching nodes\n * - a chain parent nodes from the match to the root node\n */\nconst filterTree = (items, term, { operator, ignoreCase, mode }, textField, depth = 0) => {\n const field = typeof textField === \"string\" ? textField : textField[depth];\n items.forEach((wrapper) => {\n const matcher = typeof operator === \"string\" ? matchByFieldAndCase(field, operator, ignoreCase) : operator;\n const isMatch = matcher(wrapper.dataItem, term);\n wrapper.isMatch = isMatch;\n wrapper.visible = isMatch;\n wrapper.containsMatches = false;\n if (isMatch) {\n setParentChain(wrapper.parent);\n }\n if (wrapper.children && wrapper.children.length > 0) {\n if (mode === \"strict\" || !isMatch) {\n filterTree(wrapper.children, term, { operator, ignoreCase, mode }, textField, depth + 1);\n }\n else {\n makeAllVisible(wrapper.children);\n }\n }\n });\n};\nconst setParentChain = (node) => {\n if (!isPresent(node)) {\n return;\n }\n node.containsMatches = true;\n node.visible = true;\n if (isPresent(node.parent) && !node.parent.containsMatches) {\n setParentChain(node.parent);\n }\n};\nconst makeAllVisible = (nodes) => {\n nodes.forEach(node => {\n node.visible = true;\n if (node.children) {\n makeAllVisible(node.children);\n }\n });\n};\nconst operators = {\n contains: (a, b) => a.indexOf(b) >= 0,\n doesnotcontain: (a, b) => a.indexOf(b) === -1,\n startswith: (a, b) => a.lastIndexOf(b, 0) === 0,\n doesnotstartwith: (a, b) => a.lastIndexOf(b, 0) === -1,\n endswith: (a, b) => a.indexOf(b, a.length - b.length) >= 0,\n doesnotendwith: (a, b) => a.indexOf(b, a.length - b.length) < 0\n};\nconst matchByCase = (matcher, ignoreCase) => (a, b) => {\n if (ignoreCase) {\n return matcher(a.toLowerCase(), b.toLowerCase());\n }\n return matcher(a, b);\n};\nconst matchByFieldAndCase = (field, operator, ignoreCase) => (dataItem, term) => matchByCase(operators[operator], ignoreCase)(getter(field)(dataItem), term);\n/**\n * @hidden\n */\nconst buildTreeIndex = (parentIndex, itemIndex) => {\n return [parentIndex, itemIndex].filter(part => isPresent(part)).join('_');\n};\n/**\n * @hidden\n */\nconst buildTreeItem = (dataItem, currentLevelIndex, parentIndex) => {\n if (!isPresent(dataItem)) {\n return null;\n }\n return {\n dataItem,\n index: buildTreeIndex(parentIndex, currentLevelIndex)\n };\n};\n/**\n * @hidden\n *\n * Retrieves all descendant nodes' lookups which are currently registered in the provided lookup item as a flat array.\n */\nconst fetchLoadedDescendants = (lookup, filterExpression) => {\n if (!isPresent(lookup) || lookup.children.length === 0) {\n return [];\n }\n let descendants = lookup.children;\n if (isPresent(filterExpression)) {\n descendants = descendants.filter(filterExpression);\n }\n descendants.forEach(child => descendants = descendants.concat(fetchLoadedDescendants(child, filterExpression)));\n return descendants;\n};\n/**\n * @hidden\n *\n * Compares two Seets to determine whether all unique elements in one, are present in the other.\n * Important:\n * - it disregards the element order\n */\nconst sameValues = (as, bs) => {\n if (as.size !== bs.size) {\n return false;\n }\n return Array.from(as).every(v => bs.has(v));\n};\n/**\n * @hidden\n * Returns the size class based on the component and size input.\n */\nconst getSizeClass = (component, size) => {\n const SIZE_CLASSES = {\n 'small': `k-${component}-sm`,\n 'medium': `k-${component}-md`,\n 'large': `k-${component}-lg`\n };\n return SIZE_CLASSES[size];\n};\n\nconst safe = node => (node || {});\nconst safeChildren = node => (safe(node).children || []);\nconst lastVisibleNode = (nodes) => {\n if (!Array.isArray(nodes) || nodes.length === 0) {\n return null;\n }\n const nodesCount = nodes.length;\n const lastIndex = nodesCount - 1;\n for (let index = lastIndex; index >= 0; index -= 1) {\n const node = nodes[index];\n if (node.visible) {\n return node;\n }\n }\n return null;\n};\n/**\n * @hidden\n */\nclass NavigationModel {\n constructor() {\n this.ib = new IndexBuilderService();\n this.nodes = [];\n }\n firstVisibleNode() {\n return (this.nodes || []).find(node => node.visible);\n }\n lastVisibleNode() {\n let node = lastVisibleNode(this.nodes);\n while (isPresent(node) && safeChildren(node).length > 0) {\n const children = safeChildren(node);\n const lastVisibleChild = lastVisibleNode(children);\n if (!isPresent(lastVisibleChild)) {\n return node;\n }\n node = lastVisibleChild;\n }\n return node;\n }\n closestNode(index) {\n const { prev } = safe(this.findNode(index));\n const sibling = prev || this.firstVisibleNode();\n return safe(sibling).index === index ? this.visibleSibling(sibling, 1) : sibling;\n }\n firstFocusableNode() {\n return this.nodes.find((node) => {\n return !node.disabled && node.visible;\n });\n }\n findNode(index) {\n return this.find(index, this.nodes);\n }\n findParent(index) {\n const parentLevel = this.ib.level(index) - 1;\n return this.findNode(this.ib.indexForLevel(index, parentLevel));\n }\n findVisibleChild(index) {\n const node = this.findNode(index);\n const children = safeChildren(node);\n return children.find((child) => child.visible);\n }\n findVisiblePrev(item) {\n const index = item.index;\n const parent = this.findParent(index);\n const levelIndex = this.ib.lastLevelIndex(index);\n const prevNodes = this.container(parent).slice(0, levelIndex);\n const prevNodesHidden = prevNodes.every(node => !node.visible);\n if (levelIndex === 0 || prevNodesHidden) {\n return parent;\n }\n const currentNode = this.findNode(index);\n let prev = this.visibleSibling(currentNode, -1);\n if (prev) {\n let children = this.container(prev);\n while (children.length > 0 && children.some(node => node.visible)) {\n prev = lastVisibleNode(children);\n children = this.container(prev);\n }\n }\n return prev;\n }\n findVisibleNext(item) {\n const children = this.container(item);\n const hasVisibleChildren = children.some(child => child.visible);\n if (children.length === 0 || !hasVisibleChildren) {\n return this.visibleSibling(item, 1);\n }\n return children.find(child => child.visible);\n }\n registerItem(id, index, disabled, loadMoreButton = false, visible = true) {\n const children = [];\n const level = this.ib.level(index);\n const parent = this.findParent(index);\n if (parent || level === 1) {\n const node = { id, children, index, parent, disabled, loadMoreButton, visible };\n this.insert(node, parent);\n }\n }\n unregisterItem(id, index) {\n const node = this.find(index, this.nodes);\n if (!node || node.id !== id) {\n return;\n }\n const children = this.container(node.parent);\n children.splice(children.indexOf(node), 1);\n }\n childLevel(nodes) {\n const children = nodes.filter(node => isPresent(node));\n if (!children || !children.length) {\n return 1;\n }\n return this.ib.level(children[0].index);\n }\n container(node) {\n return node ? node.children : this.nodes;\n }\n find(index, nodes) {\n const childLevel = this.childLevel(nodes);\n const indexToMatch = this.ib.indexForLevel(index, childLevel);\n const isLeaf = childLevel === this.ib.level(index);\n const node = nodes.find(n => n && n.index === indexToMatch);\n if (!node) {\n return null;\n }\n return isLeaf ? node : this.find(index, node.children);\n }\n insert(node, parent) {\n const nodes = this.container(parent);\n nodes.splice(this.ib.lastLevelIndex(node.index), 0, node);\n }\n visibleSibling(node, offset) {\n if (!node) {\n return null;\n }\n const parent = this.findParent(node.index);\n const container = this.container(parent);\n let nextItemIndex = container.indexOf(node) + offset;\n let nextItem = container[nextItemIndex];\n while (isPresent(nextItem)) {\n if (nextItem.visible) {\n return nextItem;\n }\n nextItemIndex += offset;\n nextItem = container[nextItemIndex];\n }\n return this.visibleSibling(parent, offset);\n }\n}\n\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(localization) {\n this.localization = localization;\n this.expands = new Subject();\n this.moves = new Subject();\n this.checks = new Subject();\n this.selects = new Subject();\n this.deselectAllButCurrentItem = new Subject();\n this.loadMore = new Subject();\n this.navigable = true;\n this.selection = 'single';\n this.actions = {\n [Keys.ArrowUp]: () => this.activate(this.model.findVisiblePrev(this.focusableItem), true),\n [Keys.ArrowDown]: () => this.activate(this.model.findVisibleNext(this.focusableItem), true),\n [Keys.ArrowLeft]: () => !this.isLoadMoreButton && (this.expand({\n expand: this.localization.rtl,\n intercept: this.localization.rtl ? this.moveToFirstVisibleChild : this.moveToParent\n })),\n [Keys.ArrowRight]: () => !this.isLoadMoreButton && (this.expand({\n expand: !this.localization.rtl,\n intercept: this.localization.rtl ? this.moveToParent : this.moveToFirstVisibleChild\n })),\n [Keys.Home]: () => this.activate(this.model.firstVisibleNode(), true),\n [Keys.End]: () => this.activate(this.model.lastVisibleNode(), true),\n [Keys.Enter]: (e) => this.handleEnter(e),\n [Keys.Space]: () => this.handleSpace()\n };\n this.isFocused = false;\n this.shouldScroll = false;\n this._model = new NavigationModel();\n this.moveToFirstVisibleChild = this.moveToFirstVisibleChild.bind(this);\n this.moveToParent = this.moveToParent.bind(this);\n }\n get model() {\n return this._model;\n }\n set model(model) {\n this._model = model;\n }\n get activeIndex() {\n return nodeIndex(this.activeItem) || null;\n }\n get isActiveExpanded() {\n return this.activeItem && this.activeItem.children.length > 0;\n }\n get isLoadMoreButton() {\n return this.activeItem && this.activeItem.loadMoreButton;\n }\n get focusableItem() {\n return this.activeItem || this.model.firstFocusableNode();\n }\n activate(item, shouldScroll = false) {\n if (!this.navigable || !item || this.isActive(nodeIndex(item))) {\n return;\n }\n this.isFocused = true;\n this.activeItem = item || this.activeItem;\n this.shouldScroll = shouldScroll;\n this.notifyMove();\n }\n activateParent(index) {\n this.activate(this.model.findParent(index));\n }\n activateIndex(index) {\n if (!index) {\n return;\n }\n this.activate(this.model.findNode(index));\n }\n activateClosest(index) {\n if (!index || nodeIndex(this.focusableItem) !== index) {\n return;\n }\n this.activeItem = this.model.closestNode(index);\n this.notifyMove();\n }\n activateFocusable() {\n if (this.activeItem) {\n return;\n }\n this.activeItem = this.model.firstVisibleNode();\n this.notifyMove();\n }\n deactivate() {\n if (!this.navigable || !this.isFocused) {\n return;\n }\n this.isFocused = false;\n this.notifyMove();\n }\n checkIndex(index) {\n if (!this.isDisabled(index)) {\n this.checks.next(index);\n }\n }\n selectIndex(index) {\n if (!this.isDisabled(index)) {\n this.selects.next(index);\n }\n }\n notifyLoadMore(index) {\n if (!isPresent(index)) {\n return;\n }\n this.loadMore.next(index);\n }\n isActive(index) {\n if (!index) {\n return false;\n }\n return this.isFocused && this.activeIndex === index;\n }\n isFocusable(index) {\n return nodeIndex(this.focusableItem) === index;\n }\n isDisabled(index) {\n if (!index) {\n return false;\n }\n return this.model.findNode(index).disabled;\n }\n registerItem(id, index, disabled, loadMoreButton = false, visible = true) {\n const itemAtIndex = this.model.findNode(index);\n if (isPresent(itemAtIndex)) {\n this.model.unregisterItem(itemAtIndex.id, itemAtIndex.index);\n if (this.isActive(index)) {\n this.deactivate();\n }\n }\n this.model.registerItem(id, index, disabled, loadMoreButton, visible);\n }\n updateItem(index, disabled, visible = true) {\n const itemAtIndex = this.model.findNode(index);\n if (isPresent(itemAtIndex)) {\n if (this.isActive(index)) {\n this.deactivate();\n }\n }\n itemAtIndex.disabled = disabled;\n itemAtIndex.visible = visible;\n }\n unregisterItem(id, index) {\n if (this.isActive(index)) {\n this.activateParent(index);\n }\n this.model.unregisterItem(id, index);\n }\n move(e) {\n if (!this.navigable) {\n return;\n }\n const moveAction = this.actions[e.keyCode];\n if (!moveAction) {\n return;\n }\n moveAction(e);\n e.preventDefault();\n }\n expand({ expand, intercept }) {\n const index = nodeIndex(this.activeItem);\n if (!index || intercept(index)) {\n return;\n }\n this.notifyExpand(expand);\n }\n moveToParent() {\n if (this.isActiveExpanded) {\n return false;\n }\n this.activate(this.model.findParent(nodeIndex(this.activeItem)));\n return true;\n }\n moveToFirstVisibleChild() {\n if (!this.isActiveExpanded) {\n return false;\n }\n this.activate(this.model.findVisibleChild(nodeIndex(this.activeItem)));\n return true;\n }\n notifyExpand(expand) {\n this.expands.next(this.navigationState(expand));\n }\n notifyMove() {\n this.moves.next(this.navigationState());\n }\n navigationState(expand = false) {\n return ({ expand, index: this.activeIndex, isFocused: this.isFocused, shouldScroll: this.shouldScroll });\n }\n handleEnter(event) {\n if (!this.navigable) {\n return;\n }\n if (this.isLoadMoreButton) {\n this.notifyLoadMore(this.activeIndex);\n }\n else {\n const isCtrlPressed = event.ctrlKey || event.metaKey;\n if (isCtrlPressed) {\n this.selectIndex(this.activeIndex);\n }\n else {\n if (this.selection === 'multiple') {\n this.deselectAllButCurrentItem.next({ dataItem: this.activeItem, index: this.activeIndex });\n }\n else {\n this.selectIndex(this.activeIndex);\n }\n }\n }\n }\n handleSpace() {\n if (!this.navigable) {\n return;\n }\n if (this.isLoadMoreButton) {\n this.notifyLoadMore(this.activeIndex);\n }\n else {\n this.checkIndex(this.activeIndex);\n }\n }\n}\nNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });\nNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NavigationService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });\n\n/**\n * @hidden\n */\nclass NodeChildrenService {\n constructor() {\n this.changes = new Subject();\n }\n childrenLoaded(item, children) {\n this.changes.next({ item, children });\n }\n}\nNodeChildrenService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NodeChildrenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nNodeChildrenService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NodeChildrenService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NodeChildrenService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * Represents the template for the TreeView nodes ([more information and example]({% slug nodetemplate_treeview %})).\n * The template helps to customize the content of the nodes. To define the node template, nest an ``\n * tag with the `kendoTreeViewNodeTemplate` directive inside a `` tag.\n *\n *\n * The node data item and its hierarchical index are available as context variables:\n *\n * - `let-dataItem` (`any`) - available as implicit context variable\n * - `let-index=\"index\"` (`string`)\n *\n *\n * @example\n * ```ts\n *\n * import { Component } from '@angular/core';\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{ index }}: {{ dataItem.text }}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public data: any[] = [\n * {\n * text: \"Inbox\",\n * items: [{ text: \"Read Mail\" }]\n * },\n * {\n * text: \"Drafts\"\n * },\n * {\n * text: \"Search Folders\",\n * items: [\n * { text: \"Categorized Mail\" },\n * { text: \"Large Mail\" },\n * { text: \"Unread Mail\"}\n * ]\n * },\n * { text: \"Settings\" }\n * ];\n * }\n *\n * ```\n */\nclass NodeTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNodeTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NodeTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nNodeTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: NodeTemplateDirective, selector: \"[kendoTreeViewNodeTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: NodeTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewNodeTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents the template for the TreeView load more buttons.\n * To define a button template, nest an ``\n * tag with the `kendoTreeViewLoadMoreButtonTemplate` directive inside a `` tag\n * ([see example]({% slug loadmorebutton_treeview %}#toc-button-template)).\n *\n * The hierarchical index of the load more button node is available as a context variable:\n *\n * - `let-index=\"index\"` (`string`)\n */\nclass LoadMoreButtonTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nLoadMoreButtonTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadMoreButtonTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nLoadMoreButtonTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LoadMoreButtonTemplateDirective, selector: \"[kendoTreeViewLoadMoreButtonTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadMoreButtonTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewLoadMoreButtonTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * @hidden\n *\n * An injection token used by the data binding directives to interface with\n * the TreeView or the DropDownTree components.\n */\nclass DataBoundComponent {\n}\nDataBoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DataBoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDataBoundComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DataBoundComponent });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DataBoundComponent, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n *\n * An injection token used by the expand-directive to interface with\n * the TreeView or the DropDownTree components.\n */\nclass ExpandableComponent {\n}\nExpandableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandableComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nExpandableComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandableComponent });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandableComponent, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nclass SelectionService {\n constructor() {\n this.changes = new Subject();\n }\n isFirstSelected(index) {\n return this.firstIndex === index;\n }\n setFirstSelected(index, selected) {\n if (this.firstIndex === index && selected === false) {\n this.firstIndex = null;\n }\n else if (!this.firstIndex && selected) {\n this.firstIndex = index;\n }\n }\n select(index, dataItem) {\n this.changes.next({ dataItem, index });\n }\n}\nSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectionService, decorators: [{\n type: Injectable\n }] });\n\nconst INDEX_REGEX = /\\d+$/;\n/**\n * @hidden\n */\nclass TreeViewLookupService {\n constructor() {\n this.map = new Map();\n }\n reset() {\n this.map.clear();\n }\n registerItem(item, parent) {\n const currentLookup = {\n children: [],\n item,\n parent: this.item(nodeIndex(parent))\n };\n this.map.set(item.index, currentLookup);\n }\n registerChildren(index, children) {\n const item = this.item(index);\n if (!item) {\n return;\n }\n item.children = children;\n }\n unregisterItem(index, dataItem) {\n const current = this.item(index);\n if (current && current.item.dataItem === dataItem) {\n this.map.delete(index);\n if (current.parent && current.parent.children) {\n current.parent.children = current.parent.children.filter(item => item.dataItem !== dataItem);\n }\n }\n }\n replaceItem(index, item, parent) {\n if (!item) {\n return;\n }\n this.unregisterItem(index, item.dataItem);\n this.registerItem(item, parent);\n this.addToParent(item, parent);\n }\n itemLookup(index) {\n const item = this.item(index);\n if (!item) {\n return null;\n }\n return {\n children: this.mapChildren(item.children),\n item: item.item,\n parent: item.parent\n };\n }\n hasItem(index) {\n return this.map.has(index);\n }\n item(index) {\n return this.map.get(index) || null;\n }\n addToParent(item, parent) {\n if (parent) {\n const parentItem = this.item(parent.index);\n const index = parseInt(INDEX_REGEX.exec(item.index)[0], 10);\n parentItem.children = parentItem.children || [];\n parentItem.children.splice(index, 0, item);\n }\n }\n mapChildren(children = []) {\n return children.map(c => {\n const { item, parent, children } = this.item(c.index);\n return {\n children: this.mapChildren(children),\n item,\n parent\n };\n });\n }\n}\nTreeViewLookupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewLookupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nTreeViewLookupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewLookupService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewLookupService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n *\n * Represents the CheckBox component of the Kendo UI TreeView for Angular.\n *\n */\nclass CheckBoxComponent {\n constructor(element, renderer, changeDetector) {\n this.element = element;\n this.renderer = renderer;\n this.changeDetector = changeDetector;\n /**\n * Specifies the [`id`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id) of the component.\n */\n this.id = `_${guid()}`;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Specifies the size of the component.\n */\n this.size = 'medium';\n /**\n * Fires when the user changes the check state of the component.\n */\n this.checkStateChange = new EventEmitter();\n this.checkState = 'none';\n }\n //XXX: implement ComponentValueAccessor\n //XXX: focus/blur methods\n get classWrapper() { return true; }\n get indeterminate() {\n return this.checkState === 'indeterminate';\n }\n get checked() {\n return this.checkState === 'checked';\n }\n get checkBoxClasses() {\n return `k-checkbox ${this.size ? getSizeClass('checkbox', this.size) : ''} k-rounded-md`;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.element.nativeElement, \"tabindex\");\n }\n ngDoCheck() {\n this.checkState = this.isChecked(this.node, this.index);\n }\n handleChange(e) {\n const state = e.target.checked ? 'checked' : 'none';\n // update the View State so that Angular updates the input if the isChecked value is the same\n this.checkState = state;\n this.changeDetector.detectChanges();\n this.checkStateChange.emit(state);\n }\n}\nCheckBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nCheckBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CheckBoxComponent, selector: \"kendo-checkbox\", inputs: { id: \"id\", isChecked: \"isChecked\", node: \"node\", index: \"index\", labelText: \"labelText\", tabindex: \"tabindex\", size: \"size\" }, outputs: { checkStateChange: \"checkStateChange\" }, host: { properties: { \"class.k-checkbox-wrapper\": \"this.classWrapper\" } }, ngImport: i0, template: `\n \n {{labelText}}\n `, isInline: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'kendo-checkbox',\n template: `\n \n {{labelText}}\n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { classWrapper: [{\n type: HostBinding,\n args: ['class.k-checkbox-wrapper']\n }], id: [{\n type: Input\n }], isChecked: [{\n type: Input\n }], node: [{\n type: Input\n }], index: [{\n type: Input\n }], labelText: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], size: [{\n type: Input\n }], checkStateChange: [{\n type: Output\n }] } });\n\nconst buildItem = (index, dataItem) => ({ dataItem, index });\nlet id = 0;\nconst TREE_ITEM_ROLE = 'treeitem';\nconst BUTTON_ROLE = 'button';\n/**\n * @hidden\n *\n * A directive which manages the expanded state of the TreeView.\n */\nclass TreeViewItemDirective {\n constructor(element, expandService, navigationService, selectionService, lookupService, renderer, ib) {\n this.element = element;\n this.expandService = expandService;\n this.navigationService = navigationService;\n this.selectionService = selectionService;\n this.lookupService = lookupService;\n this.renderer = renderer;\n this.ib = ib;\n this.role = TREE_ITEM_ROLE;\n this.loadOnDemand = true;\n this.isDisabled = false;\n this.isVisible = true;\n this.ariaChecked = 'false';\n this.id = id++;\n this.isInitialized = false;\n this.subscriptions = [];\n this.subscribe();\n }\n set isChecked(checked) {\n if (checked === 'checked') {\n this.ariaChecked = 'true';\n }\n else if (checked === 'indeterminate') {\n this.ariaChecked = 'mixed';\n }\n else {\n this.ariaChecked = 'false';\n }\n }\n get isExpanded() {\n return this._isExpanded || false;\n }\n set isExpanded(isExpanded) {\n this._isExpanded = isExpanded;\n }\n get isSelected() {\n return this._isSelected || false;\n }\n set isSelected(isSelected) {\n this._isSelected = isSelected;\n }\n get isButton() {\n return this.role === BUTTON_ROLE;\n }\n get treeItem() {\n return buildItem(this.index, this.dataItem);\n }\n get parentTreeItem() {\n return this.parentDataItem ? buildItem(this.parentIndex, this.parentDataItem) : null;\n }\n ngOnInit() {\n if (this.loadOnDemand && !this.isButton) {\n this.lookupService.registerItem(this.treeItem, this.parentTreeItem);\n }\n this.registerNavigationItem();\n this.isInitialized = true;\n this.setAttribute('role', this.role);\n this.setAriaAttributes();\n this.updateTabIndex();\n }\n ngOnChanges(changes) {\n const { index } = changes;\n if (anyChanged(['index', 'checkable', 'isChecked', 'expandable', 'isExpanded', 'selectable', 'isSelected'], changes)) {\n this.setAriaAttributes();\n }\n if (this.loadOnDemand && !this.isButton) {\n this.moveLookupItem(changes);\n }\n this.moveNavigationItem(index);\n if (anyChanged(['isDisabled', 'isVisible'], changes)) {\n this.updateNodeAvailability();\n }\n }\n ngOnDestroy() {\n this.navigationService.unregisterItem(this.id, this.index);\n if (this.loadOnDemand && !this.isButton) {\n this.lookupService.unregisterItem(this.index, this.dataItem);\n }\n this.subscriptions = this.subscriptions.reduce((list, callback) => (callback.unsubscribe(), list), []);\n }\n subscribe() {\n this.subscriptions = [\n this.navigationService.moves\n .subscribe((navState) => {\n this.updateTabIndex();\n this.focusItem(navState.shouldScroll);\n }),\n this.navigationService.expands\n .pipe(filter(({ index }) => index === this.index && !this.isDisabled))\n .subscribe(({ expand }) => this.expand(expand))\n ];\n }\n registerNavigationItem() {\n this.navigationService.registerItem(this.id, this.index, this.isDisabled, this.isButton, this.isVisible);\n this.activateItem();\n }\n activateItem() {\n if (this.isDisabled) {\n return;\n }\n const navigationService = this.navigationService;\n const selectionService = this.selectionService;\n const index = this.index;\n selectionService.setFirstSelected(index, this.isSelected);\n if (!navigationService.isActive(index) && selectionService.isFirstSelected(index)) {\n navigationService.activateIndex(index);\n }\n }\n expand(shouldExpand) {\n this.expandService[shouldExpand ? 'expand' : 'collapse'](this.index, this.dataItem);\n }\n isFocusable() {\n return !this.isDisabled && this.navigationService.isFocusable(this.index);\n }\n focusItem(scrollIntoView = false) {\n if (this.isInitialized && this.navigationService.isActive(this.index)) {\n this.element.nativeElement.focus({ preventScroll: !scrollIntoView });\n }\n }\n moveLookupItem(changes = {}) {\n const { dataItem, index, parentDataItem, parentIndex } = changes;\n if ((index && index.firstChange) || //skip first change\n (!dataItem && !index && !parentDataItem && !parentIndex)) {\n return;\n }\n const oldIndex = (index || {}).previousValue || this.index;\n this.lookupService.replaceItem(oldIndex, this.treeItem, this.parentTreeItem);\n }\n moveNavigationItem(indexChange = {}) {\n const { currentValue, firstChange, previousValue } = indexChange;\n if (!firstChange && isPresent(currentValue) && isPresent(previousValue)) {\n this.navigationService.unregisterItem(this.id, previousValue);\n this.navigationService.registerItem(this.id, currentValue, this.isDisabled, this.isButton);\n }\n }\n updateNodeAvailability() {\n const service = this.navigationService;\n if (this.isDisabled || !this.isVisible) {\n service.activateClosest(this.index); // activate before updating the item\n }\n else {\n service.activateFocusable();\n }\n service.updateItem(this.index, this.isDisabled, this.isVisible);\n }\n setAriaAttributes() {\n this.setAttribute('aria-level', this.ib.level(this.index).toString());\n // don't render attributes when the component configuration doesn't allow the specified state\n this.setAttribute('aria-expanded', this.expandable ? this.isExpanded.toString() : null);\n this.setAttribute('aria-selected', this.selectable ? this.isSelected.toString() : null);\n this.setAttribute('aria-checked', this.checkable ? this.ariaChecked : null);\n }\n updateTabIndex() {\n this.setAttribute('tabIndex', this.isFocusable() ? '0' : '-1');\n }\n setAttribute(attr, value) {\n if (!isPresent(value)) {\n this.renderer.removeAttribute(this.element.nativeElement, attr);\n return;\n }\n this.renderer.setAttribute(this.element.nativeElement, attr, value);\n }\n}\nTreeViewItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewItemDirective, deps: [{ token: i0.ElementRef }, { token: ExpandStateService }, { token: NavigationService }, { token: SelectionService }, { token: TreeViewLookupService }, { token: i0.Renderer2 }, { token: IndexBuilderService }], target: i0.ɵɵFactoryTarget.Directive });\nTreeViewItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TreeViewItemDirective, selector: \"[kendoTreeViewItem]\", inputs: { dataItem: \"dataItem\", index: \"index\", parentDataItem: \"parentDataItem\", parentIndex: \"parentIndex\", role: \"role\", loadOnDemand: \"loadOnDemand\", checkable: \"checkable\", selectable: \"selectable\", expandable: \"expandable\", isChecked: \"isChecked\", isDisabled: \"isDisabled\", isVisible: \"isVisible\", isExpanded: \"isExpanded\", isSelected: \"isSelected\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewItemDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewItem]' }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ExpandStateService }, { type: NavigationService }, { type: SelectionService }, { type: TreeViewLookupService }, { type: i0.Renderer2 }, { type: IndexBuilderService }]; }, propDecorators: { dataItem: [{\n type: Input\n }], index: [{\n type: Input\n }], parentDataItem: [{\n type: Input\n }], parentIndex: [{\n type: Input\n }], role: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], checkable: [{\n type: Input\n }], selectable: [{\n type: Input\n }], expandable: [{\n type: Input\n }], isChecked: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], isExpanded: [{\n type: Input\n }], isSelected: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass LoadingIndicatorDirective {\n constructor(expandService, loadingService, cd) {\n this.expandService = expandService;\n this.loadingService = loadingService;\n this.cd = cd;\n this._loading = false;\n }\n get loading() {\n return this._loading;\n }\n set loading(value) {\n this._loading = value;\n this.cd.markForCheck();\n }\n ngOnInit() {\n const loadingNotifications = this.loadingService\n .changes\n .pipe(filter(index => index === this.index));\n this.subscription = this.expandService\n .changes\n .pipe(filter(({ index }) => index === this.index), tap(({ expand }) => {\n if (!expand && this.loading) {\n this.loading = false;\n }\n }), filter(({ expand }) => expand), switchMap(x => of(x).pipe(delay(100), takeUntil(loadingNotifications))))\n .subscribe(() => this.loading = true);\n this.subscription.add(loadingNotifications.subscribe(() => this.loading = false));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\nLoadingIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadingIndicatorDirective, deps: [{ token: ExpandStateService }, { token: LoadingNotificationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\nLoadingIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LoadingIndicatorDirective, selector: \"[kendoTreeViewLoading]\", inputs: { index: [\"kendoTreeViewLoading\", \"index\"] }, host: { properties: { \"class.k-i-loading\": \"this.loading\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadingIndicatorDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewLoading]' }]\n }], ctorParameters: function () { return [{ type: ExpandStateService }, { type: LoadingNotificationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { loading: [{\n type: HostBinding,\n args: [\"class.k-i-loading\"]\n }], index: [{\n type: Input,\n args: [\"kendoTreeViewLoading\"]\n }] } });\n\n/**\n * @hidden\n *\n * A directive which manages the expanded state of the TreeView.\n */\nclass TreeViewItemContentDirective {\n constructor(element, navigationService, selectionService, renderer) {\n this.element = element;\n this.navigationService = navigationService;\n this.selectionService = selectionService;\n this.renderer = renderer;\n this.initialSelection = false;\n this.isSelected = isSelected;\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.navigationService.moves\n .subscribe(this.updateFocusClass.bind(this)));\n this.subscriptions.add(this.navigationService.selects\n .pipe(filter((index) => index === this.index))\n .subscribe((index) => this.selectionService.select(index, this.dataItem)));\n this.subscriptions.add(this.selectionService.changes\n .subscribe(() => {\n this.updateSelectionClass(this.isSelected(this.dataItem, this.index));\n }));\n }\n ngOnChanges(changes) {\n if (changes.initialSelection) {\n this.updateSelectionClass(this.initialSelection);\n }\n if (changes.index) {\n this.updateFocusClass();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n updateFocusClass() {\n this.render(this.navigationService.isActive(this.index), 'k-focus');\n }\n updateSelectionClass(selected) {\n this.render(selected, 'k-selected');\n }\n render(addClass, className) {\n const action = addClass ? 'addClass' : 'removeClass';\n this.renderer[action](this.element.nativeElement, className);\n }\n}\nTreeViewItemContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewItemContentDirective, deps: [{ token: i0.ElementRef }, { token: NavigationService }, { token: SelectionService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nTreeViewItemContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TreeViewItemContentDirective, selector: \"[kendoTreeViewItemContent]\", inputs: { dataItem: \"dataItem\", index: \"index\", initialSelection: \"initialSelection\", isSelected: \"isSelected\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewItemContentDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewItemContent]' }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: NavigationService }, { type: SelectionService }, { type: i0.Renderer2 }]; }, propDecorators: { dataItem: [{\n type: Input\n }], index: [{\n type: Input\n }], initialSelection: [{\n type: Input\n }], isSelected: [{\n type: Input\n }] } });\n\nconst TOP_ITEM = 'k-treeview-top';\nconst MID_ITEM = 'k-treeview-mid';\nconst BOT_ITEM = 'k-treeview-bot';\n/**\n * @hidden\n */\nclass TreeViewGroupComponent {\n constructor(expandService, loadingService, indexBuilder, treeViewLookupService, navigationService, nodeChildrenService, dataChangeNotification, changeDetectorRef) {\n this.expandService = expandService;\n this.loadingService = loadingService;\n this.indexBuilder = indexBuilder;\n this.treeViewLookupService = treeViewLookupService;\n this.navigationService = navigationService;\n this.nodeChildrenService = nodeChildrenService;\n this.dataChangeNotification = dataChangeNotification;\n this.changeDetectorRef = changeDetectorRef;\n this.kGroupClass = true;\n this.role = 'group';\n this.loadOnDemand = true;\n this.textField = \"\";\n this.size = 'medium';\n this.initialNodesLoaded = false;\n this.loadingMoreNodes = false;\n this.isItemExpandable = (node, index) => this.expandDisabledNodes || !this.isItemDisabled(node, index);\n this._data = [];\n this.singleRecordSubscriptions = new Subscription();\n this.isChecked = () => 'none';\n this.isDisabled = () => false;\n this.isExpanded = () => false;\n this.isVisible = () => true;\n this.isSelected = () => false;\n this.children = () => of([]);\n this.hasChildren = () => false;\n }\n get moreNodesAvailable() {\n if (!isPresent(this.loadMoreService) || this.data.length === 0) {\n return false;\n }\n return this.pageSize < this.totalNodesCount;\n }\n get pageSize() {\n if (!isPresent(this.loadMoreService)) {\n return null;\n }\n return this.loadMoreService.getGroupSize(this.parentDataItem);\n }\n set pageSize(pageSize) {\n this.loadMoreService.setGroupSize(this.parentDataItem, pageSize);\n }\n get data() {\n if (isPresent(this.pageSize)) {\n const normalizedSizeValue = this.pageSize > 0 ? this.pageSize : 0;\n return this._data.slice(0, normalizedSizeValue);\n }\n return this._data;\n }\n set data(data) {\n this._data = data;\n this.registerLoadedNodes(this.data);\n }\n get loadMoreButtonIndex() {\n if (!this.loadMoreService) {\n return null;\n }\n return this.nodeIndex(this.data.length);\n }\n /**\n * Represents the total number of nodes for the current level.\n */\n get totalNodesCount() {\n if (!this.loadMoreService) {\n return this.data.length;\n }\n return this.loadMoreService.getTotalNodesCount(this.parentDataItem, this._data.length);\n }\n get hasTemplate() {\n return isPresent(this.nodeTemplateRef);\n }\n expandNode(index, dataItem, expand) {\n if (expand) {\n this.expandService.expand(index, dataItem);\n }\n else {\n this.expandService.collapse(index, dataItem);\n }\n }\n checkNode(index) {\n this.navigationService.checkIndex(index);\n this.navigationService.activateIndex(index);\n }\n nodeIndex(index) {\n return this.indexBuilder.nodeIndex(index.toString(), this.parentIndex);\n }\n nodeText(dataItem) {\n const textField = isArray(this.textField) ? this.textField[0] : this.textField;\n return getter(textField)(dataItem);\n }\n ngOnDestroy() {\n if (isPresent(this.nodesSubscription)) {\n this.nodesSubscription.unsubscribe();\n }\n if (isPresent(this.loadMoreNodesSubscription)) {\n this.loadMoreNodesSubscription.unsubscribe();\n }\n this.singleRecordSubscriptions.unsubscribe();\n }\n ngOnInit() {\n this.subscribeToNodesChange();\n this.singleRecordSubscriptions.add(this.dataChangeNotification\n .changes\n .subscribe(this.subscribeToNodesChange.bind(this)));\n this.singleRecordSubscriptions.add(this.navigationService.loadMore\n .pipe(filter(index => index === this.loadMoreButtonIndex))\n .subscribe(this.loadMoreNodes.bind(this)));\n }\n ngOnChanges(changes) {\n if (changes.parentIndex && this.loadOnDemand) {\n this.setNodeChildren(this.mapToTreeItem(this.data));\n }\n }\n fetchChildren(node, index) {\n return this.children(node)\n .pipe(catchError(() => {\n this.loadingService.notifyLoaded(index);\n return EMPTY;\n }), tap(() => this.loadingService.notifyLoaded(index)));\n }\n get nextFields() {\n if (isArray(this.textField)) {\n return this.textField.length > 1 ? this.textField.slice(1) : this.textField;\n }\n return [this.textField];\n }\n loadMoreNodes() {\n if (isPresent(this.loadMoreService.loadMoreNodes)) {\n this.fetchMoreNodes();\n }\n else {\n this.loadMoreLocalNodes();\n }\n }\n /**\n * @hidden\n */\n isItemDisabled(node, index) {\n return (this.disabled && !this.disableParentNodesOnly) || this.isDisabled(node, this.nodeIndex(index));\n }\n /**\n * @hidden\n */\n setItemClasses(dataLength, index) {\n if (dataLength === 1) {\n return this.parentIndex ? BOT_ITEM : `${TOP_ITEM} ${BOT_ITEM}`;\n }\n if (index === 0) {\n return TOP_ITEM;\n }\n if (index > 0 && index < dataLength - 1) {\n return MID_ITEM;\n }\n return index === this.totalNodesCount - 1 ? BOT_ITEM : MID_ITEM;\n }\n loadMoreLocalNodes() {\n const initialLoadMoreButtonIndex = this.loadMoreButtonIndex;\n this.pageSize += this.loadMoreService.getInitialPageSize(this.parentDataItem);\n this.registerLoadedNodes(this.data);\n // forces the new items to be registered before the focus is changed\n this.changeDetectorRef.detectChanges();\n this.reselectItemAt(initialLoadMoreButtonIndex);\n }\n fetchMoreNodes() {\n if (this.loadingMoreNodes) {\n return;\n }\n this.loadingMoreNodes = true;\n if (isPresent(this.loadMoreNodesSubscription)) {\n this.loadMoreNodesSubscription.unsubscribe();\n }\n this.loadMoreNodesSubscription = this.loadMoreService\n .loadMoreNodes({\n dataItem: this.parentDataItem,\n skip: this.data.length,\n take: this.loadMoreService.getInitialPageSize(this.parentDataItem)\n })\n .pipe(finalize(() => this.loadingMoreNodes = false))\n .subscribe(items => {\n if (!(Array.isArray(items) && items.length > 0)) {\n return;\n }\n const initialLoadMoreButtonIndex = this.loadMoreButtonIndex;\n this.pageSize += items.length;\n this.data = this.data.concat(items);\n if (this.navigationService.isActive(initialLoadMoreButtonIndex)) {\n // forces the new items to be registered before the focus is changed\n this.changeDetectorRef.detectChanges();\n this.reselectItemAt(initialLoadMoreButtonIndex);\n }\n });\n }\n setNodeChildren(children) {\n this.treeViewLookupService.registerChildren(this.parentIndex, children);\n }\n mapToTreeItem(data) {\n if (!this.parentIndex) {\n return [];\n }\n return data.map((dataItem, idx) => ({ dataItem, index: this.nodeIndex(idx) }));\n }\n emitChildrenLoaded(children) {\n if (!this.parentIndex) {\n return;\n }\n // ignores the registered load-more button\n const contentChildren = children.filter(item => item.dataItem);\n this.nodeChildrenService.childrenLoaded({ dataItem: this.parentDataItem, index: this.parentIndex }, contentChildren);\n }\n subscribeToNodesChange() {\n if (this.nodesSubscription) {\n this.nodesSubscription.unsubscribe();\n }\n this.nodesSubscription = this.nodes(this.parentDataItem, this.parentIndex)\n .subscribe(data => {\n this.data = data;\n this.initialNodesLoaded = true;\n });\n }\n reselectItemAt(index) {\n if (!isPresent(index)) {\n return;\n }\n // make sure the old index is cleared first\n this.navigationService.deactivate();\n this.navigationService.activateIndex(index);\n }\n registerLoadedNodes(nodes = []) {\n const mappedChildren = this.mapToTreeItem(nodes);\n if (this.loadOnDemand) {\n this.setNodeChildren(mappedChildren);\n }\n this.emitChildrenLoaded(mappedChildren);\n }\n}\nTreeViewGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewGroupComponent, deps: [{ token: ExpandStateService }, { token: LoadingNotificationService }, { token: IndexBuilderService }, { token: TreeViewLookupService }, { token: NavigationService }, { token: NodeChildrenService }, { token: DataChangeNotificationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nTreeViewGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TreeViewGroupComponent, selector: \"[kendoTreeViewGroup]\", inputs: { checkboxes: \"checkboxes\", expandIcons: \"expandIcons\", disabled: \"disabled\", selectable: \"selectable\", touchActions: \"touchActions\", disableParentNodesOnly: \"disableParentNodesOnly\", loadOnDemand: \"loadOnDemand\", trackBy: \"trackBy\", nodes: \"nodes\", textField: \"textField\", parentDataItem: \"parentDataItem\", parentIndex: \"parentIndex\", nodeTemplateRef: \"nodeTemplateRef\", loadMoreButtonTemplateRef: \"loadMoreButtonTemplateRef\", loadMoreService: \"loadMoreService\", size: \"size\", expandDisabledNodes: \"expandDisabledNodes\", isChecked: \"isChecked\", isDisabled: \"isDisabled\", isExpanded: \"isExpanded\", isVisible: \"isVisible\", isSelected: \"isSelected\", children: \"children\", hasChildren: \"hasChildren\" }, host: { properties: { \"class.k-treeview-group\": \"this.kGroupClass\", \"attr.role\": \"this.role\" } }, usesOnChanges: true, ngImport: i0, template: `\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{nodeText(node)}}\n \n \n \n \n
    \n \n \n \n \n
    \n \n \n \n \n \n \n \n Load more\n \n \n \n
    \n \n `, isInline: true, components: [{ type: CheckBoxComponent, selector: \"kendo-checkbox\", inputs: [\"id\", \"isChecked\", \"node\", \"index\", \"labelText\", \"tabindex\", \"size\"], outputs: [\"checkStateChange\"] }, { type: TreeViewGroupComponent, selector: \"[kendoTreeViewGroup]\", inputs: [\"checkboxes\", \"expandIcons\", \"disabled\", \"selectable\", \"touchActions\", \"disableParentNodesOnly\", \"loadOnDemand\", \"trackBy\", \"nodes\", \"textField\", \"parentDataItem\", \"parentIndex\", \"nodeTemplateRef\", \"loadMoreButtonTemplateRef\", \"loadMoreService\", \"size\", \"expandDisabledNodes\", \"isChecked\", \"isDisabled\", \"isExpanded\", \"isVisible\", \"isSelected\", \"children\", \"hasChildren\"] }], directives: [{ type: i9.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: TreeViewItemDirective, selector: \"[kendoTreeViewItem]\", inputs: [\"dataItem\", \"index\", \"parentDataItem\", \"parentIndex\", \"role\", \"loadOnDemand\", \"checkable\", \"selectable\", \"expandable\", \"isChecked\", \"isDisabled\", \"isVisible\", \"isExpanded\", \"isSelected\"] }, { type: i9.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { type: i9.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: LoadingIndicatorDirective, selector: \"[kendoTreeViewLoading]\", inputs: [\"kendoTreeViewLoading\"] }, { type: TreeViewItemContentDirective, selector: \"[kendoTreeViewItemContent]\", inputs: [\"dataItem\", \"index\", \"initialSelection\", \"isSelected\"] }, { type: i9.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { type: i9.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { type: i9.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i9.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }], animations: [\n trigger('toggle', [\n transition('void => *', [\n style({ height: 0 }),\n animate('0.1s ease-in', style({ height: \"*\" }))\n ]),\n transition('* => void', [\n style({ height: \"*\" }),\n animate('0.1s ease-in', style({ height: 0 }))\n ])\n ])\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewGroupComponent, decorators: [{\n type: Component,\n args: [{\n animations: [\n trigger('toggle', [\n transition('void => *', [\n style({ height: 0 }),\n animate('0.1s ease-in', style({ height: \"*\" }))\n ]),\n transition('* => void', [\n style({ height: \"*\" }),\n animate('0.1s ease-in', style({ height: 0 }))\n ])\n ])\n ],\n // eslint-disable-next-line\n selector: '[kendoTreeViewGroup]',\n template: `\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{nodeText(node)}}\n \n \n \n \n
    \n \n \n \n \n
    \n \n \n \n \n \n \n \n Load more\n \n \n \n
    \n \n `\n }]\n }], ctorParameters: function () { return [{ type: ExpandStateService }, { type: LoadingNotificationService }, { type: IndexBuilderService }, { type: TreeViewLookupService }, { type: NavigationService }, { type: NodeChildrenService }, { type: DataChangeNotificationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { kGroupClass: [{\n type: HostBinding,\n args: [\"class.k-treeview-group\"]\n }], role: [{\n type: HostBinding,\n args: [\"attr.role\"]\n }], checkboxes: [{\n type: Input\n }], expandIcons: [{\n type: Input\n }], disabled: [{\n type: Input\n }], selectable: [{\n type: Input\n }], touchActions: [{\n type: Input\n }], disableParentNodesOnly: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], nodes: [{\n type: Input\n }], textField: [{\n type: Input\n }], parentDataItem: [{\n type: Input\n }], parentIndex: [{\n type: Input\n }], nodeTemplateRef: [{\n type: Input\n }], loadMoreButtonTemplateRef: [{\n type: Input\n }], loadMoreService: [{\n type: Input\n }], size: [{\n type: Input\n }], expandDisabledNodes: [{\n type: Input\n }], isChecked: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], isExpanded: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], isSelected: [{\n type: Input\n }], children: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }] } });\n\nconst LOAD_MORE_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/treeview/load-more-button/';\nconst providers = [\n ExpandStateService,\n IndexBuilderService,\n TreeViewLookupService,\n LoadingNotificationService,\n NodeChildrenService,\n NavigationService,\n SelectionService,\n DataChangeNotificationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.treeview'\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => TreeViewComponent)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => TreeViewComponent)\n }\n];\n/**\n * Represents the [Kendo UI TreeView component for Angular]({% slug overview_treeview %}).\n *\n * @example\n * {% meta height:450 %}\n * {% embed_file get-started/app.component.ts preview %}\n * {% embed_file get-started/app.module.ts %}\n * {% embed_file shared/main.ts %}\n * {% endmeta %}\n */\nclass TreeViewComponent {\n constructor(element, changeDetectorRef, expandService, navigationService, nodeChildrenService, selectionService, treeViewLookupService, ngZone, renderer, dataChangeNotification, localization) {\n this.element = element;\n this.changeDetectorRef = changeDetectorRef;\n this.expandService = expandService;\n this.navigationService = navigationService;\n this.nodeChildrenService = nodeChildrenService;\n this.selectionService = selectionService;\n this.treeViewLookupService = treeViewLookupService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.dataChangeNotification = dataChangeNotification;\n this.localization = localization;\n this.classNames = true;\n this.role = 'tree';\n /**\n * The hint which is displayed when the component is empty.\n */\n this.filterInputPlaceholder = \"\";\n /** @hidden */\n this.fetchNodes = () => this.data;\n /**\n * Fires when the children of the expanded node are loaded.\n */\n this.childrenLoaded = new EventEmitter();\n /**\n * Fires when the user blurs the component.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires when the user focuses the component.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires when the user expands a TreeView node.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the user collapses a TreeView node.\n */\n this.collapse = new EventEmitter();\n /**\n * Fires just before the dragging of the node starts ([see example]({% slug draganddrop_treeview %}#toc-setup)). This event is preventable.\n * If you prevent the event default, no drag hint will be created and the subsequent drag-related events will not be fired.\n */\n this.nodeDragStart = new EventEmitter();\n /**\n * Fires when an item is being dragged ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n */\n this.nodeDrag = new EventEmitter();\n /**\n * Emits when the built-in filtering mechanism in the data-binding directives updates the node's visibility.\n * Used for the built-in auto-expand functionalities of the component and available for custom implementations.\n */\n this.filterStateChange = new EventEmitter();\n /**\n * Fires on the target TreeView when a dragged item is dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n * This event is preventable. If you prevent the event default (`event.preventDefualt()`) or invalidate its state (`event.setValid(false)`),\n * the `addItem` and `removeItem` events will not be triggered.\n *\n * Both operations cancel the default drop operation, but the indication to the user is different. `event.setValid(false)` indicates that the operation was\n * unsuccessful by animating the drag clue to its original position. `event.preventDefault()` simply removes the clue, as if it has been dropped successfully.\n * As a general rule, use `preventDefault` to manually handle the add and remove operations, and `setValid(false)` to indicate the operation was unsuccessful.\n */\n this.nodeDrop = new EventEmitter();\n /**\n * Fires on the source TreeView after the dragged item has been dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n */\n this.nodeDragEnd = new EventEmitter();\n /**\n * Fires after a dragged item is dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n * Called on the TreeView where the item is dropped.\n */\n this.addItem = new EventEmitter();\n /**\n * Fires after a dragged item is dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n * Called on the TreeView from where the item is dragged.\n */\n this.removeItem = new EventEmitter();\n /**\n * Fires when the user selects a TreeView node checkbox\n * ([see example]({% slug checkboxes_treeview %}#toc-modifying-the-checked-state)).\n */\n this.checkedChange = new EventEmitter();\n /**\n * Fires when the user selects a TreeView node\n * ([see example]({% slug selection_treeview %}#toc-modifying-the-selection)).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires when the value of the built-in filter input element changes.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires when the user clicks a TreeView node.\n */\n this.nodeClick = new EventEmitter();\n /**\n * Fires when the user double clicks a TreeView node.\n */\n this.nodeDblClick = new EventEmitter();\n /**\n * A function that defines how to track node changes.\n * By default, the TreeView tracks the nodes by data item object reference.\n *\n * @example\n * ```ts\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n *
    \n * `\n * })\n * export class AppComponent {\n * public data: any[] = [\n * { text: \"Furniture\" },\n * { text: \"Decor\" }\n * ];\n *\n * public trackBy(index: number, item: any): any {\n * return item.text;\n * }\n * }\n * ```\n */\n this.trackBy = trackBy;\n /**\n * A function which determines if a specific node is disabled.\n */\n this.isDisabled = isDisabled;\n /**\n * A callback which determines whether a TreeView node should be rendered as hidden. The utility .k-display-none class is used to hide the nodes.\n * Useful for custom filtering implementations.\n */\n this.isVisible = isVisible;\n /**\n * Determines whether the TreeView keyboard navigable is enabled.\n */\n this.navigable = true;\n /**\n * A function which provides the child nodes for a given parent node\n * ([see example]({% slug databinding_treeview %})).\n */\n this.children = () => of([]);\n /**\n * Indicates whether the child nodes will be fetched on node expand or will be initially prefetched.\n * @default true\n */\n this.loadOnDemand = true;\n /**\n * Renders the built-in input element for filtering the TreeView.\n * If set to `true`, the component emits the `filterChange` event, which can be used to [filter the TreeView manually]({% slug filtering_treeview %}#toc-manual-filtering).\n * A built-in filtering implementation is available to use with the [`kendoTreeViewHierarchyBinding`]({% slug api_treeview_hierarchybindingdirective %}) and [`kendoTreeViewFlatDataBinding`]({% slug api_treeview_flatdatabindingdirective %}) directives.\n */\n this.filterable = false;\n /**\n * Sets an initial value of the built-in input element used for filtering.\n */\n this.filter = '';\n /**\n * Indicates whether only parent nodes should be disabled or their child nodes as well\n * @default false\n */\n this.disableParentNodesOnly = false;\n this.checkboxes = false;\n this.expandIcons = false;\n this.selectable = false;\n this.touchActions = true;\n this.isActive = false;\n this.data = new BehaviorSubject([]);\n this._animate = true;\n this._size = 'medium';\n this.subscriptions = new Subscription();\n this.domSubscriptions = [];\n validatePackage(packageMetadata);\n }\n /** @hidden */\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n /**\n * Determines whether the content animation is enabled.\n */\n set animate(value) {\n this._animate = value;\n }\n get animate() {\n return !this._animate;\n }\n /**\n * @hidden\n *\n * Defines the template for each node.\n * Takes precedence over nested templates in the TreeView tag.\n */\n set nodeTemplateRef(template) {\n this._nodeTemplateRef = template;\n }\n get nodeTemplateRef() {\n return this._nodeTemplateRef || this.nodeTemplateQuery;\n }\n /**\n * @hidden\n *\n * Defines the template for each load-more button.\n * Takes precedence over nested templates in the TreeView tag.\n */\n set loadMoreButtonTemplateRef(template) {\n this._loadMoreButtonTemplateRef = template;\n }\n get loadMoreButtonTemplateRef() {\n return this._loadMoreButtonTemplateRef || this.loadMoreButtonTemplateQuery;\n }\n /**\n * The nodes which will be displayed by the TreeView\n * ([see example]({% slug databinding_treeview %})).\n */\n set nodes(value) {\n this.data.next(value || []);\n this.dataChangeNotification.notify();\n }\n get nodes() {\n return this.data.value;\n }\n /**\n * A function which determines if a specific node has child nodes\n * ([see example]({% slug databinding_treeview %})).\n */\n get hasChildren() {\n return this._hasChildren || hasChildren;\n }\n set hasChildren(callback) {\n this._hasChildren = callback;\n this.expandIcons = Boolean(this._isExpanded && this._hasChildren);\n }\n /**\n * A function which determines if a specific node is checked\n * ([see example]({% slug checkboxes_treeview %}#toc-modifying-the-checked-state)).\n */\n get isChecked() {\n return this._isChecked || isChecked;\n }\n set isChecked(callback) {\n this._isChecked = callback;\n this.checkboxes = Boolean(this._isChecked);\n }\n /**\n * A function which determines if a specific node is expanded.\n */\n get isExpanded() {\n return this._isExpanded || isExpanded;\n }\n set isExpanded(callback) {\n this._isExpanded = callback;\n this.expandIcons = Boolean(this._isExpanded && this._hasChildren);\n }\n /**\n * A function which determines if a specific node is selected\n * ([see example]({% slug selection_treeview %}#toc-modifying-the-selection)).\n */\n get isSelected() {\n return this._isSelected || isSelected;\n }\n set isSelected(callback) {\n this._isSelected = callback;\n this.selectable = Boolean(this._isSelected);\n }\n /**\n * Sets the size of the component.\n *\n * The possible values are:\n * * `small`\n * * `medium` (default)\n * * `large`\n * * `none`\n */\n set size(size) {\n const newSize = size ? size : 'medium';\n if (this.size !== 'none') {\n this.renderer.removeClass(this.element.nativeElement, getSizeClass('treeview', this.size));\n }\n this.renderer.addClass(this.element.nativeElement, getSizeClass('treeview', newSize));\n this._size = size;\n }\n get size() {\n return this._size;\n }\n ngOnChanges(changes) {\n this.navigationService.navigable = Boolean(this.navigable);\n // TODO: should react to changes.loadOnDemand as well - should preload the data or clear the already cached items\n if (anyChanged(['nodes', 'children', 'hasChildren', 'loadOnDemand'], changes, false) && !this.loadOnDemand) {\n this.preloadChildNodes();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.domSubscriptions.forEach(subscription => subscription());\n }\n ngOnInit() {\n this.subscriptions.add(this.nodeChildrenService\n .changes\n .subscribe((x) => this.childrenLoaded.emit(x)));\n this.subscriptions.add(this.expandService.changes\n .subscribe(({ index, dataItem, expand }) => expand\n ? this.expand.emit({ index, dataItem })\n : this.collapse.emit({ index, dataItem })));\n this.subscriptions.add(this.navigationService.checks\n .subscribe((x) => this.checkedChange.emit(this.treeViewLookupService.itemLookup(x))));\n this.subscriptions.add(this.selectionService.changes\n .subscribe((x) => {\n if (hasObservers(this.selectionChange)) {\n this.ngZone.run(() => {\n this.selectionChange.emit(x);\n });\n }\n }));\n if (this.element) {\n this.ngZone.runOutsideAngular(() => {\n this.attachDomHandlers();\n });\n }\n if (this.size) {\n this.renderer.addClass(this.element.nativeElement, getSizeClass('treeview', this.size));\n }\n }\n /**\n * Blurs the focused TreeView item.\n */\n blur() {\n if (!isDocumentAvailable()) {\n return;\n }\n const target = focusableNode(this.element);\n if (document.activeElement === target) {\n target.blur();\n }\n }\n /**\n * Focuses the first focusable item in the TreeView component if no hierarchical index is provided.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public data: any[] = [\n * { text: \"Furniture\" },\n * { text: \"Decor\" }\n * ];\n * }\n * ```\n */\n focus(index) {\n const focusIndex = index || nodeIndex(this.navigationService.focusableItem);\n this.navigationService.activateIndex(focusIndex);\n const target = focusableNode(this.element);\n if (target) {\n target.focus();\n }\n }\n /**\n * Based on the specified index, returns the TreeItemLookup node.\n *\n * @param index - The index of the node.\n * @returns {TreeItemLookup} - The item that was searched (looked up).\n */\n itemLookup(index) {\n return this.treeViewLookupService.itemLookup(index);\n }\n /**\n * Triggers the [`children`]({% slug api_treeview_treeviewcomponent %}#toc-children) function for every expanded node,\n * causing all rendered child nodes to be fetched again.\n */\n rebindChildren() {\n this.dataChangeNotification.notify();\n }\n /**\n * Triggers the `expand` event for the provided node and displays it's loading indicator.\n */\n expandNode(item, index) {\n this.expandService.expand(index, item);\n }\n /**\n * Triggers the `collapse` event for the provided node.\n */\n collapseNode(item, index) {\n this.expandService.collapse(index, item);\n }\n /**\n * Gets the current page size of the checked data item children collection\n * ([see example]({% slug loadmorebutton_treeview %}#toc-managing-page-sizes)).\n *\n * > Since the root nodes collection is not associated with any parent data item, pass `null` as `dataItem` param to get its page size.\n *\n * @param dataItem {any} - The parent data item of the targeted collection.\n * @returns {number} - The page size of the checked data item children collection.\n */\n getNodePageSize(dataItem) {\n this.verifyLoadMoreService();\n return this.loadMoreService.getGroupSize(dataItem);\n }\n /**\n * Sets the page size of the targeted data item children collection\n * ([see example]({% slug loadmorebutton_treeview %}#toc-managing-page-sizes)).\n *\n * > Since the root nodes collection is not associated with any parent data item, pass `null` as `dataItem` param to target its page size.\n *\n * @param dataItem {any} - The parent data item of the targeted collection.\n * @param pageSize {number} - The new page size.\n */\n setNodePageSize(dataItem, pageSize) {\n this.verifyLoadMoreService();\n this.loadMoreService.setGroupSize(dataItem, pageSize);\n }\n /**\n * @hidden\n *\n * Clears the current TreeViewLookupService node map and re-registers all nodes anew.\n * Child nodes are acquired through the provided `children` callback.\n */\n preloadChildNodes() {\n this.treeViewLookupService.reset();\n this.registerLookupItems(this.nodes);\n }\n attachDomHandlers() {\n const element = this.element.nativeElement;\n this.clickHandler = this.clickHandler.bind(this);\n this.domSubscriptions.push(this.renderer.listen(element, 'contextmenu', this.clickHandler), this.renderer.listen(element, 'click', this.clickHandler), this.renderer.listen(element, 'dblclick', this.clickHandler), this.renderer.listen(element, 'focusin', this.focusHandler.bind(this)), this.renderer.listen(element, 'focusout', this.blurHandler.bind(this)), this.renderer.listen(element, 'keydown', this.keydownHandler.bind(this)));\n }\n focusHandler(e) {\n let focusItem;\n if (match(e.target, '.k-treeview-item')) {\n focusItem = e.target;\n }\n else if (!isFocusable(e.target)) { // with compliments to IE\n focusItem = closestNode(e.target);\n }\n if (focusItem) {\n const nodeIndex = nodeId(e.target);\n if (this.navigationService.isDisabled(nodeIndex)) {\n return;\n }\n this.navigationService.activateIndex(nodeIndex);\n if (!this.isActive && hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n this.isActive = true;\n }\n }\n blurHandler(e) {\n if (this.isActive && match(e.target, '.k-treeview-item') &&\n (!e.relatedTarget || !match(e.relatedTarget, '.k-treeview-item') || !hasParent(e.relatedTarget, this.element.nativeElement))) {\n this.navigationService.deactivate();\n this.isActive = false;\n if (hasObservers(this.onBlur)) {\n this.ngZone.run(() => {\n this.onBlur.emit();\n });\n }\n }\n }\n clickHandler(e) {\n const target = e.target;\n if ((e.type === 'contextmenu' && !hasObservers(this.nodeClick)) ||\n (e.type === 'click' && !hasObservers(this.nodeClick) && !hasObservers(this.selectionChange) && !isLoadMoreButton(target)) ||\n (e.type === 'dblclick' && !hasObservers(this.nodeDblClick)) || isFocusable(target) ||\n (!isContent(target) && !isLoadMoreButton(target)) || !hasParent(target, this.element.nativeElement)) {\n return;\n }\n const index = nodeId(closestNode(target));\n // the disabled check is probably not needed due to the k-disabled styles\n if (!index || this.navigationService.isDisabled(index)) {\n return;\n }\n this.ngZone.run(() => {\n // record this value before emitting selectionChange (`this.navigationService.selectIndex`), as the treeview state may be changed on its emission\n const lookup = this.treeViewLookupService.itemLookup(index);\n if (e.type === 'click') {\n const loadMoreButton = this.navigationService.model.findNode(index).loadMoreButton;\n if (loadMoreButton) {\n this.navigationService.notifyLoadMore(index);\n return;\n }\n else {\n this.navigationService.selectIndex(index);\n }\n }\n const emitter = e.type === 'dblclick' ? this.nodeDblClick : this.nodeClick;\n emitter.emit({\n item: lookup.item,\n originalEvent: e,\n type: e.type\n });\n });\n }\n keydownHandler(e) {\n if (this.isActive && this.navigable) {\n this.ngZone.run(() => {\n this.navigationService.move(e);\n });\n }\n }\n verifyLoadMoreService() {\n if (isDevMode() && !isPresent(this.loadMoreService)) {\n throw new Error(`To use the TreeView paging functionality, you need to assign the \\`kendoTreeViewLoadMore\\` directive. See ${LOAD_MORE_DOC_LINK$1}.`);\n }\n }\n registerLookupItems(data, parentItem = null) {\n if (!isPresent(data) || data.length === 0) {\n return;\n }\n const parentIndex = nodeIndex(parentItem);\n const treeItems = data.map((node, index) => buildTreeItem(node, index, parentIndex));\n if (isPresent(parentItem)) {\n this.treeViewLookupService.registerChildren(parentIndex, treeItems);\n }\n treeItems.forEach(item => {\n this.treeViewLookupService.registerItem(item, parentItem);\n if (this.hasChildren(item.dataItem)) {\n this.children(item.dataItem)\n .subscribe(children => this.registerLookupItems(children, item));\n }\n });\n }\n}\nTreeViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: ExpandStateService }, { token: NavigationService }, { token: NodeChildrenService }, { token: SelectionService }, { token: TreeViewLookupService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: DataChangeNotificationService }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });\nTreeViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: TreeViewComponent, selector: \"kendo-treeview\", inputs: { filterInputPlaceholder: \"filterInputPlaceholder\", expandDisabledNodes: \"expandDisabledNodes\", animate: \"animate\", nodeTemplateRef: [\"nodeTemplate\", \"nodeTemplateRef\"], loadMoreButtonTemplateRef: [\"loadMoreButtonTemplate\", \"loadMoreButtonTemplateRef\"], trackBy: \"trackBy\", nodes: \"nodes\", textField: \"textField\", hasChildren: \"hasChildren\", isChecked: \"isChecked\", isDisabled: \"isDisabled\", isExpanded: \"isExpanded\", isSelected: \"isSelected\", isVisible: \"isVisible\", navigable: \"navigable\", children: \"children\", loadOnDemand: \"loadOnDemand\", filterable: \"filterable\", filter: \"filter\", size: \"size\", disableParentNodesOnly: \"disableParentNodesOnly\" }, outputs: { childrenLoaded: \"childrenLoaded\", onBlur: \"blur\", onFocus: \"focus\", expand: \"expand\", collapse: \"collapse\", nodeDragStart: \"nodeDragStart\", nodeDrag: \"nodeDrag\", filterStateChange: \"filterStateChange\", nodeDrop: \"nodeDrop\", nodeDragEnd: \"nodeDragEnd\", addItem: \"addItem\", removeItem: \"removeItem\", checkedChange: \"checkedChange\", selectionChange: \"selectionChange\", filterChange: \"filterChange\", nodeClick: \"nodeClick\", nodeDblClick: \"nodeDblClick\" }, host: { properties: { \"class.k-treeview\": \"this.classNames\", \"attr.role\": \"this.role\", \"attr.dir\": \"this.direction\", \"@.disabled\": \"this.animate\" } }, providers: providers, queries: [{ propertyName: \"nodeTemplateQuery\", first: true, predicate: NodeTemplateDirective, descendants: true }, { propertyName: \"loadMoreButtonTemplateQuery\", first: true, predicate: LoadMoreButtonTemplateDirective, descendants: true }], viewQueries: [{ propertyName: \"assetsContainer\", first: true, predicate: [\"assetsContainer\"], descendants: true, read: ViewContainerRef, static: true }], exportAs: [\"kendoTreeView\"], usesOnChanges: true, ngImport: i0, template: `\n \n \n \n \n \n \n \n
      \n
    \n \n `, isInline: true, components: [{ type: i8.TextBoxComponent, selector: \"kendo-textbox\", inputs: [\"focusableId\", \"title\", \"disabled\", \"readonly\", \"tabindex\", \"value\", \"selectOnFocus\", \"showSuccessIcon\", \"showErrorIcon\", \"clearButton\", \"successIcon\", \"errorIcon\", \"clearButtonIcon\", \"size\", \"rounded\", \"fillMode\", \"tabIndex\", \"placeholder\", \"maxlength\"], outputs: [\"valueChange\", \"inputFocus\", \"inputBlur\", \"focus\", \"blur\"], exportAs: [\"kendoTextBox\"] }, { type: TreeViewGroupComponent, selector: \"[kendoTreeViewGroup]\", inputs: [\"checkboxes\", \"expandIcons\", \"disabled\", \"selectable\", \"touchActions\", \"disableParentNodesOnly\", \"loadOnDemand\", \"trackBy\", \"nodes\", \"textField\", \"parentDataItem\", \"parentIndex\", \"nodeTemplateRef\", \"loadMoreButtonTemplateRef\", \"loadMoreService\", \"size\", \"expandDisabledNodes\", \"isChecked\", \"isDisabled\", \"isExpanded\", \"isVisible\", \"isSelected\", \"children\", \"hasChildren\"] }], directives: [{ type: i9.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i8.TextBoxPrefixTemplateDirective, selector: \"[kendoTextBoxPrefixTemplate]\" }], changeDetection: i0.ChangeDetectionStrategy.Default });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.Default,\n exportAs: 'kendoTreeView',\n providers: providers,\n selector: 'kendo-treeview',\n template: `\n \n \n \n \n \n \n \n
      \n
    \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: ExpandStateService }, { type: NavigationService }, { type: NodeChildrenService }, { type: SelectionService }, { type: TreeViewLookupService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: DataChangeNotificationService }, { type: i1.LocalizationService }]; }, propDecorators: { classNames: [{\n type: HostBinding,\n args: [\"class.k-treeview\"]\n }], role: [{\n type: HostBinding,\n args: [\"attr.role\"]\n }], direction: [{\n type: HostBinding,\n args: [\"attr.dir\"]\n }], assetsContainer: [{\n type: ViewChild,\n args: ['assetsContainer', { read: ViewContainerRef, static: true }]\n }], filterInputPlaceholder: [{\n type: Input\n }], expandDisabledNodes: [{\n type: Input\n }], animate: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['@.disabled']\n }], childrenLoaded: [{\n type: Output\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], nodeDragStart: [{\n type: Output\n }], nodeDrag: [{\n type: Output\n }], filterStateChange: [{\n type: Output\n }], nodeDrop: [{\n type: Output\n }], nodeDragEnd: [{\n type: Output\n }], addItem: [{\n type: Output\n }], removeItem: [{\n type: Output\n }], checkedChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], nodeClick: [{\n type: Output\n }], nodeDblClick: [{\n type: Output\n }], nodeTemplateQuery: [{\n type: ContentChild,\n args: [NodeTemplateDirective, { static: false }]\n }], nodeTemplateRef: [{\n type: Input,\n args: ['nodeTemplate']\n }], loadMoreButtonTemplateQuery: [{\n type: ContentChild,\n args: [LoadMoreButtonTemplateDirective, { static: false }]\n }], loadMoreButtonTemplateRef: [{\n type: Input,\n args: ['loadMoreButtonTemplate']\n }], trackBy: [{\n type: Input\n }], nodes: [{\n type: Input\n }], textField: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }], isChecked: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], isExpanded: [{\n type: Input\n }], isSelected: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], navigable: [{\n type: Input\n }], children: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], filterable: [{\n type: Input\n }], filter: [{\n type: Input\n }], size: [{\n type: Input\n }], disableParentNodesOnly: [{\n type: Input\n }] } });\n\nconst indexChecked = (keys, index) => keys.filter(k => k === index).length > 0;\nconst matchKey = index => k => {\n if (index === k) {\n return true;\n }\n if (!k.split) {\n return false;\n }\n return k.split('_').reduce(({ key, result }, part) => {\n key += part;\n if (index === key || result) {\n return { result: true };\n }\n key += \"_\";\n return { key, result: false };\n }, { key: \"\", result: false }).result;\n};\n/**\n * A directive which manages the in-memory checked state of the TreeView node\n * ([see example]({% slug checkboxes_treeview %})).\n */\nclass CheckDirective {\n constructor(treeView, zone) {\n this.treeView = treeView;\n this.zone = zone;\n /**\n * Fires when the `checkedKeys` collection was updated.\n */\n this.checkedKeysChange = new EventEmitter();\n this.subscriptions = new Subscription();\n this.checkActions = {\n 'multiple': (e) => this.checkMultiple(e),\n 'single': (e) => this.checkSingle(e)\n };\n /**\n * Reflectes the internal `checkedKeys` state.\n */\n this.state = new Set();\n this.subscriptions.add(this.treeView.checkedChange\n .subscribe((e) => this.check(e)));\n let expandedItems = [];\n this.subscriptions.add(this.treeView.childrenLoaded\n .pipe(filter(() => this.options.checkChildren && this.treeView.loadOnDemand), tap(item => expandedItems.push(item)), switchMap(() => this.zone.onStable.pipe(take(1))))\n .subscribe(() => this.addCheckedItemsChildren(expandedItems)));\n this.treeView.isChecked = this.isItemChecked.bind(this);\n }\n /**\n * @hidden\n */\n set isChecked(value) {\n this.treeView.isChecked = value;\n }\n get options() {\n const defaultOptions = {\n checkChildren: true,\n checkParents: true,\n enabled: true,\n mode: \"multiple\"\n };\n if (!isPresent(this.checkable) || typeof this.checkable === 'string') {\n return defaultOptions;\n }\n const checkSettings = isBoolean(this.checkable)\n ? { enabled: this.checkable }\n : this.checkable;\n return Object.assign(defaultOptions, checkSettings);\n }\n ngOnChanges(changes) {\n if (changes.checkable) {\n this.treeView.checkboxes = this.options.enabled;\n this.toggleCheckOnClick();\n }\n if (isChanged('checkedKeys', changes, false) && changes.checkedKeys.currentValue !== this.lastChange) {\n this.state = new Set(changes.checkedKeys.currentValue);\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.unsubscribeClick();\n }\n isItemChecked(dataItem, index) {\n if (!this.checkKey) {\n return this.isIndexChecked(index);\n }\n const hasKey = this.state.has(this.itemKey({ dataItem, index }));\n return hasKey ? 'checked' : 'none';\n }\n isIndexChecked(index) {\n const checkedKeys = Array.from(this.state).filter(matchKey(index));\n if (indexChecked(checkedKeys, index)) {\n return 'checked';\n }\n const { mode, checkParents } = this.options;\n if (mode === 'multiple' && checkParents && checkedKeys.length) {\n return 'indeterminate';\n }\n return 'none';\n }\n itemKey(item) {\n if (!isPresent(this.checkKey)) {\n return item.index;\n }\n if (typeof this.checkKey === \"string\" && isPresent(item.dataItem)) {\n return item.dataItem[this.checkKey];\n }\n if (typeof this.checkKey === \"function\") {\n return this.checkKey(item);\n }\n }\n check(e) {\n const { enabled, mode } = this.options;\n const performSelection = this.checkActions[mode] || noop;\n if (!enabled) {\n return;\n }\n performSelection(e);\n }\n checkSingle(node) {\n const key = this.itemKey(node.item);\n const hasKey = this.state.has(key);\n this.state.clear();\n if (!hasKey) {\n this.state.add(key);\n }\n this.notify();\n }\n checkMultiple(node) {\n this.checkNode(node);\n if (this.options.checkParents) {\n this.checkParents(node.parent);\n }\n this.notify();\n }\n toggleCheckOnClick() {\n this.unsubscribeClick();\n if (this.options.checkOnClick) {\n this.clickSubscription = this.treeView.nodeClick.subscribe(args => {\n if (args.type === 'click') {\n const lookup = this.treeView.itemLookup(args.item.index);\n this.check(lookup);\n }\n });\n }\n }\n unsubscribeClick() {\n if (this.clickSubscription) {\n this.clickSubscription.unsubscribe();\n this.clickSubscription = null;\n }\n }\n checkNode(node) {\n if (!isPresent(node.item.dataItem) || this.treeView.isDisabled(node.item.dataItem, node.item.index)) {\n return;\n }\n const currentKey = this.itemKey(node.item);\n if (!isPresent(currentKey)) {\n return;\n }\n const pendingCheck = [currentKey];\n if (this.options.checkChildren) {\n const descendants = fetchLoadedDescendants(node, ({ item }) => (this.treeView.disableParentNodesOnly || this.options.checkDisabledChildren ?\n this.treeView.isVisible(item.dataItem, item.index) :\n this.treeView.isVisible(item.dataItem, item.index) &&\n !this.treeView.isDisabled(item.dataItem, item.index)));\n pendingCheck.push(...descendants.filter((item) => this.options.checkDisabledChildren || !this.treeView.isDisabled(item.item.dataItem, item.item.index))\n .map(({ item }) => this.itemKey(item)));\n }\n const shouldCheck = !this.state.has(currentKey);\n pendingCheck.forEach(key => {\n if (shouldCheck) {\n this.state.add(key);\n }\n else {\n this.state.delete(key);\n }\n });\n }\n checkParents(parent) {\n if (!isPresent(parent)) {\n return;\n }\n let currentParent = parent;\n while (currentParent) {\n const parentKey = this.itemKey(currentParent.item);\n const isDisabled = this.treeView.isDisabled(currentParent.item.dataItem, currentParent.item.index);\n const allChildrenSelected = currentParent.children.every(item => this.state.has(this.itemKey(item)));\n if ((!isDisabled || this.options.checkDisabledChildren) && allChildrenSelected) {\n this.state.add(parentKey);\n }\n else {\n this.state.delete(parentKey);\n }\n currentParent = currentParent.parent;\n }\n }\n allChildrenSelected(children) {\n return children.every(item => {\n const childrenSel = this.allChildrenSelected(item.children);\n return this.state.has(this.itemKey(item.item)) && childrenSel;\n });\n }\n notify() {\n this.lastChange = Array.from(this.state);\n this.checkedKeysChange.emit(this.lastChange);\n }\n addCheckedItemsChildren(lookups) {\n if (!isPresent(lookups) || lookups.length === 0) {\n return;\n }\n const initiallyCheckedItemsCount = this.state.size;\n const disabledItems = new Set();\n lookups.forEach(lookup => {\n const itemKey = this.itemKey(lookup.item);\n if (!this.state.has(itemKey)) {\n return;\n }\n lookup.children.forEach(item => {\n // ensure both the parent item and each child node is enabled\n if ((!this.treeView.isDisabled(lookup.item.dataItem, lookup.item.index) &&\n !this.treeView.isDisabled(item.dataItem, item.index)) ||\n this.treeView.disableParentNodesOnly || this.options.checkDisabledChildren) {\n this.state.add(this.itemKey(item));\n }\n if (this.treeView.disableParentNodesOnly &&\n !this.options.checkDisabledChildren &&\n this.treeView.isDisabled(item.dataItem, item.index)) {\n disabledItems.add(this.itemKey(item));\n }\n });\n });\n disabledItems.forEach(item => this.state.delete(item));\n const hasNewlyCheckedItems = initiallyCheckedItemsCount !== this.state.size;\n if (hasNewlyCheckedItems) {\n this.zone.run(() => this.notify());\n }\n }\n}\nCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckDirective, deps: [{ token: TreeViewComponent }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });\nCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: CheckDirective, selector: \"[kendoTreeViewCheckable]\", inputs: { isChecked: \"isChecked\", checkKey: [\"checkBy\", \"checkKey\"], checkedKeys: \"checkedKeys\", checkable: [\"kendoTreeViewCheckable\", \"checkable\"] }, outputs: { checkedKeysChange: \"checkedKeysChange\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewCheckable]' }]\n }], ctorParameters: function () { return [{ type: TreeViewComponent }, { type: i0.NgZone }]; }, propDecorators: { isChecked: [{\n type: Input\n }], checkKey: [{\n type: Input,\n args: [\"checkBy\"]\n }], checkedKeys: [{\n type: Input\n }], checkable: [{\n type: Input,\n args: ['kendoTreeViewCheckable']\n }], checkedKeysChange: [{\n type: Output\n }] } });\n\n/**\n * A directive which manages the disabled in-memory state of the TreeView node\n * ([see example]({% slug disabledstate_treeview %})).\n */\nclass DisableDirective {\n constructor(treeView, cdr) {\n this.treeView = treeView;\n this.cdr = cdr;\n /**\n * Defines the collection that will store the disabled keys.\n */\n this.disabledKeys = [];\n this.treeView.isDisabled = (dataItem, index) => (this.disabledKeys.indexOf(this.itemKey({ dataItem, index })) > -1);\n }\n /**\n * @hidden\n */\n set isDisabled(value) {\n this.treeView.isDisabled = value;\n }\n ngOnChanges(changes = {}) {\n const { disabledKeys } = changes;\n if (disabledKeys && !disabledKeys.firstChange) {\n this.cdr.markForCheck();\n }\n }\n itemKey(e) {\n if (!this.disableKey) {\n return e.index;\n }\n if (typeof this.disableKey === \"string\") {\n return e.dataItem[this.disableKey];\n }\n if (typeof this.disableKey === \"function\") {\n return this.disableKey(e);\n }\n }\n}\nDisableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisableDirective, deps: [{ token: TreeViewComponent }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\nDisableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DisableDirective, selector: \"[kendoTreeViewDisable]\", inputs: { isDisabled: \"isDisabled\", disableKey: [\"kendoTreeViewDisable\", \"disableKey\"], disabledKeys: \"disabledKeys\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DisableDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewDisable]' }]\n }], ctorParameters: function () { return [{ type: TreeViewComponent }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { isDisabled: [{\n type: Input\n }], disableKey: [{\n type: Input,\n args: [\"kendoTreeViewDisable\"]\n }], disabledKeys: [{\n type: Input\n }] } });\n\nconst DEFAULT_FILTER_EXPAND_SETTINGS = {\n maxAutoExpandResults: -1,\n expandMatches: false,\n expandedOnClear: \"none\"\n};\n/**\n * A directive which manages the expanded state of the TreeView.\n * ([see example]({% slug expandedstate_treeview %})).\n */\nclass ExpandDirective {\n constructor(component) {\n this.component = component;\n /**\n * Whether or not to auto-expand the nodes leading from the root node to each filter result.\n * To fine-tune this behavior, pass a [`FilterExpandSettings`]({% slug api_treeview_filterexpandsettings %}) object to this input.\n * @default false\n */\n this.expandOnFilter = false;\n /**\n * Fires when the `expandedKeys` collection was updated.\n */\n this.expandedKeysChange = new EventEmitter();\n this.subscriptions = new Subscription();\n /**\n * Reflectes the internal `expandedKeys` state.\n */\n this.state = new Set();\n this.originalExpandedKeys = new Set();\n this.isFiltered = false;\n /**\n * Fills array with the correct expand keys according to wrapper metadata.\n */\n this.updateExpandedNodes = (collection, node, autoExpandMatches) => {\n if (node.containsMatches || node.isMatch && autoExpandMatches && isArrayWithAtLeastOneItem(node.children)) {\n collection.push(this.itemKey({ dataItem: node.dataItem, index: node.index }));\n }\n if (isArrayWithAtLeastOneItem(node.children)) {\n node.children.forEach(child => {\n this.updateExpandedNodes(collection, child, autoExpandMatches);\n });\n }\n };\n /**\n * Fills array with the expand key of every node.\n */\n this.getEveryExpandKey = (collection, node) => {\n if (isArrayWithAtLeastOneItem(node.children)) {\n collection.push(this.itemKey({ dataItem: node.dataItem, index: node.index }));\n }\n if (isArrayWithAtLeastOneItem(node.children)) {\n node.children.forEach(child => {\n this.getEveryExpandKey(collection, child);\n });\n }\n };\n this.subscriptions.add(merge(this.component.expand.pipe(map(e => (Object.assign({ expand: true }, e)))), this.component.collapse.pipe(map(e => (Object.assign({ expand: false }, e))))).subscribe(this.toggleExpand.bind(this)));\n if (this.component.filterStateChange) {\n this.subscriptions.add(this.component.filterStateChange.subscribe(this.handleAutoExpand.bind(this)));\n }\n this.component.isExpanded = (dataItem, index) => this.state.has(this.itemKey({ dataItem, index }));\n }\n /**\n * @hidden\n */\n set isExpanded(value) {\n this.component.isExpanded = value;\n }\n get filterExpandSettings() {\n const settings = isBoolean(this.expandOnFilter) ? { enabled: this.expandOnFilter } : Object.assign(Object.assign({}, this.expandOnFilter), { enabled: true });\n return Object.assign({}, DEFAULT_FILTER_EXPAND_SETTINGS, settings);\n }\n ngOnChanges(changes) {\n if (isChanged('expandedKeys', changes, false) && changes.expandedKeys.currentValue !== this.lastChange) {\n this.state = new Set(changes.expandedKeys.currentValue);\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n itemKey(e) {\n if (this.expandKey) {\n if (typeof this.expandKey === \"string\") {\n return e.dataItem[this.expandKey];\n }\n if (typeof this.expandKey === \"function\") {\n return this.expandKey(e);\n }\n }\n return e.index;\n }\n toggleExpand({ index, dataItem, expand }) {\n const key = this.itemKey({ index, dataItem });\n const isExpanded = this.state.has(key);\n let notify = false;\n if (isExpanded && !expand) {\n this.state.delete(key);\n notify = true;\n }\n else if (!isExpanded && expand) {\n this.state.add(key);\n notify = true;\n }\n if (notify) {\n this.notify();\n }\n }\n handleAutoExpand({ nodes, matchCount, term }) {\n if (!this.filterExpandSettings.enabled) {\n return;\n }\n const { maxAutoExpandResults, expandMatches: autoExpandMatches, expandedOnClear } = this.filterExpandSettings;\n if (!this.isFiltered) {\n this.originalExpandedKeys = new Set(this.state);\n }\n const exitingFilteredState = this.isFiltered && !term;\n const maxExceeded = maxAutoExpandResults !== -1 && matchCount > maxAutoExpandResults;\n const exitAutoExpandedState = exitingFilteredState || maxExceeded;\n if (exitAutoExpandedState) {\n switch (expandedOnClear) {\n case \"initial\": {\n if (!sameValues(this.state, this.originalExpandedKeys)) {\n this.state = this.originalExpandedKeys;\n this.notify();\n }\n break;\n }\n case \"all\": {\n this.state = new Set(nodes.reduce((acc, rootNode) => {\n this.getEveryExpandKey(acc, rootNode);\n return acc;\n }, []));\n this.notify();\n break;\n }\n case \"unchanged\": {\n break;\n }\n case \"none\":\n default: {\n if (this.state.size !== 0) {\n this.state.clear();\n this.notify();\n }\n break;\n }\n }\n this.isFiltered = false;\n return;\n }\n const indicesToExpand = new Set(nodes.reduce((acc, rootNode) => {\n this.updateExpandedNodes(acc, rootNode, autoExpandMatches);\n return acc;\n }, []));\n if (!sameValues(this.state, indicesToExpand)) {\n this.state = indicesToExpand;\n this.notify();\n }\n this.isFiltered = true;\n }\n notify() {\n this.lastChange = Array.from(this.state);\n this.expandedKeysChange.emit(this.lastChange);\n }\n}\nExpandDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandDirective, deps: [{ token: ExpandableComponent }], target: i0.ɵɵFactoryTarget.Directive });\nExpandDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: ExpandDirective, selector: \"[kendoTreeViewExpandable]\", inputs: { isExpanded: \"isExpanded\", expandKey: [\"expandBy\", \"expandKey\"], expandOnFilter: \"expandOnFilter\", expandedKeys: \"expandedKeys\" }, outputs: { expandedKeysChange: \"expandedKeysChange\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: ExpandDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewExpandable]' }]\n }], ctorParameters: function () { return [{ type: ExpandableComponent }]; }, propDecorators: { isExpanded: [{\n type: Input\n }], expandKey: [{\n type: Input,\n args: [\"expandBy\"]\n }], expandOnFilter: [{\n type: Input\n }], expandedKeysChange: [{\n type: Output\n }], expandedKeys: [{\n type: Input\n }] } });\n\n/**\n * A directive which manages the in-memory selection state of the TreeView node\n * ([see example]({% slug selection_treeview %})).\n */\nclass SelectDirective {\n constructor(treeView, navigationService) {\n this.treeView = treeView;\n this.navigationService = navigationService;\n /**\n * Fires when the `selectedKeys` collection was updated.\n */\n this.selectedKeysChange = new EventEmitter();\n this.subscriptions = new Subscription();\n this.selectActions = {\n 'multiple': (e) => this.selectMultiple(e),\n 'single': (e) => this.selectSingle(e)\n };\n /**\n * Reflectes the internal `selectedKeys` state.\n */\n this.state = new Set();\n this.subscriptions.add(this.treeView.selectionChange.subscribe(this.select.bind(this)));\n this.treeView.isSelected = (dataItem, index) => (this.state.has(this.itemKey({ dataItem, index })));\n this.navigationService.deselectAllButCurrentItem.subscribe((node) => {\n this.selectSingle(node);\n });\n }\n /**\n * @hidden\n */\n set isSelected(value) {\n this.treeView.isSelected = value;\n }\n get getAriaMultiselectable() {\n return this.options.mode === 'multiple';\n }\n get options() {\n const defaultOptions = {\n enabled: true,\n mode: 'single'\n };\n if (!isPresent(this.selection) || typeof this.selection === 'string') {\n return defaultOptions;\n }\n const selectionSettings = isBoolean(this.selection) ? { enabled: this.selection } : this.selection;\n return Object.assign(defaultOptions, selectionSettings);\n }\n ngOnChanges(changes) {\n var _a;\n if (isChanged('selectedKeys', changes, false) && changes.selectedKeys.currentValue !== this.lastChange) {\n this.state = new Set(changes.selectedKeys.currentValue);\n }\n const isSelectionBooleanTrue = typeof this.selection === 'boolean' && this.selection;\n this.navigationService.selection = isSelectionBooleanTrue ? 'single' : (_a = this.selection) === null || _a === void 0 ? void 0 : _a.mode;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n itemKey(e) {\n if (!this.selectKey) {\n return e.index;\n }\n if (typeof this.selectKey === 'string') {\n return e.dataItem[this.selectKey];\n }\n if (typeof this.selectKey === 'function') {\n return this.selectKey(e);\n }\n }\n select(e) {\n const { enabled, mode } = this.options;\n const performSelection = this.selectActions[mode] || noop;\n if (!enabled) {\n return;\n }\n performSelection(e);\n }\n selectSingle(node) {\n const key = this.itemKey(node);\n if (!this.state.has(key)) {\n this.state.clear();\n this.state.add(key);\n this.notify();\n }\n }\n selectMultiple(node) {\n const key = this.itemKey(node);\n const isSelected = this.state.has(key);\n if (!isPresent(key)) {\n return;\n }\n if (isSelected) {\n this.state.delete(key);\n }\n else {\n this.state.add(key);\n }\n this.notify();\n }\n notify() {\n this.lastChange = Array.from(this.state);\n this.selectedKeysChange.emit(this.lastChange);\n }\n}\nSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectDirective, deps: [{ token: TreeViewComponent }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Directive });\nSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: SelectDirective, selector: \"[kendoTreeViewSelectable]\", inputs: { isSelected: \"isSelected\", selectKey: [\"selectBy\", \"selectKey\"], selection: [\"kendoTreeViewSelectable\", \"selection\"], selectedKeys: \"selectedKeys\" }, outputs: { selectedKeysChange: \"selectedKeysChange\" }, host: { properties: { \"attr.aria-multiselectable\": \"this.getAriaMultiselectable\" } }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SelectDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewSelectable]' }]\n }], ctorParameters: function () { return [{ type: TreeViewComponent }, { type: NavigationService }]; }, propDecorators: { isSelected: [{\n type: Input\n }], selectKey: [{\n type: Input,\n args: ['selectBy']\n }], selection: [{\n type: Input,\n args: ['kendoTreeViewSelectable']\n }], selectedKeys: [{\n type: Input\n }], selectedKeysChange: [{\n type: Output\n }], getAriaMultiselectable: [{\n type: HostBinding,\n args: ['attr.aria-multiselectable']\n }] } });\n\n/**\n * Describes the attempted drop action during dragging.\n * Passed as `action` value to the [`kendoTreeViewDragClueTemplate`]({% slug api_treeview_dragcluetemplatedirective %}) directive.\n * By default, this value defines the rendered icon in the drag clue.\n */\nvar DropAction;\n(function (DropAction) {\n DropAction[DropAction[\"Add\"] = 0] = \"Add\";\n DropAction[DropAction[\"InsertTop\"] = 1] = \"InsertTop\";\n DropAction[DropAction[\"InsertBottom\"] = 2] = \"InsertBottom\";\n DropAction[DropAction[\"InsertMiddle\"] = 3] = \"InsertMiddle\";\n DropAction[DropAction[\"Invalid\"] = 4] = \"Invalid\";\n})(DropAction || (DropAction = {}));\n\n/**\n * Describes where the dragged item is dropped relative to the drop target item.\n */\nvar DropPosition;\n(function (DropPosition) {\n DropPosition[DropPosition[\"Over\"] = 0] = \"Over\";\n DropPosition[DropPosition[\"Before\"] = 1] = \"Before\";\n DropPosition[DropPosition[\"After\"] = 2] = \"After\";\n})(DropPosition || (DropPosition = {}));\n\n/**\n * @hidden\n */\nvar ScrollDirection;\n(function (ScrollDirection) {\n ScrollDirection[ScrollDirection[\"Up\"] = -1] = \"Up\";\n ScrollDirection[ScrollDirection[\"Down\"] = 1] = \"Down\";\n})(ScrollDirection || (ScrollDirection = {}));\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Arguments for the TreeView [`nodeDrop`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrop) event.\n */\nclass TreeItemDropEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(initializer, originalEvent) {\n super();\n /**\n * @hidden\n */\n this.isValid = true;\n Object.assign(this, initializer);\n this.originalEvent = originalEvent;\n }\n /**\n * Specifies if the drop action should be marked as valid.\n * If set to `false`, the [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem) and\n * [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem) events will not be fired and the drag clue\n * will be animated back to the source item to indicate the action is marked as invalid.\n */\n setValid(isValid) {\n this.isValid = isValid;\n }\n}\n\n/**\n * Arguments for the TreeView [`nodeDragStart`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragstart) event.\n */\nclass TreeItemDragStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(initializer) {\n super();\n Object.assign(this, initializer);\n }\n}\n\n/**\n * Arguments for the TreeView [`nodeDrag`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrag) and\n * [`nodeDragEnd`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragend) events.\n */\nclass TreeItemDragEvent {\n /** @hidden */\n constructor() { }\n}\n\n/**\n * Checks if the browser supports relative stacking context.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n */\nconst hasRelativeStackingContext = memoize(() => {\n if (!(isDocumentAvailable() && isPresent(document.body))) {\n return false;\n }\n const top = 10;\n const parent = document.createElement(\"div\");\n parent.style.transform = \"matrix(10, 0, 0, 10, 0, 0)\";\n parent.innerHTML = `
    child
    `;\n document.body.appendChild(parent);\n const isDifferent = parent.children[0].getBoundingClientRect().top !== top;\n document.body.removeChild(parent);\n return isDifferent;\n});\n/**\n * Stores the result of the passed function's first invokation and returns it instead of invoking it again afterwards.\n */\nfunction memoize(fn) {\n let result;\n let called = false;\n return (...args) => {\n if (called) {\n return result;\n }\n result = fn(...args);\n called = true;\n return result;\n };\n}\n/**\n * @hidden\n *\n * Gets the offset of the parent element if the latter has the `transform` CSS prop applied.\n * Transformed parents create new stacking context and the `fixed` children must be position based on the transformed parent.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n *\n * If no parent container is `transform`-ed the function will return `{ left: 0, top: 0 }`;\n */\nconst getContainerOffset = (element) => {\n if (!(element && hasRelativeStackingContext())) {\n return { left: 0, top: 0 };\n }\n let offsetParent = element.parentElement;\n while (offsetParent) {\n if (window.getComputedStyle(offsetParent).transform !== 'none') {\n break;\n }\n offsetParent = offsetParent.parentElement;\n }\n if (offsetParent) {\n const rect = offsetParent.getBoundingClientRect();\n return {\n left: rect.left - offsetParent.scrollLeft,\n top: rect.top - offsetParent.scrollTop\n };\n }\n return { left: 0, top: 0 };\n};\n/**\n * @hidden\n */\nconst getDropAction = (dropPosition, dropTarget) => {\n if (!(isPresent(dropPosition) && isPresent(dropTarget))) {\n return DropAction.Invalid;\n }\n switch (dropPosition) {\n case DropPosition.Over:\n return DropAction.Add;\n case DropPosition.Before:\n return isPresent(closestNode(dropTarget).previousElementSibling) ? DropAction.InsertMiddle : DropAction.InsertTop;\n case DropPosition.After:\n return isPresent(closestNode(dropTarget).nextElementSibling) ? DropAction.InsertMiddle : DropAction.InsertBottom;\n default:\n return DropAction.Invalid;\n }\n};\n/**\n * @hidden\n */\nconst getDropPosition = (draggedItem, target, clientY, targetTreeView, containerOffset) => {\n if (!(isPresent(draggedItem) && isPresent(target) && isPresent(targetTreeView) && isPresent(containerOffset))) {\n return;\n }\n // the .k-treeview-mid element starts just after the checkbox/expand arrow and stretches till the end of the treeview on the right\n const item = closestWithMatch(target, '.k-treeview-top, .k-treeview-mid, .k-treeview-bot');\n if (!isPresent(item)) {\n return;\n }\n // the content element (.k-treeview-leaf:not(.k-treeview-load-more-button)) holds just the treeview item text\n const content = getContentElement(item);\n const targetChildOfDraggedItem = hasParent(item, closestNode(draggedItem));\n if (!isPresent(content) || (content === draggedItem) || targetChildOfDraggedItem) {\n return;\n }\n const itemViewPortCoords = content.getBoundingClientRect();\n /*\n if the user is hovering a treeview item, split the item height into four parts:\n - dropping into the top quarter should insert the dragged item before the drop target\n - dropping into the bottom quarter should insert the dragged item after the drop target\n - dropping into the second or third quarter should add the item as child node of the drop target\n\n if the user is NOT hovering a treeview item (he's dragging somewhere on the right), split the item height to just two parts:\n - dropping should insert before or after\n */\n const itemDivisionHeight = itemViewPortCoords.height / (isContent(target) ? 4 : 2);\n // clear any possible container offset created by parent elements with `transform` css property set\n const pointerPosition = clientY - containerOffset.top;\n const itemTop = itemViewPortCoords.top - containerOffset.top;\n if (pointerPosition < itemTop + itemDivisionHeight) {\n return DropPosition.Before;\n }\n if (pointerPosition >= itemTop + itemViewPortCoords.height - itemDivisionHeight) {\n return DropPosition.After;\n }\n return DropPosition.Over;\n};\n/**\n * @hidden\n */\nconst treeItemFromEventTarget = (treeView, dropTarget) => {\n if (!(isPresent(treeView) && isPresent(dropTarget))) {\n return null;\n }\n const node = closestNode(dropTarget);\n const index = nodeId(node);\n const lookup = treeView.itemLookup(index);\n if (!(isPresent(lookup) && isPresent(lookup.item.dataItem))) {\n return null;\n }\n return lookup;\n};\n/**\n * @hidden\n *\n * Emits `collapse` on the specified TreeView node if the latter is left empty after its last child node was dragged out.\n */\nconst collapseEmptyParent = (parent, parentNodes, treeview) => {\n if (isPresent(parent) && parentNodes.length === 0 && treeview.isExpanded(parent.item.dataItem, parent.item.index)) {\n treeview.collapseNode(parent.item.dataItem, parent.item.index);\n }\n};\n/**\n * @hidden\n *\n * Expands the node if it's dropped into and it's not yet expanded.\n */\nconst expandDropTarget = (dropTarget, treeView) => {\n if (!treeView.isExpanded(dropTarget.item.dataItem, dropTarget.item.index)) {\n treeView.expandNode(dropTarget.item.dataItem, dropTarget.item.index);\n }\n};\n/**\n * @hidden\n *\n * Extracts the event target from the viewport coords. Required for touch devices\n * where the `event.target` of a `pointermove` event is always the initially dragged item.\n */\nconst getDropTarget = (event) => {\n if (!(isDocumentAvailable() && isPresent(document.elementFromPoint))) {\n return event.target;\n }\n return document.elementFromPoint(event.clientX, event.clientY);\n};\n/**\n * @hidden\n *\n * Checks if the original index is before the new one and corrects the new one by decrementing the index for the level, where the original item stood.\n */\nconst updateMovedItemIndex = (newIndex, originalIndex) => {\n const movedItemNewIndexParts = newIndex.split('_');\n const originalItemIndexParts = originalIndex.split('_');\n // if the original item was moved from a deeper level, there's no need for index correction\n // e.g. 4_0_1 is moved to 5_0 => removing 4_0_1 will not cause 5_0 to be moved\n if (movedItemNewIndexParts.length < originalItemIndexParts.length) {\n return newIndex;\n }\n // check if the parent item paths are the same - index correction is not required when the original item path differs from the path of the moved item - they belong to different hierarchies\n // e.g. 4_1 is moved to 5_1 - the parent item paths are differen (4 compared to 5) => removing 4_1 will not cause 5_1 to be moved\n // e.g 4_1 is moved to 4_3 - the parent paths are the same (both 4) => removing 4_1 will cause 4_3 to be moved\n const originalItemParentPathLength = originalItemIndexParts.length - 1;\n const originalItemParentPath = originalItemIndexParts.slice(0, originalItemParentPathLength).join('_');\n const movedItemParentPath = movedItemNewIndexParts.slice(0, originalItemParentPathLength).join('_');\n // check if the the index of the level where the original item is taken from is greater than the one of the moved item\n // e.g. 4_5 is moved to 4_1 (comapre 5 and 1) => removing 4_5 will not cause 4_1 to be moved\n // e.g. 4_1 is moved to 4_5 (comapre 1 and 5) => removing 4_1 will cause 4_5 to be moved\n const originalItemIndexLevel = originalItemIndexParts.length - 1;\n const originalItemLevelIndex = Number(originalItemIndexParts[originalItemIndexLevel]);\n const movedItemLevelIndex = Number(movedItemNewIndexParts[originalItemIndexLevel]);\n if ((originalItemParentPath === movedItemParentPath) && (movedItemLevelIndex > originalItemLevelIndex)) {\n // if the removed item causes the dropped item to be moved a position up - decrement the index at that level\n movedItemNewIndexParts[originalItemIndexLevel] = String(movedItemLevelIndex - 1);\n return movedItemNewIndexParts.join('_');\n }\n return newIndex;\n};\n/**\n * @hidden\n */\nconst SCROLLBAR_REG_EXP = new RegExp('(auto|scroll)');\n/**\n * @hidden\n *\n * Retrives the first scrollable element starting the search from the provided one, traversing to the top of the DOM tree.\n */\nconst getScrollableContainer = (node) => {\n while (isPresent(node) && node.nodeName !== 'HTML') {\n const hasOverflow = node.scrollHeight > node.clientHeight;\n const hasScrollbar = SCROLLBAR_REG_EXP.test(getComputedStyle(node).overflowY);\n if (hasOverflow && hasScrollbar) {\n return node;\n }\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n *\n * Checks if the top of the scrollable element is reached.\n * Floors the scrollTop value.\n */\nconst isTopReached = (element) => Math.floor(element.scrollTop) <= 0;\n/**\n * @hidden\n *\n * Checks if the bottom of the scrollable element is reached.\n * Ceils the scrollTop value.\n */\nconst isBottomReached = (element) => Math.ceil(element.scrollTop) >= element.scrollHeight - element.clientHeight;\n/**\n * @hidden\n *\n * Scrolls the element in the given direction by the provided step.\n *\n * If the targeted scroll incrementation doesn't yield any result due to device pixel ratio issues (https://github.com/dimitar-pechev/RenderingIndependentScrollOffsets#readme),\n * increments the step with 1px and again attempts to change the scrollTop of the element, until the content is actually scrolled.\n *\n * Cuts the operation short after 20 unsuccessful attempts to prevent infinite loops in possible corner-case scenarios.\n */\nconst scrollElementBy = (element, step, direction) => {\n if (!(isPresent(element) && isDocumentAvailable())) {\n return;\n }\n const initialScrollTop = element.scrollTop;\n let currentStep = step;\n let iterations = 0;\n while (initialScrollTop === element.scrollTop &&\n !(direction === ScrollDirection.Up && isTopReached(element)) &&\n !(direction === ScrollDirection.Down && isBottomReached(element)) &&\n iterations < 20 // as the bulgarian saying goes - to ties our underpants\n ) {\n element.scrollTop += (currentStep * direction);\n currentStep += 1;\n iterations += 1;\n }\n};\n\n/**\n * @hidden\n */\nconst copyPageSize = (treeview, source, target) => {\n if (!isPresent(treeview.loadMoreService)) {\n return;\n }\n const sourceGroupSize = treeview.getNodePageSize(source);\n treeview.setNodePageSize(target, sourceGroupSize);\n};\n/**\n * @hidden\n */\nconst incrementPageSize = (treeview, dataItem) => {\n if (!isPresent(treeview.loadMoreService)) {\n return;\n }\n const currentPageSize = treeview.getNodePageSize(dataItem);\n treeview.setNodePageSize(dataItem, currentPageSize + 1);\n};\n/**\n * @hidden\n */\nconst decrementPageSize = (treeview, dataItem) => {\n if (!isPresent(treeview.loadMoreService)) {\n return;\n }\n const currentPageSize = treeview.getNodePageSize(dataItem);\n treeview.setNodePageSize(dataItem, currentPageSize - 1);\n};\n\n/**\n * @hidden\n */\nclass HierarchyEditingService {\n constructor(hierarchyBinding) {\n this.hierarchyBinding = hierarchyBinding;\n }\n add({ sourceItem, destinationItem, dropPosition, sourceTree, destinationTree }) {\n // shallow clone the item as not to mistake it for its 'older' version when the remove handler kicks in to splice the item at its old position\n const clonedSourceDataItem = Object.assign({}, getDataItem(sourceItem));\n if (dropPosition === DropPosition.Over) {\n // expand the item that was dropped into\n expandDropTarget(destinationItem, destinationTree);\n const destinationChildren = this.childrenFor(getDataItem(destinationItem));\n // add the moved node just before the load more button if load more is enabled\n const targetIndex = isPresent(destinationTree.loadMoreService) ?\n Math.min(destinationTree.loadMoreService.getGroupSize(getDataItem(destinationItem)), destinationChildren.length) : // the page size might be greater than the actual children array length\n destinationChildren.length;\n destinationChildren.splice(targetIndex, 0, clonedSourceDataItem);\n setter(this.hierarchyBinding.childrenField)(getDataItem(destinationItem), destinationChildren);\n this.movedItemNewIndex = buildTreeIndex(destinationItem.item.index, targetIndex);\n }\n else {\n const destinationParentNodes = this.getParentNodes(destinationItem, destinationTree);\n const shiftIndex = dropPosition === DropPosition.After ? 1 : 0;\n const targetIndex = destinationParentNodes.indexOf(getDataItem(destinationItem)) + shiftIndex;\n destinationParentNodes.splice(targetIndex, 0, clonedSourceDataItem);\n const parentIndex = destinationItem.parent ? destinationItem.parent.item.index : null;\n this.movedItemNewIndex = buildTreeIndex(parentIndex, targetIndex);\n }\n // increment the parent page size => an item is moved into it\n const updatedParent = dropPosition === DropPosition.Over ? getDataItem(destinationItem) : getDataItem(destinationItem.parent);\n incrementPageSize(destinationTree, updatedParent);\n // the page sizes are stored by data-item reference => copy the old item ref page size to the new item reference\n copyPageSize(destinationTree, getDataItem(sourceItem), clonedSourceDataItem);\n // the source tree nodes are reloaded on `removeItem` - reload the destination tree nodes if the soruce and the destination tree are different\n if (sourceTree !== destinationTree && !destinationTree.loadOnDemand) {\n destinationTree.preloadChildNodes();\n }\n // if the source and destination trees are the same, focusing the moved item here will not have the desired effect\n // as the `remove` handler has not yet kicked-in to remove the item from its old position\n if (sourceTree !== destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n destinationTree.focus(this.movedItemNewIndex);\n }\n }\n remove({ sourceItem, sourceTree, destinationTree }) {\n const sourceParentNodes = this.getParentNodes(sourceItem, sourceTree);\n const sourceItemIndex = sourceParentNodes.indexOf(getDataItem(sourceItem));\n sourceParentNodes.splice(sourceItemIndex, 1);\n // emit collapse for the parent node if its last child node was spliced\n collapseEmptyParent(sourceItem.parent, sourceParentNodes, sourceTree);\n // decrement source item parent page size => an item has been removed from it\n decrementPageSize(sourceTree, getDataItem(sourceItem.parent));\n // reload the treeview nodes\n if (!sourceTree.loadOnDemand) {\n sourceTree.preloadChildNodes();\n }\n // if the source and destination trees are different we want to focus only the moved item in the destination tree\n if (sourceTree === destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n // after the source item is removed from its original position, the candidate index might have to be corrected\n const index = updateMovedItemIndex(this.movedItemNewIndex, sourceItem.item.index);\n destinationTree.focus(index);\n }\n }\n getParentNodes(node, treeView) {\n return isPresent(node.parent) ?\n this.childrenFor(getDataItem(node.parent)) :\n treeView.nodes;\n }\n childrenFor(dataItem) {\n return getter(this.hierarchyBinding.childrenField)(dataItem) || [];\n }\n}\n\n/**\n * @hidden\n */\nconst DEFAULT_FILTER_SETTINGS = {\n operator: 'contains',\n ignoreCase: true,\n mode: \"lenient\"\n};\n\n/**\n * @hidden\n */\nclass FilteringBase {\n constructor(component) {\n this.component = component;\n this.visibleNodes = new Set();\n this._filterSettings = DEFAULT_FILTER_SETTINGS;\n }\n /**\n * The settings which are applied when performing a filter on the component's data.\n */\n set filterSettings(settings) {\n this._filterSettings = Object.assign(Object.assign({}, DEFAULT_FILTER_SETTINGS), settings);\n }\n get filterSettings() {\n return this._filterSettings;\n }\n /**\n * Applies a filter and changes the visibility of the component's nodes accordingly.\n */\n set filter(term) {\n this.handleFilterChange(term);\n }\n /**\n * @hidden\n */\n handleFilterChange(term) {\n if (!this.filterData) {\n return;\n }\n this.resetNodesVisibility(this.filterData);\n if (term) {\n filterTree(this.filterData, term, this.filterSettings, this.component.textField);\n }\n this.updateVisibleNodes(this.filterData);\n if (isPresent(this.component.filterStateChange)) {\n this.component.filterStateChange.emit({\n nodes: this.filterData,\n matchCount: this.visibleNodes.size,\n term,\n filterSettings: this.filterSettings\n });\n }\n }\n updateVisibleNodes(items) {\n items.forEach((wrapper) => {\n if (wrapper.visible) {\n this.visibleNodes.add(wrapper.dataItem);\n }\n if (wrapper.children) {\n this.updateVisibleNodes(wrapper.children);\n }\n });\n }\n resetNodesVisibility(items) {\n this.visibleNodes.clear();\n items.forEach((wrapper) => {\n wrapper.visible = true;\n if (wrapper.children) {\n this.resetNodesVisibility(wrapper.children);\n }\n });\n }\n}\nFilteringBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FilteringBase, deps: [{ token: DataBoundComponent }], target: i0.ɵɵFactoryTarget.Directive });\nFilteringBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FilteringBase, inputs: { filterSettings: \"filterSettings\", filter: \"filter\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FilteringBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: DataBoundComponent }]; }, propDecorators: { filterSettings: [{\n type: Input\n }], filter: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n */\nclass DragClueComponent {\n constructor(cdr) {\n this.cdr = cdr;\n this.hostClasses = true;\n this.posistionStyle = 'fixed';\n }\n get statusIconClass() {\n switch (this.action) {\n case DropAction.Add: return 'k-i-plus';\n case DropAction.InsertTop: return 'k-i-insert-top';\n case DropAction.InsertBottom: return 'k-i-insert-bottom';\n case DropAction.InsertMiddle: return 'k-i-insert-middle';\n case DropAction.Invalid:\n default: return 'k-i-cancel';\n }\n }\n // exposed as a public method that can be called from outside as the component uses `OnPush` strategy\n detectChanges() {\n this.cdr.detectChanges();\n }\n}\nDragClueComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragClueComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDragClueComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DragClueComponent, selector: \"kendo-treeview-drag-clue\", host: { properties: { \"class.k-header\": \"this.hostClasses\", \"class.k-drag-clue\": \"this.hostClasses\", \"style.position\": \"this.posistionStyle\" } }, ngImport: i0, template: `\n \n \n {{text}}\n \n\n \n
    \n `, isInline: true, directives: [{ type: i9.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i9.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragClueComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-treeview-drag-clue',\n template: `\n \n \n {{text}}\n \n\n \n
    \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClasses: [{\n type: HostBinding,\n args: ['class.k-header']\n }, {\n type: HostBinding,\n args: ['class.k-drag-clue']\n }], posistionStyle: [{\n type: HostBinding,\n args: ['style.position']\n }] } });\n\n/**\n * @hidden\n */\nclass DragAndDropAssetService {\n get componentRef() {\n if (!isPresent(this._componentRef)) {\n throw new Error('The `initalize` method must be called before calling other service methods.');\n }\n return this._componentRef;\n }\n set componentRef(componentRef) {\n this._componentRef = componentRef;\n }\n get element() {\n return this.componentRef.location.nativeElement;\n }\n ngOnDestroy() {\n if (!isPresent(this._componentRef)) {\n return;\n }\n this.element.parentElement.removeChild(this.element);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n show() {\n this.element.style.display = '';\n }\n hide() {\n this.element.style.display = 'none';\n }\n move(left, top, offset = 0) {\n this.element.style.left = `${left + offset}px`;\n this.element.style.top = `${top + offset}px`;\n }\n}\nDragAndDropAssetService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragAndDropAssetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nDragAndDropAssetService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragAndDropAssetService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragAndDropAssetService, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @hidden\n */\nconst CLUE_OFFSET = 10;\n/**\n * @hidden\n */\nconst RETURN_ANIMATION_DURATION = 200;\n/**\n * @hidden\n */\nclass DragClueService extends DragAndDropAssetService {\n constructor(componentFactoryResolver) {\n super();\n this.componentFactoryResolver = componentFactoryResolver;\n }\n initialize(container, template) {\n if (isPresent(this._componentRef)) {\n this.ngOnDestroy();\n }\n const clueComponentFactory = this.componentFactoryResolver.resolveComponentFactory(DragClueComponent);\n this.componentRef = container.createComponent(clueComponentFactory);\n this.hide();\n this.componentRef.instance.template = template;\n this.componentRef.changeDetectorRef.detectChanges();\n }\n ngOnDestroy() {\n this.cancelReturnAnimation();\n this.cancelScroll();\n super.ngOnDestroy();\n }\n move(left, top) {\n super.move(left, top, CLUE_OFFSET);\n }\n animateDragClueToElementPosition(target) {\n if (!(isPresent(target) && isPresent(this.element.animate))) {\n this.hide();\n return;\n }\n const targetElementViewPortCoords = target.getBoundingClientRect();\n const clueElementViewPortCoords = this.element.getBoundingClientRect();\n this.returnAnimation = this.element.animate([\n { transform: 'translate(0, 0)' },\n { transform: `translate(${targetElementViewPortCoords.left - clueElementViewPortCoords.left}px, ${targetElementViewPortCoords.top - clueElementViewPortCoords.top}px)` }\n ], RETURN_ANIMATION_DURATION);\n this.returnAnimation.onfinish = () => this.hide();\n }\n cancelReturnAnimation() {\n if (!isPresent(this.returnAnimation)) {\n return;\n }\n this.returnAnimation.cancel();\n this.returnAnimation = null;\n }\n updateDragClueData(action, sourceItem, destinationItem) {\n const dragClue = this.componentRef.instance;\n if (action === dragClue.action && dataItemsEqual(sourceItem, dragClue.sourceItem) && dataItemsEqual(destinationItem, dragClue.destinationItem)) {\n return;\n }\n dragClue.action = action;\n dragClue.sourceItem = sourceItem;\n dragClue.destinationItem = destinationItem;\n dragClue.detectChanges();\n }\n updateText(text) {\n if (text === this.componentRef.instance.text) {\n return;\n }\n this.componentRef.instance.text = text;\n this.componentRef.instance.detectChanges();\n }\n /**\n * Triggers the first scrollable parent to scroll upwards or downwards.\n * Uses setInterval, so should be called outside the angular zone.\n */\n scrollIntoView({ step, interval }) {\n this.cancelScroll();\n const scrollableContainer = getScrollableContainer(this.element);\n if (!isPresent(scrollableContainer)) {\n return;\n }\n const containerRect = scrollableContainer.getBoundingClientRect();\n const clueRect = this.element.getBoundingClientRect();\n // if the beginning of the scrollable container is above the current viewport, fall-back to 0\n const firstVisibleClientTopPart = Math.max(containerRect.top, 0);\n // start scrolling up when the first visible item is dragged over\n const topLimit = firstVisibleClientTopPart + clueRect.height;\n // if the end of the scrollable container is beneath the current viewport, fall-back to its client height\n // add the distance from the start of the viewport to the beginning of the container to ensure scrolling bottom begins when the actual end of the container is reached\n const bottomLimit = firstVisibleClientTopPart + Math.min(containerRect.bottom, scrollableContainer.clientHeight);\n if (clueRect.top < topLimit) {\n this.scrollInterval = setInterval(() => scrollElementBy(scrollableContainer, step, ScrollDirection.Up), interval);\n }\n else if (clueRect.bottom > bottomLimit) {\n this.scrollInterval = setInterval(() => scrollElementBy(scrollableContainer, step, ScrollDirection.Down), interval);\n }\n }\n /**\n * Cancels out the on-going scroll animation, if present.\n */\n cancelScroll() {\n if (isPresent(this.scrollInterval)) {\n clearInterval(this.scrollInterval);\n this.scrollInterval = null;\n }\n }\n}\nDragClueService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragClueService, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable });\nDragClueService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragClueService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragClueService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }]; } });\n\n/**\n * @hidden\n */\nclass DropHintComponent {\n constructor(changeDetectorRef) {\n this.changeDetectorRef = changeDetectorRef;\n this.hostClass = true;\n this.position = 'fixed';\n this.pointerEvents = 'none';\n }\n // exposed as a public method that can be called from outside as the component uses `OnPush` strategy\n detectChanges() {\n this.changeDetectorRef.detectChanges();\n }\n}\nDropHintComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropHintComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDropHintComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropHintComponent, selector: \"kendo-treeview-drop-hint\", host: { properties: { \"class.k-drop-hint-container\": \"this.hostClass\", \"style.position\": \"this.position\", \"style.pointer-events\": \"this.pointerEvents\" } }, ngImport: i0, template: `\n \n
    \n
    \n \n\n \n \n `, isInline: true, directives: [{ type: i9.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i9.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropHintComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-treeview-drop-hint',\n template: `\n \n
    \n
    \n \n\n \n \n `\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClass: [{\n type: HostBinding,\n args: ['class.k-drop-hint-container']\n }], position: [{\n type: HostBinding,\n args: ['style.position']\n }], pointerEvents: [{\n type: HostBinding,\n args: ['style.pointer-events']\n }] } });\n\n/**\n * @hidden\n */\nclass DropHintService extends DragAndDropAssetService {\n constructor(componentFactoryResolver) {\n super();\n this.componentFactoryResolver = componentFactoryResolver;\n }\n initialize(container, template) {\n if (isPresent(this._componentRef)) {\n this.ngOnDestroy();\n }\n const hintComponentFactory = this.componentFactoryResolver.resolveComponentFactory(DropHintComponent);\n this.componentRef = container.createComponent(hintComponentFactory);\n this.hide();\n this.componentRef.instance.template = template;\n this.componentRef.changeDetectorRef.detectChanges();\n }\n updateDropHintData(action, sourceItem, destinationItem) {\n const dropHint = this.componentRef.instance;\n if (action === dropHint.action && dataItemsEqual(sourceItem, dropHint.sourceItem) && dataItemsEqual(destinationItem, dropHint.destinationItem)) {\n return;\n }\n dropHint.action = action;\n dropHint.sourceItem = sourceItem;\n dropHint.destinationItem = destinationItem;\n dropHint.detectChanges();\n }\n}\nDropHintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropHintService, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable });\nDropHintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropHintService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropHintService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }]; } });\n\n/**\n * Represents the template for the TreeView drag clue when an item is dragged. To define the clue template,\n * nest an `` tag with the `kendoTreeViewDragClueTemplate` directive inside a `` tag\n * ([see example]({% slug draganddrop_treeview %}#toc-templates)).\n *\n *\n * The text, attempted drop action, source item and destination item are available as context variables in the template:\n *\n *\n * - `let-text=\"text\"` (`string`)\n * - `let-action=\"action\"` ([`DropAction`]({% slug api_treeview_dropaction %}))\n * - `let-sourceItem=\"sourceItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n * - `let-destinationItem=\"destinationItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n */\nclass DragClueTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDragClueTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragClueTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDragClueTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DragClueTemplateDirective, selector: \"[kendoTreeViewDragClueTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragClueTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDragClueTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\n/**\n * Represents the template for the TreeView drop hint when an item is dragged. To define the hint template,\n * nest an `` tag with the `kendoTreeViewDropHintTemplate` directive inside a `` tag\n * ([see example]({% slug draganddrop_treeview %}#toc-templates)).\n *\n * The attempted drop action, source item and destination item are available as context variables in the template:\n *\n * - `let-action=\"action\"` ([`DropAction`]({% slug api_treeview_dropaction %}))\n * - `let-sourceItem=\"sourceItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n * - `let-destinationItem=\"destinationItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n */\nclass DropHintTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDropHintTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropHintTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nDropHintTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DropHintTemplateDirective, selector: \"[kendoTreeViewDropHintTemplate]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DropHintTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDropHintTemplate]'\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{\n type: Optional\n }] }]; } });\n\nconst DEFAULT_SCROLL_SETTINGS = {\n enabled: true,\n step: 1,\n interval: 1\n};\n/**\n * A directive which enables the dragging and dropping items inside the current TreeView or between multiple linked TreeView component instances\n * ([see example]({% slug draganddrop_treeview %})).\n *\n * Triggers the [`nodeDragStart`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragstart),\n * [`nodeDrag`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrag),\n * [`nodeDrop`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrop),\n * [`nodeDragEnd`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragend),\n * [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem) and\n * [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem)\n * events when the corresponding actions occur on the respective TreeView instance.\n */\nclass DragAndDropDirective {\n constructor(element, zone, treeview, dragClueService, dropHintService) {\n this.element = element;\n this.zone = zone;\n this.treeview = treeview;\n this.dragClueService = dragClueService;\n this.dropHintService = dropHintService;\n /**\n * Specifies whether the `removeItem` event will be fired after an item is dropped when the `ctrl` key is pressed.\n * If enabled, the `removeItem` event will not be fired on the source TreeView\n * ([see example]({% slug draganddrop_treeview %}#toc-multiple-treeviews)).\n *\n * @default false\n */\n this.allowCopy = false;\n /**\n * Specifes the TreeViewComponent instances into which dragged items from the current TreeViewComponent can be dropped\n * ([see example]({% slug draganddrop_treeview %}#toc-multiple-treeviews)).\n */\n this.dropZoneTreeViews = [];\n /**\n * Specifies the distance in pixels from the initial item pointerdown event, before the dragging is initiated.\n * The `nodeDragStart` and all consequent TreeView drag events will not be fired until the actual dragging begins.\n *\n * @default 5\n */\n this.startDragAfter = 5;\n /**\n * Controlls the auto-scrolling behavior during drag-and-drop ([see example]({% slug draganddrop_treeview %}#toc-auto-scrolling)).\n * Enbaled by default. To turn the auto-scrolling off, set this prop to `false`.\n *\n * By default, the scrolling will be performed by 1 pixel at every 1 millisecond, when the dragged item reaches the top or the bottom of the scrollable container.\n * The `step` and `interval` can be overridden by providing a `DragAndDropScrollSettings` object to this prop.\n *\n * @default true\n */\n this.autoScroll = true;\n /**\n * @hidden\n */\n this.userSelectStyle = 'none';\n /**\n * Describes the offset of the parent element if the latter has the `transform` CSS prop applied.\n * Transformed parents create new stacking context and the fixed children must be position based on the transformed parent.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n */\n this.containerOffset = { top: 0, left: 0 };\n this.treeview.touchActions = false;\n }\n get scrollSettings() {\n const userProvidedSettings = typeof this.autoScroll === 'boolean' ?\n { enabled: this.autoScroll } :\n this.autoScroll;\n return Object.assign({}, DEFAULT_SCROLL_SETTINGS, userProvidedSettings);\n }\n ngAfterContentInit() {\n this.initalizeDraggable();\n this.dragClueService.initialize(this.treeview.assetsContainer, this.dragClueTemplate && this.dragClueTemplate.templateRef);\n this.dropHintService.initialize(this.treeview.assetsContainer, this.dropHintTemplate && this.dropHintTemplate.templateRef);\n }\n ngOnDestroy() {\n this.draggable.destroy();\n }\n /**\n * @hidden\n */\n handlePress({ originalEvent }) {\n if (!isContent(originalEvent.target)) {\n return;\n }\n // store the drag target on press, show it only when it's actually dragged\n this.draggedItem = closestWithMatch(originalEvent.target, '.k-treeview-leaf');\n // record the current pointer down coords - copared to the `startDragAfter` value to calculate whether to initiate dragging\n this.pendingDragStartEvent = originalEvent;\n }\n /**\n * @hidden\n */\n handleDrag({ originalEvent, clientX, clientY }) {\n if (this.shouldInitiateDragStart({ clientX, clientY })) {\n this.initiateDragStart();\n }\n if (!isPresent(this.draggedItem) || isPresent(this.pendingDragStartEvent)) {\n return;\n }\n const dropTarget = getDropTarget(originalEvent);\n if (hasObservers(this.treeview.nodeDrag)) {\n this.zone.run(() => this.notifyDrag(originalEvent, dropTarget));\n }\n const targetTreeView = this.getTargetTreeView(dropTarget);\n const dropPosition = getDropPosition(this.draggedItem, dropTarget, clientY, targetTreeView, this.containerOffset);\n const dropHintAnchor = closestWithMatch(dropTarget, '.k-treeview-top, .k-treeview-mid, .k-treeview-bot');\n const dropAction = getDropAction(dropPosition, dropTarget);\n const sourceItem = treeItemFromEventTarget(this.treeview, this.draggedItem);\n const destinationItem = treeItemFromEventTarget(targetTreeView, dropTarget);\n this.updateDropHintState(dropPosition, dropHintAnchor, dropAction, sourceItem, destinationItem);\n this.updateDragClueState(dropAction, clientX, clientY, sourceItem, destinationItem);\n if (this.scrollSettings.enabled) {\n this.dragClueService.scrollIntoView(this.scrollSettings);\n }\n }\n /**\n * @hidden\n */\n handleRelease({ originalEvent, clientY }) {\n if (this.scrollSettings.enabled) {\n this.dragClueService.cancelScroll();\n }\n if (!isPresent(this.draggedItem) || isPresent(this.pendingDragStartEvent)) {\n this.pendingDragStartEvent = null;\n this.draggedItem = null;\n return;\n }\n const dropTarget = getDropTarget(originalEvent);\n const sourceTree = this.treeview;\n const destinationTree = this.getTargetTreeView(dropTarget);\n const dropPosition = getDropPosition(this.draggedItem, dropTarget, clientY, this.getTargetTreeView(dropTarget), this.containerOffset);\n const sourceItem = treeItemFromEventTarget(sourceTree, this.draggedItem);\n const destinationItem = treeItemFromEventTarget(destinationTree, dropTarget);\n if (isPresent(destinationItem) && isPresent(dropPosition)) {\n this.zone.run(() => this.notifyDrop({ sourceItem, destinationItem, dropPosition, sourceTree, destinationTree }, originalEvent));\n }\n else {\n this.dragClueService.animateDragClueToElementPosition(this.draggedItem);\n }\n if (hasObservers(this.treeview.nodeDragEnd)) {\n this.zone.run(() => this.notifyDragEnd({ sourceItem, destinationItem, originalEvent }));\n }\n this.dropHintService.hide();\n this.draggedItem = null;\n }\n updateDropHintState(dropPosition, dropHintAnchor, dropAction, sourceItem, destinationItem) {\n if (!isPresent(dropHintAnchor) || dropPosition === DropPosition.Over || !isPresent(dropPosition)) {\n this.dropHintService.hide();\n return;\n }\n const anchorViewPortCoords = dropHintAnchor.getBoundingClientRect();\n const insertBefore = dropPosition === DropPosition.Before;\n const top = insertBefore ? anchorViewPortCoords.top : (anchorViewPortCoords.top + anchorViewPortCoords.height);\n this.dropHintService.updateDropHintData(dropAction, sourceItem, destinationItem);\n // clear any possible container offset created by parent elements with `transform` css property set\n this.dropHintService.move(anchorViewPortCoords.left - this.containerOffset.left, top - this.containerOffset.top);\n this.dropHintService.show();\n }\n updateDragClueState(dropAction, clientX, clientY, sourceItem, destinationItem) {\n // clear any possible container offset created by parent elements with `transform` css property set\n this.dragClueService.move(clientX - this.containerOffset.left, clientY - this.containerOffset.top);\n this.dragClueService.updateDragClueData(dropAction, sourceItem, destinationItem);\n this.dragClueService.show();\n }\n initalizeDraggable() {\n this.draggable = new Draggable({\n press: this.handlePress.bind(this),\n drag: this.handleDrag.bind(this),\n release: this.handleRelease.bind(this)\n });\n this.zone.runOutsideAngular(() => this.draggable.bindTo(this.element.nativeElement));\n }\n notifyDragStart(originalEvent, dropTarget) {\n const sourceItem = treeItemFromEventTarget(this.treeview, dropTarget);\n const event = new TreeItemDragStartEvent({ sourceItem, originalEvent });\n this.treeview.nodeDragStart.emit(event);\n return event;\n }\n notifyDrag(originalEvent, dropTarget) {\n const dragEvent = {\n sourceItem: treeItemFromEventTarget(this.treeview, this.draggedItem),\n destinationItem: treeItemFromEventTarget(this.getTargetTreeView(dropTarget), dropTarget),\n originalEvent\n };\n this.treeview.nodeDrag.emit(dragEvent);\n }\n notifyDrop(args, originalEvent) {\n const event = new TreeItemDropEvent(args, originalEvent);\n args.destinationTree.nodeDrop.emit(event);\n // disable the animations on drop and restore them afterwards (if they were initially turned on)\n this.disableAnimationsForNextTick(args.destinationTree);\n if (args.sourceTree !== args.destinationTree) {\n this.disableAnimationsForNextTick(args.sourceTree);\n }\n if (!event.isDefaultPrevented() && event.isValid) {\n this.dragClueService.hide();\n // order matters in a flat data binding scenario (first add, then remove)\n args.destinationTree.addItem.emit(args);\n if (!(originalEvent.ctrlKey && this.allowCopy)) {\n args.sourceTree.removeItem.emit(args);\n }\n }\n else if (event.isDefaultPrevented()) {\n // directly hide the clue if the default is prevented\n this.dragClueService.hide();\n }\n else if (!event.isValid) {\n // animate the clue back to the source item position if marked as invalid\n this.dragClueService.animateDragClueToElementPosition(this.draggedItem);\n }\n }\n notifyDragEnd(dragEndEvent) {\n this.treeview.nodeDragEnd.emit(dragEndEvent);\n }\n getTargetTreeView(dropTarget) {\n const treeViewTagName = this.treeview.element.nativeElement.tagName;\n const targetTreeView = closestWithMatch(dropTarget, treeViewTagName);\n return [this.treeview, ...this.dropZoneTreeViews].find(treeView => isPresent(treeView) && treeView.element.nativeElement === targetTreeView);\n }\n disableAnimationsForNextTick(treeView) {\n // the treeView.animate getter returns `true` when the animations are turned off\n // confusing, but seems on purpose (the `animate` prop sets the value of the @.disabled host-bound attribute)\n if (treeView.animate) {\n return;\n }\n treeView.animate = false;\n this.zone.runOutsideAngular(() => setTimeout(() => treeView.animate = true));\n }\n shouldInitiateDragStart(currentPointerCoords) {\n if (!isPresent(this.pendingDragStartEvent)) {\n return false;\n }\n const distanceFromPointerDown = Math.sqrt(Math.pow((this.pendingDragStartEvent.clientX - currentPointerCoords.clientX), 2) +\n Math.pow((this.pendingDragStartEvent.clientY - currentPointerCoords.clientY), 2));\n return distanceFromPointerDown >= this.startDragAfter;\n }\n initiateDragStart() {\n if (hasObservers(this.treeview.nodeDragStart)) {\n const dragStartEvent = this.zone.run(() => this.notifyDragStart(this.pendingDragStartEvent, getDropTarget(this.pendingDragStartEvent)));\n if (dragStartEvent.isDefaultPrevented()) {\n this.pendingDragStartEvent = null;\n this.draggedItem = null;\n return;\n }\n }\n this.dragClueService.cancelReturnAnimation();\n this.dragClueService.updateText(this.draggedItem.innerText);\n this.containerOffset = getContainerOffset(this.draggedItem);\n this.pendingDragStartEvent = null;\n }\n}\nDragAndDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragAndDropDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: TreeViewComponent }, { token: DragClueService }, { token: DropHintService }], target: i0.ɵɵFactoryTarget.Directive });\nDragAndDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DragAndDropDirective, selector: \"[kendoTreeViewDragAndDrop]\", inputs: { allowCopy: \"allowCopy\", dropZoneTreeViews: \"dropZoneTreeViews\", startDragAfter: \"startDragAfter\", autoScroll: \"autoScroll\" }, host: { properties: { \"style.user-select\": \"this.userSelectStyle\", \"style.-ms-user-select\": \"this.userSelectStyle\", \"style.-moz-user-select\": \"this.userSelectStyle\", \"style.-webkit-user-select\": \"this.userSelectStyle\" } }, providers: [\n DragClueService,\n DropHintService\n ], queries: [{ propertyName: \"dragClueTemplate\", first: true, predicate: DragClueTemplateDirective, descendants: true }, { propertyName: \"dropHintTemplate\", first: true, predicate: DropHintTemplateDirective, descendants: true }], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragAndDropDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDragAndDrop]',\n providers: [\n DragClueService,\n DropHintService\n ]\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: TreeViewComponent }, { type: DragClueService }, { type: DropHintService }]; }, propDecorators: { allowCopy: [{\n type: Input\n }], dropZoneTreeViews: [{\n type: Input\n }], startDragAfter: [{\n type: Input\n }], autoScroll: [{\n type: Input\n }], dragClueTemplate: [{\n type: ContentChild,\n args: [DragClueTemplateDirective, { static: false }]\n }], dropHintTemplate: [{\n type: ContentChild,\n args: [DropHintTemplateDirective, { static: false }]\n }], userSelectStyle: [{\n type: HostBinding,\n args: ['style.user-select']\n }, {\n type: HostBinding,\n args: ['style.-ms-user-select']\n }, {\n type: HostBinding,\n args: ['style.-moz-user-select']\n }, {\n type: HostBinding,\n args: ['style.-webkit-user-select']\n }] } });\n\nconst indexBuilder$1 = new IndexBuilderService();\nconst mapToWrappers = (currentLevelNodes, childrenField, parent = null, parentIndex = '') => {\n if (!isArrayWithAtLeastOneItem(currentLevelNodes)) {\n return [];\n }\n return currentLevelNodes.map((node, idx) => {\n const index = indexBuilder$1.nodeIndex(idx.toString(), parentIndex);\n const wrapper = {\n dataItem: node,\n index,\n parent,\n visible: true\n };\n wrapper.children = mapToWrappers(getter(childrenField)(node), childrenField, wrapper, index);\n return wrapper;\n });\n};\n/**\n * A directive which encapsulates the retrieval of child nodes.\n */\nclass HierarchyBindingDirective extends FilteringBase {\n constructor(component, dragAndDropDirective) {\n super(component);\n this.component = component;\n this.dragAndDropDirective = dragAndDropDirective;\n /**\n * @hidden\n */\n this.loadOnDemand = true;\n this.originalData = [];\n const shouldFilter = !isPresent(this.dragAndDropDirective);\n this.component.isVisible = shouldFilter ? (node) => this.visibleNodes.has(node) : isVisible;\n }\n /**\n * The field name which holds the data items of the child component.\n */\n set childrenField(value) {\n if (!value) {\n throw new Error(\"'childrenField' cannot be empty\");\n }\n this._childrenField = value;\n }\n /**\n * @hidden\n * A callback which determines whether a TreeView node should be rendered as hidden.\n */\n set isVisible(fn) {\n this.component.isVisible = fn;\n }\n /**\n * The field name which holds the data items of the child component.\n */\n get childrenField() {\n return this._childrenField;\n }\n ngOnInit() {\n if (isPresent(this.childrenField)) {\n this.component.children = item => of(getter(this.childrenField)(item));\n this.component.hasChildren = item => {\n const children = getter(this.childrenField)(item);\n return Boolean(children && children.length);\n };\n this.component.editService = new HierarchyEditingService(this);\n this.component.filterChange.subscribe(this.handleFilterChange.bind(this));\n if (this.component.filter) {\n this.handleFilterChange(this.component.filter);\n }\n if (!this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n }\n ngOnChanges(changes) {\n if (isChanged('childrenField', changes, false)) {\n this.nodes = this.originalData;\n this.updateNodes(this.originalData);\n }\n if (isChanged('nodes', changes, false)) {\n this.updateNodes(changes.nodes.currentValue);\n }\n // should react to changes.loadOnDemand as well - should preload the data or clear the already cached items\n if (anyChanged(['nodes', 'loadOnDemand'], changes) && !this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n /**\n * @hidden\n */\n updateNodes(values) {\n this.originalData = values || [];\n this.filterData = mapToWrappers(values, this.childrenField) || [];\n this.updateVisibleNodes(this.filterData);\n }\n}\nHierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HierarchyBindingDirective, deps: [{ token: DataBoundComponent }, { token: DragAndDropDirective, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nHierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: HierarchyBindingDirective, selector: \"[kendoTreeViewHierarchyBinding]\", inputs: { childrenField: \"childrenField\", nodes: \"nodes\", isVisible: \"isVisible\", loadOnDemand: \"loadOnDemand\" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: HierarchyBindingDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewHierarchyBinding]' }]\n }], ctorParameters: function () { return [{ type: DataBoundComponent }, { type: DragAndDropDirective, decorators: [{\n type: Optional\n }, {\n type: Host\n }] }]; }, propDecorators: { childrenField: [{\n type: Input\n }], nodes: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }] } });\n\n/**\n * @hidden\n * Performs the right-to-left function composition. Functions must have a unary.\n */\nconst compose = (...args) => (data) => args.reduceRight((acc, curr) => curr(acc), data);\n\n/**\n * @hidden\n */\nclass FlatEditingService {\n constructor(flatBinding) {\n this.flatBinding = flatBinding;\n }\n add({ sourceItem, destinationItem, dropPosition, sourceTree, destinationTree }) {\n // shallow clone the item as not to mistake it for its 'older' version when the remove handler kicks in to splice the item at its old position\n const clonedSourceDataItem = Object.assign({}, getDataItem(sourceItem));\n if (dropPosition === DropPosition.Over) {\n // expand the item that was dropped into\n expandDropTarget(destinationItem, destinationTree);\n const destinationItemId = getter(this.flatBinding.idField)(getDataItem(destinationItem));\n setter(this.flatBinding.parentIdField)(clonedSourceDataItem, destinationItemId);\n const lastChildNodeIndex = this.getLastVisibleChildNodeIndex(destinationTree, this.flatBinding.originalData, getDataItem(destinationItem));\n // insert after the last visible child\n const targetIndex = lastChildNodeIndex + 1;\n this.flatBinding.originalData.splice(targetIndex, 0, clonedSourceDataItem);\n // rebind the treeview data before searching for the focus target index\n this.rebindData();\n const focusTarget = this.fetchChildNodes(getDataItem(destinationItem), destinationTree).indexOf(clonedSourceDataItem);\n this.movedItemNewIndex = buildTreeIndex(destinationItem.item.index, focusTarget);\n }\n else {\n const shiftIndex = dropPosition === DropPosition.After ? 1 : 0;\n const targetIndex = this.flatBinding.originalData.indexOf(getDataItem(destinationItem)) + shiftIndex;\n this.flatBinding.originalData.splice(targetIndex, 0, clonedSourceDataItem);\n const destinationItemParentId = getter(this.flatBinding.parentIdField)(getDataItem(destinationItem));\n setter(this.flatBinding.parentIdField)(clonedSourceDataItem, destinationItemParentId);\n // rebind the treeview data before searching for the focus target index\n this.rebindData();\n const parentIndex = destinationItem.parent ?\n destinationItem.parent.item.index :\n null;\n const parentContainer = destinationItem.parent ?\n this.fetchChildNodes(getDataItem(destinationItem.parent), destinationTree) :\n destinationTree.nodes;\n const focusTarget = parentContainer.indexOf(clonedSourceDataItem);\n this.movedItemNewIndex = buildTreeIndex(parentIndex, focusTarget);\n }\n if (sourceTree !== destinationTree) {\n this.addChildNodes(clonedSourceDataItem, sourceTree);\n }\n // increment the parent page size => an item is moved into it\n const updatedParent = dropPosition === DropPosition.Over ? getDataItem(destinationItem) : getDataItem(destinationItem.parent);\n incrementPageSize(destinationTree, updatedParent);\n // the page sizes are stored by data-item reference => copy the old item ref page size to the new item reference\n copyPageSize(destinationTree, getDataItem(sourceItem), clonedSourceDataItem);\n // the source tree nodes are reloaded on `removeItem` - reload the destination tree nodes if the soruce and the destination tree are different\n if (sourceTree !== destinationTree && !destinationTree.loadOnDemand) {\n destinationTree.preloadChildNodes();\n }\n // if the source and destination trees are the same, focusing the moved item here will not have the desired effect\n // as the `remove` handler has not yet kicked-in to remove the item from its old position\n if (sourceTree !== destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n destinationTree.focus(this.movedItemNewIndex);\n }\n }\n remove({ sourceItem, sourceTree, destinationTree }) {\n const sourceDataItem = getDataItem(sourceItem);\n const sourceItemIndex = this.flatBinding.originalData.indexOf(sourceDataItem);\n this.flatBinding.originalData.splice(sourceItemIndex, 1);\n if (sourceTree !== destinationTree) {\n this.removeChildNodes(sourceDataItem, sourceTree);\n }\n this.rebindData();\n // emit collapse for the parent node if its last child node was spliced\n const parentChildren = sourceItem.parent ? sourceItem.parent.children : [];\n collapseEmptyParent(sourceItem.parent, parentChildren, sourceTree);\n // decrement source item parent page size => an item has been removed from it\n decrementPageSize(sourceTree, getDataItem(sourceItem.parent));\n // reload the treeview nodes\n if (!sourceTree.loadOnDemand) {\n sourceTree.preloadChildNodes();\n }\n // if the source and destination trees are different we want to focus only the moved item in the destination tree\n if (sourceTree === destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n // after the source item is removed from its original position, the candidate index might have to be corrected\n const index = updateMovedItemIndex(this.movedItemNewIndex, sourceItem.item.index);\n destinationTree.focus(index);\n }\n }\n addChildNodes(dataItem, source) {\n const itemChildren = this.fetchAllDescendantNodes(dataItem, source);\n this.flatBinding.originalData.push(...itemChildren);\n }\n removeChildNodes(dataItem, source) {\n const sourceChildren = this.fetchAllDescendantNodes(dataItem, source);\n sourceChildren.forEach(item => {\n const index = this.flatBinding.originalData.indexOf(item);\n this.flatBinding.originalData.splice(index, 1);\n });\n }\n fetchAllDescendantNodes(node, treeview) {\n let nodes = this.fetchChildNodes(node, treeview);\n nodes.forEach(node => nodes = nodes.concat(this.fetchAllDescendantNodes(node, treeview) || []));\n return nodes;\n }\n fetchChildNodes(node, treeview) {\n if (!node) {\n return [];\n }\n let nodes = [];\n treeview\n .children(node)\n .pipe(take(1))\n .subscribe(children => nodes = nodes.concat(children || []));\n return nodes;\n }\n getLastVisibleChildNodeIndex(treeview, data, node) {\n if (!isPresent(treeview.loadMoreService) || !treeview.hasChildren(node)) {\n return data.length;\n }\n const visibleNodesCount = treeview.loadMoreService.getGroupSize(node);\n const visibleChildren = this.fetchChildNodes(node, treeview).slice(0, visibleNodesCount);\n const lastNode = visibleChildren[visibleChildren.length - 1];\n const lastNodeIndex = data.indexOf(lastNode);\n return lastNodeIndex;\n }\n rebindData() {\n this.flatBinding.nodes = this.flatBinding.originalData;\n this.flatBinding.updateNodes(this.flatBinding.originalData);\n }\n}\n\nconst findChildren = (prop, nodes, value) => nodes.filter((x) => prop(x) === value);\nconst indexBuilder = new IndexBuilderService();\nconst mapToTree = (currentLevelNodes, allNodes, parentIdField, idField, parent = null, parentIndex = '') => {\n if (!isArrayWithAtLeastOneItem(currentLevelNodes)) {\n return [];\n }\n return currentLevelNodes.map((node, idx) => {\n const index = indexBuilder.nodeIndex(idx.toString(), parentIndex);\n const wrapper = {\n dataItem: node,\n index,\n parent,\n visible: true\n };\n wrapper.children = mapToTree(findChildren(getter(parentIdField), allNodes || [], getter(idField)(node)), allNodes, parentIdField, idField, wrapper, index);\n return wrapper;\n });\n};\n/**\n * A directive which encapsulates the retrieval of the child nodes.\n */\nclass FlatDataBindingDirective extends FilteringBase {\n constructor(component) {\n super(component);\n this.component = component;\n /**\n * @hidden\n */\n this.loadOnDemand = true;\n /**\n * @hidden\n */\n this.originalData = [];\n this.component.isVisible = (node) => this.visibleNodes.has(node);\n }\n /**\n * @hidden\n * A callback which determines whether a TreeView node should be rendered as hidden.\n */\n set isVisible(fn) {\n this.component.isVisible = fn;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n if (isPresent(this.parentIdField) && isPresent(this.idField)) {\n const fetchChildren = (node) => findChildren(getter(this.parentIdField), this.originalData || [], getter(this.idField)(node));\n this.component.hasChildren = (node) => fetchChildren(node).length > 0;\n this.component.children = (node) => of(fetchChildren(node));\n this.component.editService = new FlatEditingService(this);\n this.component.filterChange.subscribe(this.handleFilterChange.bind(this));\n if (this.component.filter) {\n this.handleFilterChange(this.component.filter);\n }\n if (!this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (isChanged('parentIdField', changes, false)) {\n this.nodes = this.originalData;\n this.updateNodes(this.originalData);\n }\n if (isChanged('nodes', changes, false)) {\n this.updateNodes(changes.nodes.currentValue);\n }\n // should react to changes.loadOnDemand as well - should preload the data or clear the already cached items\n if (anyChanged(['nodes', 'loadOnDemand'], changes) && !this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n /**\n * @hidden\n */\n updateNodes(values) {\n this.originalData = values || [];\n if (!isNullOrEmptyString(this.parentIdField)) {\n const prop = getter(this.parentIdField);\n this.component.nodes = this.originalData.filter(compose(isBlank, prop));\n this.filterData = mapToTree(this.component.nodes, this.originalData, this.parentIdField, this.idField);\n this.updateVisibleNodes(this.filterData);\n }\n else {\n this.component.nodes = this.originalData.slice(0);\n }\n }\n}\nFlatDataBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatDataBindingDirective, deps: [{ token: DataBoundComponent }], target: i0.ɵɵFactoryTarget.Directive });\nFlatDataBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: FlatDataBindingDirective, selector: \"[kendoTreeViewFlatDataBinding]\", inputs: { nodes: \"nodes\", parentIdField: \"parentIdField\", idField: \"idField\", loadOnDemand: \"loadOnDemand\", isVisible: \"isVisible\" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: FlatDataBindingDirective, decorators: [{\n type: Directive,\n args: [{ selector: \"[kendoTreeViewFlatDataBinding]\" }]\n }], ctorParameters: function () { return [{ type: DataBoundComponent }]; }, propDecorators: { nodes: [{\n type: Input\n }], parentIdField: [{\n type: Input\n }], idField: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], isVisible: [{\n type: Input\n }] } });\n\nconst COMPONENT_DIRECTIVES$1 = [\n CheckBoxComponent\n];\n/**\n * @hidden\n *\n * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi']) definition for the CheckBox component.\n */\nclass CheckBoxModule {\n}\nCheckBoxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCheckBoxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule, declarations: [CheckBoxComponent], exports: [CheckBoxComponent] });\nCheckBoxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: CheckBoxModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$1],\n exports: [COMPONENT_DIRECTIVES$1]\n }]\n }] });\n\n/**\n * A directive which enables the update of the initially provided data array during drag-and-drop.\n *\n * Either use this directive in combination with one of the data binding directives ([`kendoTreeViewHierarchyBinding`]({% slug api_treeview_hierarchybindingdirective %})\n * or [`kendoTreeViewFlatDataBinding`]({% slug api_treeview_flatdatabindingdirective %})) which set their own edit handlers, or provide\n * your own [`editService`]({% slug api_treeview_editservice %}) to this directive. The latter subscribes to and calls the\n * [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem) and [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem)\n * handlers when the corresponding events are triggered by the TreeView component.\n */\nclass DragAndDropEditingDirective {\n constructor(treeview) {\n this.treeview = treeview;\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.treeview.addItem.subscribe(this.handleAdd.bind(this)));\n this.subscriptions.add(this.treeview.removeItem.subscribe(this.handleRemove.bind(this)));\n }\n /**\n * Specifies the handlers called on drag-and-drop [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem)\n * and [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem) events.\n */\n set editService(service) {\n this.treeview.editService = service;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n handleAdd(args) {\n if (!isPresent(this.treeview.editService)) {\n throw new Error('No `editService` provided. Either provide your own implementation or use this directive in combination with one of the data binding directives (`kendoTreeViewHierarchyBinding` or `kendoTreeViewFlatDataBinding`).');\n }\n this.treeview.editService.add(args);\n }\n handleRemove(args) {\n if (!isPresent(this.treeview.editService)) {\n throw new Error('No `editService` provided. Either provide your own implementation or use this directive in combination with one of the data binding directives (`kendoTreeViewHierarchyBinding` or `kendoTreeViewFlatDataBinding`).');\n }\n this.treeview.editService.remove(args);\n }\n}\nDragAndDropEditingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragAndDropEditingDirective, deps: [{ token: TreeViewComponent }], target: i0.ɵɵFactoryTarget.Directive });\nDragAndDropEditingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: DragAndDropEditingDirective, selector: \"[kendoTreeViewDragAndDropEditing]\", inputs: { editService: \"editService\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: DragAndDropEditingDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDragAndDropEditing]'\n }]\n }], ctorParameters: function () { return [{ type: TreeViewComponent }]; }, propDecorators: { editService: [{\n type: Input\n }] } });\n\nconst LOAD_MORE_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/treeview/load-more-button/';\n/**\n * A directive that enables the display of only a limited amount of nodes per level\n * ([see example]({% slug loadmorebutton_treeview %})).\n */\nclass LoadMoreDirective {\n constructor(treeview) {\n this.treeview = treeview;\n /**\n * Keeps track of the current page size of each node over expand/collapse cycles.\n */\n this.pageSizes = new Map();\n /**\n * Used as an identifier for the root page size as the root collection of nodes is not associated with a data item.\n */\n this.rootLevelId = guid();\n this.treeview.loadMoreService = {\n getInitialPageSize: this.getInitalPageSize.bind(this),\n getGroupSize: this.getGroupSize.bind(this),\n setGroupSize: this.setGroupSize.bind(this),\n getTotalNodesCount: this.getTotalNodesCount.bind(this)\n };\n }\n /**\n * Specifies the callback that will be called when the load more button is clicked.\n * Providing a function is only required when additional nodes are fetched on demand\n * ([see example]({% slug loadmorebutton_treeview %}#toc-remote-data)).\n */\n set loadMoreNodes(loadMoreNodes) {\n if (typeof loadMoreNodes === 'string') {\n return;\n }\n this.treeview.loadMoreService.loadMoreNodes = loadMoreNodes;\n }\n ngOnChanges() {\n this.verifySettings();\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (!isPresent(this.pageSize)) {\n throw new Error(`To use the TreeView \\`kendoTreeViewLoadMore\\` directive, you need to assign a \\`pageSize\\` value. See ${LOAD_MORE_DOC_LINK}.`);\n }\n const loadMoreNodes = this.treeview.loadMoreService.loadMoreNodes;\n if (isPresent(loadMoreNodes) && typeof loadMoreNodes !== 'function') {\n throw new Error(`The passed value to the \\`kendoTreeViewLoadMore\\` directive must be a function that retrieves additional nodes. See ${LOAD_MORE_DOC_LINK}.`);\n }\n if (isPresent(loadMoreNodes) && !isPresent(this.totalField)) {\n throw new Error(`When a function to fetch additional nodes is provided to the \\`kendoTreeViewLoadMore\\` directive, the \\`totalField\\` and \\`totalRootNodes\\` values must also be provided. See ${LOAD_MORE_DOC_LINK}.`);\n }\n }\n getGroupSize(dataItem) {\n const itemKey = dataItem || this.rootLevelId;\n return this.pageSizes.has(itemKey) ? this.pageSizes.get(itemKey) : this.pageSize;\n }\n setGroupSize(dataItem, pageSize) {\n const itemKey = dataItem || this.rootLevelId;\n const normalizedSizeValue = pageSize > 0 ? pageSize : 0;\n this.pageSizes.set(itemKey, normalizedSizeValue);\n }\n getTotalNodesCount(dataItem, loadedNodesCount) {\n if (isPresent(dataItem) && isPresent(this.totalField)) {\n return dataItem[this.totalField];\n }\n else if (!isPresent(dataItem) && isPresent(this.totalRootNodes)) {\n return this.totalRootNodes;\n }\n else {\n return loadedNodesCount;\n }\n }\n getInitalPageSize() {\n return this.pageSize;\n }\n}\nLoadMoreDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadMoreDirective, deps: [{ token: TreeViewComponent }], target: i0.ɵɵFactoryTarget.Directive });\nLoadMoreDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"12.2.16\", type: LoadMoreDirective, selector: \"[kendoTreeViewLoadMore]\", inputs: { loadMoreNodes: [\"kendoTreeViewLoadMore\", \"loadMoreNodes\"], pageSize: \"pageSize\", totalRootNodes: \"totalRootNodes\", totalField: \"totalField\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: LoadMoreDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewLoadMore]'\n }]\n }], ctorParameters: function () { return [{ type: TreeViewComponent }]; }, propDecorators: { loadMoreNodes: [{\n type: Input,\n args: ['kendoTreeViewLoadMore']\n }], pageSize: [{\n type: Input\n }], totalRootNodes: [{\n type: Input\n }], totalField: [{\n type: Input\n }] } });\n\nconst COMPONENT_DIRECTIVES = [\n TreeViewComponent,\n TreeViewGroupComponent,\n TreeViewItemDirective,\n TreeViewItemContentDirective,\n NodeTemplateDirective,\n CheckDirective,\n DisableDirective,\n ExpandDirective,\n SelectDirective,\n HierarchyBindingDirective,\n LoadingIndicatorDirective,\n FlatDataBindingDirective,\n DragAndDropDirective,\n DragClueTemplateDirective,\n DragClueComponent,\n DropHintTemplateDirective,\n DropHintComponent,\n DragAndDropEditingDirective,\n LoadMoreDirective,\n LoadMoreButtonTemplateDirective\n];\n/**\n * @hidden\n */\nclass SharedModule {\n}\nSharedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nSharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, declarations: [TreeViewComponent,\n TreeViewGroupComponent,\n TreeViewItemDirective,\n TreeViewItemContentDirective,\n NodeTemplateDirective,\n CheckDirective,\n DisableDirective,\n ExpandDirective,\n SelectDirective,\n HierarchyBindingDirective,\n LoadingIndicatorDirective,\n FlatDataBindingDirective,\n DragAndDropDirective,\n DragClueTemplateDirective,\n DragClueComponent,\n DropHintTemplateDirective,\n DropHintComponent,\n DragAndDropEditingDirective,\n LoadMoreDirective,\n LoadMoreButtonTemplateDirective], imports: [CommonModule,\n CheckBoxModule,\n InputsModule], exports: [TreeViewComponent,\n TreeViewGroupComponent,\n TreeViewItemDirective,\n TreeViewItemContentDirective,\n NodeTemplateDirective,\n CheckDirective,\n DisableDirective,\n ExpandDirective,\n SelectDirective,\n HierarchyBindingDirective,\n LoadingIndicatorDirective,\n FlatDataBindingDirective,\n DragAndDropDirective,\n DragClueTemplateDirective,\n DragClueComponent,\n DropHintTemplateDirective,\n DropHintComponent,\n DragAndDropEditingDirective,\n LoadMoreDirective,\n LoadMoreButtonTemplateDirective] });\nSharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, imports: [[\n CommonModule,\n CheckBoxModule,\n InputsModule\n ]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: SharedModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES],\n imports: [\n CommonModule,\n CheckBoxModule,\n InputsModule\n ],\n entryComponents: [\n DragClueComponent,\n DropHintComponent\n ]\n }]\n }] });\n\nconst EXPORTS = [\n TreeViewComponent,\n NodeTemplateDirective,\n CheckDirective,\n DisableDirective,\n ExpandDirective,\n SelectDirective,\n HierarchyBindingDirective,\n FlatDataBindingDirective,\n DragAndDropDirective,\n DragClueTemplateDirective,\n DropHintTemplateDirective,\n DragAndDropEditingDirective,\n LoadMoreDirective,\n LoadMoreButtonTemplateDirective\n];\n/**\n * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi']) definition for the TreeView component.\n */\nclass TreeViewModule {\n}\nTreeViewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTreeViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewModule, imports: [SharedModule], exports: [TreeViewComponent,\n NodeTemplateDirective,\n CheckDirective,\n DisableDirective,\n ExpandDirective,\n SelectDirective,\n HierarchyBindingDirective,\n FlatDataBindingDirective,\n DragAndDropDirective,\n DragClueTemplateDirective,\n DropHintTemplateDirective,\n DragAndDropEditingDirective,\n LoadMoreDirective,\n LoadMoreButtonTemplateDirective] });\nTreeViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewModule, imports: [[SharedModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"12.2.16\", ngImport: i0, type: TreeViewModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [EXPORTS],\n imports: [SharedModule]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CheckDirective, DataBoundComponent, DisableDirective, DragAndDropDirective, DragAndDropEditingDirective, DragClueService, DragClueTemplateDirective, DropAction, DropHintService, DropHintTemplateDirective, DropPosition, ExpandDirective, ExpandableComponent, FlatDataBindingDirective, HierarchyBindingDirective, LoadMoreButtonTemplateDirective, LoadMoreDirective, NodeTemplateDirective, SelectDirective, TreeItemDragEvent, TreeItemDragStartEvent, TreeItemDropEvent, TreeViewComponent, TreeViewModule };\n\n","export const ARC = \"arc\";\nexport const AXIS_LABEL_CLICK = \"axisLabelClick\";\nexport const BLACK = \"#000\";\nexport const BOTTOM = \"bottom\";\nexport const CENTER = \"center\";\nexport const CIRCLE = \"circle\";\nexport const COORD_PRECISION = 3;\nexport const CROSS = \"cross\";\nexport const DATE = \"date\";\nexport const DEFAULT_FONT = \"12px sans-serif\";\nexport const DEFAULT_HEIGHT = 400;\nexport const DEFAULT_PRECISION = 10;\nexport const DEFAULT_WIDTH = 600;\nexport const END = \"end\";\nexport const FORMAT_REGEX = /\\{\\d+:?/;\nexport const HEIGHT = \"height\";\nexport const HIGHLIGHT_ZINDEX = 100;\nexport const INSIDE = \"inside\";\nexport const INHERIT = \"inherit\";\nexport const LEFT = \"left\";\nexport const MAX_VALUE = Number.MAX_VALUE;\nexport const MIN_VALUE = -Number.MAX_VALUE;\nexport const NONE = \"none\";\nexport const NOTE_CLICK = \"noteClick\";\nexport const NOTE_HOVER = \"noteHover\";\nexport const NOTE_LEAVE = \"noteLeave\";\nexport const OBJECT = \"object\";\nexport const OUTSIDE = \"outside\";\nexport const RIGHT = \"right\";\nexport const ROUNDED_RECT = \"roundedRect\";\nexport const START = \"start\";\nexport const STRING = \"string\";\nexport const TOP = \"top\";\nexport const TRIANGLE = \"triangle\";\nexport const VALUE = \"value\";\nexport const WHITE = \"#fff\";\nexport const WIDTH = \"width\";\nexport const X = \"x\";\nexport const Y = \"y\";\nexport const DEFAULT_SERIES_OPACITY = 1;\n","export default function isArray(value) {\n return Array.isArray(value);\n}","import isArray from './is-array';\n\nexport default function addClass(element, classes) {\n const classArray = isArray(classes) ? classes : [ classes ];\n\n for (let idx = 0; idx < classArray.length; idx++) {\n const className = classArray[idx];\n if (element.className.indexOf(className) === -1) {\n element.className += \" \" + className;\n }\n }\n}","const SPACE_REGEX = /\\s+/g;\n\nexport default function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, \"\").replace(SPACE_REGEX, \" \");\n }\n}","import { drawing } from '@progress/kendo-drawing';\n\nexport default function alignPathToPixel(path) {\n let offset = 0.5;\n if (path.options.stroke && drawing.util.defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n\n for (let i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n\n return path;\n}","export default function clockwise(angle1, angle2) {\n // True if angle2 is clockwise of angle1\n // assuming angles grow in clock-wise direction\n // (as in the pie and radar charts)\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n}","export default function isNumber(value) {\n return typeof value === \"number\" && !isNaN(value);\n}","import { STRING } from './constants';\n\nexport default function isString(value) {\n return typeof value === STRING;\n}","import isNumber from './is-number';\nimport isString from './is-string';\n\nexport default function convertableToNumber(value) {\n return isNumber(value) || (isString(value) && isFinite(value));\n}","export default function isFunction(fn) {\n return typeof fn === \"function\";\n}","import isFunction from './is-function';\n\nconst OBJECT = \"object\";\nconst UNDEFINED = \"undefined\";\n\nfunction deepExtendOne(destination, source) {\n\n for (let property in source) {\n let propValue = source[property];\n let propType = typeof propValue;\n\n let propInit;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n\n if (propInit && propInit !== Array) {\n\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n let destProp = destination[property];\n if (typeof (destProp) === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n\n return destination;\n}\n\nexport default function deepExtend(destination) {\n const length = arguments.length;\n\n for (let i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n\n return destination;\n}","export default function isObject(value) {\n return typeof value === \"object\";\n}","import isNumber from './is-number';\n\nexport default function styleValue(value) {\n if (isNumber(value)) {\n return value + \"px\";\n }\n return value;\n}","import isObject from './is-object';\nimport isArray from './is-array';\nimport isString from './is-string';\nimport styleValue from './style-value';\n\nconst SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n\nfunction isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n}\n\nexport default function elementStyles(element, styles) {\n const stylesArray = isString(styles) ? [ styles ] : styles;\n\n if (isArray(stylesArray)) {\n const result = {};\n const style = window.getComputedStyle(element);\n\n for (let idx = 0; idx < stylesArray.length; idx++) {\n let field = stylesArray[idx];\n result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n }\n\n return result;\n } else if (isObject(styles)) {\n for (let field in styles) {\n element.style[field] = styleValue(styles[field]);\n }\n }\n}","import { TOP, BOTTOM, LEFT, RIGHT } from './constants';\n\nexport default function getSpacing(value, defaultSpacing = 0) {\n const spacing = { top: 0, right: 0, bottom: 0, left: 0 };\n\n if (typeof(value) === \"number\") {\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n } else {\n spacing[TOP] = value[TOP] || defaultSpacing;\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n spacing[LEFT] = value[LEFT] || defaultSpacing;\n }\n\n return spacing;\n}","let current = {\n compile: function(template) {\n return template;\n }\n};\n\nclass TemplateService {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static compile(template, options) {\n return current.compile(template, options);\n }\n}\n\nexport default TemplateService;\n","import TemplateService from '../services/template-service';\nimport isFunction from './is-function';\n\nexport default function getTemplate(options = {}) {\n let template;\n if (options.template) {\n options.template = template = TemplateService.compile(options.template);\n } else if (isFunction(options.content)) {\n template = options.content;\n }\n\n return template;\n}\n","import { drawing } from '@progress/kendo-drawing';\n\nconst FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\nconst getterCache = {};\n\ngetterCache['undefined'] = function(obj) {\n return obj;\n};\n\nexport default function getter(field) {\n if (getterCache[field]) {\n return getterCache[field];\n }\n\n const fields = [];\n field.replace(FIELD_REGEX, function(match, index, indexAccessor, field) {\n fields.push(drawing.util.defined(index) ? index : (indexAccessor || field));\n });\n\n getterCache[field] = function(obj) {\n let result = obj;\n for (let idx = 0; idx < fields.length && result; idx++) {\n result = result[fields[idx]];\n }\n\n return result;\n };\n\n return getterCache[field];\n}","export default function grep(array, callback) {\n const length = array.length;\n const result = [];\n for (let idx = 0; idx < length; idx++) {\n if (callback(array[idx])) {\n result .push(array[idx]);\n }\n }\n\n return result;\n}","export default function hasClasses(element, classNames) {\n if (element.className) {\n const names = classNames.split(\" \");\n for (let idx = 0; idx < names.length; idx++) {\n if (element.className.indexOf && element.className.indexOf(names[idx]) !== -1) {\n return true;\n }\n }\n }\n}\n","// TODO: Remove and replace with Map/WeakMap.\nexport default class HashMap {\n constructor() {\n this._map = new Map();\n }\n\n get(key) {\n return this._map.get(key);\n }\n\n set(key, value) {\n this._map.set(key, value);\n }\n}\n","export default function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n}","import { drawing } from '@progress/kendo-drawing';\nimport { COORD_PRECISION } from './constants';\n\nexport default function interpolateValue(start, end, progress) {\n return drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n}","import deepExtend from './deep-extend';\n\nconst TRIGGER = 'trigger';\n\nclass InstanceObserver {\n constructor(observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n }\n\n trigger(name, args) {\n const { observer, handlerMap } = this;\n let isDefaultPrevented;\n if (handlerMap[name]) {\n isDefaultPrevented = this.callObserver(handlerMap[name], args);\n } else if (observer[TRIGGER]) {\n isDefaultPrevented = this.callObserver(TRIGGER, name, args);\n }\n\n return isDefaultPrevented;\n }\n\n callObserver(fnName, ...args) {\n return this.observer[fnName].apply(this.observer, args);\n }\n\n requiresHandlers(names) {\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n\n for (let idx = 0; idx < names.length; idx++) {\n if (this.handlerMap[names[idx]]) {\n return true;\n }\n }\n }\n}\n\nexport default InstanceObserver;","import { drawing } from '@progress/kendo-drawing';\n\nexport default function map(array, callback) {\n const length = array.length;\n const result = [];\n for (let idx = 0; idx < length; idx++) {\n let value = callback(array[idx]);\n if (drawing.util.defined(value)) {\n result.push(value);\n }\n }\n return result;\n}","import { support } from '@progress/kendo-drawing';\n\nconst browser = support.browser || {};\n\nexport default function mousewheelDelta(e) {\n let delta = 0;\n\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n\n if (browser.webkit) {\n // Webkit browsers scale the delta by twice the device resolution.\n // Possibly related to https://bugs.webkit.org/show_bug.cgi?id=196339\n //\n // Low device resolutions (e.g. zoom-out to 30%) also behave strangely.\n delta = delta / (2 * Math.max(window.devicePixelRatio, 0.625));\n }\n } else if (e.detail) {\n delta = e.detail / 3;\n }\n\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n\n return delta;\n}\n","/* eslint-disable no-console */\n\nexport default function logToConsole(message) {\n const console = window.console;\n\n if (typeof(console) != \"undefined\" && console.log) {\n console.log(message);\n }\n}","import {\n drawing,\n Class,\n logToConsole\n} from '@progress/kendo-drawing';\n\nconst {\n append,\n bindEvents,\n defined,\n deg,\n elementOffset,\n elementSize,\n eventCoordinates,\n eventElement,\n hashKey,\n last,\n limitValue,\n objectKey,\n rad,\n round,\n unbindEvents,\n valueOrDefault\n} = drawing.util;\n\nexport {\n append,\n bindEvents,\n Class,\n defined,\n deg,\n elementOffset,\n elementSize,\n eventCoordinates,\n eventElement,\n hashKey,\n last,\n limitValue,\n logToConsole,\n objectKey,\n rad,\n round,\n unbindEvents,\n valueOrDefault\n};\n","import { logToConsole } from '../drawing-utils';\n\nclass FontLoader {\n static fetchFonts(options, fonts, state = { depth: 0 }) {\n const MAX_DEPTH = 5;\n\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n\n Object.keys(options).forEach(function(key) {\n const value = options[key];\n if (key === \"dataSource\" || key[0] === \"$\" || !value) {\n return;\n }\n\n if (key === \"font\") {\n fonts.push(value);\n } else if (typeof value === \"object\") {\n state.depth++;\n FontLoader.fetchFonts(value, fonts, state);\n state.depth--;\n }\n });\n }\n\n static loadFonts(fonts, callback) {\n let promises = [];\n\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function(font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n // Silence font-loading errors\n logToConsole(e);\n }\n\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n }\n\n static preloadFonts(options, callback) {\n const fonts = [];\n FontLoader.fetchFonts(options, fonts);\n\n FontLoader.loadFonts(fonts, callback);\n }\n}\n\nexport default FontLoader;","import deepExtend from './deep-extend';\n\nexport default function setDefaultOptions(type, options) {\n const proto = type.prototype;\n if (proto.options) {\n proto.options = deepExtend({}, proto.options, options);\n } else {\n proto.options = options;\n }\n}","import isObject from './is-object';\nimport isPlainObject from './is-plain-object';\nimport isString from './is-string';\nimport deepExtend from './deep-extend';\nimport setDefaultOptions from './set-default-options';\nimport addClass from './add-class';\nimport removeClass from './remove-class';\n\nconst KICON = 'k-icon';\nconst KI_PREFFIX = 'k-i-';\nconst KSVGICON = 'k-svg-icon';\nconst KSVG_PREFFIX = 'k-svg-i-';\n\nclass HTMLBaseIcon {\n constructor(element, options) {\n this.element = element;\n this.options = deepExtend({}, this.options, options);\n\n this.wrapper();\n }\n\n wrapper() {\n this.addClasses();\n }\n\n addClasses() {\n }\n\n html() {\n return this.element.outerHTML;\n }\n}\n\nsetDefaultOptions(HTMLBaseIcon, {\n name: '',\n size: 'none',\n themeColor: 'none',\n flip: 'default',\n iconClass: '',\n stylingOptions: [ 'size', 'themeColor', 'fill' ]\n});\n\nclass HTMLFontIcon extends HTMLBaseIcon {\n constructor(element, options) {\n super(element, options);\n }\n\n wrapper() {\n // Find if there is an existing k-i- class appended to the element.\n let currentIconClass = this.element.className.split(\" \").find(x => x.startsWith(KI_PREFFIX));\n let className = this.options.icon ? `${this.options.icon.startsWith(KI_PREFFIX) ? \"\" : KI_PREFFIX}${this.options.icon}` : \"\";\n\n this._className = className;\n\n addClass(this.element, KICON);\n removeClass(this.element, currentIconClass); // Remove any existing icons.\n addClass(this.element, className);\n addClass(this.element, this.options.iconClass || '');\n\n super.wrapper();\n }\n}\n\nsetDefaultOptions(HTMLFontIcon, {\n name: 'HTMLFontIcon',\n icon: null\n});\n\nclass HTMLSvgIcon extends HTMLBaseIcon {\n constructor(element, options) {\n // Ensure that the inner contents of the wrapping span element are always removed for re-rendering purposes.\n element.innerHTML = \"\";\n\n super(element, options);\n }\n\n wrapper() {\n let icon = this.options.icon;\n let iconClass = this.options.iconClass;\n let currentIconClass = this.element.className.split(\" \").find(x => x.startsWith(KSVG_PREFFIX));\n\n if (!icon && iconClass) {\n // match k-i-(some-icon-name)\n const regex = /k-i-(\\w+(?:-\\w+)*)/;\n let iconNameMatch = iconClass.match(regex);\n if (iconNameMatch) {\n icon = iconNameMatch[1];\n iconClass = iconClass.replace(iconNameMatch[0], \"\");\n }\n }\n\n if (isString(icon)) {\n icon = icon.replace(\"k-i-\", \"\").replace(/-./g, x => x[1].toUpperCase());\n icon = this.options.svgIcons[icon] || this.options.svgIcons[`${icon}Icon`];\n }\n\n let className = icon && icon.name ? `${KSVG_PREFFIX}${icon.name}` : \"\";\n this._className = className;\n\n addClass(this.element, KSVGICON);\n removeClass(this.element, currentIconClass);\n addClass(this.element, className);\n addClass(this.element, iconClass || \"\");\n this.element.setAttribute(\"aria-hidden\", \"true\");\n\n if (icon && isPlainObject(icon)) {\n let svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgElement.setAttribute(\"viewBox\", icon.viewBox || \"\");\n svgElement.setAttribute(\"focusable\", \"false\");\n svgElement.innerHTML = icon.content || \"\";\n\n this.element.appendChild(svgElement);\n }\n\n super.wrapper();\n }\n}\n\nsetDefaultOptions(HTMLSvgIcon, {\n name: 'HTMLSvgIcon',\n icon: null,\n svgIcons: {}\n});\n\nconst ICON_TYPES = {\n 'svg': HTMLSvgIcon,\n 'font': HTMLFontIcon\n};\n\nexport default function renderIcon(iconElement, iconOptions) {\n let element = iconElement;\n let options = iconOptions;\n\n if (!element\n || (isObject(element) && !(element instanceof HTMLElement))\n || isString(element)) {\n options = element;\n element = document.createElement(\"span\");\n }\n\n if (isString(options)) {\n options = {\n icon: options\n };\n }\n\n if (!options.type) {\n options.type = 'svg';\n }\n\n if (!ICON_TYPES[options.type]) {\n return null;\n }\n\n return (new ICON_TYPES[options.type](element, options).html());\n}\n","export default function isPlainObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}","import { MIN_VALUE, MAX_VALUE } from './constants';\n\nexport default function sparseArrayLimits(arr) {\n let min = MAX_VALUE;\n let max = MIN_VALUE;\n\n for (let idx = 0, length = arr.length; idx < length; idx++) {\n const value = arr[idx];\n if (value !== null && isFinite(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n}","export default function find(array, predicate) {\n for (let i = 0; i < array.length; i++) {\n const item = array[i];\n if (predicate(item, i, array)) {\n return item;\n }\n }\n}\n","import { geometry } from '@progress/kendo-drawing';\n\nconst Matrix = geometry.Matrix;\nconst matrixRegexp = /matrix\\((.*)\\)/;\n\nfunction parseMatrix(matrixString) {\n const match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n\n const members = match[1].split(',').map(x => parseFloat(x));\n return new Matrix(...members);\n}\n\nfunction transformMatrix(element) {\n const transform = getComputedStyle(element).transform;\n\n if (transform === 'none') {\n return Matrix.unit();\n }\n\n return parseMatrix(transform);\n}\n\nexport default function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n\n let matrix = transformMatrix(element);\n let parent = element.parentElement;\n while (parent) {\n const parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n}\n","import { Color } from '@progress/kendo-drawing';\nimport { WHITE, BLACK } from './constants';\n\nfunction autoTextColor(color) {\n const isDark = new Color(color).isDark();\n if (isDark) {\n return WHITE;\n }\n\n return BLACK;\n}\n\nexport default autoTextColor;\n","const DELETED = {};\n\nclass LegacySet {\n constructor(values) {\n this._index = {};\n this._values = values ? values.slice(0) : [];\n\n for (let i = 0; i < this._values.length; i++) {\n this._index[this._values[i]] = i;\n }\n }\n\n values() {\n return this._values.filter(item => item !== DELETED);\n }\n\n has(value) {\n return this._index[value] !== undefined;\n }\n\n add(value) {\n if (!this.has(value)) {\n this._index[value] = this._values.length;\n this._values.push(value);\n }\n }\n\n delete(value) {\n const index = this._index[value];\n if (index !== undefined) {\n this._values[index] = DELETED;\n delete this._index[value];\n }\n }\n\n clear() {\n this._index = {};\n this._values = [];\n }\n\n get size() {\n return this._values.length;\n }\n}\n\nclass SetWrapper {\n constructor(values) {\n this._set = new Set(values);\n }\n\n values() {\n return Array.from(this._set);\n }\n\n has(value) {\n return this._set.has(value);\n }\n\n add(value) {\n this._set.add(value);\n }\n\n delete(value) {\n this._set.delete(value);\n }\n\n clear() {\n this._set.clear();\n }\n\n get size() {\n return this._set.size;\n }\n}\n\n// TODO: Drop LegacySet when removing support for IE10\nlet supportsSet = () => {\n let supported = false;\n\n if (typeof Set === 'function') {\n const set = new Set([1]);\n supported = set.has(1);\n }\n\n return supported;\n};\n\nexport default function createHashSet(values) {\n if (supportsSet()) {\n return new SetWrapper(values);\n }\n\n return new LegacySet(values);\n}\n","export default function defaultErrorHandler(error) {\n throw error;\n}\n","import { DEFAULT_PRECISION } from '../../common/constants';\nimport { round } from '../../common';\n\nexport default function autoMajorUnit(min, max) {\n let diff = round(max - min, DEFAULT_PRECISION - 1);\n\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n\n diff = Math.abs(max);\n }\n\n const scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n const relativeValue = round((diff / scale), DEFAULT_PRECISION);\n let scaleMultiplier = 1;\n\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n}","import { COORD_PRECISION } from '../common/constants';\nimport { Class, rad, round } from '../common';\n\nclass Point extends Class {\n constructor(x, y) {\n super();\n\n this.x = x || 0;\n this.y = y || 0;\n }\n\n clone() {\n return new Point(this.x, this.y);\n }\n\n equals(point) {\n return point && this.x === point.x && this.y === point.y;\n }\n\n rotate(center, degrees) {\n const theta = rad(degrees);\n const cosT = Math.cos(theta);\n const sinT = Math.sin(theta);\n const { x: cx, y: cy } = center;\n const { x, y } = this;\n\n this.x = round(\n cx + (x - cx) * cosT + (y - cy) * sinT,\n COORD_PRECISION\n );\n\n this.y = round(\n cy + (y - cy) * cosT - (x - cx) * sinT,\n COORD_PRECISION\n );\n\n return this;\n }\n\n multiply(a) {\n\n this.x *= a;\n this.y *= a;\n\n return this;\n }\n\n distanceTo(point) {\n const dx = this.x - point.x;\n const dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n static onCircle(center, angle, radius) {\n const radians = rad(angle);\n\n return new Point(\n center.x - radius * Math.cos(radians),\n center.y - radius * Math.sin(radians)\n );\n }\n}\n\n\nexport default Point;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport Point from './point';\n\nimport { X, Y, TOP, BOTTOM, LEFT, RIGHT, CENTER, WIDTH, HEIGHT } from '../common/constants';\nimport { Class, defined, getSpacing, inArray, isArray, rad } from '../common';\n\nclass Box extends Class {\n constructor(x1, y1, x2, y2) {\n super();\n\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n }\n\n equals(box) {\n return this.x1 === box.x1 && this.x2 === box.x2 &&\n this.y1 === box.y1 && this.y2 === box.y2;\n }\n\n width() {\n return this.x2 - this.x1;\n }\n\n height() {\n return this.y2 - this.y1;\n }\n\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n\n return this;\n }\n\n move(x, y) {\n const height = this.height();\n const width = this.width();\n\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n\n return this;\n }\n\n wrap(targetBox) {\n this.x1 = Math.min(this.x1, targetBox.x1);\n this.y1 = Math.min(this.y1, targetBox.y1);\n this.x2 = Math.max(this.x2, targetBox.x2);\n this.y2 = Math.max(this.y2, targetBox.y2);\n\n return this;\n }\n\n wrapPoint(point) {\n const arrayPoint = isArray(point);\n const x = arrayPoint ? point[0] : point.x;\n const y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box(x, y, x, y));\n\n return this;\n }\n\n snapTo(targetBox, axis) {\n\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n\n return this;\n }\n\n alignTo(targetBox, anchor) {\n const height = this.height();\n const width = this.width();\n const axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n const offset = axis === Y ? height : width;\n\n if (anchor === CENTER) {\n const targetCenter = targetBox.center();\n const center = this.center();\n\n this.x1 += targetCenter.x - center.x;\n this.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n this[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n this[axis + 1] = targetBox[axis + 2];\n }\n\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n }\n\n shrink(dw, dh) {\n\n this.x2 -= dw;\n this.y2 -= dh;\n\n return this;\n }\n\n expand(dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n }\n\n pad(padding) {\n const spacing = getSpacing(padding);\n\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n\n return this;\n }\n\n unpad(padding) {\n const spacing = getSpacing(padding);\n\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n\n return this.pad(spacing);\n }\n\n clone() {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n }\n\n center() {\n return new Point(\n this.x1 + this.width() / 2,\n this.y1 + this.height() / 2\n );\n }\n\n containsPoint(point) {\n\n return point.x >= this.x1 && point.x <= this.x2 &&\n point.y >= this.y1 && point.y <= this.y2;\n }\n\n points() {\n return [\n new Point(this.x1, this.y1),\n new Point(this.x2, this.y1),\n new Point(this.x2, this.y2),\n new Point(this.x1, this.y2)\n ];\n }\n\n getHash() {\n return [ this.x1, this.y1, this.x2, this.y2 ].join(\",\");\n }\n\n overlaps(box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n }\n\n rotate(rotation) {\n let width = this.width();\n let height = this.height();\n const { x: cx, y: cy } = this.center();\n\n const r1 = rotatePoint(0, 0, cx, cy, rotation);\n const r2 = rotatePoint(width, 0, cx, cy, rotation);\n const r3 = rotatePoint(width, height, cx, cy, rotation);\n const r4 = rotatePoint(0, height, cx, cy, rotation);\n\n width = Math.max(r1.x, r2.x, r3.x, r4.x) - Math.min(r1.x, r2.x, r3.x, r4.x);\n height = Math.max(r1.y, r2.y, r3.y, r4.y) - Math.min(r1.y, r2.y, r3.y, r4.y);\n\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n }\n\n toRect() {\n return new geom.Rect([ this.x1, this.y1 ], [ this.width(), this.height() ]);\n }\n\n hasSize() {\n return this.width() !== 0 && this.height() !== 0;\n }\n\n align(targetBox, axis, alignment) {\n const c1 = axis + 1;\n const c2 = axis + 2;\n const sizeFunc = axis === X ? WIDTH : HEIGHT;\n const size = this[sizeFunc]();\n\n if (inArray(alignment, [ LEFT, TOP ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [ RIGHT, BOTTOM ])) {\n this[c2] = targetBox[c2];\n this[c1] = this[c2] - size;\n } else if (alignment === CENTER) {\n this[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n this[c2] = this[c1] + size;\n }\n }\n}\n\nfunction rotatePoint(x, y, cx, cy, angle) {\n const theta = rad(angle);\n\n return new Point(\n cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta),\n cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta)\n );\n}\n\nexport default Box;\n","import Box from './box';\nimport Point from './point';\nimport { COORD_PRECISION, MAX_VALUE, MIN_VALUE } from '../common/constants';\nimport { Class, clockwise, rad, round } from '../common';\n\nclass Ring extends Class {\n\n constructor(center, innerRadius, radius, startAngle, angle) {\n super();\n\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n }\n\n clone() {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n }\n\n middle() {\n return this.startAngle + this.angle / 2;\n }\n\n setRadius(newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n\n return this;\n }\n\n // TODO: Remove and replace with Point.onCircle\n point(angle, innerRadius) {\n const radianAngle = rad(angle);\n const ax = Math.cos(radianAngle);\n const ay = Math.sin(radianAngle);\n const radius = innerRadius ? this.innerRadius : this.radius;\n const x = round(this.center.x - (ax * radius), COORD_PRECISION);\n const y = round(this.center.y - (ay * radius), COORD_PRECISION);\n\n return new Point(x, y);\n }\n\n adjacentBox(distance, width, height) {\n const sector = this.clone().expand(distance);\n const midAndle = sector.middle();\n const midPoint = sector.point(midAndle);\n const hw = width / 2;\n const hh = height / 2;\n const sa = Math.sin(rad(midAndle));\n const ca = Math.cos(rad(midAndle));\n let x = midPoint.x - hw;\n let y = midPoint.y - hh;\n\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n\n return new Box(x, y, x + width, y + height);\n }\n\n containsPoint(p) {\n const center = this.center;\n const innerRadius = this.innerRadius;\n const radius = this.radius;\n const startAngle = this.startAngle;\n const endAngle = this.startAngle + this.angle;\n const dx = p.x - center.x;\n const dy = p.y - center.y;\n const vector = new Point(dx, dy);\n const startPoint = this.point(startAngle);\n const startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n const endPoint = this.point(endAngle);\n const endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n const dist = round(dx * dx + dy * dy, COORD_PRECISION);\n\n return (startVector.equals(vector) || clockwise(startVector, vector)) &&\n !clockwise(endVector, vector) &&\n dist >= innerRadius * innerRadius && dist <= radius * radius;\n }\n\n getBBox() {\n const box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n const startAngle = round(this.startAngle % 360);\n const endAngle = round((startAngle + this.angle) % 360);\n const innerRadius = this.innerRadius;\n const allAngles = [ 0, 90, 180, 270, startAngle, endAngle ].sort(numericComparer);\n const startAngleIndex = allAngles.indexOf(startAngle);\n const endAngleIndex = allAngles.indexOf(endAngle);\n let angles;\n\n if (startAngle === endAngle) {\n angles = allAngles;\n } else {\n if (startAngleIndex < endAngleIndex) {\n angles = allAngles.slice(startAngleIndex, endAngleIndex + 1);\n } else {\n angles = [].concat(\n allAngles.slice(0, endAngleIndex + 1),\n allAngles.slice(startAngleIndex, allAngles.length)\n );\n }\n }\n\n for (let i = 0; i < angles.length; i++) {\n let point = this.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n\n return box;\n }\n\n expand(value) {\n this.radius += value;\n return this;\n }\n}\n\nfunction numericComparer(a, b) {\n return a - b;\n}\n\nexport default Ring;","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\nimport { Class } from '../common';\n\nconst DIRECTION_ANGLE = 0.001; //any value that will make the endAngle bigger than the start angle will work here.\n\nclass ShapeBuilder extends Class {\n createRing(sector, options) {\n const startAngle = sector.startAngle + 180;\n let endAngle = sector.angle + startAngle;\n\n //required in order to avoid reversing the arc direction in cases like 0.000000000000001 + 100 === 100\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\n\n const center = new geom.Point(sector.center.x, sector.center.y);\n const radius = Math.max(sector.radius, 0);\n const innerRadius = Math.max(sector.innerRadius, 0);\n const arc = new geom.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n const path = draw.Path.fromArc(arc, options).close();\n\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n const innerEnd = arc.pointAt(endAngle);\n path.lineTo(innerEnd.x, innerEnd.y);\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n } else {\n path.lineTo(center.x, center.y);\n }\n\n return path;\n }\n}\n\nShapeBuilder.current = new ShapeBuilder();\n\nexport default ShapeBuilder;","export function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n}\n\nexport function linear(position) {\n return position;\n}\n\nexport function easeOutElastic(position, time, start, diff) {\n let s = 1.70158,\n p = 0,\n a = diff;\n\n if (position === 0) {\n return start;\n }\n\n if (position === 1) {\n return start + diff;\n }\n\n if (!p) {\n p = 0.5;\n }\n\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n\n return a * Math.pow(2, -10 * position) *\n Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n}\n","import { Class } from '../common';\n\nlet instance;\n\nclass AnimationFactory extends Class {\n static get current() {\n if (!instance) {\n instance = new AnimationFactory();\n }\n\n return instance;\n }\n\n constructor() {\n super();\n\n this._items = [];\n }\n\n register(name, type) {\n this._items.push({\n name: name,\n type: type\n });\n }\n\n create(element, options) {\n const items = this._items;\n let match;\n\n if (options && options.type) {\n const type = options.type.toLowerCase();\n for (let i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n\n if (match) {\n return new match.type(element, options);\n }\n }\n}\n\nexport default AnimationFactory;\n","import * as easingFunctions from './easing-functions';\nimport { limitValue, now } from '../util';\nimport { animationFrame, Class } from '../common';\nimport AnimationFactory from './animation-factory';\n\nclass Animation extends Class {\n static create(type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n }\n\n get options() {\n return this._options || {\n duration: 500,\n easing: \"swing\"\n };\n }\n\n set options(value) {\n this._options = value;\n }\n\n constructor(element, options) {\n super();\n\n this.options = Object.assign({}, this.options, options);\n this.element = element;\n }\n\n setup() {}\n step() {}\n\n play() {\n const options = this.options;\n const { duration, delay = 0 } = options;\n const easing = easingFunctions[options.easing];\n const start = now() + delay;\n const finish = start + duration;\n\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(() => {\n const loop = () => {\n if (this._stopped) {\n return;\n }\n\n const wallTime = now();\n\n const time = limitValue(wallTime - start, 0, duration);\n const position = time / duration;\n const easingPosition = easing(position, time, 0, 1, duration);\n\n this.step(easingPosition);\n\n if (wallTime < finish) {\n animationFrame(loop);\n } else {\n this.abort();\n }\n };\n\n loop();\n }, delay);\n }\n }\n\n abort() {\n this._stopped = true;\n }\n\n destroy() {\n this.abort();\n }\n}\n\nexport default Animation;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { WHITE } from '../common/constants';\nimport { Class, deepExtend, defined, valueOrDefault } from '../common';\n\nclass ChartElement extends Class {\n constructor(options) {\n super();\n\n this.children = [];\n\n this.options = deepExtend({}, this.options, this.initUserOptions(options));\n }\n\n initUserOptions(options) {\n return options;\n }\n\n reflow(targetBox) {\n const children = this.children;\n let box;\n\n for (let i = 0; i < children.length; i++) {\n let currentChild = children[i];\n currentChild.reflow(targetBox);\n\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n\n this.box = box || targetBox;\n }\n\n destroy() {\n const children = this.children;\n\n if (this.animation) {\n this.animation.destroy();\n }\n\n for (let i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n }\n\n getRoot() {\n const parent = this.parent;\n\n return parent ? parent.getRoot() : null;\n }\n\n getSender() {\n const service = this.getService();\n if (service) {\n return service.sender;\n }\n }\n\n getService() {\n let element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n }\n\n translateChildren(dx, dy) {\n const children = this.children;\n const childrenCount = children.length;\n\n for (let i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n }\n\n append() {\n for (let i = 0; i < arguments.length; i++) {\n let item = arguments[i];\n this.children.push(item);\n item.parent = this;\n }\n }\n\n renderVisual() {\n if (this.options.visible === false) {\n return;\n }\n\n this.createVisual();\n\n this.addVisual();\n\n this.renderChildren();\n\n this.createAnimation();\n this.renderComplete();\n }\n\n addVisual() {\n if (this.visual) {\n this.visual.chartElement = this;\n\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n }\n\n renderChildren() {\n const children = this.children;\n const length = children.length;\n for (let i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n }\n\n createVisual() {\n this.visual = new draw.Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n }\n\n createAnimation() {\n if (this.visual && this.options.animation) {\n this.animation = draw.Animation.create(\n this.visual, this.options.animation\n );\n }\n }\n\n appendVisual(childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.isStackRoot) {\n this.stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n // Allow chart elements without visuals to\n // pass through child visuals\n this.parent.appendVisual(childVisual);\n }\n }\n\n clipRoot() {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n\n return this;\n }\n\n stackRoot() {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n\n return this;\n }\n\n stackVisual(childVisual) {\n const zIndex = childVisual.options.zIndex || 0;\n const visuals = this.visual.children;\n const length = visuals.length;\n let pos;\n\n for (pos = 0; pos < length; pos++) {\n let sibling = visuals[pos];\n let here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n\n this.visual.insert(pos, childVisual);\n }\n\n traverse(callback) {\n const children = this.children;\n const length = children.length;\n\n for (let i = 0; i < length; i++) {\n let child = children[i];\n\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n }\n\n closest(match) {\n let element = this;\n let matched = false;\n\n while (element && !matched) {\n matched = match(element);\n\n if (!matched) {\n element = element.parent;\n }\n }\n\n if (matched) {\n return element;\n }\n }\n\n renderComplete() {}\n\n hasHighlight() {\n const options = (this.options || {}).highlight;\n return !(!this.createHighlight || (options && options.visible === false) || this.visible === false);\n }\n\n toggleHighlight(show, opacity) {\n const options = (this.options || {}).highlight || {};\n const customVisual = options.visual;\n let highlight = this._highlight;\n\n if (!highlight) {\n const highlightOptions = {\n fill: {\n color: WHITE,\n opacity: opacity || 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: opacity || 0.2\n }\n };\n\n if (customVisual) {\n highlight = this._highlight = customVisual(\n Object.assign(this.highlightVisualArgs(), {\n createVisual: () => this.createHighlight(highlightOptions),\n sender: this.getSender(),\n series: this.series,\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total\n }\n ));\n\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, this.options.zIndex);\n }\n\n this.appendVisual(highlight);\n }\n\n highlight.visible(show);\n }\n\n createGradientOverlay(element, options, gradientOptions) {\n const overlay = new draw.Path(Object.assign({\n stroke: {\n color: \"none\"\n },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n\n overlay.segments.elements(element.segments.elements());\n\n return overlay;\n }\n\n createGradient(options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n\n supportsPointInactiveOpacity() {\n return true;\n }\n}\n\nChartElement.prototype.options = { };\n\nexport default ChartElement;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport Box from './box';\n\nimport { BLACK, LEFT, TOP, X, Y } from '../common/constants';\nimport { getSpacing, setDefaultOptions, valueOrDefault } from '../common';\n\nclass BoxElement extends ChartElement {\n constructor(options) {\n super(options);\n\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n }\n\n reflow(targetBox) {\n const options = this.options;\n const { width, height, shrinkToFit } = options;\n const hasSetSize = width && height;\n const margin = options.margin;\n const padding = options.padding;\n const borderWidth = options.border.width;\n let box;\n\n const reflowPaddingBox = () => {\n this.align(targetBox, X, options.align);\n this.align(targetBox, Y, options.vAlign);\n this.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n\n let contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n\n super.reflow(contentBox);\n\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\n\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = this.contentBox = this.paddingBox.clone().unpad(padding);\n } else {\n contentBox = this.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n\n this.translateChildren(\n box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left,\n box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top\n );\n\n const children = this.children;\n for (let i = 0; i < children.length; i++) {\n let item = children[i];\n item.reflow(item.box);\n }\n }\n\n align(targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n }\n\n hasBox() {\n const options = this.options;\n return options.border.width || options.background;\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(draw.Path.fromRect(\n this.paddingBox.toRect(),\n this.visualStyle()\n ));\n }\n }\n\n visualStyle() {\n const options = this.options;\n const border = options.border || {};\n\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n}\n\nsetDefaultOptions(BoxElement, {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: \"\",\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n});\n\nexport default BoxElement;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\nimport { round, setDefaultOptions } from '../common';\nimport { CENTER, CIRCLE, COORD_PRECISION, CROSS, ROUNDED_RECT, TRIANGLE } from '../common/constants';\nimport { valueOrDefault } from '../drawing-utils';\nimport BoxElement from './box-element';\n\nclass ShapeElement extends BoxElement {\n\n constructor(options, pointData) {\n super(options);\n\n this.pointData = pointData;\n }\n\n getElement() {\n const { options, paddingBox: box } = this;\n const { type, rotation } = options;\n const center = box.center();\n const halfWidth = box.width() / 2;\n const halfHeight = box.height() / 2;\n\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n\n const style = this.visualStyle();\n let element;\n\n if (type === CIRCLE) {\n element = new draw.Circle(\n new geom.Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + halfHeight, COORD_PRECISION)\n ], Math.min(halfWidth, halfHeight)),\n style\n );\n } else if (type === TRIANGLE) {\n element = draw.Path.fromPoints([\n [ box.x1 + halfWidth, box.y1 ],\n [ box.x1, box.y2 ],\n [ box.x2, box.y2 ]\n ], style).close();\n } else if (type === CROSS) {\n element = new draw.MultiPath(style);\n\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n const rect = box.toRect();\n if (type === ROUNDED_RECT) {\n const borderRadius = valueOrDefault(options.borderRadius, rect.width() / 5);\n rect.setCornerRadius(borderRadius);\n }\n\n element = draw.Path.fromRect(rect, style);\n }\n\n if (rotation) {\n element.transform(geom.transform()\n .rotate(-rotation, [ center.x, center.y ])\n );\n }\n\n element.options.zIndex = options.zIndex;\n\n return element;\n }\n\n createElement() {\n const customVisual = this.options.visual;\n const pointData = this.pointData || {};\n let visual;\n\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: () => this.getElement()\n });\n } else {\n visual = this.getElement();\n }\n\n return visual;\n }\n\n visualOptions() {\n const options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n }\n\n createVisual() {\n this.visual = this.createElement();\n }\n}\n\nsetDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n});\n\nexport default ShapeElement;\n","import { WHITE } from '../common/constants';\n\nconst LINEAR = \"linear\";\nconst RADIAL = \"radial\";\n\nconst GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n }, {\n offset: 1,\n color: WHITE,\n opacity: 0\n } ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n }, {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n } ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [ {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n }, {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n }, {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n } ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0\n }, {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n }, {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n } ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [ {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n }, {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n }, {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n }, {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n }, {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n }, {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n } ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [ 0.5, 0.5 ],\n radius: 0.5\n }\n};\n\nexport default GRADIENTS;","import Box from '../box';\nimport { grep } from '../../common';\n\nexport default function boxDiff(r, s) {\n if (r.x1 === s.x1 && r.y1 === s.y1 && r.x2 === s.x2 && r.y2 === s.y2) {\n return s;\n }\n\n const a = Math.min(r.x1, s.x1);\n const b = Math.max(r.x1, s.x1);\n const c = Math.min(r.x2, s.x2);\n const d = Math.max(r.x2, s.x2);\n const e = Math.min(r.y1, s.y1);\n const f = Math.max(r.y1, s.y1);\n const g = Math.min(r.y2, s.y2);\n const h = Math.max(r.y2, s.y2);\n const boxes = [];\n\n // X = intersection, 0-7 = possible difference areas\n // h +-+-+-+\n // . |5|6|7|\n // g +-+-+-+\n // . |3|X|4|\n // f +-+-+-+\n // . |0|1|2|\n // e +-+-+-+\n // . a b c d\n\n // we'll always have rectangles 1, 3, 4 and 6\n boxes[0] = new Box(b, e, c, f);\n boxes[1] = new Box(a, f, b, g);\n boxes[2] = new Box(c, f, d, g);\n boxes[3] = new Box(b, g, c, h);\n\n // decide which corners\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) { // corners 0 and 7\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else { // corners 2 and 5\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n\n return grep(boxes, function(box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n}","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport GRADIENTS from './gradients';\nimport Box from './box';\n\nimport boxDiff from './utils/box-diff';\n\nimport { DEFAULT_WIDTH, DEFAULT_HEIGHT, WHITE, BLACK } from '../common/constants';\nimport { getSpacing, objectKey, setDefaultOptions } from '../common';\n\nclass RootElement extends ChartElement {\n constructor(options) {\n super(options);\n\n const rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n\n this.gradients = {};\n }\n\n reflow() {\n const { options, children } = this;\n let currentBox = new Box(0, 0, options.width, options.height);\n\n this.box = currentBox.unpad(options.margin);\n\n for (let i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n }\n\n createVisual() {\n this.visual = new draw.Group();\n this.createBackground();\n }\n\n createBackground() {\n const options = this.options;\n const border = options.border || {};\n const box = this.box.clone().pad(options.margin).unpad(border.width);\n\n const background = draw.Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n\n this.visual.append(background);\n }\n\n getRoot() {\n return this;\n }\n\n createGradient(options) {\n const gradients = this.gradients;\n const hashCode = objectKey(options);\n const gradient = GRADIENTS[options.gradient];\n let drawingGradient;\n\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n const gradientOptions = Object.assign({}, gradient, options);\n if (gradient.type === \"linear\") {\n drawingGradient = new draw.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new draw.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n\n return drawingGradient;\n }\n\n cleanGradients() {\n const gradients = this.gradients;\n for (let hashCode in gradients) {\n gradients[hashCode]._observers = [];//add clear observers method in drawing ObserversMixin\n }\n }\n\n size() {\n const options = this.options;\n return new Box(0, 0, options.width, options.height);\n }\n}\n\nsetDefaultOptions(RootElement, {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n background: WHITE,\n border: {\n color: BLACK,\n width: 0\n },\n margin: getSpacing(5),\n zIndex: -2\n});\n\nfunction innerRadialStops(options) {\n const stops = options.stops;\n const usedSpace = ((options.innerRadius / options.radius) * 100);\n const length = stops.length;\n const currentStops = [];\n\n for (let i = 0; i < length; i++) {\n let currentStop = Object.assign({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n\n return currentStops;\n}\n\nexport default RootElement;","import ChartElement from './chart-element';\nimport Box from './box';\n\nimport { X, Y, WIDTH, HEIGHT, RIGHT, BOTTOM, CENTER } from '../common/constants';\nimport { round, setDefaultOptions } from '../common';\n\nclass FloatElement extends ChartElement {\n constructor(options) {\n super(options);\n this._initDirection();\n }\n\n _initDirection() {\n const options = this.options;\n if (options.vertical) {\n this.groupAxis = X;\n this.elementAxis = Y;\n this.groupSizeField = WIDTH;\n this.elementSizeField = HEIGHT;\n this.groupSpacing = options.spacing;\n this.elementSpacing = options.vSpacing;\n } else {\n this.groupAxis = Y;\n this.elementAxis = X;\n this.groupSizeField = HEIGHT;\n this.elementSizeField = WIDTH;\n this.groupSpacing = options.vSpacing;\n this.elementSpacing = options.spacing;\n }\n }\n\n reflow(targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n }\n\n reflowChildren() {\n const { box, elementAxis, groupAxis, elementSizeField, groupSizeField } = this;\n const { groups, groupsSize, maxGroupElementsSize } = this.groupOptions();\n const groupsCount = groups.length;\n const groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n\n if (groupsCount) {\n let groupStart = groupsStart;\n\n for (let groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n let group = groups[groupIdx];\n let groupElements = group.groupElements;\n let elementStart = box[elementAxis + 1];\n let groupElementsCount = groupElements.length;\n\n for (let idx = 0; idx < groupElementsCount; idx++) {\n let element = groupElements[idx];\n let elementSize = this.elementSize(element);\n let groupElementStart = groupStart + this.alignStart(elementSize[groupSizeField], group.groupSize);\n\n let elementBox = new Box();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize[elementSizeField];\n\n element.reflow(elementBox);\n\n elementStart += elementSize[elementSizeField] + this.elementSpacing;\n }\n groupStart += group.groupSize + this.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n }\n }\n\n alignStart(size, maxSize) {\n let start = 0;\n const align = this.options.align;\n if (align === RIGHT || align === BOTTOM) {\n start = maxSize - size;\n } else if (align === CENTER) {\n start = (maxSize - size) / 2;\n }\n return start;\n }\n\n groupOptions() {\n const { box, children, elementSizeField, groupSizeField, elementSpacing, groupSpacing } = this;\n const maxSize = round(box[elementSizeField]());\n const childrenCount = children.length;\n const groups = [];\n\n let groupSize = 0;\n let groupElementsSize = 0;\n let groupsSize = 0;\n let maxGroupElementsSize = 0;\n let groupElements = [];\n\n for (let idx = 0; idx < childrenCount; idx++) {\n let element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n\n let elementSize = this.elementSize(element);\n if (this.options.wrap && round(groupElementsSize + elementSpacing + elementSize[elementSizeField]) > maxSize) {\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSpacing + groupSize;\n groupSize = 0;\n groupElementsSize = 0;\n groupElements = [];\n }\n groupSize = Math.max(groupSize, elementSize[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize[elementSizeField];\n groupElements.push(element);\n }\n\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n }\n\n elementSize(element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n }\n\n createVisual() {}\n}\n\nsetDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n});\n\nexport default FloatElement;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport Box from './box';\n\nimport { DEFAULT_FONT, BLACK } from '../common/constants';\nimport { setDefaultOptions } from '../common';\n\nconst DrawingText = draw.Text;\n\nclass Text extends ChartElement {\n\n constructor(content, options) {\n super(options);\n\n this.content = content;\n\n // Calculate size\n this.reflow(new Box());\n }\n\n reflow(targetBox) {\n const options = this.options;\n const size = options.size = draw.util.measureText(this.content, { font: options.font });\n\n this.baseline = size.baseline;\n\n this.box = new Box(targetBox.x1, targetBox.y1,\n targetBox.x1 + size.width, targetBox.y1 + size.height);\n }\n\n createVisual() {\n const { font, color, opacity, cursor } = this.options;\n\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: { color: color, opacity: opacity },\n cursor: cursor\n });\n }\n}\n\nsetDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n});\n\nexport default Text;\n","import Box from '../box';\n\nexport default function rectToBox(rect) {\n const origin = rect.origin;\n const bottomRight = rect.bottomRight();\n\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n}","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport BoxElement from './box-element';\nimport FloatElement from './float-element';\nimport Text from './text';\nimport Box from './box';\n\nimport rectToBox from './utils/rect-to-box';\n\nimport { getSpacing, deepExtend, defined } from '../common';\nimport { X, Y } from '../common/constants';\n\nconst ROWS_SPLIT_REGEX = /\\n/m;\n\nclass TextBox extends BoxElement {\n\n constructor(content, options, data) {\n super(options);\n this.content = content;\n this.data = data;\n\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\n }\n\n _initContainer() {\n const options = this.options;\n const rows = String(this.content).split(ROWS_SPLIT_REGEX);\n const floatElement = new FloatElement({ vertical: true, align: options.align, wrap: false });\n const textOptions = deepExtend({ }, options, { opacity: 1, animation: null });\n\n this.container = floatElement;\n this.append(floatElement);\n\n for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n let text = new Text(rows[rowIdx].trim(), textOptions);\n floatElement.append(text);\n }\n }\n\n reflow(targetBox) {\n const options = this.options;\n const visualFn = options.visual;\n this.container.options.align = options.align;\n\n if (visualFn && !this._boxReflow) {\n let visualBox = targetBox;\n if (!visualBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(visualBox);\n this._boxReflow = false;\n visualBox = this.box;\n }\n const visual = this.visual = visualFn(this.visualContext(visualBox));\n\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new geom.Rect());\n\n visual.options.zIndex = options.zIndex;\n }\n\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n super.reflow(targetBox);\n\n if (options.rotation) {\n const margin = getSpacing(options.margin);\n let box = this.box.unpad(margin);\n\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n\n this.rotatedBox = box.clone();\n\n box.pad(margin);\n }\n }\n }\n\n createVisual() {\n const options = this.options;\n\n this.visual = new draw.Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n\n if (this.hasBox()) {\n const box = draw.Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n }\n\n renderVisual() {\n if (!this.options.visible) {\n return;\n }\n\n if (this.options.visual) {\n const visual = this.visual;\n if (visual && !defined(visual.options.noclip)) {\n visual.options.noclip = this.options.noclip;\n }\n this.addVisual();\n this.createAnimation();\n } else {\n super.renderVisual();\n }\n }\n\n visualContext(targetBox) {\n const context = {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.options,\n createVisual: () => {\n this._boxReflow = true;\n this.reflow(targetBox);\n this._boxReflow = false;\n return this.getDefaultVisual();\n }\n };\n if (this.data) {\n Object.assign(context, this.data);\n }\n\n return context;\n }\n\n getDefaultVisual() {\n this.createVisual();\n this.renderChildren();\n const visual = this.visual;\n delete this.visual;\n return visual;\n }\n\n rotate() {\n const options = this.options;\n this.box.rotate(options.rotation);\n this.align(this.targetBox, X, options.align);\n this.align(this.targetBox, Y, options.vAlign);\n return this.box;\n }\n\n rotationTransform() {\n const rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n\n const { x: cx, y: cy } = this.normalBox.center();\n const boxCenter = this.rotatedBox.center();\n\n return geom.transform()\n .translate(boxCenter.x - cx, boxCenter.y - cy)\n .rotate(rotation, [ cx, cy ]);\n }\n}\n\nexport default TextBox;","import ChartElement from './chart-element';\nimport TextBox from './text-box';\n\nimport { X, BLACK, TOP, CENTER, BOTTOM } from '../common/constants';\nimport { getSpacing, setDefaultOptions } from '../common';\n\nclass Title extends ChartElement {\n constructor(options) {\n super(options);\n\n this._textBox = new TextBox(this.options.text, Object.assign({}, this.options, {\n vAlign: this.options.position\n }));\n\n this.append(this._textBox);\n }\n\n reflow(targetBox) {\n super.reflow(targetBox);\n this.box.snapTo(targetBox, X);\n }\n\n static buildTitle(options, defaultOptions) {\n let titleOptions = options;\n\n if (typeof options === \"string\") {\n titleOptions = { text: options };\n }\n\n titleOptions = Object.assign({ visible: true }, defaultOptions, titleOptions);\n\n let title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n }\n\n return title;\n }\n\n static orderTitles(titles) {\n const items = [].concat(titles);\n const top = items.filter(item => item && item.options.position !== BOTTOM);\n const bottom = items.filter(item => item && item.options.position === BOTTOM);\n\n collapseVerticalMargins(top);\n collapseVerticalMargins(bottom);\n\n bottom.reverse();\n return top.concat(bottom);\n }\n}\n\nfunction collapseVerticalMargins(items) {\n for (let i = 1; i < items.length; i++) {\n const box = items[i]._textBox;\n const prevBox = items[i - 1]._textBox;\n prevBox.options.margin = Object.assign(getSpacing(prevBox.options.margin), { bottom: 0 });\n box.options.margin = Object.assign(getSpacing(box.options.margin), { top: 0 });\n }\n}\n\nsetDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n});\n\nexport default Title;\n","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport TextBox from './text-box';\nimport Box from './box';\n\nimport rectToBox from './utils/rect-to-box';\n\nimport { AXIS_LABEL_CLICK, CENTER, TOP, BOTTOM, LEFT, DEFAULT_PRECISION, X, Y } from '../common/constants';\n\nimport { eventElement, round, setDefaultOptions } from '../common';\n\nclass AxisLabel extends TextBox {\n constructor(value, text, index, dataItem, options) {\n super(text, options);\n\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n }\n\n visualContext(targetBox) {\n const context = super.visualContext(targetBox);\n\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n\n return context;\n }\n\n click(widget, e) {\n\n widget.trigger(AXIS_LABEL_CLICK, {\n element: eventElement(e),\n value: this.value,\n text: this.text,\n index: this.index,\n dataItem: this.dataItem,\n axis: this.parent.options\n });\n }\n\n rotate() {\n if (this.options.alignRotation !== CENTER) {\n const box = this.normalBox.toRect();\n const transform = this.rotationTransform();\n\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n super.rotate();\n }\n\n return this.box;\n }\n\n rotationTransform() {\n const options = this.options;\n const rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n\n if (options.alignRotation === CENTER) {\n return super.rotationTransform();\n }\n\n const rotationMatrix = geom.transform().rotate(rotation).matrix();\n const box = this.normalBox.toRect();\n const rect = this.targetBox.toRect();\n\n const rotationOrigin = options.rotationOrigin || TOP;\n const alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n const distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n const axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n\n const topLeft = box.topLeft().transformCopy(rotationMatrix);\n const topRight = box.topRight().transformCopy(rotationMatrix);\n const bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n const bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n const rotatedBox = geom.Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n\n const translate = {\n [distanceAxis]: rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis]\n };\n\n const distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n const distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n\n let alignStart, alignEnd;\n\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\n alignStart = topLeft;\n alignEnd = topRight;\n } else if (distanceRight < distanceLeft) {\n alignStart = topRight;\n alignEnd = bottomRight;\n } else {\n alignStart = topLeft;\n alignEnd = bottomLeft;\n }\n\n const alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n\n return geom.transform()\n .translate(translate.x, translate.y)\n .rotate(rotation);\n }\n}\n\nsetDefaultOptions(AxisLabel, {\n _autoReflow: false\n});\n\nexport default AxisLabel;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport BoxElement from './box-element';\nimport TextBox from './text-box';\nimport ShapeElement from './shape-element';\nimport Box from './box';\n\nimport { CIRCLE, TOP, BOTTOM, LEFT, RIGHT, CENTER, INSIDE, OUTSIDE, NOTE_CLICK, NOTE_HOVER, NOTE_LEAVE } from '../common/constants';\nimport { alignPathToPixel, defined, deepExtend, eventElement, getTemplate, inArray, setDefaultOptions } from '../common';\n\nconst DEFAULT_ICON_SIZE = 7;\nconst DEFAULT_LABEL_COLOR = \"#fff\";\n\nclass Note extends BoxElement {\n constructor(fields, options, chartService) {\n super(options);\n\n this.fields = fields;\n this.chartService = chartService;\n\n this.render();\n }\n\n hide() {\n this.options.visible = false;\n }\n\n show() {\n this.options.visible = true;\n }\n\n render() {\n const options = this.options;\n\n if (options.visible) {\n const { label, icon } = options;\n const box = new Box();\n const childAlias = () => this;\n let size = icon.size;\n let text = this.fields.text;\n let width, height;\n\n if (defined(label) && label.visible) {\n const noteTemplate = getTemplate(label);\n if (noteTemplate) {\n text = noteTemplate(this.fields);\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n\n this.label = new TextBox(text, deepExtend({}, label));\n this.label.aliasFor = childAlias;\n\n if (label.position === INSIDE && !defined(size)) {\n if (icon.type === CIRCLE) {\n size = Math.max(this.label.box.width(), this.label.box.height());\n } else {\n width = this.label.box.width();\n height = this.label.box.height();\n }\n box.wrap(this.label.box);\n }\n }\n\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n\n const marker = new ShapeElement(deepExtend({}, icon));\n marker.aliasFor = childAlias;\n\n this.marker = marker;\n this.append(marker);\n\n if (this.label) {\n this.append(this.label);\n }\n\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\n }\n\n reflow(targetBox) {\n const { options, label, marker, wrapperBox } = this;\n const center = targetBox.center();\n const length = options.line.length;\n const position = options.position;\n\n // TODO: Review\n if (options.visible) {\n let lineStart, box, contentBox;\n\n if (inArray(position, [ LEFT, RIGHT ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n\n if (options.line.visible) {\n lineStart = [ targetBox.x1, center.y ];\n this.linePoints = [\n lineStart,\n [ contentBox.x2, center.y ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n\n if (options.line.visible) {\n lineStart = [ targetBox.x2, center.y ];\n this.linePoints = [\n lineStart,\n [ contentBox.x1, center.y ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n } else {\n if (position === BOTTOM) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n\n if (options.line.visible) {\n lineStart = [ center.x, targetBox.y2 ];\n this.linePoints = [\n lineStart,\n [ center.x, contentBox.y1 ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n\n if (options.line.visible) {\n lineStart = [ center.x, targetBox.y1 ];\n this.linePoints = [\n lineStart,\n [ center.x, contentBox.y2 ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n\n if (marker) {\n marker.reflow(contentBox);\n }\n\n if (label) {\n label.reflow(contentBox);\n if (marker) {\n if (options.label.position === OUTSIDE) {\n label.box.alignTo(marker.box, position);\n }\n label.reflow(label.box);\n }\n }\n\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n }\n\n createVisual() {\n super.createVisual();\n this.visual.options.noclip = this.options.noclip;\n\n if (this.options.visible) {\n this.createLine();\n }\n }\n\n renderVisual() {\n const options = this.options;\n const customVisual = options.visual;\n if (options.visible && customVisual) {\n this.visual = customVisual(Object.assign(this.fields, {\n sender: this.getSender(),\n rect: this.targetBox.toRect(),\n options: {\n background: options.background,\n border: options.background,\n icon: options.icon,\n label: options.label,\n line: options.line,\n position: options.position,\n visible: options.visible\n },\n createVisual: () => {\n this.createVisual();\n this.renderChildren();\n const defaultVisual = this.visual;\n delete this.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n super.renderVisual();\n }\n }\n\n createLine() {\n const options = this.options.line;\n\n if (this.linePoints) {\n const path = draw.Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n\n alignPathToPixel(path);\n this.visual.append(path);\n }\n }\n\n click(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n }\n\n over(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n }\n\n out(widget, e) {\n const args = this.eventArgs(e);\n\n widget.trigger(NOTE_LEAVE, args);\n }\n\n eventArgs(e) {\n const options = this.options;\n\n return Object.assign(this.fields, {\n element: eventElement(e),\n text: defined(options.label) ? options.label.text : \"\",\n visual: this.visual\n });\n }\n}\n\nsetDefaultOptions(Note, {\n icon: {\n visible: true,\n type: CIRCLE\n },\n label: {\n position: INSIDE,\n visible: true,\n align: CENTER,\n vAlign: CENTER\n },\n line: {\n visible: true\n },\n visible: true,\n position: TOP,\n zIndex: 2\n});\n\nexport default Note;","const defaultImplementation = {\n format: (format, value) => value,\n\n toString: (value) => value,\n\n parseDate: (value) => new Date(value),\n\n firstDay: () => 0\n};\n\nlet current = defaultImplementation;\n\nclass IntlService {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static get implementation() {\n return current;\n }\n}\n\nexport default IntlService;\n","import IntlService from './intl-service';\nimport { FORMAT_REGEX } from '../common/constants';\nimport { isString } from '../common';\n\nconst FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n\nclass FormatService {\n constructor(intlService) {\n this._intlService = intlService;\n }\n\n get intl() {\n return this._intlService || IntlService.implementation;\n }\n\n set intl(value) {\n this._intlService = value;\n }\n\n auto(formatString, ...values) {\n const intl = this.intl;\n\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format(formatString, ...values);\n }\n\n return intl.toString(values[0], formatString);\n }\n\n localeAuto(formatString, values, locale) {\n const intl = this.intl;\n let result;\n\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n result = formatString.replace(FORMAT_REPLACE_REGEX, function(match, index, placeholderFormat) {\n let value = values[parseInt(index, 10)];\n\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\", locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n\n return result;\n }\n}\n\nexport default FormatService;","import IntlService from './intl-service';\nimport FormatService from './format-service';\n\nclass ChartService {\n constructor(chart, context = {}) {\n this._intlService = context.intlService;\n this.sender = context.sender || chart;\n this.format = new FormatService(context.intlService);\n this.chart = chart;\n this.rtl = Boolean(context.rtl);\n }\n\n get intl() {\n return this._intlService || IntlService.implementation;\n }\n\n set intl(value) {\n this._intlService = value;\n this.format.intl = value;\n }\n\n notify(name, args) {\n if (this.chart) {\n this.chart.trigger(name, args);\n }\n }\n\n isPannable(axis) {\n const pannable = ((this.chart || {}).options || {}).pannable;\n return pannable && pannable.lock !== axis;\n }\n}\n\nexport default ChartService;\n","let current;\n\nclass DomEventsBuilder {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static create(element, events) {\n if (current) {\n return current.create(element, events);\n }\n }\n}\n\nexport default DomEventsBuilder;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { alignPathToPixel } from '../../common';\n\nexport default function createAxisTick(options, tickOptions) {\n const { tickX, tickY, position } = options;\n\n const tick = new draw.Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n\n if (options.vertical) {\n tick.moveTo(tickX, position)\n .lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY)\n .lineTo(position, tickY + tickOptions.size);\n }\n\n alignPathToPixel(tick);\n\n return tick;\n}\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { alignPathToPixel } from '../../common';\n\nexport default function createAxisGridLine(options, gridLine) {\n const { lineStart, lineEnd, position } = options;\n\n const line = new draw.Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n\n if (options.vertical) {\n line.moveTo(lineStart, position)\n .lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart)\n .lineTo(position, lineEnd);\n }\n\n alignPathToPixel(line);\n\n return line;\n}","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport ChartElement from './chart-element';\nimport TextBox from './text-box';\nimport AxisLabel from './axis-label';\nimport Note from './note';\nimport Box from './box';\nimport { ChartService } from '../services';\n\nimport createAxisTick from './utils/create-axis-tick';\nimport createAxisGridLine from './utils/create-axis-grid-line';\n\nimport { NONE, BLACK, CENTER, TOP, BOTTOM, LEFT, RIGHT, OUTSIDE, X, Y, WIDTH, HEIGHT } from '../common/constants';\nimport { alignPathToPixel, deepExtend, getTemplate, grep, defined, isObject, inArray, limitValue, round, setDefaultOptions } from '../common';\n\nclass Axis extends ChartElement {\n constructor(options, chartService = new ChartService()) {\n super(options);\n\n this.chartService = chartService;\n\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: {\n visible: false\n },\n line: {\n visible: false\n },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\n }\n\n this.options.minorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.minorTickType !== NONE\n }, this.options.minorTicks, {\n size: this.options.minorTickSize,\n align: this.options.minorTickType\n });\n\n this.options.majorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.majorTickType !== NONE\n }, this.options.majorTicks, {\n size: this.options.majorTickSize,\n align: this.options.majorTickType\n });\n\n this.initFields();\n\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n\n this.createTitle();\n this.createNotes();\n }\n\n initFields() {\n }\n\n // abstract labelsCount(): Number\n // abstract createAxisLabel(index, options): AxisLabel\n\n labelsRange() {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n }\n\n normalizeLabelRotation(labelOptions) {\n const rotation = labelOptions.rotation;\n\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n }\n\n createLabels() {\n const options = this.options;\n const align = options.vertical ? RIGHT : CENTER;\n const labelOptions = deepExtend({ }, options.labels, {\n align: align,\n zIndex: options.zIndex\n });\n const step = Math.max(1, labelOptions.step);\n\n this.clearLabels();\n\n if (labelOptions.visible) {\n this.normalizeLabelRotation(labelOptions);\n if (labelOptions.rotation === \"auto\") {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n\n const range = this.labelsRange();\n for (let idx = range.min; idx < range.max; idx += step) {\n const labelContext = { index: idx, count: range.max };\n let label = this.createAxisLabel(idx, labelOptions, labelContext);\n if (label) {\n this.append(label);\n this.labels.push(label);\n }\n }\n }\n }\n\n clearLabels() {\n this.children = grep(this.children, child => !(child instanceof AxisLabel));\n this.labels = [];\n }\n\n clearTitle() {\n if (this.title) {\n this.children = grep(this.children, child => child !== this.title);\n this.title = undefined;\n }\n }\n\n clear() {\n this.clearLabels();\n this.clearTitle();\n }\n\n lineBox() {\n const { options, box } = this;\n const vertical = options.vertical;\n const mirror = options.labels.mirror;\n const axisX = mirror ? box.x1 : box.x2;\n const axisY = mirror ? box.y2 : box.y1;\n const lineWidth = options.line.width || 0;\n\n return vertical ?\n new Box(axisX, box.y1, axisX, box.y2 - lineWidth) :\n new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n }\n\n createTitle() {\n const options = this.options;\n const titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: \"\",\n zIndex: 1,\n visualSize: true\n }, options.title);\n\n if (titleOptions.visible && titleOptions.text) {\n const title = new TextBox(titleOptions.text, titleOptions);\n this.append(title);\n this.title = title;\n }\n }\n\n createNotes() {\n const options = this.options;\n const notes = options.notes;\n const items = notes.data || [];\n\n this.notes = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = deepExtend({}, notes, items[i]);\n item.value = this.parseNoteValue(item.value);\n\n const note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this.chartService);\n\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [ LEFT, RIGHT ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [ TOP, BOTTOM ])) {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n } else {\n if (options.vertical) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n }\n this.append(note);\n this.notes.push(note);\n }\n }\n }\n\n parseNoteValue(value) {\n return value;\n }\n\n renderVisual() {\n super.renderVisual();\n\n this.createPlotBands();\n }\n\n createVisual() {\n super.createVisual();\n\n this.createBackground();\n this.createLine();\n }\n\n gridLinesVisual() {\n let gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new draw.Group({\n zIndex: -2\n });\n this.appendVisual(this._gridLines);\n }\n\n return gridLines;\n }\n\n createTicks(lineGroup) {\n const options = this.options;\n const lineBox = this.lineBox();\n const mirror = options.labels.mirror;\n const majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n const tickLineOptions = {\n // TODO\n // _alignLines: options._alignLines,\n vertical: options.vertical\n };\n\n function render(tickPositions, tickOptions, skipUnit) {\n const count = tickPositions.length;\n const step = Math.max(1, tickOptions.step);\n\n if (tickOptions.visible) {\n for (let i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && (i % skipUnit === 0)) {\n continue;\n }\n\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n }\n\n createLine() {\n const options = this.options;\n const line = options.line;\n const lineBox = this.lineBox();\n\n if (line.width > 0 && line.visible) {\n const path = new draw.Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n\n /* TODO\n zIndex: line.zIndex,\n */\n });\n\n path.moveTo(lineBox.x1, lineBox.y1)\n .lineTo(lineBox.x2, lineBox.y2);\n\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n\n const group = this._lineGroup = new draw.Group();\n group.append(path);\n\n this.visual.append(group);\n this.createTicks(group);\n }\n }\n\n getActualTickSize() {\n const options = this.options;\n let tickSize = 0;\n\n if (options.majorTicks.visible && options.minorTicks.visible) {\n tickSize = Math.max(options.majorTicks.size, options.minorTicks.size);\n } else if (options.majorTicks.visible) {\n tickSize = options.majorTicks.size;\n } else if (options.minorTicks.visible) {\n tickSize = options.minorTicks.size;\n }\n\n return tickSize;\n }\n\n createBackground() {\n const { options, box } = this;\n const background = options.background;\n\n if (background) {\n this._backgroundPath = draw.Path.fromRect(box.toRect(), {\n fill: {\n color: background\n },\n stroke: null\n });\n\n this.visual.append(this._backgroundPath);\n }\n }\n\n createPlotBands() {\n const options = this.options;\n const plotBands = options.plotBands || [];\n const vertical = options.vertical;\n const plotArea = this.plotArea;\n\n if (plotBands.length === 0) {\n return;\n }\n\n const group = this._plotbandGroup = new draw.Group({\n zIndex: -1\n });\n\n const altAxis = grep(this.pane.axes, axis => axis.options.vertical !== this.options.vertical)[0];\n\n for (let idx = 0; idx < plotBands.length; idx++) {\n let item = plotBands[idx];\n let slotX, slotY;\n let labelOptions = item.label;\n let label;\n\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this.getSlot(item.from, item.to, true);\n } else {\n slotX = this.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n\n if (labelOptions) {\n labelOptions.vAlign = labelOptions.position || LEFT;\n label = this.createPlotBandLabel(\n labelOptions,\n item,\n new Box(\n slotX.x1,\n slotY.y1,\n slotX.x2,\n slotY.y2\n )\n\n );\n }\n\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n const bandRect = new geom.Rect(\n [ slotX.x1, slotY.y1 ],\n [ slotX.width(), slotY.height() ]\n );\n\n const path = draw.Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n\n group.append(path);\n if (label) {\n group.append(label);\n }\n }\n }\n\n this.appendVisual(group);\n }\n\n createPlotBandLabel(label, item, box) {\n\n if (label.visible === false) {\n return null;\n }\n\n let text = label.text;\n let textbox;\n\n if (defined(label) && label.visible) {\n const labelTemplate = getTemplate(label);\n if (labelTemplate) {\n text = labelTemplate({ text: text, item: item });\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n\n if (!label.color) {\n label.color = this.options.labels.color;\n }\n }\n\n textbox = new TextBox(text, label);\n textbox.reflow(box);\n textbox.renderVisual();\n\n return textbox.visual;\n }\n\n createGridLines(altAxis) {\n const options = this.options;\n const { minorGridLines, majorGridLines, minorUnit, vertical } = options;\n const axisLineVisible = altAxis.options.line.visible;\n const majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n const lineBox = altAxis.lineBox();\n const linePos = lineBox[vertical ? \"y1\" : \"x1\"];\n const lineOptions = {\n lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n vertical: vertical\n };\n const majorTicks = [];\n\n const container = this.gridLinesVisual();\n\n function render(tickPositions, gridLine, skipUnit) {\n const count = tickPositions.length;\n const step = Math.max(1, gridLine.step);\n\n if (gridLine.visible) {\n for (let i = gridLine.skip; i < count; i += step) {\n let pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n\n return container.children;\n }\n\n reflow(box) {\n const { options, labels, title } = this;\n const vertical = options.vertical;\n const count = labels.length;\n const sizeFn = vertical ? WIDTH : HEIGHT;\n const titleSize = title ? title.box[sizeFn]() : 0;\n const space = this.getActualTickSize() + options.margin + titleSize;\n const rootBox = (this.getRoot() || {}).box || box;\n const boxSize = rootBox[sizeFn]();\n let maxLabelSize = 0;\n\n for (let i = 0; i < count; i++) {\n let labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n\n if (vertical) {\n this.box = new Box(\n box.x1, box.y1,\n box.x1 + maxLabelSize + space, box.y2\n );\n } else {\n this.box = new Box(\n box.x1, box.y1,\n box.x2, box.y1 + maxLabelSize + space\n );\n }\n\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n }\n\n getLabelsTickPositions() {\n return this.getMajorTickPositions();\n }\n\n labelTickIndex(label) {\n return label.index;\n }\n\n arrangeLabels() {\n const { options, labels } = this;\n const labelsBetweenTicks = this.labelsBetweenTicks();\n const vertical = options.vertical;\n const mirror = options.labels.mirror;\n const tickPositions = this.getLabelsTickPositions();\n\n for (let idx = 0; idx < labels.length; idx++) {\n const label = labels[idx];\n const tickIx = this.labelTickIndex(label);\n const labelSize = vertical ? label.box.height() : label.box.width();\n const firstTickPosition = tickPositions[tickIx];\n const nextTickPosition = tickPositions[tickIx + 1];\n let positionStart, positionEnd;\n\n if (vertical) {\n if (labelsBetweenTicks) {\n const middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n positionStart = middle - (labelSize / 2);\n } else {\n positionStart = firstTickPosition - (labelSize / 2);\n }\n\n positionEnd = positionStart;\n } else {\n if (labelsBetweenTicks) {\n positionStart = firstTickPosition;\n positionEnd = nextTickPosition;\n } else {\n positionStart = firstTickPosition - (labelSize / 2);\n positionEnd = positionStart + labelSize;\n }\n }\n\n this.positionLabel(label, mirror, positionStart, positionEnd);\n }\n }\n\n positionLabel(label, mirror, positionStart, positionEnd = positionStart) {\n const options = this.options;\n const vertical = options.vertical;\n const lineBox = this.lineBox();\n const labelOffset = this.getActualTickSize() + options.margin;\n let labelBox;\n\n if (vertical) {\n let labelX = lineBox.x2;\n\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n\n labelBox = label.box.move(labelX, positionStart);\n } else {\n let labelY = lineBox.y1;\n\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n\n labelBox = new Box(\n positionStart, labelY,\n positionEnd, labelY + label.box.height()\n );\n }\n\n label.reflow(labelBox);\n }\n\n autoRotateLabelAngle(labelBox, slotWidth) {\n if (labelBox.width() < slotWidth) {\n return 0;\n }\n\n if (labelBox.height() > slotWidth) {\n return -90;\n }\n\n return -45;\n }\n\n autoRotateLabels() {\n if (!this.options.autoRotateLabels || this.options.vertical) {\n return false;\n }\n\n const tickPositions = this.getMajorTickPositions();\n const labels = this.labels;\n const limit = Math.min(labels.length, tickPositions.length - 1);\n let angle = 0;\n\n for (let idx = 0; idx < limit; idx++) {\n const width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n const labelBox = labels[idx].box;\n const labelAngle = this.autoRotateLabelAngle(labelBox, width);\n\n if (labelAngle !== 0) {\n angle = labelAngle;\n }\n\n if (angle === -90) {\n break;\n }\n }\n\n if (angle !== 0) {\n for (let idx = 0; idx < labels.length; idx++) {\n labels[idx].options.rotation = angle;\n labels[idx].reflow(new Box());\n }\n\n return true;\n }\n }\n\n arrangeTitle() {\n const { options, title } = this;\n const mirror = options.labels.mirror;\n const vertical = options.vertical;\n\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n\n title.reflow(this.box);\n }\n }\n\n arrangeNotes() {\n for (let idx = 0; idx < this.notes.length; idx++) {\n const item = this.notes[idx];\n const value = item.options.value;\n let slot;\n\n if (defined(value)) {\n if (this.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n\n slot = this.noteSlot(value);\n } else {\n item.hide();\n }\n\n item.reflow(slot || this.lineBox());\n }\n }\n\n noteSlot(value) {\n return this.getSlot(value);\n }\n\n alignTo(secondAxis) {\n const lineBox = secondAxis.lineBox();\n const vertical = this.options.vertical;\n const pos = vertical ? Y : X;\n\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n }\n\n axisLabelText(value, options, context) {\n let text;\n const tmpl = getTemplate(options);\n const defaultText = () => {\n if (!options.format) {\n return value;\n }\n\n return this.chartService.format.localeAuto(\n options.format, [ value ], options.culture\n );\n };\n\n if (tmpl) {\n const templateContext = Object.assign({}, context, {\n get text() { return defaultText(); },\n value,\n format: options.format,\n culture: options.culture\n });\n\n text = tmpl(templateContext);\n } else {\n text = defaultText();\n }\n\n return text;\n }\n\n slot(from , to, limit) {\n const slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n }\n\n contentBox() {\n const box = this.box.clone();\n const labels = this.labels;\n if (labels.length) {\n const axis = this.options.vertical ? Y : X;\n if (this.chartService.isPannable(axis)) {\n const offset = this.maxLabelOffset();\n box[axis + 1] -= offset.start;\n box[axis + 2] += offset.end;\n } else {\n if (labels[0].options.visible) {\n box.wrap(labels[0].box);\n }\n const lastLabel = labels[labels.length - 1];\n if (lastLabel.options.visible) {\n box.wrap(lastLabel.box);\n }\n }\n }\n\n return box;\n }\n\n maxLabelOffset() {\n const { vertical, reverse } = this.options;\n const labelsBetweenTicks = this.labelsBetweenTicks();\n const tickPositions = this.getLabelsTickPositions();\n const offsetField = vertical ? Y : X;\n const labels = this.labels;\n const startPosition = reverse ? 1 : 0;\n const endPosition = reverse ? 0 : 1;\n let maxStartOffset = 0;\n let maxEndOffset = 0;\n\n for (let idx = 0; idx < labels.length; idx++) {\n const label = labels[idx];\n const tickIx = this.labelTickIndex(label);\n let startTick, endTick;\n\n if (labelsBetweenTicks) {\n startTick = tickPositions[tickIx + startPosition];\n endTick = tickPositions[tickIx + endPosition];\n } else {\n startTick = endTick = tickPositions[tickIx];\n }\n\n maxStartOffset = Math.max(maxStartOffset, startTick - label.box[offsetField + 1]);\n maxEndOffset = Math.max(maxEndOffset, label.box[offsetField + 2] - endTick);\n }\n\n return {\n start: maxStartOffset,\n end: maxEndOffset\n };\n }\n\n limitRange(from, to, min, max, offset) {\n const options = this.options;\n\n if ((from < min && offset < 0 && (!defined(options.min) || options.min <= min)) || (max < to && offset > 0 && (!defined(options.max) || max <= options.max))) {\n return null;\n }\n\n if ((to < min && offset > 0) || (max < from && offset < 0)) {\n return {\n min: from,\n max: to\n };\n }\n\n const rangeSize = to - from;\n let minValue = from;\n let maxValue = to;\n\n if (from < min && offset < 0) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max && offset > 0) {\n maxValue = limitValue(to, min, max);\n minValue = limitValue(to - rangeSize, min, max - rangeSize);\n }\n\n return {\n min: minValue,\n max: maxValue\n };\n }\n\n valueRange() {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n }\n\n lineDir() {\n /*\n * Axis line direction:\n * * Vertical: up.\n * * Horizontal: right.\n */\n\n const { vertical, reverse } = this.options;\n return (vertical ? -1 : 1) * (reverse ? -1 : 1);\n }\n\n lineInfo() {\n const { vertical } = this.options;\n const lineBox = this.lineBox();\n const lineSize = vertical ? lineBox.height() : lineBox.width();\n const axis = vertical ? Y : X;\n const axisDir = this.lineDir();\n const startEdge = axisDir === 1 ? 1 : 2;\n const axisOrigin = axis + startEdge.toString();\n const lineStart = lineBox[axisOrigin];\n\n return {\n axis,\n axisOrigin,\n axisDir,\n lineBox,\n lineSize,\n lineStart\n };\n }\n\n pointOffset(point) {\n const { axis, axisDir, axisOrigin, lineBox, lineSize } = this.lineInfo();\n const relative = axisDir > 0 ? point[axis] - lineBox[axisOrigin] : lineBox[axisOrigin] - point[axis];\n const offset = relative / lineSize;\n\n return offset;\n }\n\n // Computes the axis range change (delta) for a given scale factor.\n // The delta is subtracted from the axis range:\n // * delta > 0 reduces the axis range (zoom-in)\n // * delta < 0 expands the axis range (zoom-out)\n scaleToDelta(rawScale, range) {\n // Scale >= 1 would result in axis range of 0.\n // Scale <= -1 would reverse the scale direction.\n const MAX_SCALE = 0.999;\n const scale = limitValue(rawScale, -MAX_SCALE, MAX_SCALE);\n\n let delta;\n if (scale > 0) {\n delta = range * Math.min(1, scale);\n } else {\n delta = range - (range / (1 + scale));\n }\n\n return delta;\n }\n\n labelsBetweenTicks() {\n return !this.options.justified;\n }\n\n //add legacy fields to the options that are no longer generated by default\n prepareUserOptions() {\n }\n}\n\nsetDefaultOptions(Axis, {\n labels: {\n visible: true,\n rotation: 0,\n mirror: false,\n step: 1,\n skip: 0\n },\n line: {\n width: 1,\n color: BLACK,\n visible: true\n },\n title: {\n visible: true,\n position: CENTER\n },\n majorTicks: {\n align: OUTSIDE,\n size: 4,\n skip: 0,\n step: 1\n },\n minorTicks: {\n align: OUTSIDE,\n size: 3,\n skip: 0,\n step: 1\n },\n axisCrossingValue: 0,\n majorTickType: OUTSIDE,\n minorTickType: NONE,\n majorGridLines: {\n skip: 0,\n step: 1\n },\n minorGridLines: {\n visible: false,\n width: 1,\n color: BLACK,\n skip: 0,\n step: 1\n },\n // TODO: Move to line or labels options\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: {\n label: {\n text: \"\"\n }\n },\n\n _alignLines: true,\n _deferLabels: false\n});\n\nexport default Axis;\n","export const MILLISECONDS = \"milliseconds\";\nexport const SECONDS = \"seconds\";\nexport const MINUTES = \"minutes\";\nexport const HOURS = \"hours\";\nexport const DAYS = \"days\";\nexport const WEEKS = \"weeks\";\nexport const MONTHS = \"months\";\nexport const YEARS = \"years\";\n\nexport const TIME_PER_MILLISECOND = 1;\nexport const TIME_PER_SECOND = 1000;\nexport const TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\nexport const TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\nexport const TIME_PER_DAY = 24 * TIME_PER_HOUR;\nexport const TIME_PER_WEEK = 7 * TIME_PER_DAY;\nexport const TIME_PER_MONTH = 31 * TIME_PER_DAY;\nexport const TIME_PER_YEAR = 365 * TIME_PER_DAY;\nexport const TIME_PER_UNIT = {\n \"years\": TIME_PER_YEAR,\n \"months\": TIME_PER_MONTH,\n \"weeks\": TIME_PER_WEEK,\n \"days\": TIME_PER_DAY,\n \"hours\": TIME_PER_HOUR,\n \"minutes\": TIME_PER_MINUTE,\n \"seconds\": TIME_PER_SECOND,\n \"milliseconds\": TIME_PER_MILLISECOND\n};\n\n","import { TIME_PER_MINUTE } from './constants';\n\nexport default function absoluteDateDiff(a, b) {\n const diff = a.getTime() - b;\n const offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n\n return diff - (offsetDiff * TIME_PER_MINUTE);\n}","export default function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n}","export default function toDate(value) {\n let result;\n\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n\n return result;\n}","import { MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS,\n TIME_PER_SECOND, TIME_PER_MINUTE, TIME_PER_HOUR } from './constants';\nimport addTicks from './add-ticks';\nimport toDate from './to-date';\nimport startOfWeek from './start-of-week';\n\nfunction adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n\n return false;\n}\n\nfunction addHours(date, hours) {\n const roundedDate = new Date(date);\n\n roundedDate.setMinutes(0, 0, 0);\n\n const tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n}\n\nexport default function addDuration(dateValue, value, unit, weekStartDay) {\n let result = dateValue;\n\n if (dateValue) {\n let date = toDate(dateValue);\n const hours = date.getHours();\n\n if (unit === YEARS) {\n result = new Date(date.getFullYear() + value, 0, 1);\n adjustDST(result, 0);\n } else if (unit === MONTHS) {\n result = new Date(date.getFullYear(), date.getMonth() + value, 1);\n adjustDST(result, hours);\n } else if (unit === WEEKS) {\n result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\n adjustDST(result, hours);\n } else if (unit === DAYS) {\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\n adjustDST(result, hours);\n } else if (unit === HOURS) {\n result = addHours(date, value);\n } else if (unit === MINUTES) {\n result = addTicks(date, value * TIME_PER_MINUTE);\n\n if (result.getSeconds() > 0) {\n result.setSeconds(0);\n }\n } else if (unit === SECONDS) {\n result = addTicks(date, value * TIME_PER_SECOND);\n } else if (unit === MILLISECONDS) {\n result = addTicks(date, value);\n }\n\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n\n return result;\n}","import { TIME_PER_DAY } from './constants';\nimport addTicks from './add-ticks';\n\nexport default function startOfWeek(date, weekStartDay = 0) {\n let daysToSubtract = 0;\n let day = date.getDay();\n\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n\n daysToSubtract++;\n }\n }\n\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n}","import addDuration from './add-duration';\nimport toDate from './to-date';\n\nexport default function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n}","import floorDate from './floor-date';\nimport addDuration from './add-duration';\nimport toDate from './to-date';\n\nexport default function ceilDate(dateValue, unit, weekStartDay) {\n const date = toDate(dateValue);\n\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n\n return addDuration(date, 1, unit, weekStartDay);\n}","export default function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n\n return -1;\n}","export default function dateDiff(a, b) {\n return a.getTime() - b;\n}","import { isArray } from '../common';\nimport toDate from './to-date';\n\nexport default function toTime(value) {\n if (isArray(value)) {\n let result = [];\n for (let idx = 0; idx < value.length; idx++) {\n result.push(toTime(value[idx]));\n }\n\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n}","import toTime from './to-time';\n\nexport default function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n\n return a === b;\n}","import { DAYS, WEEKS, MONTHS, YEARS, TIME_PER_UNIT } from './constants';\nimport dateDiff from './date-diff';\nimport absoluteDateDiff from './absolute-date-diff';\nimport toDate from './to-date';\n\nfunction timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n}\n\nexport default function dateIndex(value, start, baseUnit, baseUnitStep) {\n const date = toDate(value);\n const startDate = toDate(start);\n let index;\n\n if (baseUnit === MONTHS) {\n index = (date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12) +\n timeIndex(date, new Date(date.getFullYear(), date.getMonth()), DAYS) / new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n } else if (baseUnit === YEARS) {\n index = date.getFullYear() - startDate.getFullYear() + dateIndex(date, new Date(date.getFullYear(), 0), MONTHS, 1) / 12;\n } else if (baseUnit === DAYS || baseUnit === WEEKS) {\n index = timeIndex(date, startDate, baseUnit);\n } else {\n index = dateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n\n return index / baseUnitStep;\n}\n\n","import { DAYS, MONTHS, YEARS, TIME_PER_DAY, TIME_PER_UNIT } from './constants';\nimport dateDiff from './date-diff';\n\nexport default function duration(a, b, unit) {\n let diff;\n\n if (unit === YEARS) {\n diff = b.getFullYear() - a.getFullYear();\n } else if (unit === MONTHS) {\n diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\n } else if (unit === DAYS) {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_DAY);\n } else {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_UNIT[unit]);\n }\n\n return diff;\n}","import { isString } from '../common';\nimport toDate from './to-date';\n\nexport default function parseDate(intlService, date) {\n let result;\n if (isString(date)) {\n result = intlService.parseDate(date) || toDate(date);\n } else {\n result = toDate(date);\n }\n return result;\n}\n","import parseDate from './parse-date';\n\nimport { isArray } from '../common';\n\nexport default function parseDates(intlService, dates) {\n if (isArray(dates)) {\n const result = [];\n for (let idx = 0; idx < dates.length; idx++) {\n result.push(parseDate(intlService, dates[idx]));\n }\n\n return result;\n }\n\n return parseDate(intlService, dates);\n}","import { isNumber } from '../common';\n\nexport default function firstDay(options, intlService) {\n if (isNumber(options.weekStartDay)) {\n return options.weekStartDay;\n }\n\n if (intlService && intlService.firstDay) {\n return intlService.firstDay();\n }\n\n return 0;\n}\n","import Axis from './axis';\nimport AxisLabel from './axis-label';\n\nimport { BLACK, COORD_PRECISION, DEFAULT_PRECISION, X, Y } from '../common/constants';\nimport { defined, isNumber, last, limitValue, round, setDefaultOptions, valueOrDefault, HashMap } from '../common';\nimport { dateEquals } from '../date-utils';\n\nconst MIN_CATEGORY_POINTS_RANGE = 0.01;\nconst MIN_CATEGORY_RANGE = 0.1;\n\nfunction indexOf(value, arr) {\n if (value instanceof Date) {\n const length = arr.length;\n for (let idx = 0; idx < length; idx++) {\n if (dateEquals(arr[idx], value)) {\n return idx;\n }\n }\n\n return -1;\n }\n\n return arr.indexOf(value);\n}\n\nclass CategoryAxis extends Axis {\n initFields() {\n this._ticks = {};\n }\n\n categoriesHash() {\n return \"\";\n }\n\n clone() {\n const copy = new CategoryAxis(Object.assign({}, this.options, {\n categories: this.options.srcCategories\n }), this.chartService);\n copy.createLabels();\n\n return copy;\n }\n\n initUserOptions(options) {\n const categories = options.categories || [];\n const definedMin = defined(options.min);\n const definedMax = defined(options.max);\n options.srcCategories = options.categories = categories;\n\n if ((definedMin || definedMax) && categories.length) {\n const min = definedMin ? Math.floor(options.min) : 0;\n let max;\n\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n\n options.categories = options.categories.slice(min, max);\n }\n\n return options;\n }\n\n rangeIndices() {\n const options = this.options;\n const length = options.categories.length || 1;\n const min = isNumber(options.min) ? options.min % 1 : 0;\n let max;\n\n if (isNumber(options.max) && options.max % 1 !== 0 && options.max < this.totalRange().max) {\n max = length - (1 - options.max % 1);\n } else {\n max = length - (options.justified ? 1 : 0);\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n range() {\n const options = this.options;\n const min = isNumber(options.min) ? options.min : 0;\n const max = isNumber(options.max) ? options.max : this.totalRange().max;\n\n return {\n min: min,\n max: max\n };\n }\n\n roundedRange() {\n return this.range();\n }\n\n totalRange() {\n const options = this.options;\n return { min: 0, max: Math.max(this._seriesMax || 0, options.srcCategories.length) - (options.justified ? 1 : 0) };\n }\n\n scaleOptions() {\n const { min, max } = this.rangeIndices();\n const lineBox = this.lineBox();\n const size = this.options.vertical ? lineBox.height() : lineBox.width();\n const scale = size / ((max - min) || 1);\n\n return {\n scale: scale * (this.options.reverse ? -1 : 1),\n box: lineBox,\n min: min,\n max: max\n };\n }\n\n arrangeLabels() {\n super.arrangeLabels();\n this.hideOutOfRangeLabels();\n }\n\n hideOutOfRangeLabels() {\n const { box, labels } = this;\n\n if (labels.length > 0) {\n const valueAxis = this.options.vertical ? Y : X;\n const start = box[valueAxis + 1];\n const end = box[valueAxis + 2];\n const firstLabel = labels[0];\n const lastLabel = last(labels);\n\n if (firstLabel.box[valueAxis + 1] > end || firstLabel.box[valueAxis + 2] < start) {\n firstLabel.options.visible = false;\n }\n if (lastLabel.box[valueAxis + 1] > end || lastLabel.box[valueAxis + 2] < start) {\n lastLabel.options.visible = false;\n }\n }\n }\n\n getMajorTickPositions() {\n return this.getTicks().majorTicks;\n }\n\n getMinorTickPositions() {\n return this.getTicks().minorTicks;\n }\n\n getLabelsTickPositions() {\n return this.getTicks().labelTicks;\n }\n\n tickIndices(stepSize) {\n const { min, max } = this.rangeIndices();\n const limit = Math.ceil(max);\n let current = Math.floor(min);\n const indices = [];\n\n while (current <= limit) {\n indices.push(current);\n current += stepSize;\n }\n\n return indices;\n }\n\n getTickPositions(stepSize) {\n const { vertical, reverse } = this.options;\n const { scale, box, min } = this.scaleOptions();\n const pos = box[(vertical ? Y : X) + (reverse ? 2 : 1)];\n const indices = this.tickIndices(stepSize);\n const positions = [];\n\n for (let idx = 0; idx < indices.length; idx++) {\n positions.push(pos + round(scale * (indices[idx] - min), COORD_PRECISION));\n }\n\n return positions;\n }\n\n getTicks() {\n const options = this.options;\n const cache = this._ticks;\n const range = this.rangeIndices();\n const lineBox = this.lineBox();\n const hash = lineBox.getHash() + range.min + \",\" + range.max + options.reverse + options.justified;\n\n if (cache._hash !== hash) {\n const hasMinor = options.minorTicks.visible || options.minorGridLines.visible;\n cache._hash = hash;\n cache.labelTicks = this.getTickPositions(1);\n cache.majorTicks = this.filterOutOfRangePositions(cache.labelTicks, lineBox);\n cache.minorTicks = hasMinor ? this.filterOutOfRangePositions(this.getTickPositions(0.5), lineBox) : [];\n }\n\n return cache;\n }\n\n filterOutOfRangePositions(positions, lineBox) {\n if (!positions.length) {\n return positions;\n }\n\n const axis = this.options.vertical ? Y : X;\n const inRange = (position) => lineBox[axis + 1] <= position && position <= lineBox[axis + 2];\n\n const end = positions.length - 1;\n let startIndex = 0;\n while (!inRange(positions[startIndex]) && startIndex <= end) {\n startIndex++;\n }\n\n let endIndex = end;\n\n while (!inRange(positions[endIndex]) && endIndex >= 0) {\n endIndex--;\n }\n\n return positions.slice(startIndex, endIndex + 1);\n }\n\n lineInfo() {\n const { vertical, reverse } = this.options;\n const lineBox = this.lineBox();\n const lineSize = vertical ? lineBox.height() : lineBox.width();\n const axis = vertical ? Y : X;\n const axisDir = reverse ? -1 : 1;\n const startEdge = axisDir === 1 ? 1 : 2;\n const axisOrigin = axis + startEdge.toString();\n const lineStart = lineBox[axisOrigin];\n\n return {\n axis,\n axisOrigin,\n axisDir,\n lineBox,\n lineSize,\n lineStart\n };\n }\n\n lineDir() {\n /*\n * Category axis line direction:\n * * Vertical: down.\n * * Horizontal: right.\n */\n\n const { reverse } = this.options;\n return reverse ? -1 : 1;\n }\n\n // TODO: Rename to slotBox, valueSlot, slotByIndex?\n getSlot(from, to, limit) {\n const options = this.options;\n const { reverse, justified } = options;\n const { scale, box, min } = this.scaleOptions();\n const { axis: valueAxis, lineStart } = this.lineInfo();\n\n const slotBox = box.clone();\n const singleSlot = !defined(to);\n\n const start = valueOrDefault(from, 0);\n let end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n\n // Fixes transient bug caused by iOS 6.0 JIT\n // (one can never be too sure)\n end = Math.max(start, end);\n\n let p1 = lineStart + (start - min) * scale;\n let p2 = lineStart + (end + 1 - min) * scale;\n\n if (singleSlot && justified) {\n p2 = p1;\n }\n\n if (limit) {\n p1 = limitValue(p1, box[valueAxis + 1], box[valueAxis + 2]);\n p2 = limitValue(p2, box[valueAxis + 1], box[valueAxis + 2]);\n }\n\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n\n return slotBox;\n }\n\n limitSlot(slot) {\n const vertical = this.options.vertical;\n const valueAxis = vertical ? Y : X;\n const lineBox = this.lineBox();\n const limittedSlot = slot.clone();\n\n limittedSlot[valueAxis + 1] = limitValue(slot[valueAxis + 1], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n limittedSlot[valueAxis + 2] = limitValue(slot[valueAxis + 2], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n\n return limittedSlot;\n }\n\n slot(from, to, limit) {\n const min = Math.floor(this.options.min || 0);\n let start = from;\n let end = to;\n\n if (typeof start === \"string\") {\n start = this.categoryIndex(start);\n } else if (isNumber(start)) {\n start -= min;\n }\n\n if (typeof end === \"string\") {\n end = this.categoryIndex(end);\n } else if (isNumber(end)) {\n end -= min;\n }\n\n return super.slot(start, end, limit);\n }\n\n pointCategoryIndex(point) {\n const { reverse, justified, vertical } = this.options;\n const valueAxis = vertical ? Y : X;\n const { scale, box, min, max } = this.scaleOptions();\n const startValue = reverse ? max : min;\n const lineStart = box[valueAxis + 1];\n const lineEnd = box[valueAxis + 2];\n const pos = point[valueAxis];\n\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n\n let value = startValue + (pos - lineStart) / scale;\n const diff = value % 1;\n\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n\n return Math.floor(value);\n }\n\n getCategory(point) {\n const index = this.pointCategoryIndex(point);\n\n if (index === null) {\n return null;\n }\n\n return this.options.categories[index];\n }\n\n categoryIndex(value) {\n return this.totalIndex(value) - Math.floor(this.options.min || 0);\n }\n\n categoryAt(index, total) {\n const options = this.options;\n\n return (total ? options.srcCategories : options.categories)[index];\n }\n\n categoriesCount() {\n return (this.options.categories || []).length;\n }\n\n translateRange(delta) {\n const options = this.options;\n const lineBox = this.lineBox();\n const size = options.vertical ? lineBox.height() : lineBox.width();\n const range = options.categories.length;\n const scale = size / range;\n const offset = round(delta / scale, DEFAULT_PRECISION);\n\n return {\n min: offset,\n max: range + offset\n };\n }\n\n scaleRange(scale, cursor) {\n const position = Math.abs(this.pointOffset(cursor));\n const rangeIndices = this.limitedRangeIndices();\n const range = rangeIndices.max - rangeIndices.min;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = position * delta;\n const maxDelta = (1 - position) * delta;\n const min = rangeIndices.min + minDelta;\n let max = rangeIndices.max - maxDelta;\n\n if (max - min < MIN_CATEGORY_RANGE) {\n max = min + MIN_CATEGORY_RANGE;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const { min: totalMin, max: totalMax } = this.totalRange();\n const range = this.scaleRange(scale, cursor);\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax)\n };\n }\n\n labelsCount() {\n const labelsRange = this.labelsRange();\n\n return labelsRange.max - labelsRange.min;\n }\n\n labelsRange() {\n const options = this.options;\n const { justified, labels: labelOptions } = options;\n let { min, max } = this.limitedRangeIndices(true);\n const start = Math.floor(min);\n\n if (!justified) {\n min = Math.floor(min);\n max = Math.ceil(max);\n } else {\n min = Math.ceil(min);\n max = Math.floor(max);\n }\n\n let skip;\n\n if (min > labelOptions.skip) {\n skip = labelOptions.skip + labelOptions.step * Math.ceil((min - labelOptions.skip) / labelOptions.step);\n } else {\n skip = labelOptions.skip;\n }\n\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const options = this.options;\n const dataItem = options.dataItems ? options.dataItems[index] : null;\n const category = valueOrDefault(options.categories[index], \"\");\n\n labelContext.dataItem = dataItem;\n const text = this.axisLabelText(category, labelOptions, labelContext);\n\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n }\n\n shouldRenderNote(value) {\n const range = this.limitedRangeIndices();\n\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n }\n\n noteSlot(value) {\n const options = this.options;\n const index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n }\n\n arrangeNotes() {\n super.arrangeNotes();\n this.hideOutOfRangeNotes();\n }\n\n hideOutOfRangeNotes() {\n const { notes, box } = this;\n if (notes && notes.length) {\n const valueAxis = this.options.vertical ? Y : X;\n const start = box[valueAxis + 1];\n const end = box[valueAxis + 2];\n\n for (let idx = 0; idx < notes.length; idx++) {\n const note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n }\n\n pan(delta) {\n const range = this.limitedRangeIndices(true);\n const { scale } = this.scaleOptions();\n const offset = round(delta / scale, DEFAULT_PRECISION);\n const totalRange = this.totalRange();\n const min = range.min + offset;\n const max = range.max + offset;\n\n return this.limitRange(min, max, 0, totalRange.max, offset);\n }\n\n pointsRange(start, end) {\n const { reverse, vertical } = this.options;\n const valueAxis = vertical ? Y : X;\n const range = this.limitedRangeIndices(true);\n const { scale, box } = this.scaleOptions();\n const lineStart = box[valueAxis + (reverse ? 2 : 1)];\n\n const diffStart = start[valueAxis] - lineStart;\n const diffEnd = end[valueAxis] - lineStart;\n\n const min = range.min + diffStart / scale;\n const max = range.min + diffEnd / scale;\n const rangeMin = Math.min(min, max);\n const rangeMax = Math.max(min, max);\n\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n }\n\n valueRange() {\n return this.range();\n }\n\n totalIndex(value) {\n const options = this.options;\n const index = this._categoriesMap ?\n this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n\n return index;\n }\n\n currentRangeIndices() {\n const options = this.options;\n let min = 0;\n\n if (isNumber(options.min)) {\n min = Math.floor(options.min);\n }\n\n let max;\n if (isNumber(options.max)) {\n max = options.justified ? Math.floor(options.max) : Math.ceil(options.max) - 1;\n } else {\n max = this.totalCount() - 1;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n limitedRangeIndices(totalLimit) {\n const options = this.options;\n let min = isNumber(options.min) ? options.min : 0;\n let max;\n\n if (isNumber(options.max)) {\n max = options.max;\n } else if (isNumber(options.min)) {\n max = min + options.categories.length;\n } else {\n max = this.totalRange().max || 1;\n }\n\n if (totalLimit) {\n const totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n totalRangeIndices() {\n return {\n min: 0,\n max: this.totalRange().max || 1\n };\n }\n\n mapCategories() {\n if (!this._categoriesMap) {\n const map = this._categoriesMap = new HashMap();\n const srcCategories = this.options.srcCategories;\n for (let idx = 0; idx < srcCategories.length; idx++) {\n map.set(srcCategories[idx], idx);\n }\n }\n }\n\n totalCount() {\n return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n }\n}\n\nsetDefaultOptions(CategoryAxis, {\n type: \"category\",\n vertical: false,\n majorGridLines: {\n visible: false,\n width: 1,\n color: BLACK\n },\n labels: {\n zIndex: 1\n },\n justified: false,\n _deferLabels: true\n});\n\nexport default CategoryAxis;\n","const COORDINATE_LIMIT = 300000;\n\nconst DateLabelFormats = {\n milliseconds: \"HH:mm:ss.fff\",\n seconds: \"HH:mm:ss\",\n minutes: \"HH:mm\",\n hours: \"HH:mm\",\n days: \"M/d\",\n weeks: \"M/d\",\n months: \"MMM 'yy\",\n years: \"yyyy\"\n};\n\nconst ZERO_THRESHOLD = 0.2;\n\nexport {\n COORDINATE_LIMIT, DateLabelFormats, ZERO_THRESHOLD\n};","import CategoryAxis from './category-axis';\nimport AxisLabel from './axis-label';\nimport Box from './box';\n\nimport { CENTER, DATE, DEFAULT_PRECISION, MAX_VALUE, OBJECT, X, Y } from '../common/constants';\nimport { deepExtend, defined, inArray, last, limitValue, round, setDefaultOptions, sparseArrayLimits } from '../common';\n\nimport { MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS,\n TIME_PER_MINUTE, TIME_PER_HOUR, TIME_PER_DAY, TIME_PER_WEEK,\n TIME_PER_MONTH, TIME_PER_YEAR, TIME_PER_UNIT } from '../date-utils/constants';\nimport { dateComparer, toDate, addTicks, addDuration, dateDiff, absoluteDateDiff,\n dateIndex, dateEquals, toTime, parseDate, parseDates, firstDay } from '../date-utils';\n\nimport { DateLabelFormats } from './constants';\n\nconst AUTO = \"auto\";\nconst BASE_UNITS = [\n MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS\n];\nconst FIT = \"fit\";\n\n\nfunction categoryRange(categories, clearCache) {\n if (clearCache) {\n categories._range = undefined;\n }\n\n let range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n range.min = toDate(range.min);\n range.max = toDate(range.max);\n }\n\n return range;\n}\n\nclass EmptyDateRange {\n constructor(options) {\n this.options = options;\n }\n\n displayIndices() {\n return {\n min: 0,\n max: 1\n };\n }\n\n displayRange() {\n return {};\n }\n\n total() {\n return {};\n }\n\n valueRange() {\n return {};\n }\n\n valueIndex() {\n return -1;\n }\n\n values() {\n return [];\n }\n\n totalIndex() {\n return -1;\n }\n\n valuesCount() {\n return 0;\n }\n\n totalCount() {\n return 0;\n }\n\n dateAt() {\n return null;\n }\n}\n\nclass DateRange {\n constructor(start, end, options) {\n this.options = options;\n options.baseUnitStep = options.baseUnitStep || 1;\n\n const { roundToBaseUnit, justified } = options;\n\n this.start = addDuration(start, 0, options.baseUnit, options.weekStartDay);\n const lowerEnd = this.roundToTotalStep(end);\n const expandEnd = !justified && dateEquals(end, lowerEnd) && !options.justifyEnd;\n\n this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n\n const min = options.min || start;\n this.valueStart = this.roundToTotalStep(min);\n this.displayStart = roundToBaseUnit ? this.valueStart : min;\n\n const max = options.max;\n if (!max) {\n this.valueEnd = lowerEnd;\n this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n } else {\n const next = !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0;\n this.valueEnd = this.roundToTotalStep(max, false, next);\n this.displayEnd = roundToBaseUnit ? this.roundToTotalStep(max, !justified) : options.max;\n }\n\n if (this.valueEnd < this.valueStart) {\n this.valueEnd = this.valueStart;\n }\n if (this.displayEnd <= this.displayStart) {\n this.displayEnd = this.roundToTotalStep(this.displayStart, false, 1);\n }\n }\n\n displayRange() {\n return {\n min: this.displayStart,\n max: this.displayEnd\n };\n }\n\n displayIndices() {\n if (!this._indices) {\n const options = this.options;\n\n const { baseUnit, baseUnitStep } = options;\n\n const minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n const maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n\n this._indices = { min: minIdx, max: maxIdx };\n }\n\n return this._indices;\n }\n\n total() {\n return {\n min: this.start,\n max: this.end\n };\n }\n\n totalCount() {\n const last = this.totalIndex(this.end);\n\n return last + (this.options.justified ? 1 : 0);\n }\n\n valueRange() {\n return {\n min: this.valueStart,\n max: this.valueEnd\n };\n }\n\n valueIndex(value) {\n const options = this.options;\n return Math.floor(dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep));\n }\n\n totalIndex(value) {\n const options = this.options;\n return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n }\n\n dateIndex(value) {\n const options = this.options;\n return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n }\n\n valuesCount() {\n const maxIdx = this.valueIndex(this.valueEnd);\n\n return maxIdx + 1;\n }\n\n values() {\n let values = this._values;\n if (!values) {\n const options = this.options;\n const range = this.valueRange();\n this._values = values = [];\n\n for (let date = range.min; date <= range.max;) {\n values.push(date);\n date = addDuration(date, options.baseUnitStep, options.baseUnit, options.weekStartDay);\n }\n }\n\n return values;\n }\n\n dateAt(index, total) {\n const options = this.options;\n\n return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n }\n\n roundToTotalStep(value, upper, next) {\n const { baseUnit, baseUnitStep, weekStartDay } = this.options;\n const start = this.start;\n\n const step = dateIndex(value, start, baseUnit, baseUnitStep);\n let roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n\n if (next) {\n roundedStep += next;\n }\n\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, weekStartDay);\n }\n\n}\n\nfunction autoBaseUnit(options, startUnit, startStep) {\n const categoryLimits = categoryRange(options.categories);\n const span = (options.max || categoryLimits.max) - (options.min || categoryLimits.min);\n const { autoBaseUnitSteps, maxDateGroups } = options;\n const autoUnit = options.baseUnit === FIT;\n let autoUnitIx = startUnit ? BASE_UNITS.indexOf(startUnit) : 0;\n let baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n let units = span / TIME_PER_UNIT[baseUnit];\n let totalUnits = units;\n let unitSteps, step, nextStep;\n\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n\n do {\n nextStep = unitSteps.shift();\n } while (nextStep && startUnit === baseUnit && nextStep < startStep);\n\n if (nextStep) {\n step = nextStep;\n units = totalUnits / step;\n } else if (baseUnit === last(BASE_UNITS)) {\n step = Math.ceil(totalUnits / maxDateGroups);\n break;\n } else if (autoUnit) {\n baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\n totalUnits = span / TIME_PER_UNIT[baseUnit];\n unitSteps = null;\n } else {\n if (units > maxDateGroups) {\n step = Math.ceil(totalUnits / maxDateGroups);\n }\n break;\n }\n }\n\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n}\n\nfunction defaultBaseUnit(options) {\n const categories = options.categories;\n const count = defined(categories) ? categories.length : 0;\n let minDiff = MAX_VALUE;\n let lastCategory, unit;\n\n for (let categoryIx = 0; categoryIx < count; categoryIx++) {\n const category = categories[categoryIx];\n\n if (category && lastCategory) {\n const diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n\n if (minDiff >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\n unit = MONTHS;\n } else if (minDiff >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (minDiff >= TIME_PER_DAY) {\n unit = DAYS;\n } else if (minDiff >= TIME_PER_HOUR) {\n unit = HOURS;\n } else if (minDiff >= TIME_PER_MINUTE) {\n unit = MINUTES;\n } else {\n unit = SECONDS;\n }\n }\n }\n\n lastCategory = category;\n }\n\n options.baseUnit = unit || DAYS;\n}\n\nfunction initUnit(options) {\n const baseUnit = (options.baseUnit || \"\").toLowerCase();\n const useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n\n if (useDefault) {\n defaultBaseUnit(options);\n }\n\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n autoBaseUnit(options);\n }\n\n return options;\n}\n\nclass DateCategoryAxis extends CategoryAxis {\n\n clone() {\n const copy = new DateCategoryAxis(Object.assign({}, this.options), this.chartService);\n copy.createLabels();\n\n return copy;\n }\n\n categoriesHash() {\n const start = this.dataRange.total().min;\n return this.options.baseUnit + this.options.baseUnitStep + start;\n }\n\n initUserOptions(options) {\n return options;\n }\n\n initFields() {\n super.initFields();\n\n const chartService = this.chartService;\n const intlService = chartService.intl;\n let options = this.options;\n\n let categories = options.categories || [];\n if (!categories._parsed) {\n categories = parseDates(intlService, categories);\n categories._parsed = true;\n }\n\n options = deepExtend({\n roundToBaseUnit: true\n }, options, {\n categories: categories,\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n weekStartDay: firstDay(options, intlService)\n });\n\n if (chartService.panning && chartService.isPannable(options.vertical ? Y : X)) {\n options.roundToBaseUnit = false;\n }\n\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n\n this.options = options;\n options.srcCategories = categories;\n\n if (categories.length > 0) {\n const range = categoryRange(categories, true);\n const maxDivisions = options.maxDivisions;\n const safeOptions = initUnit(options);\n\n const forecast = options._forecast;\n if (forecast) {\n if (forecast.before > 0) {\n range.min = addDuration(range.min, -forecast.before, safeOptions.baseUnit, safeOptions.weekStartDay);\n }\n\n if (forecast.after > 0) {\n range.max = addDuration(range.max, forecast.after, safeOptions.baseUnit, safeOptions.weekStartDay);\n }\n }\n\n this.dataRange = new DateRange(range.min, range.max, safeOptions);\n\n if (maxDivisions) {\n const dataRange = this.dataRange.displayRange();\n\n const divisionOptions = Object.assign({}, options, {\n justified: true,\n roundToBaseUnit: false,\n baseUnit: 'fit',\n min: dataRange.min,\n max: dataRange.max,\n maxDateGroups: maxDivisions\n });\n\n const dataRangeOptions = this.dataRange.options;\n\n autoBaseUnit(divisionOptions, dataRangeOptions.baseUnit, dataRangeOptions.baseUnitStep);\n\n this.divisionRange = new DateRange(range.min, range.max, divisionOptions);\n } else {\n this.divisionRange = this.dataRange;\n }\n\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n this.dataRange = this.divisionRange = new EmptyDateRange(options);\n }\n\n this.rangeLabels = [];\n }\n\n tickIndices(stepSize) {\n const { dataRange, divisionRange } = this;\n const valuesCount = divisionRange.valuesCount();\n\n if (!this.options.maxDivisions || !valuesCount) {\n return super.tickIndices(stepSize);\n }\n\n const indices = [];\n let values = divisionRange.values();\n let offset = 0;\n\n if (!this.options.justified) {\n values = values.concat(divisionRange.dateAt(valuesCount));\n offset = 0.5;//align ticks to the center of not justified categories\n }\n\n for (let idx = 0; idx < values.length; idx++) {\n indices.push(dataRange.dateIndex(values[idx]) + offset);\n if (stepSize !== 1 && idx >= 1) {\n const last = indices.length - 1;\n indices.splice(idx, 0, indices[last - 1] + (indices[last] - indices[last - 1]) * stepSize);\n }\n }\n\n return indices;\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n const categories = this.options.categories || [];\n\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n }\n\n parseNoteValue(value) {\n return parseDate(this.chartService.intl, value);\n }\n\n noteSlot(value) {\n return this.getSlot(value);\n }\n\n translateRange(delta) {\n const options = this.options;\n const { baseUnit, weekStartDay, vertical } = options;\n const lineBox = this.lineBox();\n const size = vertical ? lineBox.height() : lineBox.width();\n let range = this.range();\n const scale = size / (range.max - range.min);\n const offset = round(delta / scale, DEFAULT_PRECISION);\n\n if (range.min && range.max) {\n const from = addTicks(options.min || range.min, offset);\n const to = addTicks(options.max || range.max, offset);\n\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n\n return range;\n }\n\n labelsRange() {\n return {\n min: this.options.labels.skip,\n max: this.divisionRange.valuesCount()\n };\n }\n\n pan(delta) {\n if (this.isEmpty()) {\n return null;\n }\n\n const options = this.options;\n const lineBox = this.lineBox();\n const size = options.vertical ? lineBox.height() : lineBox.width();\n const { min, max } = this.dataRange.displayRange();\n const totalLimits = this.dataRange.total();\n const scale = size / (max - min);\n const offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\n const from = addTicks(min, offset);\n const to = addTicks(max, offset);\n\n const panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n\n if (panRange) {\n panRange.min = toDate(panRange.min);\n panRange.max = toDate(panRange.max);\n panRange.baseUnit = options.baseUnit;\n panRange.baseUnitStep = options.baseUnitStep || 1;\n panRange.userSetBaseUnit = options.userSetBaseUnit;\n panRange.userSetBaseUnitStep = options.userSetBaseUnitStep;\n\n return panRange;\n }\n }\n\n pointsRange(start, end) {\n if (this.isEmpty()) {\n return null;\n }\n\n const pointsRange = super.pointsRange(start, end);\n const datesRange = this.dataRange.displayRange();\n const indicesRange = this.dataRange.displayIndices();\n const scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n const options = this.options;\n\n const min = addTicks(datesRange.min, pointsRange.min * scale);\n const max = addTicks(datesRange.min, pointsRange.max * scale);\n\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n }\n\n scaleRange(scale, cursor) {\n if (this.isEmpty()) {\n return {};\n }\n\n const options = this.options;\n const fit = options.userSetBaseUnit === FIT;\n const totalLimits = this.dataRange.total();\n const { min: rangeMin, max: rangeMax } = this.dataRange.displayRange();\n\n const position = Math.abs(this.pointOffset(cursor));\n const range = rangeMax - rangeMin;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = Math.round(position * delta);\n const maxDelta = Math.round((1 - position) * delta);\n\n let { baseUnit } = this.dataRange.options;\n let min = new Date(rangeMin.getTime() + minDelta);\n let max = new Date(rangeMax.getTime() - maxDelta);\n\n if (fit) {\n const { autoBaseUnitSteps, maxDateGroups } = options;\n\n const maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n const rangeDiff = dateDiff(rangeMax, rangeMin);\n const diff = dateDiff(max, min);\n let baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n let autoBaseUnitStep, ticks;\n\n if (diff < TIME_PER_UNIT[baseUnit] && baseUnit !== MILLISECONDS) {\n baseUnit = BASE_UNITS[baseUnitIndex - 1];\n autoBaseUnitStep = last(autoBaseUnitSteps[baseUnit]);\n ticks = (rangeDiff - (maxDateGroups - 1) * autoBaseUnitStep * TIME_PER_UNIT[baseUnit]) / 2;\n min = addTicks(rangeMin, ticks);\n max = addTicks(rangeMax, -ticks);\n\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n let stepIndex = 0;\n\n do {\n baseUnitIndex++;\n baseUnit = BASE_UNITS[baseUnitIndex];\n stepIndex = 0;\n ticks = 2 * TIME_PER_UNIT[baseUnit];\n do {\n autoBaseUnitStep = autoBaseUnitSteps[baseUnit][stepIndex];\n stepIndex++;\n } while (stepIndex < autoBaseUnitSteps[baseUnit].length && ticks * autoBaseUnitStep < rangeDiff);\n } while (baseUnit !== YEARS && ticks * autoBaseUnitStep < rangeDiff);\n\n ticks = (ticks * autoBaseUnitStep - rangeDiff) / 2;\n if (ticks > 0) {\n min = addTicks(rangeMin, -ticks);\n max = addTicks(rangeMax, ticks);\n min = addTicks(min, limitValue(max, totalLimits.min, totalLimits.max) - max);\n max = addTicks(max, limitValue(min, totalLimits.min, totalLimits.max) - min);\n }\n }\n }\n\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n }\n }\n\n zoomRange(scale, cursor) {\n const totalLimits = this.dataRange.total();\n const range = this.scaleRange(scale, cursor);\n\n if (range) {\n if (range.min < totalLimits.min) {\n range.min = totalLimits.min;\n }\n if (range.max > totalLimits.max) {\n range.max = totalLimits.max;\n }\n }\n\n return range;\n }\n\n range() {\n return this.dataRange.displayRange();\n }\n\n createLabels() {\n super.createLabels();\n this.createRangeLabels();\n }\n\n clearLabels() {\n super.clearLabels();\n this.rangeLabels = [];\n }\n\n arrangeLabels() {\n this.arrangeRangeLabels();\n super.arrangeLabels();\n }\n\n arrangeRangeLabels() {\n const { options, rangeLabels } = this;\n if (rangeLabels.length === 0) {\n return;\n }\n\n const lineBox = this.lineBox();\n const vertical = options.vertical;\n const mirror = options.rangeLabels.mirror || options.labels.mirror;\n\n const firstLabel = rangeLabels[0];\n if (firstLabel) {\n const position = vertical ? lineBox.y1 - (firstLabel.box.height() / 2) : lineBox.x1;\n this.positionLabel(firstLabel, mirror, position);\n }\n\n const lastLabel = rangeLabels[1];\n if (lastLabel) {\n const position = vertical ? lineBox.y2 - (lastLabel.box.height() / 2) : lineBox.x2;\n this.positionLabel(lastLabel, mirror, position);\n }\n }\n\n autoRotateLabels() {\n super.autoRotateLabels();\n this.autoRotateRangeLabels();\n }\n\n hideOutOfRangeLabels() {\n super.hideOutOfRangeLabels();\n this.hideOverlappingLabels();\n }\n\n hideOverlappingLabels() {\n const { rangeLabels, labels } = this;\n if (rangeLabels.length === 0) {\n return;\n }\n\n function clip(rangeLabel, label) {\n if (!label.options.visible || label.box.overlaps(rangeLabel.box)) {\n label.options.visible = false;\n return true;\n }\n\n return false;\n }\n\n const firstRangeLabel = rangeLabels[0];\n if (firstRangeLabel && firstRangeLabel.options.visible) {\n for (let i = 0; i < labels.length; i++) {\n const overlaps = clip(firstRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n\n const lastRangeLabel = rangeLabels[1];\n if (lastRangeLabel && lastRangeLabel.options.visible) {\n for (let i = labels.length - 1; i > 0; --i) {\n const overlaps = clip(lastRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n }\n\n contentBox() {\n const box = super.contentBox();\n const rangeLabels = this.rangeLabels;\n\n for (let i = 0; i < rangeLabels.length; i++) {\n const label = rangeLabels[i];\n if (label.options.visible) {\n box.wrap(label.box);\n }\n }\n\n return box;\n }\n\n createAxisLabel(index, labelOptions, labelContext = {}) {\n const options = this.options;\n const dataItem = options.dataItems && !options.maxDivisions ? options.dataItems[index] : null;\n const date = this.divisionRange.dateAt(index);\n const unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n\n labelOptions.format = labelOptions.format || unitFormat;\n labelContext.dataItem = dataItem;\n\n const text = this.axisLabelText(date, labelOptions, labelContext);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n }\n\n createRangeLabels() {\n const { displayStart, displayEnd } = this.divisionRange;\n const options = this.options;\n const labelOptions = Object.assign({}, options.labels, options.rangeLabels, {\n align: CENTER,\n zIndex: options.zIndex\n });\n\n if (labelOptions.visible !== true) {\n return;\n }\n\n this.normalizeLabelRotation(labelOptions);\n labelOptions.alignRotation = CENTER;\n\n if (labelOptions.rotation === \"auto\") {\n labelOptions.rotation = 0;\n options.autoRotateRangeLabels = true;\n }\n\n const unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n\n const createLabel = (index, date, text) => {\n if (text) {\n const label = new AxisLabel(date, text, index, null, labelOptions);\n this.append(label);\n this.rangeLabels.push(label);\n }\n };\n\n const startText = this.axisLabelText(displayStart, labelOptions, { index: 0, count: 2 });\n createLabel(0, displayStart, startText);\n\n const endText = this.axisLabelText(displayEnd, labelOptions, { index: 1, count: 2 });\n createLabel(1, displayEnd, endText);\n }\n\n autoRotateRangeLabels() {\n const labels = this.rangeLabels;\n if (!this.options.autoRotateRangeLabels || this.options.vertical || labels.length !== 2) {\n return;\n }\n\n const rotateLabel = (label, tickPositions, index) => {\n const width = Math.abs(tickPositions[index + 1] - tickPositions[index]) * 2;\n const angle = this.autoRotateLabelAngle(label.box, width);\n if (angle !== 0) {\n label.options.rotation = angle;\n label.reflow(new Box());\n }\n };\n\n const tickPositions = this.getMajorTickPositions();\n rotateLabel(labels[0], tickPositions, 0);\n rotateLabel(labels[1], tickPositions, tickPositions.length - 2);\n }\n\n categoryIndex(value) {\n return this.dataRange.valueIndex(value);\n }\n\n slot(from, to, limit) {\n const dateRange = this.dataRange;\n let start = from;\n let end = to;\n\n if (start instanceof Date) {\n start = dateRange.dateIndex(start);\n }\n\n if (end instanceof Date) {\n end = dateRange.dateIndex(end);\n }\n\n const slot = this.getSlot(start, end, limit);\n if (slot) {\n return slot.toRect();\n }\n }\n\n getSlot(a, b, limit) {\n let start = a;\n let end = b;\n\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n\n return super.getSlot(start, end, limit);\n }\n\n valueRange() {\n const options = this.options;\n const range = categoryRange(options.srcCategories);\n\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n }\n\n categoryAt(index, total) {\n return this.dataRange.dateAt(index, total);\n }\n\n categoriesCount() {\n return this.dataRange.valuesCount();\n }\n\n rangeIndices() {\n return this.dataRange.displayIndices();\n }\n\n labelsBetweenTicks() {\n return !this.divisionRange.options.justified;\n }\n\n prepareUserOptions() {\n if (this.isEmpty()) {\n return;\n }\n\n this.options.categories = this.dataRange.values();\n }\n\n getCategory(point) {\n const index = this.pointCategoryIndex(point);\n\n if (index === null) {\n return null;\n }\n\n return this.dataRange.dateAt(index);\n }\n\n totalIndex(value) {\n return this.dataRange.totalIndex(value);\n }\n\n currentRangeIndices() {\n const range = this.dataRange.valueRange();\n return {\n min: this.dataRange.totalIndex(range.min),\n max: this.dataRange.totalIndex(range.max)\n };\n }\n\n totalRange() {\n return this.dataRange.total();\n }\n\n totalRangeIndices() {\n const range = this.dataRange.total();\n return {\n min: this.dataRange.totalIndex(range.min),\n max: this.dataRange.totalIndex(range.max)\n };\n }\n\n totalCount() {\n return this.dataRange.totalCount();\n }\n\n isEmpty() {\n return !this.options.srcCategories.length;\n }\n\n roundedRange() {\n if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n return this.range();\n }\n\n const options = this.options;\n const datesRange = categoryRange(options.srcCategories);\n\n const dateRange = new DateRange(datesRange.min, datesRange.max, Object.assign({}, options, {\n justified: false,\n roundToBaseUnit: true,\n justifyEnd: false\n }));\n\n return dateRange.displayRange();\n }\n}\n\nsetDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: {\n dateFormats: DateLabelFormats\n },\n rangeLabels: {\n visible: false\n },\n autoBaseUnitSteps: {\n milliseconds: [ 1, 10, 100 ],\n seconds: [ 1, 2, 5, 15, 30 ],\n minutes: [ 1, 2, 5, 15, 30 ],\n hours: [ 1, 2, 3 ],\n days: [ 1, 2, 3 ],\n weeks: [ 1, 2 ],\n months: [ 1, 2, 3, 6 ],\n years: [ 1, 2, 3, 5, 10, 25, 50 ]\n },\n maxDateGroups: 10\n});\n\nexport default DateCategoryAxis;\n","import { DEFAULT_PRECISION } from '../../common/constants';\nimport { round } from '../../common';\n\nexport default function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n}\n","import { DEFAULT_PRECISION } from '../../common/constants';\nimport { round } from '../../common';\n\nexport default function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n}","import { COORDINATE_LIMIT } from '../constants';\n\nexport default function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n}","\nimport Axis from './axis';\nimport AxisLabel from './axis-label';\nimport Box from './box';\n\nimport { BLACK, DEFAULT_PRECISION, COORD_PRECISION } from '../common/constants';\nimport { deepExtend, defined, limitValue, round, setDefaultOptions, valueOrDefault } from '../common';\n\nimport autoMajorUnit from './utils/auto-major-unit';\nimport autoAxisMin from './utils/auto-axis-min';\nimport autoAxisMax from './utils/auto-axis-max';\nimport floor from './utils/floor';\nimport ceil from './utils/ceil';\nimport limitCoordinate from './utils/limit-coordinate';\n\nconst MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n\nclass NumericAxis extends Axis {\n\n constructor(seriesMin, seriesMax, options, chartService) {\n super(Object.assign({}, options, {\n seriesMin: seriesMin,\n seriesMax: seriesMax\n }), chartService);\n }\n\n initUserOptions(options) {\n const autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n this.totalOptions = totalAxisOptions(autoOptions, options);\n\n return axisOptions(autoOptions, options);\n }\n\n initFields() {\n this.totalMin = this.totalOptions.min;\n this.totalMax = this.totalOptions.max;\n this.totalMajorUnit = this.totalOptions.majorUnit;\n this.seriesMin = this.options.seriesMin;\n this.seriesMax = this.options.seriesMax;\n }\n\n clone() {\n return new NumericAxis(\n this.seriesMin,\n this.seriesMax,\n Object.assign({}, this.options),\n this.chartService\n );\n }\n\n startValue() {\n return 0;\n }\n\n range() {\n const options = this.options;\n return { min: options.min, max: options.max };\n }\n\n getDivisions(stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n\n const options = this.options;\n const range = options.max - options.min;\n\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n }\n\n getTickPositions(unit, skipUnit) {\n const options = this.options;\n const { axisDir, axisOrigin, lineBox, lineSize } = this.lineInfo();\n const range = options.max - options.min;\n const scale = lineSize / range;\n const step = unit * scale;\n const divisions = this.getDivisions(unit);\n const positions = [];\n let pos = lineBox[axisOrigin];\n let skipStep = 0;\n\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n\n for (let idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n\n pos = pos + step * axisDir;\n }\n\n return positions;\n }\n\n getMajorTickPositions() {\n return this.getTickPositions(this.options.majorUnit);\n }\n\n getMinorTickPositions() {\n return this.getTickPositions(this.options.minorUnit);\n }\n\n getSlot(a, b, limit = false) {\n const options = this.options;\n const { axis, axisDir, lineBox, lineSize, lineStart } = this.lineInfo();\n const step = axisDir * (lineSize / (options.max - options.min));\n\n let start = valueOrDefault(a, b || 0);\n let end = valueOrDefault(b, a || 0);\n\n if (limit) {\n start = limitValue(start, options.min, options.max);\n end = limitValue(end, options.min, options.max);\n }\n\n const p1 = Math.min(start, end) - options.min;\n const p2 = Math.max(start, end) - options.min;\n\n const slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n slotBox[axis + 1] = limitCoordinate(lineStart + step * (axisDir > 0 ? p1 : p2));\n slotBox[axis + 2] = limitCoordinate(lineStart + step * (axisDir > 0 ? p2 : p1));\n\n return slotBox;\n }\n\n getValue(point) {\n const options = this.options;\n const max = Number(options.max);\n const min = Number(options.min);\n const offset = this.pointOffset(point);\n const valueOffset = offset * (max - min);\n\n if (offset < 0 || offset > 1) {\n return null;\n }\n\n const value = min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n }\n\n translateRange(delta) {\n const options = this.options;\n const { vertical, reverse, max, min } = options;\n const { lineSize } = this.lineInfo();\n const range = max - min;\n const scale = lineSize / range;\n let offset = round(delta / scale, DEFAULT_PRECISION);\n\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n return {\n min: min + offset,\n max: max + offset,\n offset: offset\n };\n }\n\n labelsCount() {\n return this.getDivisions(this.options.majorUnit);\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const options = this.options;\n const value = round(options.min + (index * options.majorUnit), DEFAULT_PRECISION);\n const text = this.axisLabelText(value, labelOptions, labelContext);\n\n return new AxisLabel(value, text, index, null, labelOptions);\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n return range.min <= value && value <= range.max;\n }\n\n pan(delta) {\n const range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n }\n\n pointsRange(start, end) {\n const startValue = this.getValue(start);\n const endValue = this.getValue(end);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n }\n\n scaleRange(scale, cursor) {\n const position = Math.abs(this.pointOffset(cursor));\n const range = this.options.max - this.options.min;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = position * delta;\n const maxDelta = (1 - position) * delta;\n const min = round(this.options.min + minDelta, DEFAULT_PRECISION);\n let max = round(this.options.max - maxDelta, DEFAULT_PRECISION);\n\n if (max - min < MIN_VALUE_RANGE) {\n max = min + MIN_VALUE_RANGE;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const { totalMin, totalMax } = this;\n const range = this.scaleRange(scale, cursor);\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax),\n narrowRange: false\n };\n }\n\n isValidRange(min, max) {\n return max - min > MIN_VALUE_RANGE;\n }\n}\n\nfunction autoAxisOptions(seriesMin, seriesMax, options) {\n const narrowRange = options.narrowRange;\n\n let autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n let autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n\n const majorUnit = autoMajorUnit(autoMin, autoMax);\n const autoOptions = {\n majorUnit: majorUnit\n };\n\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n\n return autoOptions;\n}\n\nfunction totalAxisOptions(autoOptions, options) {\n return {\n min: defined(options.min) ? Math.min(autoOptions.min, options.min) : autoOptions.min,\n max: defined(options.max) ? Math.max(autoOptions.max, options.max) : autoOptions.max,\n majorUnit: autoOptions.majorUnit\n };\n}\n\nfunction clearNullValues(options, fields) {\n for (let idx = 0; idx < fields.length; idx++) {\n const field = fields[idx];\n if (options[field] === null) {\n options[field] = undefined;\n }\n }\n}\n\nfunction axisOptions(autoOptions, userOptions) {\n let options = userOptions;\n let userSetMin, userSetMax;\n\n if (userOptions) {\n clearNullValues(userOptions, [ 'min', 'max' ]);\n\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n\n const userSetLimits = userSetMin || userSetMax;\n\n if (userSetLimits) {\n if (userOptions.min === userOptions.max) {\n if (userOptions.min > 0) {\n userOptions.min = 0;\n } else {\n userOptions.max = 1;\n }\n }\n }\n\n if (userOptions.majorUnit) {\n autoOptions.min = floor(autoOptions.min, userOptions.majorUnit);\n autoOptions.max = ceil(autoOptions.max, userOptions.majorUnit);\n } else if (userSetLimits) {\n options = deepExtend(autoOptions, userOptions);\n\n // Determine an auto major unit after min/max have been set\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n\n const result = deepExtend(autoOptions, options);\n if (result.min >= result.max) {\n if (userSetMin && !userSetMax) {\n result.max = result.min + result.majorUnit;\n } else if (!userSetMin && userSetMax) {\n result.min = result.max - result.majorUnit;\n }\n }\n\n return result;\n}\n\nfunction remainderClose(value, divisor, ratio) {\n const remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n const threshold = divisor * (1 - ratio);\n\n return remainder === 0 || remainder > threshold;\n}\n\nsetDefaultOptions(NumericAxis, {\n type: \"numeric\",\n min: 0,\n max: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: {\n format: \"#.####################\"\n },\n zIndex: 1\n});\n\nexport default NumericAxis;\n","import { ZERO_THRESHOLD } from '../constants';\n\nexport default function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n\n let axisMin;\n\n if (min >= 0 && max >= 0) {\n const minValue = min === max ? 0 : min;\n\n let diff = (max - minValue) / max;\n if (narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\n return 0;\n }\n\n axisMin = Math.max(0, minValue - ((max - minValue) / 2));\n } else {\n axisMin = min;\n }\n\n return axisMin;\n}\n","import { ZERO_THRESHOLD } from '../constants';\n\nexport default function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n\n let axisMax;\n\n if (min <= 0 && max <= 0) {\n const maxValue = min === max ? 0 : max;\n\n let diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || (!narrow && diff > ZERO_THRESHOLD)) {\n return 0;\n }\n\n axisMax = Math.min(0, maxValue - ((min - maxValue) / 2));\n } else {\n axisMax = max;\n }\n\n return axisMax;\n}","import Axis from './axis';\nimport NumericAxis from './numeric-axis';\nimport AxisLabel from './axis-label';\nimport { DateLabelFormats } from './constants';\n\nimport { BLACK, DATE, COORD_PRECISION, DEFAULT_PRECISION } from '../common/constants';\nimport { setDefaultOptions, deepExtend, limitValue, round } from '../common';\n\nimport autoMajorUnit from './utils/auto-major-unit';\nimport ceil from './utils/ceil';\n\nimport { toDate, toTime, floorDate, ceilDate, duration, addDuration, addTicks, dateDiff, absoluteDateDiff, dateComparer, parseDate, parseDates, firstDay } from '../date-utils';\nimport { HOURS, DAYS, WEEKS, MONTHS, YEARS, TIME_PER_DAY, TIME_PER_WEEK, TIME_PER_MONTH, TIME_PER_YEAR, TIME_PER_UNIT } from '../date-utils/constants';\n\nconst MIN_VALUE_RANGE = 1000;\n\nclass DateValueAxis extends Axis {\n constructor(seriesMin, seriesMax, axisOptions, chartService) {\n const min = toDate(seriesMin);\n const max = toDate(seriesMax);\n\n const intlService = chartService.intl;\n let options = axisOptions || {};\n options = deepExtend(options || {}, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue),\n weekStartDay: firstDay(options, intlService)\n });\n options = applyDefaults(min, max, options);\n\n super(options, chartService);\n\n this.intlService = intlService;\n this.seriesMin = min;\n this.seriesMax = max;\n\n const weekStartDay = options.weekStartDay || 0;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit, weekStartDay));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit, weekStartDay));\n }\n\n clone() {\n return new DateValueAxis(this.seriesMin, this.seriesMax, Object.assign({}, this.options), this.chartService);\n }\n\n range() {\n const options = this.options;\n return { min: options.min, max: options.max };\n }\n\n getDivisions(stepValue) {\n const options = this.options;\n\n return Math.floor(\n duration(options.min, options.max, options.baseUnit) / stepValue + 1\n );\n }\n\n getTickPositions(step) {\n const options = this.options;\n const { axisDir: dir, lineSize, lineStart: start } = this.lineInfo();\n const divisions = this.getDivisions(step);\n const timeRange = dateDiff(options.max, options.min);\n const scale = lineSize / timeRange;\n const weekStartDay = options.weekStartDay || 0;\n\n const positions = [ start ];\n for (let i = 1; i < divisions; i++) {\n const date = addDuration(options.min, i * step, options.baseUnit, weekStartDay);\n const pos = start + dateDiff(date, options.min) * scale * dir;\n\n positions.push(round(pos, COORD_PRECISION));\n }\n\n return positions;\n }\n\n getMajorTickPositions() {\n return this.getTickPositions(this.options.majorUnit);\n }\n\n getMinorTickPositions() {\n return this.getTickPositions(this.options.minorUnit);\n }\n\n getSlot(a, b, limit) {\n return NumericAxis.prototype.getSlot.call(\n this, parseDate(this.intlService, a), parseDate(this.intlService, b), limit\n );\n }\n\n getValue(point) {\n const value = NumericAxis.prototype.getValue.call(this, point);\n\n return value !== null ? toDate(value) : null;\n }\n\n labelsCount() {\n return this.getDivisions(this.options.majorUnit);\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const options = this.options;\n const offset = index * options.majorUnit;\n const weekStartDay = options.weekStartDay || 0;\n let date = options.min;\n\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit, weekStartDay);\n }\n\n const unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n\n const text = this.axisLabelText(date, labelOptions, labelContext);\n return new AxisLabel(date, text, index, null, labelOptions);\n }\n\n translateRange(delta) {\n const options = this.options;\n const lineBox = this.lineBox();\n const { vertical, reverse } = options;\n const size = vertical ? lineBox.height() : lineBox.width();\n const range = this.range();\n const scale = size / dateDiff(range.max, range.min);\n\n let offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n let from = addTicks(options.min, offset);\n let to = addTicks(options.max, offset);\n\n return {\n min: from,\n max: to,\n offset: offset\n };\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n }\n\n pan(delta) {\n const range = this.translateRange(delta, true);\n const limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax, range.offset);\n\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\n }\n }\n\n pointsRange(start, end) {\n const startValue = this.getValue(start);\n const endValue = this.getValue(end);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n\n return {\n min: toDate(min),\n max: toDate(max)\n };\n }\n\n scaleRange(scale, cursor) {\n const position = Math.abs(this.pointOffset(cursor));\n const range = this.options.max - this.options.min;\n const delta = this.scaleToDelta(scale, range);\n const minDelta = position * delta;\n const maxDelta = (1 - position) * delta;\n const min = toDate(toTime(this.options.min) + minDelta);\n let max = toDate(toTime(this.options.max) - maxDelta);\n\n if (max - min < MIN_VALUE_RANGE) {\n max = toDate(toTime(min) + MIN_VALUE_RANGE);\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const range = this.scaleRange(scale, cursor);\n const min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n const max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n\n return {\n min,\n max\n };\n }\n}\n\nfunction timeUnits(delta) {\n let unit = HOURS;\n\n if (delta >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (delta >= TIME_PER_MONTH) {\n unit = MONTHS;\n } else if (delta >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (delta >= TIME_PER_DAY) {\n unit = DAYS;\n }\n\n return unit;\n}\n\nfunction applyDefaults(seriesMin, seriesMax, options) {\n const min = options.min || seriesMin;\n const max = options.max || seriesMax;\n const baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n const baseUnitTime = TIME_PER_UNIT[baseUnit];\n const weekStartDay = options.weekStartDay || 0;\n const autoMin = floorDate(toTime(min) - 1, baseUnit, weekStartDay) || toDate(max);\n const autoMax = ceilDate(toTime(max) + 1, baseUnit, weekStartDay);\n const userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n const majorUnit = userMajorUnit || ceil(\n autoMajorUnit(autoMin.getTime(), autoMax.getTime()),\n baseUnitTime\n ) / baseUnitTime;\n const actualUnits = duration(autoMin, autoMax, baseUnit);\n const totalUnits = ceil(actualUnits, majorUnit);\n const unitsToAdd = totalUnits - actualUnits;\n const head = Math.floor(unitsToAdd / 2);\n const tail = unitsToAdd - head;\n\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit, weekStartDay);\n options.max = options.max || addDuration(autoMax, tail, baseUnit, weekStartDay);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n\n return options;\n}\n\nsetDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: {\n dateFormats: DateLabelFormats\n }\n});\n\nexport default DateValueAxis;\n","\nimport Axis from './axis';\nimport AxisLabel from './axis-label';\nimport Box from './box';\n\nimport createAxisTick from './utils/create-axis-tick';\nimport createAxisGridLine from './utils/create-axis-grid-line';\nimport limitCoordinate from './utils/limit-coordinate';\n\nimport { DEFAULT_PRECISION, BLACK } from '../common/constants';\nimport { deepExtend, defined, inArray, limitValue, round, setDefaultOptions, valueOrDefault } from '../common';\n\nconst DEFAULT_MAJOR_UNIT = 10;\nconst MIN_VALUE_RANGE = 1e-6;\n\nclass LogarithmicAxis extends Axis {\n constructor(seriesMin, seriesMax, options, chartService) {\n\n const axisOptions = deepExtend({ majorUnit: DEFAULT_MAJOR_UNIT, min: seriesMin, max: seriesMax }, options);\n const base = axisOptions.majorUnit;\n const autoMax = autoAxisMax(seriesMax, base);\n const autoMin = autoAxisMin(seriesMin, seriesMax, axisOptions);\n const range = initRange(autoMin, autoMax, axisOptions, options);\n\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n\n super(axisOptions, chartService);\n\n this.totalMin = defined(options.min) ? Math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? Math.max(autoMax, options.max) : autoMax;\n this.logMin = round(log(range.min, base), DEFAULT_PRECISION);\n this.logMax = round(log(range.max, base), DEFAULT_PRECISION);\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n\n this.createLabels();\n }\n\n clone() {\n return new LogarithmicAxis(\n this.seriesMin,\n this.seriesMax,\n Object.assign({}, this.options),\n this.chartService\n );\n }\n\n startValue() {\n return this.options.min;\n }\n\n getSlot(a, b, limit) {\n const { options, logMin, logMax } = this;\n const { majorUnit: base, min, max } = options;\n const { axis, axisDir, lineBox, lineSize, lineStart } = this.lineInfo();\n const step = axisDir * (lineSize / (logMax - logMin));\n let start = valueOrDefault(a, b || 1);\n let end = valueOrDefault(b, a || 1);\n\n if (start <= 0 || end <= 0) {\n return null;\n }\n\n if (limit) {\n start = limitValue(start, min, max);\n end = limitValue(end, min, max);\n }\n\n start = log(start, base);\n end = log(end, base);\n\n const p1 = Math.min(start, end) - logMin;\n const p2 = Math.max(start, end) - logMin;\n\n const slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n slotBox[axis + 1] = limitCoordinate(lineStart + step * (axisDir > 0 ? p1 : p2));\n slotBox[axis + 2] = limitCoordinate(lineStart + step * (axisDir > 0 ? p2 : p1));\n\n return slotBox;\n }\n\n getValue(point) {\n const { options, logMin, logMax } = this;\n const { majorUnit: base } = options;\n const { axis, axisDir, lineStart, lineSize } = this.lineInfo();\n const step = ((logMax - logMin) / lineSize);\n const offset = axisDir * (point[axis] - lineStart);\n const valueOffset = offset * step;\n\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n\n const value = logMin + valueOffset;\n\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n }\n\n range() {\n const options = this.options;\n return { min: options.min, max: options.max };\n }\n\n translateRange(delta) {\n const { options, logMin, logMax } = this;\n const { reverse, vertical, majorUnit: base } = options;\n const lineBox = this.lineBox();\n const size = vertical ? lineBox.height() : lineBox.width();\n const scale = size / (logMax - logMin);\n let offset = round(delta / scale, DEFAULT_PRECISION);\n\n if ((vertical || reverse) && !(vertical && reverse )) {\n offset = -offset;\n }\n\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset),\n offset: offset\n };\n }\n\n labelsCount() {\n const floorMax = Math.floor(this.logMax);\n const count = Math.floor(floorMax - this.logMin) + 1;\n\n return count;\n }\n\n getMajorTickPositions() {\n const ticks = [];\n\n this.traverseMajorTicksPositions((position) => {\n ticks.push(position);\n }, { step: 1, skip: 0 });\n\n return ticks;\n }\n\n createTicks(lineGroup) {\n const options = this.options;\n const { majorTicks, minorTicks, vertical } = options;\n const mirror = options.labels.mirror;\n const lineBox = this.lineBox();\n const ticks = [];\n const tickLineOptions = {\n // TODO\n // _alignLines: options._alignLines,\n vertical: vertical\n };\n\n function render(tickPosition, tickOptions) {\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPosition;\n\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n\n return ticks;\n }\n\n createGridLines(altAxis) {\n const options = this.options;\n const { minorGridLines, majorGridLines, vertical } = options;\n const lineBox = altAxis.lineBox();\n const lineOptions = {\n lineStart: lineBox[vertical ? \"x1\" : \"y1\"],\n lineEnd: lineBox[vertical ? \"x2\" : \"y2\"],\n vertical: vertical\n };\n const majorTicks = [];\n\n const container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n\n majorTicks.push(tickPosition);\n }\n }\n\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n\n return container.children;\n }\n\n traverseMajorTicksPositions(callback, tickOptions) {\n const { lineStart, step } = this.lineInfo();\n const { logMin, logMax } = this;\n\n for (let power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n let position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n\n traverseMinorTicksPositions(callback, tickOptions) {\n const { min, max, minorUnit, majorUnit: base } = this.options;\n const { lineStart, step } = this.lineInfo();\n const { logMin, logMax } = this;\n const start = Math.floor(logMin);\n\n for (let power = start; power < logMax; power++) {\n const minorOptions = this._minorIntervalOptions(power);\n for (let idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n const value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n const position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n }\n\n createAxisLabel(index, labelOptions, labelContext) {\n const power = Math.ceil(this.logMin + index);\n const value = Math.pow(this.options.majorUnit, power);\n const text = this.axisLabelText(value, labelOptions, labelContext);\n\n return new AxisLabel(value, text, index, null, labelOptions);\n }\n\n shouldRenderNote(value) {\n const range = this.range();\n return range.min <= value && value <= range.max;\n }\n\n pan(delta) {\n const range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n }\n\n pointsRange(start, end) {\n const startValue = this.getValue(start);\n const endValue = this.getValue(end);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n\n return {\n min: min,\n max: max\n };\n }\n\n scaleRange(scale, cursor) {\n const { majorUnit: base } = this.options;\n const logMin = log(this.options.min, base);\n const logMax = log(this.options.max, base);\n const position = Math.abs(this.pointOffset(cursor));\n const range = logMax - logMin;\n const delta = this.scaleToDelta(scale, range);\n const min = Math.pow(base, logMin + position * delta);\n let max = Math.pow(base, logMax - (1 - position) * delta);\n\n if (max - min < MIN_VALUE_RANGE) {\n max = min + MIN_VALUE_RANGE;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n zoomRange(scale, cursor) {\n const range = this.scaleRange(scale, cursor);\n const { totalMin, totalMax } = this;\n\n return {\n min: limitValue(range.min, totalMin, totalMax),\n max: limitValue(range.max, totalMin, totalMax)\n };\n }\n\n _minorIntervalOptions(power) {\n const { minorUnit, majorUnit: base } = this.options;\n const value = Math.pow(base, power);\n const nextValue = Math.pow(base, power + 1);\n const difference = nextValue - value;\n const minorStep = difference / minorUnit;\n\n return {\n value: value,\n minorStep: minorStep\n };\n }\n\n lineInfo() {\n const info = super.lineInfo();\n info.step = info.axisDir * (info.lineSize / (this.logMax - this.logMin));\n\n return info;\n }\n}\n\nfunction initRange(autoMin, autoMax, axisOptions, options) {\n let { min, max } = axisOptions;\n\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction autoAxisMin(min, max, options) {\n const base = options.majorUnit;\n let autoMin = min;\n if (min <= 0) {\n autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = Math.pow(base, Math.floor(log(min, base)));\n }\n return autoMin;\n}\n\nfunction autoAxisMax(max, base) {\n const logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n let autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = Math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = Math.pow(base, Math.ceil(log(max, base)));\n }\n\n return autoMax;\n}\n\nfunction throwNegativeValuesError() {\n throw new Error(\"Non positive values cannot be used for a logarithmic axis\");\n}\n\nfunction log(x, base) {\n return Math.log(x) / Math.log(base);\n}\n\nsetDefaultOptions(LogarithmicAxis, {\n type: \"log\",\n majorUnit: DEFAULT_MAJOR_UNIT,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1,\n _deferLabels: true\n});\n\nexport default LogarithmicAxis;\n","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\n\nimport { append, map } from '../../common';\n\nconst GridLinesMixin = {\n createGridLines: function(altAxis) {\n const options = this.options;\n const radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n let gridLines = [];\n let skipMajor = false;\n let majorAngles, minorAngles;\n\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n\n gridLines = this.renderMajorGridLines(\n majorAngles, radius, options.majorGridLines\n );\n }\n\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n\n append(gridLines, this.renderMinorGridLines(\n minorAngles, radius, options.minorGridLines, altAxis, skipMajor\n ));\n }\n\n return gridLines;\n },\n\n renderMajorGridLines: function(angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n\n renderMinorGridLines: function(angles, radius, options, altAxis, skipMajor) {\n const radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n\n renderGridLines: function(angles, radius, options, radiusCallback) {\n const style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n\n const center = this.box.center();\n const circle = new geom.Circle([ center.x, center.y ], radius);\n const container = this.gridLinesVisual();\n\n for (let i = 0; i < angles.length; i++) {\n const line = new draw.Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n\n line.moveTo(circle.center)\n .lineTo(circle.pointAt(angles[i] + 180));\n\n container.append(line);\n }\n\n return container.children;\n },\n\n gridLineAngles: function(altAxis, size, skip, step, skipAngles) {\n const divs = this.intervals(size, skip, step, skipAngles);\n const options = altAxis.options;\n const altAxisVisible = options.visible && (options.line || {}).visible !== false;\n\n return map(divs, (d) => {\n const alpha = this.intervalAngle(d);\n\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n};\n\nexport default GridLinesMixin;","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\n\nimport GridLinesMixin from './mixins/grid-lines-mixin';\nimport CategoryAxis from './category-axis';\nimport ShapeBuilder from './shape-builder';\nimport Ring from './ring';\nimport Box from './box';\n\nimport { COORD_PRECISION, ARC } from '../common/constants';\nimport { deepExtend, getSpacing, inArray, limitValue, map, rad, round, setDefaultOptions } from '../common';\n\nclass RadarCategoryAxis extends CategoryAxis {\n range() {\n return { min: 0, max: this.options.categories.length };\n }\n\n reflow(box) {\n this.box = box;\n this.reflowLabels();\n }\n\n lineBox() {\n return this.box;\n }\n\n reflowLabels() {\n const { labels, options: { labels: labelOptions } } = this;\n const skip = labelOptions.skip || 0;\n const step = labelOptions.step || 1;\n const measureBox = new Box();\n\n for (let i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n const labelBox = labels[i].box;\n\n labels[i].reflow(this.getSlot(skip + i * step).adjacentBox(\n 0, labelBox.width(), labelBox.height()\n ));\n }\n }\n\n intervals(size, skipOption, stepOption, skipAngles = false) {\n const options = this.options;\n const categories = options.categories.length;\n const divCount = categories / size || 1;\n const divAngle = 360 / divCount;\n const skip = skipOption || 0;\n const step = stepOption || 1;\n const divs = [];\n let angle = 0;\n\n for (let i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n\n angle = round(angle, COORD_PRECISION) % 360;\n\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n\n return divs;\n }\n\n majorIntervals() {\n return this.intervals(1);\n }\n\n minorIntervals() {\n return this.intervals(0.5);\n }\n\n intervalAngle(interval) {\n return (360 + interval + this.options.startAngle) % 360;\n }\n\n majorAngles() {\n return map(this.majorIntervals(), (interval) => this.intervalAngle(interval));\n }\n\n createLine() {\n return [];\n }\n\n majorGridLineAngles(altAxis) {\n const majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n }\n\n minorGridLineAngles(altAxis, skipMajor) {\n const { minorGridLines, majorGridLines } = this.options;\n const majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n }\n\n radiusCallback(radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n const minorAngle = rad(360 / (this.options.categories.length * 2));\n const minorRadius = Math.cos(minorAngle) * radius;\n const majorAngles = this.majorAngles();\n\n const radiusCallback = function(angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n\n return minorRadius;\n };\n return radiusCallback;\n }\n }\n\n createPlotBands() {\n const plotBands = this.options.plotBands || [];\n\n const group = this._plotbandGroup = new draw.Group({\n zIndex: -1\n });\n\n for (let i = 0; i < plotBands.length; i++) {\n const band = plotBands[i];\n const slot = this.plotBandSlot(band);\n const singleSlot = this.getSlot(band.from);\n\n const head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n\n const tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n\n const ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: {\n opacity: band.opacity\n }\n });\n group.append(ring);\n }\n\n this.appendVisual(group);\n }\n\n plotBandSlot(band) {\n return this.getSlot(band.from, band.to - 1);\n }\n\n getSlot(from, to) {\n const options = this.options;\n const justified = options.justified;\n const box = this.box;\n const divs = this.majorAngles();\n const totalDivs = divs.length;\n const slotAngle = 360 / totalDivs;\n let fromValue = from;\n\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n let slotStart = divs[fromValue];\n\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n\n const toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n const slots = toValue - fromValue + 1;\n const angle = slotAngle * slots;\n\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n }\n\n slot(from, to) {\n const slot = this.getSlot(from, to);\n const startAngle = slot.startAngle + 180;\n const endAngle = startAngle + slot.angle;\n\n return new geom.Arc([ slot.center.x, slot.center.y ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n }\n\n pointCategoryIndex(point) {\n const length = this.options.categories.length;\n let index = null;\n\n for (let i = 0; i < length; i++) {\n const slot = this.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n\n return index;\n }\n}\n\nsetDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: {\n margin: getSpacing(10)\n },\n majorGridLines: {\n visible: true\n },\n justified: true\n});\ndeepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n\nexport default RadarCategoryAxis;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport GridLinesMixin from './mixins/grid-lines-mixin';\nimport RadarCategoryAxis from './radar-category-axis';\nimport NumericAxis from './numeric-axis';\nimport Axis from './axis';\nimport Ring from './ring';\nimport Box from './box';\n\nimport { BLACK } from '../common/constants';\nimport { deepExtend, deg, getSpacing, inArray, limitValue, setDefaultOptions } from '../common';\n\nclass PolarAxis extends Axis {\n constructor(options, chartService) {\n super(options, chartService);\n\n const instanceOptions = this.options;\n\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n }\n\n getDivisions(stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n }\n\n reflow(box) {\n this.box = box;\n this.reflowLabels();\n }\n\n reflowLabels() {\n const { options, labels, options: { labels: labelOptions } } = this;\n const skip = labelOptions.skip || 0;\n const step = labelOptions.step || 1;\n\n const measureBox = new Box();\n const divs = this.intervals(options.majorUnit, skip, step);\n\n for (let i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n const labelBox = labels[i].box;\n\n labels[i].reflow(this.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n }\n\n lineBox() {\n return this.box;\n }\n\n intervals(size, skipOption, stepOption, skipAngles = false) {\n const min = this.options.min;\n const divisions = this.getDivisions(size);\n const divs = [];\n const skip = skipOption || 0;\n const step = stepOption || 1;\n\n for (let i = skip; i < divisions; i += step) {\n const current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n\n return divs;\n }\n\n majorIntervals() {\n return this.intervals(this.options.majorUnit);\n }\n\n minorIntervals() {\n return this.intervals(this.options.minorUnit);\n }\n\n intervalAngle(i) {\n return (540 - i - this.options.startAngle) % 360;\n }\n\n createLine() {\n return [];\n }\n\n majorGridLineAngles(altAxis) {\n const majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n }\n\n minorGridLineAngles(altAxis, skipMajor) {\n const options = this.options;\n const { minorGridLines, majorGridLines } = options;\n const majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n }\n\n plotBandSlot(band) {\n return this.getSlot(band.from, band.to);\n }\n\n getSlot(a, b) {\n const { options, box } = this;\n const startAngle = options.startAngle;\n let start = limitValue(a, options.min, options.max);\n let end = limitValue(b || start, start, options.max);\n\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n\n if (end < start) {\n const tmp = start;\n start = end;\n end = tmp;\n }\n\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n }\n\n slot(from, to = from) {\n const options = this.options;\n const start = 360 - options.startAngle;\n const slot = this.getSlot(from, to);\n const min = Math.min(from, to);\n const max = Math.max(from, to);\n let startAngle, endAngle;\n\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n\n return new geom.Arc([ slot.center.x, slot.center.y ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n }\n\n getValue(point) {\n const options = this.options;\n const center = this.box.center();\n const dx = point.x - center.x;\n const dy = point.y - center.y;\n let theta = Math.round(deg(Math.atan2(dy, dx)));\n let start = options.startAngle;\n\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n\n return (theta + start + 360) % 360;\n }\n\n valueRange() {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n}\n\nsetDefaultOptions(PolarAxis, {\n type: \"polar\",\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: {\n margin: getSpacing(10)\n },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: {\n color: \"#aaa\"\n }\n});\n\ndeepExtend(PolarAxis.prototype, GridLinesMixin, {\n createPlotBands: RadarCategoryAxis.prototype.createPlotBands,\n majorAngles: RadarCategoryAxis.prototype.majorAngles,\n range: NumericAxis.prototype.range,\n labelsCount: NumericAxis.prototype.labelsCount,\n createAxisLabel: NumericAxis.prototype.createAxisLabel\n});\n\nexport default PolarAxis;","import { geometry as geom, drawing as draw } from '@progress/kendo-drawing';\n\nimport ShapeBuilder from '../shape-builder';\nimport Ring from '../ring';\nimport Point from '../point';\n\nimport { ARC } from '../../common/constants';\nimport { append, deg, rad } from '../../common';\n\nconst RadarNumericAxisMixin = {\n options: {\n majorGridLines: {\n visible: true\n }\n },\n\n createPlotBands: function() {\n const { majorGridLines: { type }, plotBands = [] } = this.options;\n const altAxis = this.plotArea.polarAxis;\n const majorAngles = altAxis.majorAngles();\n const center = altAxis.box.center();\n const group = this._plotbandGroup = new draw.Group({\n zIndex: -1\n });\n\n for (let i = 0; i < plotBands.length; i++) {\n const band = plotBands[i];\n const bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: {\n opacity: band.opacity\n }\n };\n\n const slot = this.getSlot(band.from, band.to, true);\n const ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n\n let shape;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = draw.Path.fromPoints(this.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n\n group.append(shape);\n }\n\n this.appendVisual(group);\n },\n\n plotBandPoints: function(ring, angles) {\n const innerPoints = [];\n const outerPoints = [];\n const center = [ ring.center.x, ring.center.y ];\n const innerCircle = new geom.Circle(center, ring.innerRadius);\n const outerCircle = new geom.Circle(center, ring.radius);\n\n for (let i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n\n return outerPoints.concat(innerPoints);\n },\n\n createGridLines: function(altAxis) {\n const options = this.options;\n const majorTicks = this.radarMajorGridLinePositions();\n const majorAngles = altAxis.majorAngles();\n const center = altAxis.box.center();\n let gridLines = [];\n\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(\n center, majorTicks, majorAngles, options.majorGridLines\n );\n }\n\n if (options.minorGridLines.visible) {\n const minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(\n center, minorTicks, majorAngles, options.minorGridLines\n ));\n }\n\n return gridLines;\n },\n\n renderGridLines: function(center, ticks, angles, options) {\n const style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n const { skip = 0, step = 0 } = options;\n const container = this.gridLinesVisual();\n\n for (let tickIx = skip; tickIx < ticks.length; tickIx += step) {\n const tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n const circle = new geom.Circle([ center.x, center.y ], tickRadius);\n if (options.type === ARC) {\n container.append(new draw.Circle(circle, style));\n } else {\n const line = new draw.Path(style);\n for (let angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n\n line.close();\n container.append(line);\n }\n }\n }\n\n return container.children;\n },\n\n getValue: function(point) {\n const lineBox = this.lineBox();\n const altAxis = this.plotArea.polarAxis;\n const majorAngles = altAxis.majorAngles();\n const center = altAxis.box.center();\n const radius = point.distanceTo(center);\n let distance = radius;\n\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n const dx = point.x - center.x;\n const dy = point.y - center.y;\n const theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n\n majorAngles.sort(function(a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n\n // Solve triangle (center, point, axis X) using one side (radius) and two angles.\n // Angles are derived from triangle (center, point, gridline X)\n const midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n const alpha = angularDistance(theta, majorAngles[0]);\n const gamma = 90 - midAngle;\n const beta = 180 - alpha - gamma;\n\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n\n return this.axisType().prototype.getValue.call(\n this, new Point(lineBox.x1, lineBox.y2 - distance)\n );\n }\n};\n\nfunction angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n}\n\nexport default RadarNumericAxisMixin;","import NumericAxis from './numeric-axis';\nimport RadarNumericAxisMixin from './mixins/radar-numeric-axis-mixin';\n\nimport { deepExtend } from '../common';\n\nclass RadarNumericAxis extends NumericAxis {\n radarMajorGridLinePositions() {\n return this.getTickPositions(this.options.majorUnit);\n }\n\n radarMinorGridLinePositions() {\n const options = this.options;\n let minorSkipStep = 0;\n\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n }\n\n axisType() {\n return NumericAxis;\n }\n}\n\ndeepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n\nexport default RadarNumericAxis;","import LogarithmicAxis from './logarithmic-axis';\nimport RadarNumericAxisMixin from './mixins/radar-numeric-axis-mixin';\n\nimport { deepExtend } from '../common';\n\nclass RadarLogarithmicAxis extends LogarithmicAxis {\n radarMajorGridLinePositions() {\n const positions = [];\n\n this.traverseMajorTicksPositions(function(position) {\n positions.push(position);\n }, this.options.majorGridLines);\n\n return positions;\n }\n\n radarMinorGridLinePositions() {\n const positions = [];\n\n this.traverseMinorTicksPositions(function(position) {\n positions.push(position);\n }, this.options.minorGridLines);\n\n return positions;\n }\n\n axisType() {\n return LogarithmicAxis;\n }\n}\n\ndeepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n\nexport default RadarLogarithmicAxis;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport { X, Y } from '../common/constants';\nimport { Class, last, round } from '../common';\n\nconst WEIGHT = 0.333;\nconst EXTREMUM_ALLOWED_DEVIATION = 0.01;\n\nclass CurveProcessor extends Class {\n\n constructor(closed) {\n super();\n\n this.closed = closed;\n }\n\n process(dataPoints) {\n const points = dataPoints.slice(0);\n const segments = [];\n let closed = this.closed;\n let length = points.length;\n\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n\n if (length < 2 || (length === 2 && points[0].equals(points[1]))) {\n return segments;\n }\n\n let p0 = points[0];\n let p1 = points[1];\n let p2 = points[2];\n\n segments.push(new geom.Segment(p0));\n\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n\n if (length === 2) {\n const tangent = this.tangent(p0,p1, X, Y);\n\n last(segments).controlOut(\n this.firstControlPoint(tangent, p0, p1, X, Y)\n );\n\n segments.push(new geom.Segment(\n p1,\n this.secondControlPoint(tangent, p0, p1, X, Y)\n ));\n\n return segments;\n }\n\n let initialControlPoint, lastControlPoint;\n\n if (closed) {\n p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n const controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n const tangent = this.tangent(p0, p1, X,Y);\n initialControlPoint = this.firstControlPoint(tangent, p0, p1, X, Y);\n }\n\n let cp0 = initialControlPoint;\n for (let idx = 0; idx <= length - 3; idx++) {\n this.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n const controlPoints = this.controlPoints(p0,p1,p2);\n\n last(segments).controlOut(cp0);\n cp0 = controlPoints[1];\n\n const cp1 = controlPoints[0];\n segments.push(new geom.Segment(p1, cp1));\n }\n }\n\n if (closed) {\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n const controlPoints = this.controlPoints(p0, p1, p2);\n\n last(segments).controlOut(cp0);\n segments.push(new geom.Segment(\n p1,\n controlPoints[0]\n ));\n\n last(segments).controlOut(controlPoints[1]);\n segments.push(new geom.Segment(\n p2,\n lastControlPoint\n ));\n } else {\n const tangent = this.tangent(p1, p2, X, Y);\n\n last(segments).controlOut(cp0);\n segments.push(new geom.Segment(\n p2,\n this.secondControlPoint(tangent, p1, p2, X, Y)\n ));\n }\n\n return segments;\n }\n\n removeDuplicates(idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n }\n\n invertAxis(p0, p1, p2) {\n let invertAxis = false;\n\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if ((p1.y < p2.y && p0.y <= p1.y) || (p2.y < p1.y && p1.y <= p0.y)) {\n invertAxis = true;\n }\n } else {\n const fn = this.lineFunction(p0,p1);\n const y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) &&\n !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n\n return invertAxis;\n }\n\n isLine(p0, p1, p2) {\n const fn = this.lineFunction(p0, p1);\n const y2 = this.calculateFunction(fn, p2.x);\n\n return (p0.x === p1.x && p1.x === p2.x) || round(y2, 1) === round(p2.y, 1);\n }\n\n lineFunction(p1, p2) {\n const a = (p2.y - p1.y) / (p2.x - p1.x);\n const b = p1.y - a * p1.x;\n\n return [ b, a ];\n }\n\n controlPoints(p0, p1, p2) {\n let xField = X;\n let yField = Y;\n let restrict = false;\n let switchOrientation = false;\n let tangent;\n\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n const monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\n\n if (monotonic.x && monotonic.y) {\n tangent = this.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (this.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n let sign;\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n (p0[yField] < p2[yField] && p1[yField] <= p0[yField])) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n\n const secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n\n if (switchOrientation) {\n const oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n\n const firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n\n return [ secondControlPoint, firstControlPoint ];\n }\n\n restrictControlPoint(p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n }\n\n tangent(p0, p1, xField, yField) {\n const x = p1[xField] - p0[xField];\n const y = p1[yField] - p0[yField];\n let tangent;\n\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n\n return tangent;\n }\n\n isMonotonicByField(p0, p1, p2, field) {\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n (p2[field] < p1[field] && p1[field] < p0[field]);\n }\n\n firstControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n }\n\n secondControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n }\n\n point(xValue, yValue, xField, yField) {\n const controlPoint = new geom.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n\n return controlPoint;\n }\n\n calculateFunction(fn, x) {\n const length = fn.length;\n let result = 0;\n\n for (let i = 0; i < length; i++) {\n result += Math.pow(x,i) * fn[i];\n }\n return result;\n }\n}\n\nfunction numberSign(value) {\n return value <= 0 ? -1 : 1;\n}\n\nexport default CurveProcessor;","import { Class } from '../../common';\n\nclass ChartAxis extends Class {\n constructor(axis) {\n super();\n\n this._axis = axis;\n this.options = axis.options;\n }\n\n value(point) {\n const axis = this._axis;\n const value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n\n return value;\n }\n\n slot(from, to, limit = true) {\n return this._axis.slot(from, to, limit);\n }\n\n range() {\n return this._axis.range();\n }\n\n valueRange() {\n return this._axis.valueRange();\n }\n}\n\nexport default ChartAxis;","import ChartAxis from './chart-axis';\n\nexport default function findAxisByName(name, axes) {\n for (let idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n axes[idx].prepareUserOptions();\n return new ChartAxis(axes[idx]);\n }\n }\n}","import findAxisByName from './find-axis-by-name';\n\nclass ChartPane {\n constructor(pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this._pane = pane;\n }\n\n findAxisByName(name) {\n return findAxisByName(name, this._pane.axes);\n }\n}\n\nexport default ChartPane;","import { Class } from '../../common';\n\nclass ChartPlotArea extends Class {\n constructor(plotArea) {\n super();\n\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n}\n\nexport default ChartPlotArea;","import { isNumber } from '../../common';\n\nexport default function countNumbers(values) {\n const length = values.length;\n let count = 0;\n\n for (let i = 0; i < length; i++) {\n const num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n\n return count;\n}","import { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { defined, isNumber } from '../../common';\n\nimport countNumbers from '../utils/count-numbers';\n\nconst Aggregates = {\n min: function(values) {\n const length = values.length;\n let min = MAX_VALUE;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (isNumber(value)) {\n min = Math.min(min, value);\n }\n }\n\n return min === MAX_VALUE ? values[0] : min;\n },\n\n max: function(values) {\n const length = values.length;\n let max = MIN_VALUE;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (isNumber(value)) {\n max = Math.max(max, value);\n }\n }\n\n return max === MIN_VALUE ? values[0] : max;\n },\n\n sum: function(values) {\n const length = values.length;\n let sum = 0;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n\n return sum;\n },\n\n sumOrNull: function(values) {\n let result = null;\n\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n\n return result;\n },\n\n count: function(values) {\n const length = values.length;\n let count = 0;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n\n return count;\n },\n\n avg: function(values) {\n const count = countNumbers(values);\n let result = values[0];\n\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n\n return result;\n },\n\n first: function(values) {\n const length = values.length;\n\n for (let i = 0; i < length; i++) {\n const value = values[i];\n if (value !== null && defined(value)) {\n return value;\n }\n }\n\n return values[0];\n }\n};\n\nexport default Aggregates;","import { getter } from '../../common';\n\nexport default function getField(field, row) {\n if (row === null) {\n return row;\n }\n\n const get = getter(field, true);\n return get(row);\n}","import getField from './utils/get-field';\nimport { VALUE } from '../common/constants';\nimport { Class, defined } from '../common';\n\nclass SeriesBinder extends Class {\n\n constructor() {\n super();\n\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n }\n\n register(seriesTypes, valueFields = [ VALUE ], otherFields = {}) {\n\n for (let i = 0; i < seriesTypes.length; i++) {\n const type = seriesTypes[i];\n\n this._valueFields[type] = valueFields;\n this._otherFields[type] = otherFields;\n this._nullValue[type] = this._makeValue(valueFields, null);\n this._undefinedValue[type] = this._makeValue(valueFields, undefined);\n }\n }\n\n canonicalFields(series) {\n return this.valueFields(series).concat(this.otherFields(series));\n }\n\n valueFields(series) {\n return this._valueFields[series.type] || [ VALUE ];\n }\n\n otherFields(series) {\n return this._otherFields[series.type] || [ VALUE ];\n }\n\n bindPoint(series, pointIx, item) {\n const data = series.data;\n const pointData = defined(item) ? item : data[pointIx];\n const result = { valueFields: { value: pointData } };\n const valueFields = this.valueFields(series);\n const otherFields = this._otherFields[series.type];\n let fields, value;\n\n if (pointData === null) {\n value = this._nullValue[series.type];\n } else if (!defined(pointData)) {\n value = this._undefinedValue[series.type];\n } else if (Array.isArray(pointData)) {\n const fieldData = pointData.slice(valueFields.length);\n value = this._bindFromArray(pointData, valueFields);\n fields = this._bindFromArray(fieldData, otherFields);\n } else if (typeof pointData === \"object\") {\n const srcValueFields = this.sourceFields(series, valueFields);\n const srcPointFields = this.sourceFields(series, otherFields);\n\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\n\n if (defined(value)) {\n if (valueFields.length === 1) {\n result.valueFields.value = value[valueFields[0]];\n } else {\n result.valueFields = value;\n }\n }\n\n result.fields = fields || {};\n\n return result;\n }\n\n _makeValue(fields, initialValue) {\n const value = {};\n const length = fields.length;\n\n for (let i = 0; i < length; i++) {\n const fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n\n return value;\n }\n\n _bindFromArray(array, fields) {\n const value = {};\n\n if (fields) {\n const length = Math.min(fields.length, array.length);\n\n for (let i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n\n return value;\n }\n\n _bindFromObject(object, fields, srcFields = fields) {\n const value = {};\n\n if (fields) {\n const length = fields.length;\n\n for (let i = 0; i < length; i++) {\n const fieldName = fields[i];\n const srcFieldName = srcFields[i];\n if (srcFieldName !== null) {\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n }\n\n return value;\n }\n\n sourceFields(series, canonicalFields) {\n const sourceFields = [];\n\n if (canonicalFields) {\n const length = canonicalFields.length;\n\n for (let i = 0; i < length; i++) {\n const fieldName = canonicalFields[i];\n const sourceFieldName = fieldName === VALUE ? \"field\" : fieldName + \"Field\";\n\n sourceFields.push(series[sourceFieldName] !== null ? (series[sourceFieldName] || fieldName) : null);\n }\n }\n\n return sourceFields;\n }\n}\n\nSeriesBinder.current = new SeriesBinder();\n\nexport default SeriesBinder;","import SeriesBinder from '../series-binder';\n\nimport { OBJECT } from '../../common/constants';\nimport { Class, defined, getter, isArray, isNumber } from '../../common';\n\nconst STD_ERR = \"stderr\";\nconst STD_DEV = \"stddev\";\nconst percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\nconst standardDeviationRegex = new RegExp(\"^\" + STD_DEV + \"(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$\");\n\nclass ErrorRangeCalculator extends Class {\n constructor(errorValue, series, field) {\n super();\n\n this.initGlobalRanges(errorValue, series, field);\n }\n\n initGlobalRanges(errorValue, series, field) {\n const data = series.data;\n const deviationMatch = standardDeviationRegex.exec(errorValue);\n\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n\n const average = this.getAverage(data);\n const deviation = this.getStandardDeviation(data, average, false);\n const multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n const errorRange = { low: average.value - deviation * multiple, high: average.value + deviation * multiple };\n\n this.globalRange = function() {\n return errorRange;\n };\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n this.valueGetter = this.createValueGetter(series, field);\n const standardError = this.getStandardError(data, this.getAverage(data));\n\n this.globalRange = function(value) {\n return { low: value - standardError, high: value + standardError };\n };\n }\n }\n\n createValueGetter(series, field) {\n const data = series.data;\n const binder = SeriesBinder.current;\n const valueFields = binder.valueFields(series);\n const item = defined(data[0]) ? data[0] : {};\n let valueGetter;\n\n if (isArray(item)) {\n const index = field ? valueFields.indexOf(field) : 0;\n valueGetter = getter(\"[\" + index + \"]\");\n } else if (isNumber(item)) {\n valueGetter = getter();\n } else if (typeof item === OBJECT) {\n const srcValueFields = binder.sourceFields(series, valueFields);\n valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n }\n\n return valueGetter;\n }\n\n getErrorRange(pointValue, errorValue) {\n let low, high, value;\n\n if (!defined(errorValue)) {\n return null;\n }\n\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\n\n if (isArray(errorValue)) {\n low = pointValue - errorValue[0];\n high = pointValue + errorValue[1];\n } else if (isNumber(value = parseFloat(errorValue))) {\n low = pointValue - value;\n high = pointValue + value;\n } else if ((value = percentRegex.exec(errorValue))) {\n const percentValue = pointValue * (parseFloat(value[1]) / 100);\n low = pointValue - Math.abs(percentValue);\n high = pointValue + Math.abs(percentValue);\n } else {\n throw new Error(\"Invalid ErrorBar value: \" + errorValue);\n }\n\n return { low: low, high: high };\n }\n\n getStandardError(data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n }\n\n getStandardDeviation(data, average, isSample) {\n const length = data.length;\n const total = isSample ? average.count - 1 : average.count;\n let squareDifferenceSum = 0;\n\n for (let idx = 0; idx < length; idx++) {\n const value = this.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n\n return Math.sqrt(squareDifferenceSum / total);\n }\n\n getAverage(data) {\n const length = data.length;\n let sum = 0;\n let count = 0;\n\n for (let idx = 0; idx < length; idx++) {\n const value = this.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n\n return {\n value: sum / count,\n count: count\n };\n }\n}\n\nexport default ErrorRangeCalculator;","import { support } from '@progress/kendo-drawing';\n\nconst browser = support.browser || {};\n\nconst INITIAL_ANIMATION_DURATION = 600;\nconst FADEIN = \"fadeIn\";\n\nconst GLASS = \"glass\";\nconst BORDER_BRIGHTNESS = 0.8;\nconst TOOLTIP_OFFSET = 5;\nconst START_SCALE = browser.msie ? 0.001 : 0;\nconst ERROR_LOW_FIELD = \"errorLow\";\nconst ERROR_HIGH_FIELD = \"errorHigh\";\nconst X_ERROR_LOW_FIELD = \"xErrorLow\";\nconst X_ERROR_HIGH_FIELD = \"xErrorHigh\";\nconst Y_ERROR_LOW_FIELD = \"yErrorLow\";\nconst Y_ERROR_HIGH_FIELD = \"yErrorHigh\";\nconst LINE_MARKER_SIZE = 8;\nconst ZERO = \"zero\";\nconst INTERPOLATE = \"interpolate\";\nconst GAP = \"gap\";\nconst ABOVE = \"above\";\nconst BELOW = \"below\";\n\nconst SMOOTH = \"smooth\";\nconst STEP = \"step\";\n\nconst AREA = \"area\";\nconst BAR = \"bar\";\nconst BOX_PLOT = \"boxPlot\";\nconst BUBBLE = \"bubble\";\nconst BULLET = \"bullet\";\nconst CANDLESTICK = \"candlestick\";\nconst COLUMN = \"column\";\nconst DONUT = \"donut\";\nconst FUNNEL = \"funnel\";\nconst PYRAMID = \"pyramid\";\nconst HEATMAP = \"heatmap\";\nconst HORIZONTAL_WATERFALL = \"horizontalWaterfall\";\nconst LINE = \"line\";\nconst OHLC = \"ohlc\";\nconst PIE = \"pie\";\nconst POLAR_AREA = \"polarArea\";\nconst POLAR_LINE = \"polarLine\";\nconst POLAR_SCATTER = \"polarScatter\";\nconst RADAR_AREA = \"radarArea\";\nconst RADAR_COLUMN = \"radarColumn\";\nconst RADAR_LINE = \"radarLine\";\nconst RANGE_AREA = \"rangeArea\";\nconst RANGE_BAR = \"rangeBar\";\nconst RANGE_COLUMN = \"rangeColumn\";\nconst SCATTER = \"scatter\";\nconst SCATTER_LINE = \"scatterLine\";\nconst VERTICAL_AREA = \"verticalArea\";\nconst VERTICAL_BOX_PLOT = \"verticalBoxPlot\";\nconst VERTICAL_BULLET = \"verticalBullet\";\nconst VERTICAL_LINE = \"verticalLine\";\nconst VERTICAL_RANGE_AREA = \"verticalRangeArea\";\nconst WATERFALL = \"waterfall\";\nconst EQUALLY_SPACED_SERIES = [\n BAR, COLUMN, OHLC, CANDLESTICK, BOX_PLOT, VERTICAL_BOX_PLOT,\n BULLET, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\n];\n\nconst TRENDLINE_LINEAR = 'linearTrendline';\nconst TRENDLINE_MOVING_AVERAGE = 'movingAverageTrendline';\nconst TRENDLINE_SERIES = [\n TRENDLINE_LINEAR, TRENDLINE_MOVING_AVERAGE\n];\n\nconst LEGEND_ITEM_CLICK = \"legendItemClick\";\nconst LEGEND_ITEM_HOVER = \"legendItemHover\";\nconst LEGEND_ITEM_LEAVE = \"legendItemLeave\";\nconst SERIES_CLICK = \"seriesClick\";\nconst SERIES_HOVER = \"seriesHover\";\nconst SERIES_OVER = \"seriesOver\";\nconst SERIES_LEAVE = \"seriesLeave\";\nconst PLOT_AREA_CLICK = \"plotAreaClick\";\nconst PLOT_AREA_HOVER = \"plotAreaHover\";\nconst PLOT_AREA_LEAVE = \"plotAreaLeave\";\nconst DRAG = \"drag\";\nconst DRAG_END = \"dragEnd\";\nconst DRAG_START = \"dragStart\";\nconst ZOOM_START = \"zoomStart\";\nconst ZOOM = \"zoom\";\nconst ZOOM_END = \"zoomEnd\";\nconst SELECT_START = \"selectStart\";\nconst SELECT = \"select\";\nconst SELECT_END = \"selectEnd\";\nconst RENDER = \"render\";\nconst SHOW_TOOLTIP = \"showTooltip\";\nconst HIDE_TOOLTIP = \"hideTooltip\";\nconst PANE_RENDER = \"paneRender\";\n\nconst LOGARITHMIC = \"log\";\nconst CATEGORY = \"category\";\n\nconst INSIDE_END = \"insideEnd\";\nconst INSIDE_BASE = \"insideBase\";\nconst OUTSIDE_END = \"outsideEnd\";\n\nconst MOUSEWHEEL = \"wheel\";\nconst MOUSEWHEEL_DELAY = 150;\nconst MOUSEWHEEL_ZOOM_RATE = 0.3;\n\nconst DRILLDOWN = \"drilldown\";\nconst DRILLDOWN_FIELD = \"drilldown\";\n\nconst MIN_MOVING_AVERAGE_PERIOD = 2;\n\nexport {\n INITIAL_ANIMATION_DURATION, FADEIN,\n LEGEND_ITEM_CLICK, LEGEND_ITEM_HOVER, LEGEND_ITEM_LEAVE,\n SERIES_CLICK, SERIES_HOVER, SERIES_OVER, SERIES_LEAVE,\n GLASS, BORDER_BRIGHTNESS, TOOLTIP_OFFSET,\n START_SCALE, ERROR_LOW_FIELD, ERROR_HIGH_FIELD,\n X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD,\n LINE_MARKER_SIZE, INTERPOLATE, ZERO,\n SMOOTH, STEP, CATEGORY, FUNNEL, PYRAMID,\n BAR, CANDLESTICK, PIE, COLUMN, AREA,\n VERTICAL_BULLET, BOX_PLOT, OHLC, WATERFALL, LINE,\n BULLET, VERTICAL_LINE, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA,\n RANGE_COLUMN, VERTICAL_BOX_PLOT, RANGE_BAR, HORIZONTAL_WATERFALL,\n SCATTER, SCATTER_LINE, BUBBLE, RADAR_AREA, RADAR_LINE,\n RADAR_COLUMN, POLAR_LINE, POLAR_AREA, POLAR_SCATTER,\n RENDER, PLOT_AREA_CLICK, PLOT_AREA_HOVER, PLOT_AREA_LEAVE,\n LOGARITHMIC, DRAG, DRAG_START, DRAG_END, ZOOM_START, ZOOM, ZOOM_END,\n SELECT_START, SELECT, SELECT_END, PANE_RENDER, GAP,\n DONUT, INSIDE_END, INSIDE_BASE, OUTSIDE_END,\n MOUSEWHEEL, MOUSEWHEEL_DELAY, MOUSEWHEEL_ZOOM_RATE,\n SHOW_TOOLTIP, HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES, ABOVE, BELOW,\n HEATMAP,\n DRILLDOWN, DRILLDOWN_FIELD,\n MIN_MOVING_AVERAGE_PERIOD,\n TRENDLINE_SERIES, TRENDLINE_LINEAR, TRENDLINE_MOVING_AVERAGE\n};\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Point, Box } from '../../core';\n\nimport { FADEIN, INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { setDefaultOptions, alignPathToPixel } from '../../common';\n\nconst DEFAULT_ERROR_BAR_WIDTH = 4;\n\nclass ErrorBarBase extends ChartElement {\n constructor(low, high, isVertical, chart, series, options) {\n super(options);\n\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n }\n\n reflow(targetBox) {\n const endCaps = this.options.endCaps;\n const isVertical = this.isVertical;\n const axis = this.getAxis();\n const valueBox = axis.getSlot(this.low, this.high);\n const centerBox = targetBox.center();\n const capsWidth = this.getCapsWidth(targetBox, isVertical);\n const capValue = isVertical ? centerBox.x : centerBox.y;\n const capStart = capValue - capsWidth;\n const capEnd = capValue + capsWidth;\n let linePoints;\n\n if (isVertical) {\n linePoints = [\n new Point(centerBox.x, valueBox.y1),\n new Point(centerBox.x, valueBox.y2)\n ];\n if (endCaps) {\n linePoints.push(new Point(capStart, valueBox.y1),\n new Point(capEnd, valueBox.y1),\n new Point(capStart, valueBox.y2),\n new Point(capEnd, valueBox.y2));\n }\n this.box = new Box(capStart, valueBox.y1, capEnd, valueBox.y2);\n } else {\n linePoints = [\n new Point(valueBox.x1, centerBox.y),\n new Point(valueBox.x2, centerBox.y)\n ];\n if (endCaps) {\n linePoints.push(new Point(valueBox.x1, capStart),\n new Point(valueBox.x1, capEnd),\n new Point(valueBox.x2, capStart),\n new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n\n this.linePoints = linePoints;\n }\n\n getCapsWidth(box, isVertical) {\n const boxSize = isVertical ? box.width() : box.height();\n const capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n\n return capsWidth;\n }\n\n createVisual() {\n const options = this.options;\n const visual = options.visual;\n\n if (visual) {\n this.visual = visual({\n low: this.low,\n high: this.high,\n rect: this.box.toRect(),\n sender: this.getSender(),\n options: {\n endCaps: options.endCaps,\n color: options.color,\n line: options.line\n },\n createVisual: () => {\n this.createDefaultVisual();\n const defaultVisual = this.visual;\n delete this.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n }\n\n createDefaultVisual() {\n const { options, linePoints } = this;\n const lineOptions = {\n stroke: {\n color: options.color,\n width: options.line.width,\n dashType: options.line.dashType\n }\n };\n\n super.createVisual();\n\n for (let idx = 0; idx < linePoints.length; idx += 2) {\n const line = new draw.Path(lineOptions)\n .moveTo(linePoints[idx].x, linePoints[idx].y)\n .lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n\n alignPathToPixel(line);\n this.visual.append(line);\n }\n }\n}\n\nsetDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: {\n width: 2\n },\n zIndex: 1\n});\n\nexport default ErrorBarBase;","import ErrorBarBase from './error-bar-base';\n\nclass CategoricalErrorBar extends ErrorBarBase {\n getAxis() {\n const axis = this.chart.seriesValueAxis(this.series);\n\n return axis;\n }\n}\n\nexport default CategoricalErrorBar;","import { defined } from '../../common';\n\nexport default function anyHasZIndex(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n if (defined(elements[idx].zIndex)) {\n return true;\n }\n }\n}","export default function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n}","import countNumbers from './count-numbers';\n\nexport default function areNumbers(values) {\n return countNumbers(values) === values.length;\n}","import { defined } from '../../common';\n\nexport default function segmentVisible(series, fields, index) {\n const visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n\n const pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n}\n\n","import { isNumber, isString } from '../../common';\nimport SeriesBinder from '../series-binder';\nimport segmentVisible from './segment-visible';\n\nexport default function bindSegments(series) {\n const data = series.data;\n const points = [];\n let sum = 0;\n let count = 0;\n\n for (let idx = 0; idx < data.length; idx++) {\n const pointData = SeriesBinder.current.bindPoint(series, idx);\n let value = pointData.valueFields.value;\n\n\n if (isString(value)) {\n value = parseFloat(value);\n }\n\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n\n pointData.value = Math.abs(value);\n points.push(pointData);\n\n if (pointData.visible) {\n sum += pointData.value;\n }\n\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n\n return {\n total: sum,\n points: points,\n count: count\n };\n}","export default function categoriesCount(series) {\n const seriesCount = series.length;\n let categories = 0;\n\n for (let i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n\n return categories;\n}","export default function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n\n return a === b;\n}","import { inArray, isFunction, isObject, valueOrDefault } from '../../common';\n\nconst MAX_EXPAND_DEPTH = 5;\n\nexport default function evalOptions(options, context, state = {}, dryRun = false) {\n const defaults = state.defaults = state.defaults || {};\n const depth = state.depth = state.depth || 0;\n let needsEval = false;\n\n state.excluded = state.excluded || [];\n\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n\n for (let property in options) {\n if (!inArray(property, state.excluded) && options.hasOwnProperty(property)) {\n const propValue = options[property];\n if (isFunction(propValue)) {\n needsEval = true;\n if (!dryRun) {\n options[property] = valueOrDefault(propValue(context), defaults[property]);\n }\n } else if (isObject(propValue)) {\n if (!dryRun) {\n state.defaults = defaults[property];\n }\n state.depth++;\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n state.depth--;\n }\n }\n }\n\n return needsEval;\n}","import { inArray } from '../../common';\n\nexport default function filterSeriesByType(series, types) {\n const result = [];\n\n const seriesTypes = [].concat(types);\n for (let idx = 0; idx < series.length; idx++) {\n const currentSeries = series[idx];\n if (inArray(currentSeries.type, seriesTypes)) {\n result.push(currentSeries);\n }\n }\n\n return result;\n}","import { parseDate } from '../../date-utils';\nimport { getter } from '../../common';\n\nexport default function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n\n const key = \"_date_\" + field;\n let value = row[key];\n\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n\n return value;\n}","export default function hasGradientOverlay(options) {\n const overlay = options.overlay;\n\n return overlay && overlay.gradient && overlay.gradient !== \"none\";\n}","import { defined } from '../../common';\n\nexport default function hasValue(value) {\n return defined(value) && value !== null;\n}","import equalsIgnoreCase from './equals-ignore-case';\n\nimport { DATE } from '../../common/constants';\n\nexport default function isDateAxis(axisOptions, sampleCategory) {\n const type = axisOptions.type;\n const dateCategory = sampleCategory instanceof Date;\n\n return (!type && dateCategory) || equalsIgnoreCase(type, DATE);\n}","export default function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n}","import { INTERPOLATE, ZERO } from '../constants';\nimport { convertableToNumber } from '../../common';\nimport SeriesBinder from '../series-binder';\n\nconst AREA_REGEX = /area/i;\n\nfunction seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n}\n\nfunction hasValue(series, item) {\n const fields = SeriesBinder.current.bindPoint(series, null, item);\n const valueFields = fields.valueFields;\n\n for (let field in valueFields) {\n if (convertableToNumber(valueFields[field])) {\n return true;\n }\n }\n}\n\nfunction findNext({ start, dir, min, max, getter, hasItem, series }) {\n let pointHasValue, outPoint;\n let idx = start;\n do {\n idx += dir;\n //aggregating and binding the item takes too much time for large number of categories\n //will assume that if the aggregation does not create value for a missing item for one it will not create for others\n if (hasItem(idx)) {\n outPoint = getter(idx);\n pointHasValue = hasValue(series, outPoint.item);\n }\n } while (min <= idx && idx <= max && !pointHasValue);\n\n if (pointHasValue) {\n return outPoint;\n }\n}\n\nexport default function createOutOfRangePoints(series, range, count, getter, hasItem) {\n const { min, max } = range;\n const hasMinPoint = min > 0 && min < count;\n const hasMaxPoint = max + 1 < count;\n\n if (hasMinPoint || hasMaxPoint) {\n const missingValues = seriesMissingValues(series);\n let minPoint, maxPoint;\n if (missingValues !== INTERPOLATE) {\n if (hasMinPoint) {\n minPoint = getter(min - 1);\n }\n\n if (hasMaxPoint) {\n maxPoint = getter(max + 1);\n }\n } else {\n let outPoint, pointHasValue;\n if (hasMinPoint) {\n outPoint = getter(min - 1);\n pointHasValue = hasValue(series, outPoint.item);\n if (!pointHasValue) {\n minPoint = findNext({\n start: min,\n dir: -1,\n min: 0,\n max: count - 1,\n getter: getter,\n hasItem: hasItem,\n series: series\n });\n } else {\n minPoint = outPoint;\n }\n }\n\n if (hasMaxPoint) {\n outPoint = getter(max + 1);\n pointHasValue = hasValue(series, outPoint.item);\n if (!pointHasValue) {\n maxPoint = findNext({\n start: max,\n dir: 1,\n min: 0,\n max: count - 1,\n getter: getter,\n hasItem: hasItem,\n series: series\n });\n } else {\n maxPoint = outPoint;\n }\n }\n }\n\n if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\n}","import ErrorRangeCalculator from './error-bars/error-range-calculator';\nimport CategoricalErrorBar from './error-bars/categorical-error-bar';\n\nimport { ERROR_LOW_FIELD, ERROR_HIGH_FIELD } from './constants';\n\nimport { evalOptions, categoriesCount } from './utils';\n\nimport { ChartElement, Box } from '../core';\n\nimport { VALUE, STRING, MIN_VALUE, MAX_VALUE } from '../common/constants';\nimport { convertableToNumber, deepExtend, defined, isNumber, last, setDefaultOptions, sparseArrayLimits } from '../common';\n\nclass CategoricalChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n\n // Value axis ranges grouped by axis name, e.g.:\n // primary: { min: 0, max: 1 }\n this.valueAxisRanges = {};\n\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n\n this.render();\n }\n\n render() {\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n pointOptions(series, seriesIx) {\n let options = this.seriesOptions[seriesIx];\n if (!options) {\n const defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({ }, defaults, {\n vertical: !this.options.invertAxes\n }, series);\n }\n\n return options;\n }\n\n plotValue(point) {\n if (!point) {\n return 0;\n }\n\n if (this.options.isStacked100 && isNumber(point.value)) {\n const categoryIx = point.categoryIx;\n const categoryPoints = this.categoryPoints[categoryIx];\n const otherValues = [];\n let categorySum = 0;\n\n for (let i = 0; i < categoryPoints.length; i++) {\n const other = categoryPoints[i];\n if (other) {\n const stack = point.series.stack;\n const otherStack = other.series.stack;\n\n if ((stack && otherStack) && stack.group !== otherStack.group) {\n continue;\n }\n\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n\n return point.value;\n }\n\n plotRange(point, startValue = 0) {\n const categoryPoints = this.categoryPoints[point.categoryIx];\n\n if (this.options.isStacked) {\n let plotValue = this.plotValue(point);\n const positive = plotValue >= 0;\n let prevValue = startValue;\n let isStackedBar = false;\n\n for (let i = 0; i < categoryPoints.length; i++) {\n const other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\n\n const stack = point.series.stack;\n const otherStack = other.series.stack;\n if (stack && otherStack) {\n if (typeof stack === STRING && stack !== otherStack) {\n continue;\n }\n\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n\n const otherValue = this.plotValue(other);\n if ((otherValue >= 0 && positive) ||\n (otherValue < 0 && !positive)) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n\n if (this.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n\n if (isStackedBar) {\n prevValue -= startValue;\n }\n\n return [ prevValue, plotValue ];\n }\n\n const series = point.series;\n const valueAxis = this.seriesValueAxis(series);\n const axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, convertableToNumber(point.value) ? point.value : axisCrossingValue ];\n }\n\n stackLimits(axisName, stackName) {\n let min = MAX_VALUE;\n let max = MIN_VALUE;\n\n for (let i = 0; i < this.categoryPoints.length; i++) {\n const categoryPoints = this.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\n\n for (let pIx = 0; pIx < categoryPoints.length; pIx++) {\n const point = categoryPoints[pIx];\n if (point) {\n if (point.series.stack === stackName || point.series.axis === axisName) {\n const to = this.plotRange(point, 0)[1];\n if (defined(to) && isFinite(to)) {\n max = Math.max(max, to);\n min = Math.min(min, to);\n }\n }\n }\n }\n }\n\n return { min: min, max: max };\n }\n\n updateStackRange() {\n const { isStacked, series: chartSeries } = this.options;\n const limitsCache = {};\n\n if (isStacked) {\n for (let i = 0; i < chartSeries.length; i++) {\n const series = chartSeries[i];\n const axisName = series.axis;\n const key = axisName + series.stack;\n\n let limits = limitsCache[key];\n if (!limits) {\n limits = this.stackLimits(axisName, series.stack);\n\n const errorTotals = this.errorTotals;\n if (errorTotals) {\n if (errorTotals.negative.length) {\n limits.min = Math.min(limits.min, sparseArrayLimits(errorTotals.negative).min);\n }\n if (errorTotals.positive.length) {\n limits.max = Math.max(limits.max, sparseArrayLimits(errorTotals.positive).max);\n }\n }\n\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n\n if (limits) {\n this.valueAxisRanges[axisName] = limits;\n }\n }\n }\n }\n\n addErrorBar(point, data, categoryIx) {\n const { value, series, seriesIx } = point;\n const errorBars = point.options.errorBars;\n const lowValue = data.fields[ERROR_LOW_FIELD];\n const highValue = data.fields[ERROR_HIGH_FIELD];\n let errorRange;\n\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] ||\n new ErrorRangeCalculator(errorBars.value, series, VALUE);\n\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\n }\n\n addPointErrorBar(point, categoryIx) {\n const isVertical = !this.options.invertAxes;\n const options = point.options.errorBars;\n let { series, low, high } = point;\n\n if (this.options.isStacked) {\n const stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n const fields = { categoryIx: categoryIx, series: series };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n\n const errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [ errorBar ];\n point.append(errorBar);\n }\n\n stackedErrorRange(point, categoryIx) {\n const plotValue = this.plotRange(point, 0)[1] - point.value;\n const low = point.low + plotValue;\n const high = point.high + plotValue;\n\n this.errorTotals = this.errorTotals || { positive: [], negative: [] };\n\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n\n return { low: low, high: high };\n }\n\n addValue(data, fields) {\n const { categoryIx, series, seriesIx } = fields;\n\n let categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n let seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n\n const point = this.createPoint(data, fields);\n if (point) {\n Object.assign(point, fields);\n\n point.owner = this;\n point.noteText = data.fields.noteText;\n if (!defined(point.dataItem)) {\n point.dataItem = series.data[categoryIx];\n }\n this.addErrorBar(point, data, categoryIx);\n }\n\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n\n this.updateRange(data.valueFields, fields);\n }\n\n evalPointOptions(options, value, fields) {\n const categoryIx = fields.categoryIx;\n const category = fields.category;\n const series = fields.series;\n const seriesIx = fields.seriesIx;\n const state = {\n defaults: series._defaults,\n excluded: [\n \"data\", \"aggregate\", \"_events\", \"tooltip\", \"content\", \"template\",\n \"visual\", \"toggle\", \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\",\n \"drilldownSeriesFactory\"\n ]\n };\n\n let doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n let pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, pointOptions);\n evalOptions(pointOptions, {\n value: value,\n category: category,\n index: categoryIx,\n series: series,\n dataItem: series.data[categoryIx]\n }, state);\n }\n\n return pointOptions;\n }\n\n updateRange(data, fields) {\n const axisName = fields.series.axis;\n const value = data.value;\n let axisRange = this.valueAxisRanges[axisName];\n\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\n }\n\n seriesValueAxis(series) {\n const plotArea = this.plotArea;\n const axisName = series.axis;\n const axis = axisName ? plotArea.namedValueAxes[axisName] : plotArea.valueAxis;\n\n if (!axis) {\n throw new Error(\"Unable to locate value axis with name \" + axisName);\n }\n\n return axis;\n }\n\n reflow(targetBox) {\n const categorySlots = this.categorySlots = [];\n const chartPoints = this.points;\n const categoryAxis = this.categoryAxis;\n let pointIx = 0;\n\n this.traverseDataPoints((data, fields) => {\n const { categoryIx, series: currentSeries } = fields;\n\n const valueAxis = this.seriesValueAxis(currentSeries);\n const point = chartPoints[pointIx++];\n\n let categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot =\n this.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n\n if (point) {\n const plotRange = this.plotRange(point, valueAxis.startValue());\n const valueSlot = this.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n const pointSlot = this.pointSlot(categorySlot, valueSlot);\n\n point.aboveAxis = this.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n\n if (this.options.isStacked100) {\n point.percentage = this.plotValue(point);\n }\n\n this.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n\n this.box = targetBox;\n }\n\n valueSlot(valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n }\n\n limitPoints() {\n const categoryPoints = this.categoryPoints;\n const points = categoryPoints[0].concat(last(categoryPoints));\n for (let idx = 0; idx < points.length; idx++) {\n if (points[idx]) {\n this.limitPoint(points[idx]);\n }\n }\n }\n\n limitPoint(point) {\n const limitedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limitedSlot.equals(point.box)) {\n point.reflow(limitedSlot);\n }\n }\n\n aboveAxis(point, valueAxis) {\n const axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n const value = point.value;\n\n return valueAxis.options.reverse ?\n value < axisCrossingValue : value >= axisCrossingValue;\n }\n\n categoryAxisCrossingValue(valueAxis) {\n const categoryAxis = this.categoryAxis;\n const options = valueAxis.options;\n const crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n }\n\n reflowPoint(point, pointSlot) {\n point.reflow(pointSlot);\n }\n\n reflowCategories() { }\n\n pointSlot(categorySlot, valueSlot) {\n const options = this.options;\n const invertAxes = options.invertAxes;\n const slotX = invertAxes ? valueSlot : categorySlot;\n const slotY = invertAxes ? categorySlot : valueSlot;\n\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n }\n\n categorySlot(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n }\n\n traverseDataPoints(callback) {\n const series = this.options.series;\n const count = categoriesCount(series);\n const seriesCount = series.length;\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this._outOfRangeCallback(series[seriesIx], \"_outOfRangeMinPoint\", seriesIx, callback);\n }\n\n for (let categoryIx = 0; categoryIx < count; categoryIx++) {\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n const currentSeries = series[seriesIx];\n const currentCategory = this.categoryAxis.categoryAt(categoryIx);\n const pointData = this.plotArea.bindPoint(currentSeries, categoryIx);\n\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n categoriesCount: count,\n series: currentSeries,\n seriesIx: seriesIx\n });\n }\n }\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this._outOfRangeCallback(series[seriesIx], \"_outOfRangeMaxPoint\", seriesIx, callback);\n }\n }\n\n _outOfRangeCallback(series, field, seriesIx, callback) {\n const outOfRangePoint = series[field];\n if (outOfRangePoint) {\n const categoryIx = outOfRangePoint.categoryIx;\n const pointData = this.plotArea.bindPoint(series, categoryIx, outOfRangePoint.item);\n\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n }\n\n formatPointValue(point, format) {\n if (point.value === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value);\n }\n\n pointValue(data) {\n return data.valueFields.value;\n }\n}\n\nsetDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n});\n\nexport default CategoricalChart;\n","import { SERIES_CLICK, SERIES_HOVER, SERIES_LEAVE, SERIES_OVER } from '../constants';\nimport { eventElement } from '../../common';\n\nconst PointEventsMixin = {\n click: function(chart, e) {\n return chart.trigger(\n SERIES_CLICK,\n this.eventArgs(e)\n );\n },\n\n hover: function(chart, e) {\n return chart.trigger(\n SERIES_HOVER,\n this.eventArgs(e)\n );\n },\n\n over: function(chart, e) {\n return chart.trigger(\n SERIES_OVER,\n this.eventArgs(e)\n );\n },\n\n out: function(chart, e) {\n return chart.trigger(\n SERIES_LEAVE,\n this.eventArgs(e)\n );\n },\n\n eventArgs: function(e) {\n return {\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n category: this.category,\n series: this.series,\n dataItem: this.dataItem,\n runningTotal: this.runningTotal,\n total: this.total,\n element: eventElement(e),\n originalEvent: e,\n point: this\n };\n }\n};\n\nexport default PointEventsMixin;","import { Note } from '../../core';\nimport { defined } from '../../common';\n\nconst NoteMixin = {\n createNote: function() {\n const options = this.options.notes;\n const text = this.noteText || options.label.text;\n\n if (options.visible !== false && defined(text) && text !== null) {\n this.note = new Note({\n value: this.value,\n text: text,\n dataItem: this.dataItem,\n category: this.category,\n series: this.series\n }, this.options.notes, this.owner.chartService);\n\n this.append(this.note);\n }\n }\n};\n\nexport default NoteMixin;","import { geometry as geom, Color } from '@progress/kendo-drawing';\n\nimport { ChartElement, TextBox, ShapeElement, Box, Point } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\nimport { LINE_MARKER_SIZE, FADEIN, INITIAL_ANIMATION_DURATION, BORDER_BRIGHTNESS, TOOLTIP_OFFSET, ABOVE, BELOW } from '../constants';\n\nimport { WHITE, CIRCLE, CENTER, TOP, BOTTOM, LEFT, HIGHLIGHT_ZINDEX } from '../../common/constants';\nimport { deepExtend, defined, getTemplate, valueOrDefault, getSpacing } from '../../common';\n\nclass LinePoint extends ChartElement {\n constructor(value, options) {\n super();\n\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n }\n\n render() {\n const { markers, labels } = this.options;\n\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n\n if (labels.visible) {\n const labelTemplate = getTemplate(labels);\n const pointData = this.pointData();\n let labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = this.formatValue(labels.format);\n }\n this.label = new TextBox(labelText,\n deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels),\n pointData\n );\n this.append(this.label);\n }\n\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n }\n\n markerBorder() {\n const options = this.options.markers;\n const background = options.background;\n const border = deepExtend({ color: this.color }, options.border);\n\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n\n return border;\n }\n\n createVisual() {}\n\n createMarker() {\n const options = this.options.markers;\n const marker = new ShapeElement({\n type: options.type,\n width: options.size,\n height: options.size,\n rotation: options.rotation,\n background: options.background,\n border: this.markerBorder(),\n opacity: options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n\n return marker;\n }\n\n markerBox() {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n\n return this.marker.box;\n }\n\n reflow(targetBox) {\n const { options, aboveAxis } = this;\n const vertical = options.vertical;\n\n this.render();\n\n this.box = targetBox;\n const childBox = targetBox.clone();\n\n if (vertical) {\n if (aboveAxis) {\n childBox.y1 -= childBox.height();\n } else {\n childBox.y2 += childBox.height();\n }\n } else {\n if (aboveAxis) {\n childBox.x1 += childBox.width();\n } else {\n childBox.x2 -= childBox.width();\n }\n }\n\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n\n this.reflowLabel(childBox);\n\n if (this.errorBars) {\n for (let i = 0; i < this.errorBars.length; i++) {\n this.errorBars[i].reflow(childBox);\n }\n }\n\n if (this.note) {\n let noteTargetBox = this.markerBox();\n\n if (!(options.markers.visible && options.markers.size)) {\n const center = noteTargetBox.center();\n noteTargetBox = new Box(center.x, center.y, center.x, center.y);\n }\n\n this.note.reflow(noteTargetBox);\n }\n }\n\n reflowLabel(box) {\n const { options, label } = this;\n let anchor = options.labels.position;\n\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\n }\n\n createHighlight() {\n const markers = this.options.highlight.markers;\n const defaultColor = this.markerBorder().color;\n const options = this.options.markers;\n const size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n\n const shadow = new ShapeElement({\n type: options.type,\n width: size,\n height: size,\n rotation: options.rotation,\n background: markers.color || defaultColor,\n border: {\n color: markers.border.color,\n width: markers.border.width,\n opacity: valueOrDefault(markers.border.opacity, 1)\n },\n opacity: valueOrDefault(markers.opacity, 1)\n });\n shadow.reflow(this._childBox);\n\n return shadow.getElement();\n }\n\n highlightVisual() {\n return (this.marker || {}).visual;\n }\n\n highlightVisualArgs() {\n const marker = this.marker;\n let visual, rect;\n\n if (marker) {\n rect = marker.paddingBox.toRect();\n visual = marker.visual;\n } else {\n const size = this.options.markers.size;\n const halfSize = size / 2;\n const center = this.box.center();\n rect = new geom.Rect([ center.x - halfSize, center.y - halfSize ], [ size, size ]);\n }\n\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\n }\n\n tooltipAnchor() {\n const markerBox = this.markerBox();\n const clipBox = this.owner.pane.clipBox();\n const showTooltip = !clipBox || clipBox.overlaps(markerBox);\n\n if (showTooltip) {\n const x = markerBox.x2 + TOOLTIP_OFFSET;\n const horizontalAlign = LEFT;\n let y, verticalAlign;\n\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n overlapsBox(box) {\n const markerBox = this.markerBox();\n return markerBox.overlaps(box);\n }\n\n unclipElements() {\n if (this.label) {\n this.label.options.noclip = true;\n }\n\n if (this.note) {\n this.note.options.noclip = true;\n }\n }\n\n pointData() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n series: this.series\n };\n }\n}\n\nLinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: {\n width: 2\n },\n opacity: 1\n },\n labels: {\n visible: false,\n position: ABOVE,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n },\n notes: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: \"#fff\",\n width: 2\n }\n },\n zIndex: HIGHLIGHT_ZINDEX\n },\n errorBars: {\n line: {\n width: 1\n }\n }\n};\n\ndeepExtend(LinePoint.prototype, PointEventsMixin);\ndeepExtend(LinePoint.prototype, NoteMixin);\n\nexport default LinePoint;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement } from '../../core';\n\nimport { defined, isFunction, setDefaultOptions } from '../../common';\n\nclass LineSegment extends ChartElement {\n constructor(linePoints, series, seriesIx) {\n super();\n\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n }\n\n points() {\n return this.toGeometryPoints(this.linePoints);\n }\n\n toGeometryPoints(points) {\n const result = [];\n for (let i = 0, length = points.length; i < length; i++) {\n if (points[i] && points[i].visible !== false) {\n result.push(points[i]._childBox.toRect().center());\n }\n }\n\n return result;\n }\n\n createVisual() {\n const customVisual = this.series.visual;\n if (customVisual) {\n this.visual = customVisual({\n points: this.toGeometryPoints(this.linePoints),\n series: this.series,\n sender: this.getSender(),\n createVisual: () => {\n this.segmentVisual();\n\n return this.visual;\n }\n });\n if (this.visual && !defined(this.visual.options.zIndex)) {\n this.visual.options.zIndex = this.series.zIndex;\n }\n } else {\n this.segmentVisual();\n }\n }\n\n segmentVisual() {\n const { options, series } = this;\n let { color, _defaults: defaults } = series;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n const line = draw.Path.fromPoints(this.points(), {\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n\n if (options.closed) {\n line.close();\n }\n\n this.visual = line;\n }\n\n aliasFor(e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n}\n\nsetDefaultOptions(LineSegment, {\n closed: false\n});\n\nexport default LineSegment;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport { last } from '../../common';\nimport { X, Y } from '../../common/constants';\n\nconst StepLineMixin = {\n calculateStepPoints: function(points) {\n const categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n const { justified, vertical, reverse } = categoryAxis.options;\n\n const stepAxis = vertical ? X : Y;\n const axis = vertical ? Y : X;\n const stepDir = reverse ? 2 : 1;\n const dir = stepDir;\n\n let previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n const result = [ previousPoint ];\n\n for (let idx = 1; idx < points.length; idx++) {\n const point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n const stepPoint = new geom.Point();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n\n result.push(stepPoint, point);\n }\n\n previousPoint = point;\n }\n\n if (!justified) {\n result.push(toGeometryPoint(last(points), stepAxis, stepDir, axis, reverse ? 1 : 2));\n } else if (previousPoint !== last(result)) {\n result.push(previousPoint);\n }\n\n return result;\n\n }\n};\n\nfunction toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n const box = lintPoint.box;\n const result = new geom.Point();\n\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n\n return result;\n}\n\nexport default StepLineMixin;","import LineSegment from './line-segment';\nimport StepLineMixin from './step-line-mixin';\nimport { deepExtend } from '../../common';\n\nclass StepLineSegment extends LineSegment {\n points() {\n return this.calculateStepPoints(this.linePoints);\n }\n}\n\ndeepExtend(StepLineSegment.prototype, StepLineMixin);\n\nexport default StepLineSegment;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport LineSegment from './line-segment';\n\nimport { CurveProcessor } from '../../core';\n\nimport { isFunction } from '../../common';\n\nclass SplineSegment extends LineSegment {\n segmentVisual() {\n const series = this.series;\n const defaults = series._defaults;\n let color = series.color;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n const curveProcessor = new CurveProcessor(this.options.closed);\n const segments = curveProcessor.process(this.points());\n const curve = new draw.Path({\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n\n curve.segments.push.apply(curve.segments, segments);\n\n this.visual = curve;\n }\n}\n\nexport default SplineSegment;","import { ZERO, INTERPOLATE } from '../constants';\n\nimport { Point } from '../../core';\nimport { MAX_VALUE } from '../../common/constants';\nimport { defined } from '../../common';\n\nconst LineChartMixin = {\n renderSegments: function() {\n const { options, seriesPoints } = this;\n const series = options.series;\n const seriesCount = seriesPoints.length;\n let lastSegment;\n\n this._segments = [];\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n const currentSeries = series[seriesIx];\n const sortedPoints = this.sortPoints(seriesPoints[seriesIx]);\n const pointCount = sortedPoints.length;\n let linePoints = [];\n\n for (let pointIx = 0; pointIx < pointCount; pointIx++) {\n const point = sortedPoints[pointIx];\n if (point) {\n linePoints.push(point);\n } else if (this.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n\n if (linePoints.length > 1) {\n lastSegment = this.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this._addSegment(lastSegment);\n }\n }\n\n this.children.unshift.apply(this.children, this._segments);\n },\n\n _addSegment: function(segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n\n sortPoints: function(points) {\n return points;\n },\n\n seriesMissingValues: function(series) {\n const missingValues = series.missingValues;\n const assumeZero = !missingValues && this.options.isStacked;\n\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\n\n getNearestPoint: function(x, y, seriesIx) {\n const target = new Point(x, y);\n const allPoints = this.seriesPoints[seriesIx];\n let nearestPointDistance = MAX_VALUE;\n let nearestPoint;\n\n for (let i = 0; i < allPoints.length; i++) {\n const point = allPoints[i];\n\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n const pointBox = point.box;\n const pointDistance = pointBox.center().distanceTo(target);\n\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n\n return nearestPoint;\n }\n};\n\nexport default LineChartMixin;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { interpolateValue, setDefaultOptions } from '../../common';\n\nclass ClipAnimation extends draw.Animation {\n setup() {\n this._setEnd(this.options.box.x1);\n }\n\n step(pos) {\n const box = this.options.box;\n this._setEnd(interpolateValue(box.x1, box.x2, pos));\n }\n\n _setEnd(x) {\n const element = this.element;\n const segments = element.segments;\n const topRight = segments[1].anchor();\n const bottomRight = segments[2].anchor();\n\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n}\n\nsetDefaultOptions(ClipAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n});\n\ndraw.AnimationFactory.current.register(\"clip\", ClipAnimation);\n\nexport default ClipAnimation;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport ClipAnimation from '../animations/clip-animation';\nimport anyHasZIndex from '../utils/any-has-z-index';\nimport { defined } from '../../common';\n\nconst ClipAnimationMixin = {\n createAnimation: function() {\n const root = this.getRoot();\n if (root && (root.options || {}).transitions !== false) {\n const box = root.size();\n const clipPath = draw.Path.fromRect(box.toRect());\n this.visual.clip(clipPath);\n this.animation = new ClipAnimation(clipPath, {\n box: box\n });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n\n _setChildrenAnimation: function(clipPath) {\n const points = this.animationPoints();\n\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n if (point && point.visual && defined(point.visual.options.zIndex)) {\n point.visual.clip(clipPath);\n }\n }\n }\n};\n\nexport default ClipAnimationMixin;","import CategoricalChart from '../categorical-chart';\nimport LinePoint from './line-point';\nimport LineSegment from './line-segment';\nimport StepLineSegment from './step-line-segment';\nimport SplineSegment from './spline-segment';\nimport LineChartMixin from '../mixins/line-chart-mixin';\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\n\nimport { ZERO, SMOOTH, STEP } from '../constants';\n\nimport { deepExtend, defined, isFunction } from '../../common';\n\nclass LineChart extends CategoricalChart {\n render() {\n\n super.render();\n\n this.updateStackRange();\n this.renderSegments();\n }\n\n pointType() {\n return LinePoint;\n }\n\n createPoint(data, fields) {\n const { series, seriesIx } = fields;\n const missingValues = this.seriesMissingValues(series);\n let value = data.valueFields.value;\n\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n\n let pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n let color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n plotRange(point) {\n let plotValue = this.plotValue(point);\n\n if (this.options.isStacked) {\n const categoryIx = point.categoryIx;\n const categoryPoints = this.categoryPoints[categoryIx];\n\n for (let i = 0; i < categoryPoints.length; i++) {\n const other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\n\n plotValue += this.plotValue(other);\n\n if (this.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n\n }\n\n return [ plotValue, plotValue ];\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = currentSeries.style;\n let pointType;\n\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result.concat(this._segments);\n }\n\n supportsPointInactiveOpacity() {\n return false;\n }\n}\n\ndeepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n\nexport default LineChart;\n","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\nimport LineSegment from '../line-chart/line-segment';\n\nimport { append, deepExtend, isFunction, last } from '../../common';\n\nclass AreaSegment extends LineSegment {\n constructor(linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n super(linePoints, currentSeries, seriesIx);\n\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n }\n\n createVisual() {\n const series = this.series;\n const defaults = series._defaults;\n const lineOptions = series.line || {};\n let color = series.color;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n this.visual = new draw.Group({\n zIndex: series.zIndex\n });\n\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n\n if (lineOptions.width > 0 && lineOptions.visible !== false) {\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: \"butt\"\n }, lineOptions)\n });\n }\n }\n\n strokeSegments() {\n let segments = this._strokeSegments;\n\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n\n return segments;\n }\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.points());\n }\n\n stackSegments() {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n\n return this.createStackSegments(this.stackPoints);\n }\n\n createStackSegments(stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n }\n\n segmentsFromPoints(points) {\n return points.map((point) => new geom.Segment(point));\n }\n\n createStroke(style) {\n const stroke = new draw.Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n\n this.visual.append(stroke);\n }\n\n hasStackSegment() {\n return this.prevSegment || (this.stackPoints && this.stackPoints.length);\n }\n\n createFill(style) {\n const strokeSegments = this.strokeSegments();\n const fillSegments = strokeSegments.slice(0);\n const hasStackSegments = this.hasStackSegment();\n\n if (hasStackSegments) {\n const stackSegments = this.stackSegments();\n\n append(fillSegments, stackSegments);\n }\n\n const fill = new draw.Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n\n this.visual.append(fill);\n }\n\n fillToAxes(fillPath) {\n const chart = this.parent;\n const invertAxes = chart.options.invertAxes;\n const valueAxis = chart.seriesValueAxis(this.series);\n const crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n const endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n const segments = this.strokeSegments();\n const firstPoint = segments[0].anchor();\n const lastPoint = last(segments).anchor();\n let end = invertAxes ? endSlot.x1 : endSlot.y1;\n\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y)\n .lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end)\n .lineTo(firstPoint.x, end);\n }\n }\n}\n\nexport default AreaSegment;","import StepLineMixin from '../line-chart/step-line-mixin';\nimport AreaSegment from './area-segment';\n\nimport { deepExtend } from '../../common';\n\nclass StepAreaSegment extends AreaSegment {\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n }\n\n createStackSegments(stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n}\n\ndeepExtend(StepAreaSegment.prototype, StepLineMixin);\n\nexport default StepAreaSegment;","import { geometry as geom } from '@progress/kendo-drawing';\nimport { CurveProcessor } from '../../core';\n\nimport AreaSegment from './area-segment';\n\nclass SplineAreaSegment extends AreaSegment {\n\n createStrokeSegments() {\n const curveProcessor = new CurveProcessor(this.options.closed);\n const linePoints = this.points();\n\n return curveProcessor.process(linePoints);\n }\n\n createStackSegments() {\n const strokeSegments = this.strokeSegments();\n const stackSegments = [];\n for (let idx = strokeSegments.length - 1; idx >= 0; idx--) {\n const segment = strokeSegments[idx];\n stackSegments.push(new geom.Segment(\n segment.anchor(),\n segment.controlOut(),\n segment.controlIn()\n ));\n }\n\n return stackSegments;\n }\n}\n\nexport default SplineAreaSegment;","import LineChart from '../line-chart/line-chart';\nimport LinePoint from '../line-chart/line-point';\n\nimport AreaSegment from './area-segment';\nimport StepAreaSegment from './step-area-segment';\nimport SplineAreaSegment from './spline-area-segment';\n\nimport { STEP, SMOOTH, ZERO } from '../constants';\n\nclass AreaChart extends LineChart {\n createSegment(linePoints, currentSeries, seriesIx, prevSegment) {\n const isStacked = this.options.isStacked;\n const style = (currentSeries.line || {}).style;\n let previousSegment;\n\n let stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n const missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== \"gap\") {\n stackPoints = prevSegment.linePoints;\n previousSegment = prevSegment;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n }\n\n let pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n\n reflow(targetBox) {\n super.reflow(targetBox);\n\n const stackPoints = this._stackPoints;\n if (stackPoints) {\n for (let idx = 0; idx < stackPoints.length; idx++) {\n const stackPoint = stackPoints[idx];\n const pointSlot = this.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n }\n\n _gapStackPoints(linePoints, seriesIx, style) {\n const seriesPoints = this.seriesPoints;\n let startIdx = linePoints[0].categoryIx;\n let length = linePoints.length;\n if (startIdx < 0) {\n startIdx = 0;\n length--;\n }\n\n const endIdx = startIdx + length;\n const pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n const stackPoints = [];\n\n this._stackPoints = this._stackPoints || [];\n for (let categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n const pointIx = categoryIx + pointOffset;\n let currentSeriesIx = seriesIx;\n let point;\n\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n\n stackPoints.push(point);\n\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n const gapStackPoint = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n\n return stackPoints;\n }\n\n _previousSegmentPoint(categoryIx, pointIx, segmentIx, seriesIdx) {\n const seriesPoints = this.seriesPoints;\n let index = seriesIdx;\n let point;\n\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n\n return point;\n }\n\n _createGapStackPoint(categoryIx) {\n const options = this.pointOptions({}, 0);\n const point = new LinePoint(0, options);\n point.categoryIx = categoryIx;\n point.series = {};\n\n return point;\n }\n\n seriesMissingValues(series) {\n return series.missingValues || ZERO;\n }\n\n supportsPointInactiveOpacity() {\n return false;\n }\n}\n\nexport default AreaChart;\n","import { MIN_VALUE, MAX_VALUE } from '../common/constants';\nimport { Class } from '../common';\n\nclass AxisGroupRangeTracker extends Class {\n constructor() {\n super();\n\n this.axisRanges = {};\n }\n\n update(chartAxisRanges) {\n const axisRanges = this.axisRanges;\n\n for (let axisName in chartAxisRanges) {\n const chartRange = chartAxisRanges[axisName];\n let range = axisRanges[axisName];\n axisRanges[axisName] = range = range || { min: MAX_VALUE, max: MIN_VALUE };\n\n range.min = Math.min(range.min, chartRange.min);\n range.max = Math.max(range.max, chartRange.max);\n }\n }\n\n reset(axisName) {\n this.axisRanges[axisName] = undefined;\n }\n\n query(axisName) {\n return this.axisRanges[axisName];\n }\n}\n\nexport default AxisGroupRangeTracker;","import { ChartElement, TextBox, Box } from '../../core';\nimport { FADEIN, INITIAL_ANIMATION_DURATION, INSIDE_END, INSIDE_BASE, OUTSIDE_END } from '../constants';\n\nimport { CENTER, TOP, BOTTOM, LEFT, RIGHT, X, Y, BLACK } from '../../common/constants';\nimport { getSpacing, setDefaultOptions } from '../../common';\n\nclass BarLabel extends ChartElement {\n constructor(content, options, pointData) {\n super(options);\n\n this.textBox = new TextBox(content, this.options, pointData);\n this.append(this.textBox);\n }\n\n createVisual() {\n this.textBox.options.noclip = this.options.noclip;\n }\n\n reflow(targetBox) {\n const options = this.options;\n const { vertical, aboveAxis } = options;\n const text = this.children[0];\n const textOptions = text.options;\n const box = text.box;\n const padding = text.options.padding;\n let labelBox = targetBox;\n\n textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\n\n if (!aboveAxis && box.height() < targetBox.height()) {\n textOptions.vAlign = BOTTOM;\n }\n } else {\n textOptions.align = aboveAxis ? RIGHT : LEFT;\n }\n } else if (options.position === CENTER) {\n textOptions.vAlign = CENTER;\n textOptions.align = CENTER;\n } else if (options.position === INSIDE_BASE) {\n if (vertical) {\n textOptions.vAlign = aboveAxis ? BOTTOM : TOP;\n } else {\n textOptions.align = aboveAxis ? LEFT : RIGHT;\n }\n } else if (options.position === OUTSIDE_END) {\n if (vertical) {\n if (aboveAxis) {\n labelBox = new Box(\n targetBox.x1, targetBox.y1 - box.height(),\n targetBox.x2, targetBox.y1\n );\n } else {\n labelBox = new Box(\n targetBox.x1, targetBox.y2,\n targetBox.x2, targetBox.y2 + box.height()\n );\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(\n targetBox.x2, targetBox.y1,\n targetBox.x2 + box.width(), targetBox.y2\n );\n } else {\n labelBox = new Box(\n targetBox.x1 - box.width(), targetBox.y1,\n targetBox.x1, targetBox.y2\n );\n }\n }\n }\n\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right =\n (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom =\n (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n\n text.reflow(labelBox);\n }\n\n alignToClipBox(clipBox) {\n const vertical = this.options.vertical;\n const field = vertical ? Y : X;\n const start = field + \"1\";\n const end = field + \"2\";\n const text = this.children[0];\n const parentBox = this.parent.box;\n\n if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n const targetBox = text.paddingBox.clone();\n targetBox[start] = Math.max(parentBox[start], clipBox[start]);\n targetBox[end] = Math.min(parentBox[end], clipBox[end]);\n\n this.reflow(targetBox);\n }\n }\n}\n\nsetDefaultOptions(BarLabel, {\n position: OUTSIDE_END,\n margin: getSpacing(3),\n padding: getSpacing(4),\n color: BLACK,\n background: \"\",\n border: {\n width: 1,\n color: \"\"\n },\n aboveAxis: true,\n vertical: false,\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n zIndex: 2\n});\n\nexport default BarLabel;","import { drawing as draw, Color } from '@progress/kendo-drawing';\n\nimport BarLabel from './bar-label';\n\nimport { BORDER_BRIGHTNESS, TOOLTIP_OFFSET } from '../constants';\n\nimport hasGradientOverlay from '../utils/has-gradient-overlay';\n\nimport { ChartElement, Point } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\n\nimport { WHITE, LEFT, RIGHT, BOTTOM, TOP } from '../../common/constants';\nimport { alignPathToPixel, deepExtend, defined, getTemplate, valueOrDefault } from '../../common';\n\nconst BAR_ALIGN_MIN_WIDTH = 6;\n\nclass Bar extends ChartElement {\n constructor(value, options) {\n super();\n\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n }\n\n render() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createLabel();\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n }\n\n createLabel() {\n const options = this.options;\n const labels = options.labels;\n\n if (labels.visible) {\n const pointData = this.pointData();\n let labelTemplate = getTemplate(labels);\n let labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n this.label = new BarLabel(labelText,\n deepExtend({\n vertical: options.vertical\n },\n labels\n ), pointData);\n this.append(this.label);\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n reflow(targetBox) {\n this.render();\n\n const label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n if (this.errorBars) {\n for (let i = 0; i < this.errorBars.length; i++) {\n this.errorBars[i].reflow(targetBox);\n }\n }\n }\n\n createVisual() {\n const { box, options } = this;\n const customVisual = options.visual;\n\n if (this.visible !== false) {\n super.createVisual();\n\n if (customVisual) {\n const visual = this.rectVisual = customVisual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n sender: this.getSender(),\n series: this.series,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n rect: box.toRect(),\n createVisual: () => {\n const group = new draw.Group();\n this.createRect(group);\n return group;\n },\n options: options\n });\n\n if (visual) {\n this.visual.append(visual);\n }\n } else if (box.width() > 0 && box.height() > 0) {\n this.createRect(this.visual);\n }\n }\n }\n\n createRect(visual) {\n const options = this.options;\n const border = options.border;\n const strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n const rect = this.box.toRect();\n\n rect.size.width = Math.round(rect.size.width);\n\n const path = this.rectVisual = draw.Path.fromRect(rect, {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: {\n color: this.getBorderColor(),\n width: border.width,\n opacity: strokeOpacity,\n dashType: border.dashType\n }\n });\n\n const width = this.box.width();\n const height = this.box.height();\n\n const size = options.vertical ? width : height;\n\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n\n // Fixes lineJoin issue in firefox when the joined lines are parallel\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = \"round\";\n }\n }\n\n visual.append(path);\n\n if (hasGradientOverlay(options)) {\n const overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay));\n\n visual.append(overlay);\n }\n }\n\n createHighlight(style) {\n const highlight = draw.Path.fromRect(this.box.toRect(), style);\n\n return alignPathToPixel(highlight);\n }\n\n highlightVisual() {\n return this.rectVisual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n }\n\n getBorderColor() {\n const color = this.color;\n const border = this.options.border;\n const brightness = border._brightness || BORDER_BRIGHTNESS;\n let borderColor = border.color;\n\n if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n\n return borderColor;\n }\n\n tooltipAnchor() {\n const { options, box, aboveAxis } = this;\n const clipBox = this.owner.pane.clipBox() || box;\n let horizontalAlign = LEFT;\n let verticalAlign = TOP;\n let x, y;\n\n if (options.vertical) {\n x = Math.min(box.x2, clipBox.x2) + TOOLTIP_OFFSET;\n if (aboveAxis) {\n y = Math.max(box.y1, clipBox.y1);\n } else {\n y = Math.min(box.y2, clipBox.y2);\n verticalAlign = BOTTOM;\n }\n } else {\n const x1 = Math.max(box.x1, clipBox.x1);\n const x2 = Math.min(box.x2, clipBox.x2);\n\n if (options.isStacked) {\n verticalAlign = BOTTOM;\n if (aboveAxis) {\n horizontalAlign = RIGHT;\n x = x2;\n } else {\n x = x1;\n }\n y = Math.max(box.y1, clipBox.y1) - TOOLTIP_OFFSET;\n } else {\n if (aboveAxis) {\n x = x2 + TOOLTIP_OFFSET;\n } else {\n x = x1 - TOOLTIP_OFFSET;\n horizontalAlign = RIGHT;\n }\n y = Math.max(box.y1, clipBox.y1);\n }\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n\n pointData() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n };\n }\n}\n\ndeepExtend(Bar.prototype, PointEventsMixin);\ndeepExtend(Bar.prototype, NoteMixin);\n\nBar.prototype.defaults = {\n border: {\n width: 1\n },\n vertical: true,\n overlay: {\n gradient: \"glass\"\n },\n labels: {\n visible: false,\n format: \"{0}\"\n },\n opacity: 1,\n notes: {\n label: {}\n }\n};\n\nexport default Bar;","export function forEach(elements, callback) {\n elements.forEach(callback);\n}\n\nexport function forEachReverse(elements, callback) {\n const length = elements.length;\n\n for (let idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n}","import { ChartElement } from '../../core';\n\nimport { X, Y } from '../../common/constants';\nimport { setDefaultOptions } from '../../common';\nimport { forEach, forEachReverse } from './utils';\n\nclass ClusterLayout extends ChartElement {\n constructor(options) {\n super(options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n }\n\n reflow(box) {\n const { vertical, gap, spacing } = this.options;\n const children = this.children;\n const count = children.length;\n const axis = vertical ? Y : X;\n const slots = count + gap + (spacing * (count - 1));\n const slotSize = (vertical ? box.height() : box.width()) / slots;\n let position = box[axis + 1] + slotSize * (gap / 2);\n\n this.forEach(children, (child, idx) => {\n const childBox = (child.box || box).clone();\n\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n\n child.reflow(childBox);\n if (idx < count - 1) {\n position += (slotSize * spacing);\n }\n\n position += slotSize;\n });\n }\n}\n\nsetDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n});\n\nexport default ClusterLayout;","import { ChartElement, Box } from '../../core';\n\nimport { X, Y } from '../../common/constants';\nimport { setDefaultOptions } from '../../common';\n\nclass StackWrap extends ChartElement {\n reflow(targetBox) {\n const positionAxis = this.options.vertical ? X : Y;\n const children = this.children;\n const childrenCount = children.length;\n let box = this.box = new Box();\n\n for (let i = 0; i < childrenCount; i++) {\n const currentChild = children[i];\n\n if (currentChild.visible !== false) {\n const childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n\n if (i === 0) {\n box = this.box = childBox.clone();\n }\n\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n}\n\nsetDefaultOptions(StackWrap, {\n vertical: true\n});\n\nexport default StackWrap;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport Bar from './bar';\n\nimport CategoricalChart from '../categorical-chart';\nimport ClusterLayout from '../layout/cluster-layout';\nimport StackWrap from '../layout/stack-wrap';\nimport { BAR, OUTSIDE_END, INSIDE_END } from '../constants';\n\nimport anyHasZIndex from '../utils/any-has-z-index';\n\nimport { STRING, X, Y } from '../../common/constants';\nimport { defined, isFunction, setDefaultOptions } from '../../common';\n\nclass BarChart extends CategoricalChart {\n\n render() {\n super.render();\n this.updateStackRange();\n }\n\n pointType() {\n return Bar;\n }\n\n clusterType() {\n return ClusterLayout;\n }\n\n stackType() {\n return StackWrap;\n }\n\n stackLimits(axisName, stackName) {\n const limits = super.stackLimits(axisName, stackName);\n\n return limits;\n }\n\n createPoint(data, fields) {\n const { categoryIx, series, seriesIx } = fields;\n const { options, children } = this;\n const isStacked = options.isStacked;\n const value = this.pointValue(data);\n let pointOptions = this.pointOptions(series, seriesIx);\n\n const labelOptions = pointOptions.labels;\n if (isStacked) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n\n pointOptions.isStacked = isStacked;\n\n let color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const pointType = this.pointType();\n const point = new pointType(value, pointOptions);\n point.color = color;\n\n let cluster = children[categoryIx];\n if (!cluster) {\n const clusterType = this.clusterType();\n cluster = new clusterType({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (isStacked) {\n const stackWrap = this.getStackWrap(series, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n\n return point;\n }\n\n getStackWrap(series, cluster) {\n const stack = series.stack;\n const stackGroup = stack ? stack.group || stack : stack;\n const wraps = cluster.children;\n let stackWrap;\n\n if (typeof stackGroup === STRING) {\n for (let i = 0; i < wraps.length; i++) {\n if (wraps[i]._stackGroup === stackGroup) {\n stackWrap = wraps[i];\n break;\n }\n }\n } else {\n stackWrap = wraps[0];\n }\n\n if (!stackWrap) {\n const stackType = this.stackType();\n stackWrap = new stackType({\n vertical: !this.options.invertAxes\n });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n\n return stackWrap;\n }\n\n categorySlot(categoryAxis, categoryIx, valueAxis) {\n const options = this.options;\n const categorySlot = categoryAxis.getSlot(categoryIx);\n const startValue = valueAxis.startValue();\n\n if (options.isStacked) {\n const zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n const stackAxis = options.invertAxes ? X : Y;\n categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n }\n\n return categorySlot;\n }\n\n reflowCategories(categorySlots) {\n const children = this.children;\n const childrenLength = children.length;\n\n for (let i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n }\n\n createAnimation() {\n this._setAnimationOptions();\n super.createAnimation();\n\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n }\n\n _setChildrenAnimation() {\n const points = this.points;\n\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n const pointVisual = point.visual;\n if (pointVisual && defined(pointVisual.options.zIndex)) {\n point.options.animation = this.options.animation;\n point.createAnimation();\n }\n }\n }\n\n _setAnimationOptions() {\n const options = this.options;\n const animation = options.animation || {};\n let origin;\n\n if (options.isStacked) {\n const valueAxis = this.seriesValueAxis(options.series[0]);\n origin = valueAxis.getSlot(valueAxis.startValue());\n } else {\n origin = this.categoryAxis.getSlot(0);\n }\n\n animation.origin = new geom.Point(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n}\n\nsetDefaultOptions(BarChart, {\n animation: {\n type: BAR\n }\n});\n\nexport default BarChart;\n","import { drawing as draw, Color } from '@progress/kendo-drawing';\n\nimport { ChartElement, Point } from '../../core';\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\n\nimport { TOOLTIP_OFFSET } from '../constants';\nimport hasGradientOverlay from '../utils/has-gradient-overlay';\n\nimport { WHITE, LEFT, TOP } from '../../common/constants';\nimport { alignPathToPixel, deepExtend, defined, setDefaultOptions, valueOrDefault } from '../../common';\n\nclass Candlestick extends ChartElement {\n constructor(value, options) {\n super(options);\n this.value = value;\n }\n\n reflow(box) {\n const { options, value, owner: chart } = this;\n const valueAxis = chart.seriesValueAxis(options);\n const ocSlot = valueAxis.getSlot(value.open, value.close);\n const lhSlot = valueAxis.getSlot(value.low, value.high);\n\n ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n\n this.realBody = ocSlot;\n\n const mid = lhSlot.center().x;\n const points = [];\n\n points.push([ [ mid, lhSlot.y1 ], [ mid, ocSlot.y1 ] ]);\n points.push([ [ mid, ocSlot.y2 ], [ mid, lhSlot.y2 ] ]);\n\n this.lines = points;\n\n this.box = lhSlot.clone().wrap(ocSlot);\n\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n\n this.reflowNote();\n }\n\n reflowNote() {\n if (this.note) {\n this.note.reflow(this.box);\n }\n }\n\n createVisual() {\n super.createVisual();\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(\n this._mainVisual\n );\n\n this.createOverlay();\n }\n\n mainVisual(options) {\n const group = new draw.Group();\n\n this.createBody(group, options);\n this.createLines(group, options);\n\n return group;\n }\n\n createBody(container, options) {\n const body = draw.Path.fromRect(this.realBody.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n\n if (options.border.width > 0) {\n body.options.set(\"stroke\", {\n color: this.getBorderColor(),\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n\n alignPathToPixel(body);\n container.append(body);\n\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay)));\n }\n }\n\n createLines(container, options) {\n this.drawLines(container, options, this.lines, options.line);\n }\n\n drawLines(container, options, lines, lineOptions) {\n if (!lines) {\n return;\n }\n\n const lineStyle = {\n stroke: {\n color: lineOptions.color || this.color,\n opacity: valueOrDefault(lineOptions.opacity, options.opacity),\n width: lineOptions.width,\n dashType: lineOptions.dashType,\n lineCap: \"butt\"\n }\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = draw.Path.fromPoints(lines[i], lineStyle);\n alignPathToPixel(line);\n container.append(line);\n }\n }\n\n getBorderColor() {\n const border = this.options.border;\n let borderColor = border.color;\n\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n\n return borderColor;\n }\n\n createOverlay() {\n const overlay = draw.Path.fromRect(this.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null\n });\n\n this.visual.append(overlay);\n }\n\n createHighlight() {\n const highlight = this.options.highlight;\n const normalColor = this.color;\n\n this.color = highlight.color || this.color;\n const overlay = this.mainVisual(\n deepExtend({}, this.options, {\n line: {\n color: this.getBorderColor()\n }\n }, highlight)\n );\n this.color = normalColor;\n\n return overlay;\n }\n\n highlightVisual() {\n return this._mainVisual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n }\n\n tooltipAnchor() {\n const box = this.box;\n const clipBox = this.owner.pane.clipBox() || box;\n\n return {\n point: new Point(box.x2 + TOOLTIP_OFFSET, Math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET),\n align: {\n horizontal: LEFT,\n vertical: TOP\n }\n };\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n}\n\nsetDefaultOptions(Candlestick, {\n vertical: true,\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
    {4:d}
    Open:{0:C}
    High:{1:C}
    Low:{2:C}
    Close:{3:C}
    \"\n },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n }\n});\n\ndeepExtend(Candlestick.prototype, PointEventsMixin);\ndeepExtend(Candlestick.prototype, NoteMixin);\n\nexport default Candlestick;","import CategoricalChart from '../categorical-chart';\nimport ClusterLayout from '../layout/cluster-layout';\nimport Candlestick from './candlestick';\n\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\nimport { CANDLESTICK } from '../constants';\nimport areNumbers from '../utils/are-numbers';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { deepExtend, isFunction } from '../../common';\n\nclass CandlestickChart extends CategoricalChart {\n\n reflowCategories(categorySlots) {\n const children = this.children;\n const childrenLength = children.length;\n\n for (let i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n }\n\n addValue(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const { children, options } = this;\n const value = data.valueFields;\n const valueParts = this.splitValue(value);\n const hasValue = areNumbers(valueParts);\n const dataItem = series.data[categoryIx];\n let categoryPoints = this.categoryPoints[categoryIx];\n let point;\n\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n\n let cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n point.noteText = data.fields.noteText;\n }\n\n this.points.push(point);\n categoryPoints.push(point);\n }\n\n pointType() {\n return Candlestick;\n }\n\n createPoint(data, fields) {\n const { series } = fields;\n const pointType = this.pointType();\n const value = data.valueFields;\n let pointOptions = deepExtend({}, series);\n let color = data.fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (series.type === CANDLESTICK) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.vertical = !this.options.invertAxes;\n\n const point = new pointType(value, pointOptions);\n point.color = color;\n\n return point;\n }\n\n splitValue(value) {\n return [ value.low, value.open, value.close, value.high ];\n }\n\n updateRange(value, fields) {\n const axisName = fields.series.axis;\n const parts = this.splitValue(value);\n let axisRange = this.valueAxisRanges[axisName];\n\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([ axisRange.min ])),\n max: Math.max.apply(Math, parts.concat([ axisRange.max ]))\n };\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n\n return this.chartService.format.auto(format,\n value.open, value.high,\n value.low, value.close, point.category\n );\n }\n\n animationPoints() {\n return this.points;\n }\n}\n\ndeepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n\nexport default CandlestickChart;\n","import { Color } from '@progress/kendo-drawing';\n\nimport Candlestick from '../candlestick-chart/candlestick';\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport { ShapeElement } from '../../core';\n\nimport { LINE_MARKER_SIZE, BORDER_BRIGHTNESS } from '../constants';\n\nimport { CROSS, CIRCLE, WHITE } from '../../common/constants';\nimport { deepExtend, defined, setDefaultOptions } from '../../common';\n\nclass BoxPlot extends Candlestick {\n constructor(value, options) {\n super(value, options);\n\n this.createNote();\n }\n\n reflow(box) {\n const { options, value, owner: chart } = this;\n const valueAxis = chart.seriesValueAxis(options);\n let whiskerSlot, boxSlot;\n\n this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n\n const medianSlot = valueAxis.getSlot(value.median);\n\n if (value.mean) {\n const meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n }\n\n reflowBoxSlot(box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n }\n\n reflowWhiskerSlot(box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n }\n\n calcMeanPoints(box, meanSlot) {\n return [\n [ [ box.x1, meanSlot.y1 ], [ box.x2, meanSlot.y1 ] ]\n ];\n }\n\n calcWhiskerPoints(boxSlot, whiskerSlot) {\n const mid = whiskerSlot.center().x;\n return [ [\n [ mid - 5, whiskerSlot.y1 ], [ mid + 5, whiskerSlot.y1 ],\n [ mid, whiskerSlot.y1 ], [ mid, boxSlot.y1 ]\n ], [\n [ mid - 5, whiskerSlot.y2 ], [ mid + 5, whiskerSlot.y2 ],\n [ mid, whiskerSlot.y2 ], [ mid, boxSlot.y2 ]\n ] ];\n }\n\n calcMedianPoints(box, medianSlot) {\n return [\n [ [ box.x1, medianSlot.y1 ], [ box.x2, medianSlot.y1 ] ]\n ];\n }\n\n renderOutliers(options) {\n const value = this.value;\n const outliers = value.outliers || [];\n const outerFence = Math.abs(value.q3 - value.q1) * 3;\n const elements = [];\n let markers = options.markers || {};\n\n for (let i = 0; i < outliers.length; i++) {\n const outlierValue = outliers[i];\n if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\n markers = options.outliers;\n } else {\n markers = options.extremes;\n }\n let markersBorder = deepExtend({}, markers.border);\n\n if (!defined(markersBorder.color)) {\n if (defined(this.color)) {\n markersBorder.color = this.color;\n } else {\n markersBorder.color =\n new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n }\n\n const shape = new ShapeElement({\n type: markers.type,\n width: markers.size,\n height: markers.size,\n rotation: markers.rotation,\n background: markers.background,\n border: markersBorder,\n opacity: markers.opacity\n });\n\n shape.value = outlierValue;\n\n elements.push(shape);\n }\n\n this.reflowOutliers(elements);\n return elements;\n }\n\n reflowOutliers(outliers) {\n const valueAxis = this.owner.seriesValueAxis(this.options);\n const center = this.box.center();\n\n for (let i = 0; i < outliers.length; i++) {\n const outlierValue = outliers[i].value;\n const markerBox = valueAxis.getSlot(outlierValue);\n\n if (this.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n\n this.box = this.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n }\n\n mainVisual(options) {\n const group = super.mainVisual(options);\n const outliers = this.renderOutliers(options);\n\n for (let i = 0; i < outliers.length; i++) {\n const element = outliers[i].getElement();\n if (element) {\n group.append(element);\n }\n }\n\n return group;\n }\n\n createLines(container, options) {\n this.drawLines(container, options, this.whiskerPoints, options.whiskers);\n this.drawLines(container, options, this.medianPoints, options.median);\n this.drawLines(container, options, this.meanPoints, options.mean);\n }\n\n getBorderColor() {\n if ((this.options.border || {}).color) {\n return this.options.border.color;\n }\n\n if (this.color) {\n return this.color;\n }\n\n return super.getBorderColor();\n }\n}\n\nsetDefaultOptions(BoxPlot, {\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n median: {\n color: \"#f6f6f6\"\n },\n mean: {\n width: 2,\n dashType: \"dash\",\n color: \"#f6f6f6\"\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
    {6:d}
    Lower:{0:C}
    Q1:{1:C}
    Median:{2:C}
    Mean:{5:C}
    Q3:{3:C}
    Upper:{4:C}
    \"\n },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n },\n outliers: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CROSS,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n },\n extremes: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n }\n});\n\ndeepExtend(BoxPlot.prototype, PointEventsMixin);\n\nexport default BoxPlot;","import BoxPlot from './box-plot';\n\nclass VerticalBoxPlot extends BoxPlot {\n reflowBoxSlot(box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n }\n\n reflowWhiskerSlot(box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n }\n\n calcMeanPoints(box, meanSlot) {\n return [\n [ [ meanSlot.x1, box.y1 ], [ meanSlot.x1, box.y2 ] ]\n ];\n }\n\n calcWhiskerPoints(boxSlot, whiskerSlot) {\n const mid = whiskerSlot.center().y;\n return [ [\n [ whiskerSlot.x1, mid - 5 ], [ whiskerSlot.x1, mid + 5 ],\n [ whiskerSlot.x1, mid ], [ boxSlot.x1, mid ]\n ], [\n [ whiskerSlot.x2, mid - 5 ], [ whiskerSlot.x2, mid + 5 ],\n [ whiskerSlot.x2, mid ], [ boxSlot.x2, mid ]\n ] ];\n }\n\n calcMedianPoints(box, medianSlot) {\n return [\n [ [ medianSlot.x1, box.y1 ], [ medianSlot.x1, box.y2 ] ]\n ];\n }\n}\n\nexport default VerticalBoxPlot;","import CandlestickChart from '../candlestick-chart/candlestick-chart';\nimport VerticalBoxPlot from './vertical-box-plot';\nimport BoxPlot from './box-plot';\nimport ClusterLayout from '../layout/cluster-layout';\n\nimport areNumbers from '../utils/are-numbers';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { defined } from '../../common';\n\nclass BoxPlotChart extends CandlestickChart {\n addValue(data, fields) {\n const { categoryIx, category, series, seriesIx } = fields;\n const { children, options } = this;\n const value = data.valueFields;\n const valueParts = this.splitValue(value);\n const hasValue = areNumbers(valueParts);\n const dataItem = series.data[categoryIx];\n let categoryPoints = this.categoryPoints[categoryIx];\n let point;\n\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n\n let cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n }\n\n this.points.push(point);\n categoryPoints.push(point);\n }\n\n pointType() {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n\n return BoxPlot;\n }\n\n splitValue(value) {\n return [\n value.lower, value.q1, value.median,\n value.q3, value.upper\n ];\n }\n\n updateRange(value, fields) {\n const axisName = fields.series.axis;\n let axisRange = this.valueAxisRanges[axisName];\n let parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([ axisRange.min ])),\n max: Math.max.apply(Math, parts.concat([ axisRange.max ]))\n };\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n\n return this.chartService.format.auto(format,\n value.lower, value.q1, value.median,\n value.q3, value.upper, value.mean, point.category\n );\n }\n\n filterOutliers(items) {\n const length = (items || []).length;\n const result = [];\n\n for (let i = 0; i < length; i++) {\n const item = items[i];\n if (defined(item) && item !== null) {\n result.push(item);\n }\n }\n\n return result;\n }\n\n supportsPointInactiveOpacity() {\n return false;\n }\n}\n\nexport default BoxPlotChart;\n","import ErrorBarBase from './error-bar-base';\n\nclass ScatterErrorBar extends ErrorBarBase {\n getAxis() {\n const axes = this.chart.seriesAxes(this.series);\n const axis = this.isVertical ? axes.y : axes.x;\n\n return axis;\n }\n}\n\nexport default ScatterErrorBar;","import { ChartElement, Box } from '../../core';\n\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\nimport ErrorRangeCalculator from '../error-bars/error-range-calculator';\nimport ScatterErrorBar from '../error-bars/scatter-error-bar';\nimport LinePoint from '../line-chart/line-point';\n\nimport { hasValue, evalOptions } from '../utils';\n\nimport { deepExtend, isNumber, isString, defined, isFunction, setDefaultOptions } from '../../common';\nimport { X, Y, MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { parseDate } from '../../date-utils';\n\nclass ScatterChart extends ChartElement {\n constructor(plotArea, options) {\n\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n }\n\n _initFields() {\n // X and Y axis ranges grouped by name, e.g.:\n // primary: { min: 0, max: 1 }\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n }\n\n render() {\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n addErrorBar(point, field, fields) {\n const value = point.value[field];\n const valueErrorField = field + \"Value\";\n const lowField = field + \"ErrorLow\";\n const highField = field + \"ErrorHigh\";\n const { seriesIx, series } = fields;\n const errorBars = point.options.errorBars;\n const lowValue = fields[lowField];\n const highValue = fields[highField];\n\n if (isNumber(value)) {\n let errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n }\n\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || { x: [], y: [] };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] ||\n new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\n }\n }\n\n addPointErrorBar(errorRange, point, field) {\n const { low, high } = errorRange;\n const { series, options: { errorBars: options } } = point;\n const isVertical = field === Y;\n const item = {};\n\n point[field + \"Low\"] = low;\n point[field + \"High\"] = high;\n\n point.errorBars = point.errorBars || [];\n const errorBar = new ScatterErrorBar(low, high, isVertical, this, series, options);\n point.errorBars.push(errorBar);\n point.append(errorBar);\n\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n }\n\n addValue(value, fields) {\n const { x, y } = value;\n const seriesIx = fields.seriesIx;\n const series = this.options.series[seriesIx];\n const missingValues = this.seriesMissingValues(series);\n const seriesPoints = this.seriesPoints[seriesIx];\n\n let pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\n\n let point;\n if (pointValue) {\n point = this.createPoint(pointValue, fields);\n if (point) {\n Object.assign(point, fields);\n this.addErrorBar(point, X, fields);\n this.addErrorBar(point, Y, fields);\n }\n this.updateRange(pointValue, fields.series);\n }\n\n this.points.push(point);\n seriesPoints.push(point);\n }\n\n seriesMissingValues(series) {\n return series.missingValues;\n }\n\n createMissingValue() {}\n\n updateRange(value, series) {\n const intlService = this.chartService.intl;\n const { xAxis: xAxisName, yAxis: yAxisName } = series;\n let { x, y } = value;\n let xAxisRange = this.xAxisRanges[xAxisName];\n let yAxisRange = this.yAxisRanges[yAxisName];\n\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] =\n xAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] =\n yAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n }\n\n evalPointOptions(options, value, fields) {\n const { series, seriesIx } = fields;\n const state = {\n defaults: series._defaults,\n excluded: [\n \"data\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\",\n \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\",\n \"drilldownSeriesFactory\"\n ]\n };\n\n let doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n let pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem\n }, state);\n }\n\n return pointOptions;\n }\n\n pointType() {\n return LinePoint;\n }\n\n pointOptions(series, seriesIx) {\n let options = this.seriesOptions[seriesIx];\n if (!options) {\n const defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n }\n\n createPoint(value, fields) {\n const series = fields.series;\n let pointOptions = this.pointOptions(series, fields.seriesIx);\n let color = fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n seriesAxes(series) {\n const { xAxis: xAxisName, yAxis: yAxisName } = series;\n const plotArea = this.plotArea;\n const xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n const yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return {\n x: xAxis,\n y: yAxis\n };\n }\n\n reflow(targetBox) {\n const chartPoints = this.points;\n const limit = !this.options.clip;\n let pointIx = 0;\n\n\n this.traverseDataPoints((value, fields) => {\n const point = chartPoints[pointIx++];\n const seriesAxes = this.seriesAxes(fields.series);\n const slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n const slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n\n if (point) {\n if (slotX && slotY) {\n const pointSlot = this.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n }\n\n pointSlot(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n }\n\n traverseDataPoints(callback) {\n const { options: { series }, seriesPoints } = this;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const currentSeriesPoints = seriesPoints[seriesIx];\n if (!currentSeriesPoints) {\n seriesPoints[seriesIx] = [];\n }\n\n for (let pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n const { valueFields: value, fields } = this.plotArea.bindPoint(currentSeries, pointIx);\n\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this\n }, fields));\n }\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n return this.chartService.format.auto(format, value.x, value.y);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n}\nsetDefaultOptions(ScatterChart, {\n series: [],\n tooltip: {\n format: \"{0}, {1}\"\n },\n labels: {\n format: \"{0}, {1}\"\n },\n clip: true\n});\ndeepExtend(ScatterChart.prototype, ClipAnimationMixin);\n\nexport default ScatterChart;\n","import { drawing as draw, geometry as geom, Color } from '@progress/kendo-drawing';\n\nimport LinePoint from '../line-chart/line-point';\nimport { BORDER_BRIGHTNESS } from '../constants';\n\nimport { CENTER } from '../../common/constants';\nimport { deepExtend } from '../../common';\n\nclass Bubble extends LinePoint {\n constructor(value, options) {\n super(value, options);\n\n this.category = value.category;\n }\n\n createHighlight() {\n const highlight = this.options.highlight;\n const border = highlight.border;\n const markers = this.options.markers;\n const center = this.box.center();\n const radius = (markers.size + markers.border.width + border.width) / 2;\n const highlightGroup = new draw.Group();\n const shadow = new draw.Circle(new geom.Circle([ center.x, center.y + radius / 5 + border.width / 2 ], radius + border.width / 2), {\n stroke: {\n color: 'none'\n },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [ {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n }, {\n offset: 1,\n color: markers.background,\n opacity: 0\n } ]\n })\n });\n const overlay = new draw.Circle(new geom.Circle([ center.x, center.y ], radius), {\n stroke: {\n color: border.color ||\n new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex(),\n width: border.width,\n opacity: border.opacity\n },\n fill: {\n color: markers.background,\n opacity: highlight.opacity\n }\n });\n\n highlightGroup.append(shadow, overlay);\n\n return highlightGroup;\n }\n}\n\nBubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: {\n position: CENTER\n },\n highlight: {\n opacity: 1,\n border: {\n color: \"#fff\",\n width: 2,\n opacity: 1\n }\n }\n});\n\nBubble.prototype.defaults.highlight.zIndex = undefined;\n\nexport default Bubble;","import ScatterChart from '../scatter-charts/scatter-chart';\nimport Bubble from './bubble';\n\nimport { INITIAL_ANIMATION_DURATION, BUBBLE } from '../constants';\n\nimport { MIN_VALUE, CIRCLE } from '../../common/constants';\nimport { deepExtend, isFunction, setDefaultOptions, valueOrDefault } from '../../common';\n\nclass BubbleChart extends ScatterChart {\n _initFields() {\n this._maxSize = MIN_VALUE;\n super._initFields();\n }\n\n addValue(value, fields) {\n if (value.size !== null && (value.size > 0 || (value.size < 0 && fields.series.negativeValues.visible))) {\n this._maxSize = Math.max(this._maxSize, Math.abs(value.size));\n super.addValue(value, fields);\n } else {\n this.points.push(null);\n this.seriesPoints[fields.seriesIx].push(null);\n }\n }\n\n reflow(box) {\n this.updateBubblesSize(box);\n super.reflow(box);\n }\n\n pointType() {\n return Bubble;\n }\n\n createPoint(value, fields) {\n const series = fields.series;\n const pointsCount = series.data.length;\n const delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n const animationOptions = {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay,\n type: BUBBLE\n };\n\n let color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(\n series.negativeValues.color, color\n );\n }\n\n let pointOptions = deepExtend({\n labels: {\n animation: {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay\n }\n }\n }, this.pointOptions(series, fields.seriesIx), {\n markers: {\n type: CIRCLE,\n border: series.border,\n opacity: series.opacity,\n animation: animationOptions\n }\n });\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.markers.background = color;\n\n const point = new Bubble(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n updateBubblesSize(box) {\n const { options: { series } } = this;\n const boxSize = Math.min(box.width(), box.height());\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const seriesPoints = this.seriesPoints[seriesIx];\n const minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n const maxSize = currentSeries.maxSize || boxSize * 0.2;\n const minR = minSize / 2;\n const maxR = maxSize / 2;\n const minArea = Math.PI * minR * minR;\n const maxArea = Math.PI * maxR * maxR;\n const areaRange = maxArea - minArea;\n const areaRatio = areaRange / this._maxSize;\n\n for (let pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n const point = seriesPoints[pointIx];\n if (point) {\n const area = Math.abs(point.value.size) * areaRatio;\n const radius = Math.sqrt((minArea + area) / Math.PI);\n const baseZIndex = valueOrDefault(point.options.zIndex, 0);\n const zIndex = baseZIndex + (1 - radius / maxR);\n\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: {\n zIndex: zIndex + 1\n }\n });\n }\n }\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n }\n\n createAnimation() {}\n createVisual() {}\n}\n\nsetDefaultOptions(BubbleChart, {\n tooltip: {\n format: \"{3}\"\n },\n labels: {\n format: \"{3}\"\n }\n});\n\nexport default BubbleChart;","import { ShapeElement } from '../../core';\nimport { deepExtend } from '../../common';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nclass Target extends ShapeElement { }\n\ndeepExtend(Target.prototype, PointEventsMixin);\n\nexport default Target;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport Target from './target';\n\nimport { Box, ChartElement } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\nimport Bar from '../bar-chart/bar';\n\nimport { WHITE, TOP, RIGHT } from '../../common/constants';\nimport { alignPathToPixel, deepExtend, defined, getTemplate, setDefaultOptions, valueOrDefault } from '../../common';\n\nimport BarLabel from '../bar-chart/bar-label';\n\nclass Bullet extends ChartElement {\n constructor(value, options) {\n super(options);\n\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n }\n\n render() {\n const options = this.options;\n\n if (!this._rendered) {\n this._rendered = true;\n\n if (defined(this.value.target)) {\n this.target = new Target({\n type: options.target.shape,\n background: options.target.color || this.color,\n opacity: options.opacity,\n zIndex: options.zIndex,\n border: options.target.border,\n vAlign: TOP,\n align: RIGHT\n });\n\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n\n this.append(this.target);\n }\n\n this.createLabel();\n this.createNote();\n }\n }\n\n createLabel() {\n const options = this.options;\n const labels = options.labels;\n\n if (labels.visible) {\n const pointData = this.pointData();\n let labelTemplate = getTemplate(labels);\n let labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n this.label = new BarLabel(labelText, labels, pointData);\n this.append(this.label);\n }\n }\n\n reflow(box) {\n this.render();\n\n const { options, target, owner: chart } = this;\n const invertAxes = options.invertAxes;\n const valueAxis = chart.seriesValueAxis(this.options);\n const categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n const targetValueSlot = valueAxis.getSlot(this.value.target);\n const targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n const targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n\n if (target) {\n const targetSlot = new Box(\n targetSlotX.x1, targetSlotY.y1,\n targetSlotX.x2, targetSlotY.y2\n );\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n target.reflow(targetSlot);\n }\n\n const label = this.label;\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(box);\n }\n\n if (this.note) {\n this.note.reflow(box);\n }\n\n this.box = box;\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options;\n const body = draw.Path.fromRect(this.box.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n\n if (options.border.width > 0) {\n body.options.set(\"stroke\", {\n color: options.border.color || this.color,\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n\n this.bodyVisual = body;\n\n alignPathToPixel(body);\n this.visual.append(body);\n }\n\n createAnimation() {\n if (this.bodyVisual) {\n this.animation = draw.Animation.create(\n this.bodyVisual, this.options.animation\n );\n }\n }\n\n createHighlight(style) {\n return draw.Path.fromRect(this.box.toRect(), style);\n }\n\n highlightVisual() {\n return this.bodyVisual;\n }\n\n highlightVisualArgs() {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n pointData() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series\n };\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n}\n\nBullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n\nsetDefaultOptions(Bullet, {\n border: {\n width: 1\n },\n vertical: false,\n opacity: 1,\n target: {\n shape: \"\",\n border: {\n width: 0,\n color: \"green\"\n },\n line: {\n width: 2\n }\n },\n labels: {\n visible: false\n },\n tooltip: {\n format: \"Current: {0}
    Target: {1}\"\n },\n notes: {\n label: {}\n }\n});\n\ndeepExtend(Bullet.prototype, PointEventsMixin);\ndeepExtend(Bullet.prototype, NoteMixin);\n\nexport default Bullet;","\nimport CategoricalChart from '../categorical-chart';\nimport BarChart from '../bar-chart/bar-chart';\nimport Bullet from './bullet';\nimport ClusterLayout from '../layout/cluster-layout';\nimport { BAR } from '../constants';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { deepExtend, defined, isArray, isFunction, isObject, setDefaultOptions } from '../../common';\n\nclass BulletChart extends CategoricalChart {\n constructor(plotArea, options) {\n\n wrapData(options);\n\n super(plotArea, options);\n }\n\n reflowCategories(categorySlots) {\n const children = this.children;\n const childrenLength = children.length;\n\n for (let i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n }\n\n plotRange(point) {\n const series = point.series;\n const valueAxis = this.seriesValueAxis(series);\n const axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, point.value.current || axisCrossingValue ];\n }\n\n createPoint(data, fields) {\n const { categoryIx, series } = fields;\n const { options, children } = this;\n const value = data.valueFields;\n\n let bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n\n let color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(bulletOptions, value, fields);\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n\n const bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\n\n let cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n cluster.append(bullet);\n\n return bullet;\n }\n\n updateRange(value, fields) {\n const { current, target } = value;\n const axisName = fields.series.axis;\n let axisRange = this.valueAxisRanges[axisName];\n\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, current, target);\n axisRange.max = Math.max(axisRange.max, current, target);\n }\n }\n\n formatPointValue(point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n }\n\n pointValue(data) {\n return data.valueFields.current;\n }\n\n aboveAxis(point) {\n const value = point.value.current;\n\n return value > 0;\n }\n\n createAnimation() {\n const points = this.points;\n\n this._setAnimationOptions();\n\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n point.options.animation = this.options.animation;\n point.createAnimation();\n }\n }\n}\n\nBulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n\nsetDefaultOptions(BulletChart, {\n animation: {\n type: BAR\n }\n});\n\nfunction wrapData(options) {\n const series = options.series;\n\n for (let i = 0; i < series.length; i++) {\n const seriesItem = series[i];\n const data = seriesItem.data;\n if (data && !isArray(data[0]) && !isObject(data[0])) {\n seriesItem.data = [ data ];\n }\n }\n}\n\nexport default BulletChart;\n","import { Color } from '@progress/kendo-drawing';\n\nimport { Class, defined, deepExtend, setDefaultOptions, valueOrDefault, getSpacing, styleValue } from '../../common';\nimport { SHOW_TOOLTIP, HIDE_TOOLTIP } from '../constants';\n\nclass BaseTooltip extends Class {\n constructor(chartService, options) {\n super();\n\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n }\n\n getStyle(options, point) {\n let { background, border: { color: border } } = options;\n\n if (point) {\n const pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n\n const padding = getSpacing(options.padding || {}, \"auto\");\n\n return {\n backgroundColor: background,\n borderColor: border,\n font: options.font,\n color: options.color,\n opacity: options.opacity,\n borderWidth: styleValue(options.border.width),\n paddingTop: styleValue(padding.top),\n paddingBottom: styleValue(padding.bottom),\n paddingLeft: styleValue(padding.left),\n paddingRight: styleValue(padding.right)\n };\n }\n\n show(options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n\n const style = this.getStyle(tooltipOptions, point);\n options.style = style;\n\n const background = new Color(style.backgroundColor);\n if (!defined(tooltipOptions.color) && !background.isDark()) {\n options.className = \"k-chart-tooltip-inverse\";\n }\n\n this.chartService.notify(SHOW_TOOLTIP, options);\n\n this.visible = true;\n }\n\n hide() {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n\n this.visible = false;\n }\n\n destroy() {\n delete this.chartService;\n }\n}\n\nsetDefaultOptions(BaseTooltip, {\n border: {\n width: 1\n },\n opacity: 1\n});\n\nexport default BaseTooltip;\n","import BaseTooltip from '../tooltip/base-tooltip';\n\nimport { HIDE_TOOLTIP } from '../constants';\nimport { TOP, BOTTOM, LEFT, RIGHT, CENTER, DATE } from '../../common/constants';\nimport { setDefaultOptions } from '../../common';\n\nclass CrosshairTooltip extends BaseTooltip {\n constructor(chartService, crosshair, options) {\n super(chartService, options);\n\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n }\n\n initAxisName() {\n const axis = this.crosshair.axis;\n const plotArea = axis.plotArea;\n let name;\n if (plotArea.categoryAxis) {\n name = axis.getCategory ? \"categoryAxis\" : \"valueAxis\";\n } else {\n name = axis.options.vertical ? \"yAxis\" : \"xAxis\";\n }\n this.axisName = name;\n }\n\n showAt(point) {\n const { crosshair: { axis }, options } = this;\n let value = axis[options.stickyMode ? \"getCategory\" : \"getValue\"](point);\n let formattedValue = value;\n\n if (options.format) {\n formattedValue = this.formatService.auto(options.format, value);\n } else if (axis.options.type === DATE) {\n formattedValue = this.formatService.auto(axis.options.labels.dateFormats[axis.options.baseUnit], value);\n }\n\n this.show({\n point: point,\n anchor: this.getAnchor(),\n crosshair: this.crosshair,\n value: formattedValue,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n }, this.options);\n }\n\n hide() {\n this.chartService.notify(HIDE_TOOLTIP, {\n crosshair: this.crosshair,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n });\n }\n\n getAnchor() {\n const { crosshair, options: { position, padding } } = this;\n const vertical = !crosshair.axis.options.vertical;\n const lineBox = crosshair.line.bbox();\n let horizontalAlign, verticalAlign, point;\n\n if (vertical) {\n horizontalAlign = CENTER;\n if (position === BOTTOM) {\n verticalAlign = TOP;\n point = lineBox.bottomLeft().translate(0, padding);\n } else {\n verticalAlign = BOTTOM;\n point = lineBox.topLeft().translate(0, -padding);\n }\n } else {\n verticalAlign = CENTER;\n if (position === LEFT) {\n horizontalAlign = RIGHT;\n point = lineBox.topLeft().translate(-padding, 0);\n } else {\n horizontalAlign = LEFT;\n point = lineBox.topRight().translate(padding, 0);\n }\n }\n\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n}\n\nsetDefaultOptions(CrosshairTooltip, {\n padding: 10\n});\n\nexport default CrosshairTooltip;\n\n","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { ChartElement, CategoryAxis } from '../../core';\nimport CrosshairTooltip from './crosshair-tooltip';\n\nimport { BLACK, X, Y } from '../../common/constants';\nimport { deepExtend, setDefaultOptions } from '../../common';\n\nclass Crosshair extends ChartElement {\n constructor(chartService, axis, options) {\n super(options);\n\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n\n const tooltipOptions = this.options.tooltip;\n\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this,\n deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode })\n );\n }\n }\n\n showAt(point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n }\n\n hide() {\n this.line.visible(false);\n\n if (this.tooltip) {\n this.tooltip.hide();\n }\n }\n\n moveLine() {\n const { axis, point } = this;\n const vertical = axis.options.vertical;\n const box = this.getBox();\n const dim = vertical ? Y : X;\n const lineStart = new geom.Point(box.x1, box.y1);\n let lineEnd;\n\n if (vertical) {\n lineEnd = new geom.Point(box.x2, box.y1);\n } else {\n lineEnd = new geom.Point(box.x1, box.y2);\n }\n\n if (point) {\n if (this.stickyMode) {\n const slot = axis.getSlot(axis.pointCategoryIndex(point));\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n } else {\n lineStart[dim] = lineEnd[dim] = point[dim];\n }\n }\n\n this.box = box;\n\n this.line.moveTo(lineStart).lineTo(lineEnd);\n }\n\n getBox() {\n const axis = this.axis;\n const axes = axis.pane.axes;\n const length = axes.length;\n const vertical = axis.options.vertical;\n const box = axis.lineBox().clone();\n const dim = vertical ? X : Y;\n let axisLineBox;\n\n for (let i = 0; i < length; i++) {\n const currentAxis = axes[i];\n if (currentAxis.options.vertical !== vertical) {\n if (!axisLineBox) {\n axisLineBox = currentAxis.lineBox().clone();\n } else {\n axisLineBox.wrap(currentAxis.lineBox());\n }\n }\n }\n\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n\n return box;\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options;\n this.line = new draw.Path({\n stroke: {\n color: options.color,\n width: options.width,\n opacity: options.opacity,\n dashType: options.dashType\n },\n visible: false\n });\n\n this.moveLine();\n this.visual.append(this.line);\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n\n super.destroy();\n }\n}\n\nsetDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: {\n visible: false\n }\n});\n\nexport default Crosshair;","import { drawing as draw } from '@progress/kendo-drawing';\nimport { alignPathToPixel } from '../common';\n\nimport { ChartElement } from '../core';\n\nclass ChartContainer extends ChartElement {\n constructor(options, pane) {\n super(options);\n this.pane = pane;\n }\n\n shouldClip() {\n const children = this.children;\n const length = children.length;\n\n for (let i = 0; i < length; i++) {\n if (children[i].options.clip === true) {\n return true;\n }\n }\n return false;\n }\n\n _clipBox() {\n return this.pane.chartsBox();\n }\n\n createVisual() {\n this.visual = new draw.Group({\n zIndex: 0\n });\n\n if (this.shouldClip()) {\n const clipBox = this.clipBox = this._clipBox();\n const clipRect = clipBox.toRect();\n const clipPath = draw.Path.fromRect(clipRect);\n alignPathToPixel(clipPath);\n\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n }\n\n stackRoot() {\n return this;\n }\n\n unclipLabels() {\n const { children: charts, clipBox } = this;\n\n for (let i = 0; i < charts.length; i++) {\n const points = charts[i].points || {};\n const length = points.length;\n\n for (let j = 0; j < length; j++) {\n const point = points[j];\n if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n if (point.unclipElements) {\n point.unclipElements();\n } else {\n const { label, note } = point;\n\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n }\n\n destroy() {\n super.destroy();\n\n delete this.parent;\n }\n}\n\nChartContainer.prototype.isStackRoot = true;\n\nexport default ChartContainer;","import { ChartElement, BoxElement, Title, Box } from '../core';\nimport { ChartPane } from './api-elements';\nimport ChartContainer from './chart-container';\n\nimport { PANE_RENDER } from './constants';\nimport { TOP, LEFT, X, Y } from '../common/constants';\nimport { append, deepExtend, isObject, last, setDefaultOptions } from '../common';\n\nclass Pane extends BoxElement {\n constructor(options) {\n super(options);\n\n this.id = paneID();\n\n this.createTitle();\n\n this.content = new ChartElement();\n\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n\n this.axes = [];\n this.charts = [];\n }\n\n createTitle() {\n let titleOptions = this.options.title;\n if (isObject(titleOptions)) {\n titleOptions = deepExtend({}, titleOptions, {\n align: titleOptions.position,\n position: TOP\n });\n }\n\n this.title = Title.buildTitle(titleOptions, Pane.prototype.options.title);\n if (this.title) {\n this.append(this.title);\n }\n }\n\n appendAxis(axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n }\n\n appendAxisAt(axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, axis);\n axis.pane = this;\n }\n\n appendChart(chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n }\n\n empty() {\n const plotArea = this.parent;\n\n if (plotArea) {\n for (let i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this.axes[i]);\n }\n\n for (let i = 0; i < this.charts.length; i++) {\n plotArea.removeChart(this.charts[i]);\n }\n }\n\n this.axes = [];\n this.charts = [];\n\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n }\n\n reflow(targetBox) {\n // Content (such as charts) is rendered, but excluded from reflows\n let content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n\n super.reflow(targetBox);\n\n if (content) {\n this.children.push(content);\n }\n\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n }\n\n visualStyle() {\n const style = super.visualStyle();\n style.zIndex = -10;\n\n return style;\n }\n\n renderComplete() {\n if (this.options.visible) {\n this.createGridLines();\n }\n }\n\n stackRoot() {\n return this;\n }\n\n clipRoot() {\n return this;\n }\n\n createGridLines() {\n const axes = this.axes;\n const allAxes = axes.concat(this.parent.axes);\n const vGridLines = [];\n const hGridLines = [];\n\n // TODO\n // Is full combination really necessary?\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const vertical = axis.options.vertical;\n const gridLines = vertical ? vGridLines : hGridLines;\n for (let j = 0; j < allAxes.length; j++) {\n if (gridLines.length === 0) {\n const altAxis = allAxes[j];\n if (vertical !== altAxis.options.vertical) {\n append(gridLines, axis.createGridLines(altAxis));\n }\n }\n }\n }\n }\n\n refresh() {\n this.visual.clear();\n\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n\n this.visual.append(this.content.visual);\n\n this.renderComplete();\n this.notifyRender();\n }\n\n chartsBox() {\n const axes = this.axes;\n const length = axes.length;\n const chartsBox = new Box();\n\n for (let idx = 0; idx < length; idx++) {\n const axis = axes[idx];\n const axisValueField = axis.options.vertical ? Y : X;\n const lineBox = axis.lineBox();\n chartsBox[axisValueField + 1] = lineBox[axisValueField + 1];\n chartsBox[axisValueField + 2] = lineBox[axisValueField + 2];\n }\n\n if (chartsBox.x2 === 0) {\n const allAxes = this.parent.axes;\n const length = allAxes.length;\n\n for (let idx = 0; idx < length; idx++) {\n const axis = allAxes[idx];\n if (!axis.options.vertical) {\n const lineBox = axis.lineBox();\n chartsBox.x1 = lineBox.x1;\n chartsBox.x2 = lineBox.x2;\n }\n }\n }\n return chartsBox;\n }\n\n clipBox() {\n return this.chartContainer.clipBox;\n }\n\n notifyRender() {\n const service = this.getService();\n if (service) {\n service.notify(PANE_RENDER, {\n pane: new ChartPane(this),\n index: this.paneIndex,\n name: this.options.name\n });\n }\n }\n}\n\nlet ID = 1;\n\nfunction paneID() {\n return \"pane\" + ID++;\n}\n\nPane.prototype.isStackRoot = true;\n\nsetDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: {\n align: LEFT\n },\n visible: true\n});\n\nexport default Pane;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Box } from '../../core';\nimport Crosshair from '../crosshair/crosshair';\nimport Pane from '../pane';\nimport { hasValue } from '../utils';\nimport SeriesBinder from '../series-binder';\n\nimport { WHITE, BLACK, X, Y, COORD_PRECISION, TOP, BOTTOM, LEFT, RIGHT, START, END, INHERIT } from '../../common/constants';\nimport { append, deepExtend, defined, getSpacing, getTemplate, inArray, isFunction, isString, limitValue, round, setDefaultOptions, last } from '../../common';\nimport { TRENDLINE_SERIES } from '../constants';\n\nclass PlotAreaBase extends ChartElement {\n constructor(series, options, chartService) {\n super(options);\n\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend = this.options.legend || {};\n this.options.legend.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n this.originalSeries = series;\n this._bindCache = new WeakMap();\n\n this.createPanes();\n this.render();\n this.createCrosshairs();\n }\n\n initFields() { }\n\n initSeries() {\n const series = this.series;\n\n for (let i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n }\n\n bindPoint(series, pointIx, item) {\n let cached = this._bindCache.get(series);\n if (!cached) {\n cached = [];\n this._bindCache.set(series, cached);\n }\n\n let data = cached[pointIx];\n if (!data) {\n data = cached[pointIx] = SeriesBinder.current.bindPoint(series, pointIx, item);\n }\n\n return data;\n }\n\n createPanes() {\n const titleOptions = this.options.title || {};\n const paneDefaults = this.options.paneDefaults;\n const paneOptions = this.options.panes || [];\n const panesLength = Math.max(paneOptions.length, 1);\n const panes = [];\n\n const defaults = deepExtend({\n title: {\n color: titleOptions.color\n }\n }, paneDefaults);\n\n for (let i = 0; i < panesLength; i++) {\n const options = deepExtend({}, defaults, paneOptions[i]);\n if (isString(options.title)) {\n options.title = deepExtend({ text: options.title }, defaults.title);\n }\n\n const currentPane = new Pane(options);\n currentPane.paneIndex = i;\n\n panes.push(currentPane);\n this.append(currentPane);\n }\n\n this.panes = panes;\n }\n\n crosshairOptions(axis) {\n return axis.options.crosshair;\n }\n\n createCrosshairs(panes = this.panes) {\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n for (let j = 0; j < pane.axes.length; j++) {\n const axis = pane.axes[j];\n const options = this.crosshairOptions(axis);\n if (options && options.visible) {\n const currentCrosshair = new Crosshair(this.chartService, axis, options);\n\n this.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n }\n\n removeCrosshairs(pane) {\n const crosshairs = this.crosshairs;\n const axes = pane.axes;\n\n for (let i = crosshairs.length - 1; i >= 0; i--) {\n for (let j = 0; j < axes.length; j++) {\n if (crosshairs[i].axis === axes[j]) {\n crosshairs.splice(i, 1);\n break;\n }\n }\n }\n }\n\n hideCrosshairs() {\n const crosshairs = this.crosshairs;\n for (let idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n }\n\n findPane(name) {\n const panes = this.panes;\n let matchingPane;\n\n for (let i = 0; i < panes.length; i++) {\n if (panes[i].options.name === name) {\n matchingPane = panes[i];\n break;\n }\n }\n\n return matchingPane || panes[0];\n }\n\n findPointPane(point) {\n const panes = this.panes;\n let matchingPane;\n\n for (let i = 0; i < panes.length; i++) {\n if (panes[i].box.containsPoint(point)) {\n matchingPane = panes[i];\n break;\n }\n }\n\n return matchingPane;\n }\n\n appendAxis(axis) {\n const pane = this.findPane(axis.options.pane);\n\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n }\n\n removeAxis(axisToRemove) {\n const filteredAxes = [];\n\n for (let i = 0; i < this.axes.length; i++) {\n const axis = this.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n\n this.axes = filteredAxes;\n }\n\n appendChart(chart, pane) {\n this.charts.push(chart);\n if (pane) {\n pane.appendChart(chart);\n } else {\n this.append(chart);\n }\n }\n\n removeChart(chartToRemove) {\n const filteredCharts = [];\n\n for (let i = 0; i < this.charts.length; i++) {\n const chart = this.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n\n this.charts = filteredCharts;\n }\n\n addToLegend(series) {\n const count = series.length;\n const legend = this.options.legend;\n const labels = legend.labels || {};\n const inactiveItems = legend.inactiveItems || {};\n const inactiveItemsLabels = inactiveItems.labels || {};\n const data = [];\n\n for (let i = 0; i < count; i++) {\n const currentSeries = series[i];\n const seriesVisible = currentSeries.visible !== false;\n if (currentSeries.visibleInLegend === false) {\n continue;\n }\n\n let text = currentSeries.name;\n const labelTemplate = seriesVisible ? getTemplate(labels) : getTemplate(inactiveItemsLabels) || getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n text: hasValue(text) ? text : \"\",\n series: currentSeries\n });\n }\n\n const defaults = currentSeries._defaults;\n let color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n let itemLabelOptions, markerColor;\n if (seriesVisible) {\n itemLabelOptions = {};\n markerColor = color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = inactiveItems.markers.color;\n }\n\n if (hasValue(text) && text !== \"\") {\n data.push({\n text: text,\n labels: itemLabelOptions,\n markerColor: markerColor,\n series: currentSeries,\n active: seriesVisible\n });\n }\n }\n\n append(legend.items, data);\n }\n\n groupAxes(panes) {\n const xAxes = [];\n const yAxes = [];\n\n for (let paneIx = 0; paneIx < panes.length; paneIx++) {\n const paneAxes = panes[paneIx].axes;\n for (let axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n const axis = paneAxes[axisIx];\n if (axis.options.vertical) {\n yAxes.push(axis);\n } else {\n xAxes.push(axis);\n }\n }\n }\n\n return { x: xAxes, y: yAxes, any: xAxes.concat(yAxes) };\n }\n\n groupSeriesByPane() {\n const series = this.series;\n const seriesByPane = {};\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n const pane = this.seriesPaneName(currentSeries);\n\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [ currentSeries ];\n }\n }\n\n return seriesByPane;\n }\n\n filterVisibleSeries(series) {\n const result = [];\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n if (currentSeries.visible !== false) {\n result.push(currentSeries);\n }\n }\n\n return result;\n }\n\n reflow(targetBox) {\n const options = this.options.plotArea;\n const panes = this.panes;\n const margin = getSpacing(options.margin);\n\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n\n this.detachLabels();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n }\n\n redraw(panes) {\n const panesArray = [].concat(panes);\n this.initSeries();\n\n //prevents leak during partial redraws. the cached gradients observers retain reference to the destroyed elements.\n const root = this.getRoot();\n if (root) {\n root.cleanGradients();\n }\n\n for (let i = 0; i < panesArray.length; i++) {\n this.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n\n this._bindCache = new WeakMap();\n\n this.render(panesArray);\n this.detachLabels();\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n\n this.createCrosshairs(panesArray);\n\n for (let i = 0; i < panesArray.length; i++) {\n panesArray[i].refresh();\n }\n }\n\n axisCrossingValues(axis, crossingAxes) {\n const options = axis.options;\n const crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n const valuesToAdd = crossingAxes.length - crossingValues.length;\n const defaultValue = crossingValues[0] || 0;\n\n for (let i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n\n return crossingValues;\n }\n\n alignAxisTo(axis, targetAxis, crossingValue, targetCrossingValue) {\n const slot = axis.getSlot(crossingValue, crossingValue, true);\n const slotEdge = axis.options.reverse ? 2 : 1;\n const targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true);\n const targetEdge = targetAxis.options.reverse ? 2 : 1;\n const axisBox = axis.box.translate(\n targetSlot[X + targetEdge] - slot[X + slotEdge],\n targetSlot[Y + targetEdge] - slot[Y + slotEdge]\n );\n\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n\n axis.reflow(axisBox);\n }\n\n alignAxes(xAxes, yAxes) {\n const xAnchor = xAxes[0];\n const yAnchor = yAxes[0];\n const xAnchorCrossings = this.axisCrossingValues(xAnchor, yAxes);\n const yAnchorCrossings = this.axisCrossingValues(yAnchor, xAxes);\n const leftAnchors = {};\n const rightAnchors = {};\n const topAnchors = {};\n const bottomAnchors = {};\n\n for (let i = 0; i < yAxes.length; i++) {\n const axis = yAxes[i];\n const pane = axis.pane;\n const paneId = pane.id;\n const visible = axis.options.visible !== false;\n\n // Locate pane anchor, if any, and use its axisCrossingValues\n const anchor = paneAnchor(xAxes, pane) || xAnchor;\n let anchorCrossings = xAnchorCrossings;\n\n if (anchor !== xAnchor) {\n anchorCrossings = this.axisCrossingValues(anchor, yAxes);\n }\n\n this.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n if (axis.options._overlap) {\n continue;\n }\n\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n // Push the axis to the left the previous y-axis so they don't overlap\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(leftAnchors[paneId].box, LEFT)\n .translate(-axis.options.margin, 0)\n );\n }\n\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n // Flip the labels on the right if we're at the right end of the pane\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n\n this.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n // Push the axis to the right the previous y-axis so they don't overlap\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(rightAnchors[paneId].box, RIGHT)\n .translate(axis.options.margin, 0)\n );\n }\n\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n\n if (i !== 0 && yAnchor.pane === axis.pane) {\n axis.alignTo(yAnchor);\n axis.reflow(axis.box);\n }\n }\n\n for (let i = 0; i < xAxes.length; i++) {\n const axis = xAxes[i];\n const pane = axis.pane;\n const paneId = pane.id;\n const visible = axis.options.visible !== false;\n\n // Locate pane anchor and use its axisCrossingValues\n const anchor = paneAnchor(yAxes, pane) || yAnchor;\n let anchorCrossings = yAnchorCrossings;\n if (anchor !== yAnchor) {\n anchorCrossings = this.axisCrossingValues(anchor, xAxes);\n }\n\n this.alignAxisTo(axis, anchor, xAnchorCrossings[i], anchorCrossings[i]);\n\n if (axis.options._overlap) {\n continue;\n }\n\n if (round(axis.lineBox().y1) === round(anchor.lineBox().y1)) {\n // Flip the labels on top if we're at the top of the pane\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n this.alignAxisTo(axis, anchor, xAnchorCrossings[i], anchorCrossings[i]);\n\n // Push the axis above the previous x-axis so they don't overlap\n if (topAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(topAnchors[paneId].box, TOP)\n .translate(0, -axis.options.margin)\n );\n }\n\n if (visible) {\n topAnchors[paneId] = axis;\n }\n }\n\n if (round(axis.lineBox().y2, COORD_PRECISION) === round(anchor.lineBox().y2, COORD_PRECISION)) {\n // Push the axis below the previous x-axis so they don't overlap\n if (bottomAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(bottomAnchors[paneId].box, BOTTOM)\n .translate(0, axis.options.margin)\n );\n }\n\n if (visible) {\n bottomAnchors[paneId] = axis;\n }\n }\n\n if (i !== 0) {\n axis.alignTo(xAnchor);\n axis.reflow(axis.box);\n }\n }\n }\n\n shrinkAxisWidth(panes) {\n const axes = this.groupAxes(panes).any;\n const axisBox = axisGroupBox(axes);\n let overflowX = 0;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(\n overflowX,\n axisBox.width() - currentPane.contentBox.width()\n );\n }\n }\n\n if (overflowX !== 0) {\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n\n if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n }\n\n shrinkAxisHeight(panes) {\n let shrinked;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n const axes = currentPane.axes;\n const overflowY = Math.max(0, axisGroupBox(axes).height() - currentPane.contentBox.height());\n\n if (overflowY !== 0) {\n for (let j = 0; j < axes.length; j++) {\n const currentAxis = axes[j];\n\n if (currentAxis.options.vertical) {\n currentAxis.reflow(\n currentAxis.box.shrink(0, overflowY)\n );\n }\n }\n shrinked = true;\n }\n }\n\n return shrinked;\n }\n\n fitAxes(panes) {\n const axes = this.groupAxes(panes).any;\n let offsetX = 0;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n const paneAxes = currentPane.axes;\n const paneBox = currentPane.contentBox;\n\n if (paneAxes.length > 0) {\n const axisBox = axisGroupBox(paneAxes);\n // OffsetY is calculated and applied per pane\n const offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n\n // OffsetX is calculated and applied globally\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n\n\n for (let j = 0; j < paneAxes.length; j++) {\n const currentAxis = paneAxes[j];\n\n currentAxis.reflow(\n currentAxis.box.translate(0, offsetY)\n );\n }\n }\n }\n\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n\n currentAxis.reflow(\n currentAxis.box.translate(offsetX, 0)\n );\n }\n }\n\n reflowAxes(panes) {\n const axes = this.groupAxes(panes);\n\n for (let i = 0; i < panes.length; i++) {\n this.reflowPaneAxes(panes[i]);\n }\n\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n\n this.autoRotateAxisLabels(axes);\n\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.fitAxes(panes);\n }\n }\n\n autoRotateAxisLabels(groupedAxes) {\n const { panes } = this;\n const axes = allPaneAxes(panes);\n let rotated;\n\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n\n if (rotated) {\n for (let idx = 0; idx < panes.length; idx++) {\n this.reflowPaneAxes(panes[idx]);\n }\n\n if (groupedAxes.x.length > 0 && groupedAxes.y.length > 0) {\n this.alignAxes(groupedAxes.x, groupedAxes.y);\n this.shrinkAxisWidth(panes);\n }\n }\n }\n\n reflowPaneAxes(pane) {\n const axes = pane.axes;\n const length = axes.length;\n\n if (length > 0) {\n for (let i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n }\n\n reflowCharts(panes) {\n const charts = this.charts;\n const count = charts.length;\n const box = this.box;\n\n for (let i = 0; i < count; i++) {\n const chartPane = charts[i].pane;\n if (!chartPane || inArray(chartPane, panes)) {\n charts[i].reflow(box);\n }\n }\n }\n\n reflowPanes() {\n const { box, panes } = this;\n const panesLength = panes.length;\n let remainingHeight = box.height();\n let remainingPanes = panesLength;\n let autoHeightPanes = 0;\n let top = box.y1;\n\n for (let i = 0; i < panesLength; i++) {\n const currentPane = panes[i];\n const height = currentPane.options.height;\n\n currentPane.options.width = box.width();\n\n if (!currentPane.options.height) {\n autoHeightPanes++;\n } else {\n if (height.indexOf && height.indexOf(\"%\")) {\n const percents = parseInt(height, 10) / 100;\n currentPane.options.height = percents * box.height();\n }\n\n currentPane.reflow(box.clone());\n\n remainingHeight -= currentPane.options.height;\n }\n }\n\n for (let i = 0; i < panesLength; i++) {\n const currentPane = panes[i];\n\n if (!currentPane.options.height) {\n currentPane.options.height = remainingHeight / autoHeightPanes;\n }\n }\n\n for (let i = 0; i < panesLength; i++) {\n const currentPane = panes[i];\n const paneBox = box\n .clone()\n .move(box.x1, top);\n\n currentPane.reflow(paneBox);\n\n remainingPanes--;\n top += currentPane.options.height;\n }\n }\n\n backgroundBox() {\n const axes = this.axes;\n const axesCount = axes.length;\n let box;\n\n for (let i = 0; i < axesCount; i++) {\n const axisA = axes[i];\n\n for (let j = 0; j < axesCount; j++) {\n const axisB = axes[j];\n\n if (axisA.options.vertical !== axisB.options.vertical) {\n const lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n\n return box || this.box;\n }\n\n chartsBoxes() {\n const panes = this.panes;\n const boxes = [];\n\n for (let idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n\n return boxes;\n }\n\n addBackgroundPaths(multipath) {\n const boxes = this.chartsBoxes();\n for (let idx = 0; idx < boxes.length; idx++) {\n multipath.paths.push(draw.Path.fromRect(boxes[idx].toRect()));\n }\n }\n\n backgroundContainsPoint(point) {\n const boxes = this.chartsBoxes();\n for (let idx = 0; idx < boxes.length; idx++) {\n if (boxes[idx].containsPoint(point)) {\n return true;\n }\n }\n }\n\n createVisual() {\n super.createVisual();\n\n const options = this.options.plotArea;\n let { opacity, background, border = {} } = options;\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\n\n const bg = this._bgVisual = new draw.MultiPath({\n fill: {\n color: background,\n opacity: opacity\n },\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType\n },\n zIndex: -1\n });\n\n this.addBackgroundPaths(bg);\n\n this.appendVisual(bg);\n }\n\n pointsByCategoryIndex(categoryIndex) {\n const charts = this.charts;\n const result = [];\n\n if (categoryIndex !== null) {\n for (let i = 0; i < charts.length; i++) {\n const chart = charts[i];\n if (chart.pane.options.name === \"_navigator\") {\n continue;\n }\n\n const points = charts[i].categoryPoints[categoryIndex];\n if (points && points.length) {\n for (let j = 0; j < points.length; j++) {\n const point = points[j];\n if (point && defined(point.value) && point.value !== null) {\n result.push(point);\n }\n }\n }\n }\n }\n\n return result;\n }\n\n pointsBySeriesIndex(seriesIndex) {\n return this.filterPoints(function(point) {\n return point.series.index === seriesIndex;\n });\n }\n\n pointsBySeriesName(name) {\n return this.filterPoints(function(point) {\n return point.series.name === name;\n });\n }\n\n filterPoints(callback) {\n const charts = this.charts;\n const result = [];\n\n for (let i = 0; i < charts.length; i++) {\n const chart = charts[i];\n const points = chart.points;\n for (let j = 0; j < points.length; j++) {\n const point = points[j];\n if (point && point.visible !== false && callback(point)) {\n result.push(point);\n }\n }\n }\n\n return result;\n }\n\n findPoint(callback) {\n const charts = this.charts;\n\n for (let i = 0; i < charts.length; i++) {\n const chart = charts[i];\n const points = chart.points;\n for (let j = 0; j < points.length; j++) {\n const point = points[j];\n if (point && point.visible !== false && callback(point)) {\n return point;\n }\n }\n }\n }\n\n paneByPoint(point) {\n const panes = this.panes;\n\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n if (pane.box.containsPoint(point)) {\n return pane;\n }\n }\n }\n\n detachLabels() {\n const axes = this.groupAxes(this.panes);\n const xAxes = axes.x;\n const yAxes = axes.y;\n\n this.detachAxisGroupLabels(yAxes, xAxes);\n this.detachAxisGroupLabels(xAxes, yAxes);\n }\n\n detachAxisGroupLabels(axes, crossingAxes) {\n let labelAxisCount = 0;\n\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const pane = axis.pane;\n const anchor = paneAnchor(crossingAxes, pane) || crossingAxes[0];\n const axisIndex = i + labelAxisCount;\n const labelAxis = this.createLabelAxis(axis, axisIndex, anchor);\n\n if (labelAxis) {\n labelAxisCount++;\n\n const pos = pane.axes.indexOf(axis) + labelAxisCount;\n pane.appendAxisAt(labelAxis, pos);\n }\n }\n }\n\n createLabelAxis(axis, axisIndex, anchor) {\n const labelOptions = axis.options.labels;\n const position = labelOptions.position;\n const onAxis = position !== END && position !== START;\n const visible = labelOptions.visible;\n\n if (onAxis || visible === false) {\n return null;\n }\n\n const allAxes = this.groupAxes(this.panes);\n const crossingAxes = anchor.options.vertical ? allAxes.x : allAxes.y;\n const anchorCrossings = this.axisCrossingValues(anchor, crossingAxes);\n const end = position === END;\n const range = anchor.range();\n const edge = end ? range.max : range.min;\n const crossingValue = limitValue(anchorCrossings[axisIndex], range.min, range.max);\n\n if (crossingValue - edge === 0) {\n return null;\n }\n\n anchorCrossings.splice(axisIndex + 1, 0, edge);\n anchor.options.axisCrossingValues = anchorCrossings;\n\n const labelAxis = axis.clone();\n axis.clear();\n\n labelAxis.options.name = undefined;\n labelAxis.options.line.visible = false;\n\n labelAxis.options.crosshair = undefined;\n labelAxis.options.notes = undefined;\n labelAxis.options.plotBands = undefined;\n\n return labelAxis;\n }\n\n isTrendline(series) {\n return series && inArray(series.type, TRENDLINE_SERIES);\n }\n\n trendlineFactory() { /* abstract */ }\n\n createTrendlineSeries() {\n const modifiedSeries = [];\n\n this.series = this.series.map(series => {\n if (!this.isTrendline(series)) {\n return series;\n }\n\n const forSeries = this.seriesByName(series.for);\n if (!forSeries) {\n throw new Error('Invalid Configuration: Unable to locate linked series ' +\n `\"${series.for}\" for trendline \"${series.name}\".`);\n }\n\n const valueFields = SeriesBinder.current.valueFields(forSeries);\n const field = last(valueFields); // Use the last field for multi-field series\n\n const trendlineSeries = this.trendlineFactory(Object.assign({}, {field}, series), forSeries);\n if (trendlineSeries) {\n if (forSeries.visible === false) {\n trendlineSeries.visible = false;\n }\n\n if (trendlineSeries.color === INHERIT) {\n trendlineSeries.color = forSeries.color;\n }\n\n modifiedSeries.push(trendlineSeries);\n }\n\n return trendlineSeries;\n }).filter(series => series !== null);\n\n return modifiedSeries;\n }\n\n seriesByName(name) {\n return this.series.find(series => series.name === name);\n }\n}\n\nfunction isSingleAxis(axis) {\n return !axis.pane.axes.some((a) =>\n a.options.vertical === axis.options.vertical && a !== axis && a.options.visible !== false\n );\n}\n\nfunction axisGroupBox(axes) {\n const length = axes.length;\n let box;\n\n for (let i = 0; i < length; i++) {\n const axis = axes[i];\n const visible = axis.options.visible !== false;\n if (visible || isSingleAxis(axis)) {\n const axisBox = visible ? axis.contentBox() : axis.lineBox();\n\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n\n return box || new Box();\n}\n\nfunction paneAnchor(axes, pane) {\n for (let i = 0; i < axes.length; i++) {\n const anchor = axes[i];\n if (anchor && anchor.pane === pane) {\n return anchor;\n }\n }\n}\n\nfunction isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n}\n\nconst allPaneAxes = (panes) => panes.reduce((acc, pane) => acc.concat(pane.axes), []);\n\nsetDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: {\n margin: {}\n },\n background: \"\",\n border: {\n color: BLACK,\n width: 0\n },\n paneDefaults: {\n title: {}\n },\n legend: {\n inactiveItems: {\n labels: {\n color: \"#919191\"\n },\n markers: {\n color: \"#919191\"\n }\n }\n }\n});\n\nexport default PlotAreaBase;\n","import { PLOT_AREA_HOVER, PLOT_AREA_CLICK } from '../constants';\n\nconst PlotAreaEventsMixin = {\n hover: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n\n click: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n};\n\nexport default PlotAreaEventsMixin;","import Aggregates from './aggregates';\n\nimport { Class, defined, inArray, isArray, isFunction, isNumber, isObject } from '../../common';\n\nclass SeriesAggregator extends Class {\n constructor(series, binder, defaultAggregates) {\n super();\n\n const canonicalFields = binder.canonicalFields(series);\n const valueFields = binder.valueFields(series);\n const sourceFields = binder.sourceFields(series, canonicalFields);\n const seriesFields = this._seriesFields = [];\n const defaults = defaultAggregates.query(series.type);\n const rootAggregate = series.aggregate || defaults;\n\n this._series = series;\n this._binder = binder;\n\n for (let i = 0; i < canonicalFields.length; i++) {\n const field = canonicalFields[i];\n let fieldAggregate;\n\n if (isObject(rootAggregate)) {\n fieldAggregate = rootAggregate[field];\n } else if (i === 0 || inArray(field, valueFields)) {\n fieldAggregate = rootAggregate;\n } else {\n break;\n }\n\n if (fieldAggregate) {\n seriesFields.push({\n canonicalName: field,\n name: sourceFields[i],\n transform: isFunction(fieldAggregate) ? fieldAggregate : Aggregates[fieldAggregate]\n });\n }\n }\n }\n\n aggregatePoints(srcPoints, group) {\n const { _series: series, _seriesFields: seriesFields } = this;\n const data = this._bindPoints(srcPoints || []);\n const firstDataItem = data.dataItems[0];\n let result = {};\n\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n const fn = function() {};\n fn.prototype = firstDataItem;\n result = new fn();\n }\n\n for (let i = 0; i < seriesFields.length; i++) {\n const field = seriesFields[i];\n const srcValues = this._bindField(data.values, field.canonicalName);\n const value = field.transform(srcValues, series, data.dataItems, group);\n\n if (value !== null && isObject(value) && !defined(value.length) && !(value instanceof Date)) {\n result = value;\n break;\n } else {\n if (defined(value)) {\n setValue(field.name, result, value);\n }\n }\n }\n\n return result;\n }\n\n _bindPoints(points) {\n const { _binder: binder, _series: series } = this;\n const values = [];\n const dataItems = [];\n\n for (let i = 0; i < points.length; i++) {\n const pointIx = points[i];\n\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n\n return {\n values: values,\n dataItems: dataItems\n };\n }\n\n _bindField(data, field) {\n const values = [];\n const count = data.length;\n\n for (let i = 0; i < count; i++) {\n const item = data[i];\n const valueFields = item.valueFields;\n let value;\n\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n\n values.push(value);\n }\n\n return values;\n }\n}\n\nfunction setValue(fieldName, target, value) {\n let parentObj = target;\n let field = fieldName;\n\n if (fieldName.indexOf(\".\") > -1) {\n const parts = fieldName.split(\".\");\n\n while (parts.length > 1) {\n field = parts.shift();\n if (!defined(parentObj[field])) {\n parentObj[field] = {};\n }\n parentObj = parentObj[field];\n }\n field = parts.shift();\n }\n\n parentObj[field] = value;\n}\n\nexport default SeriesAggregator;","import { Class } from '../../common';\n\nclass DefaultAggregates extends Class {\n constructor() {\n super();\n\n this._defaults = {};\n }\n\n register(seriesTypes, aggregates) {\n for (let i = 0; i < seriesTypes.length; i++) {\n this._defaults[seriesTypes[i]] = aggregates;\n }\n }\n\n query(seriesType) {\n return this._defaults[seriesType];\n }\n}\n\nDefaultAggregates.current = new DefaultAggregates();\n\nexport default DefaultAggregates;","import Bar from '../bar-chart/bar';\nimport BarLabel from '../bar-chart/bar-label';\n\nimport { deepExtend, getTemplate } from '../../common';\n\nclass RangeBar extends Bar {\n createLabel() {\n const labels = this.options.labels;\n const fromOptions = deepExtend({}, labels, labels.from);\n const toOptions = deepExtend({}, labels, labels.to);\n\n if (fromOptions.visible) {\n this.labelFrom = this._createLabel(fromOptions);\n this.append(this.labelFrom);\n }\n\n if (toOptions.visible) {\n this.labelTo = this._createLabel(toOptions);\n this.append(this.labelTo);\n }\n }\n\n _createLabel(options) {\n const labelTemplate = getTemplate(options);\n const pointData = this.pointData();\n\n let labelText;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(options.format);\n }\n\n return new BarLabel(labelText,\n deepExtend({\n vertical: this.options.vertical\n },\n options\n ), pointData);\n }\n\n reflow(targetBox) {\n this.render();\n\n const { labelFrom, labelTo, value } = this;\n\n this.box = targetBox;\n\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n}\n\nRangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: {\n format: \"{0} - {1}\"\n },\n tooltip: {\n format: \"{1}\"\n }\n});\n\nexport default RangeBar;","import BarChart from '../bar-chart/bar-chart';\nimport RangeBar from './range-bar';\nimport CategoricalChart from '../categorical-chart';\n\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { isNumber } from '../../common';\n\nclass RangeBarChart extends BarChart {\n pointType() {\n return RangeBar;\n }\n\n pointValue(data) {\n return data.valueFields;\n }\n\n formatPointValue(point, format) {\n if (point.value.from === null && point.value.to === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n }\n\n plotRange(point) {\n if (!point) {\n return 0;\n }\n\n return [ point.value.from, point.value.to ];\n }\n\n updateRange(value, fields) {\n const axisName = fields.series.axis;\n const { from, to } = value;\n let axisRange = this.valueAxisRanges[axisName];\n\n if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n }\n\n aboveAxis(point) {\n const value = point.value;\n return value.from < value.to;\n }\n}\n\nRangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n\nexport default RangeBarChart;","import LinePoint from '../line-chart/line-point';\n\nclass RangeLinePoint extends LinePoint {\n aliasFor() {\n return this.parent;\n }\n}\n\nexport default RangeLinePoint;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Point } from '../../core';\nimport RangeLinePoint from './range-line-point';\nimport PointEventsMixin from '../mixins/point-events-mixin';\nimport NoteMixin from '../mixins/note-mixin';\n\nimport { LINE_MARKER_SIZE, FADEIN, INITIAL_ANIMATION_DURATION, TOOLTIP_OFFSET, ABOVE, BELOW } from '../constants';\nimport { WHITE, CIRCLE, HIGHLIGHT_ZINDEX, LEFT, RIGHT, BOTTOM, CENTER } from '../../common/constants';\nimport { deepExtend, valueOrDefault, getSpacing } from '../../common';\n\nconst AUTO = 'auto';\nconst DEFAULT_FROM_FORMAT = '{0}';\nconst DEFAULT_TO_FORMAT = '{1}';\n\nclass RangeAreaPoint extends ChartElement {\n constructor(value, options) {\n super();\n\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n this.initLabelsFormat();\n }\n\n render() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n const { markers, labels } = this.options;\n const value = this.value;\n\n const fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n\n const toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n\n this.append(fromPoint);\n this.append(toPoint);\n }\n\n reflow(targetBox) {\n this.render();\n\n const { from: fromBox, to: toBox } = targetBox;\n\n this.positionLabels(fromBox, toBox);\n\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n }\n\n createHighlight() {\n const group = new draw.Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n\n return group;\n }\n\n highlightVisual() {\n return this.visual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n }\n\n tooltipAnchor() {\n const clipBox = this.owner.pane.clipBox();\n const showTooltip = !clipBox || clipBox.overlaps(this.box);\n\n if (showTooltip) {\n const box = this.box;\n const center = box.center();\n const horizontalAlign = LEFT;\n let x, y, verticalAlign;\n\n if (this.options.vertical) {\n x = center.x;\n y = box.y1 - TOOLTIP_OFFSET;\n verticalAlign = BOTTOM;\n } else {\n x = box.x2 + TOOLTIP_OFFSET;\n y = center.y;\n verticalAlign = CENTER;\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n\n unclipElements() {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\n }\n\n initLabelsFormat() {\n const labels = this.options.labels;\n if (!labels.format) {\n if (!labels.from || !labels.from.format) {\n labels.from = Object.assign({}, labels.from, {\n format: DEFAULT_FROM_FORMAT\n });\n }\n\n if (!labels.to || !labels.to.format) {\n labels.to = Object.assign({}, labels.to, {\n format: DEFAULT_TO_FORMAT\n });\n }\n }\n }\n\n positionLabels(fromBox, toBox) {\n const { labels, vertical } = this.options;\n\n if (labels.position === AUTO) {\n let fromLabelPosition, toLabelPosition;\n if (vertical) {\n if (toBox.y1 <= fromBox.y1) {\n toLabelPosition = ABOVE;\n fromLabelPosition = BELOW;\n } else {\n toLabelPosition = BELOW;\n fromLabelPosition = ABOVE;\n }\n } else {\n if (toBox.x1 <= fromBox.x1) {\n toLabelPosition = LEFT;\n fromLabelPosition = RIGHT;\n } else {\n toLabelPosition = RIGHT;\n fromLabelPosition = LEFT;\n }\n }\n\n if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\n }\n }\n }\n\n copyFields(point) {\n point.dataItem = this.dataItem;\n point.category = this.category;\n point.series = this.series;\n point.color = this.color;\n point.owner = this.owner;\n }\n}\n\ndeepExtend(RangeAreaPoint.prototype, PointEventsMixin);\ndeepExtend(RangeAreaPoint.prototype, NoteMixin);\n\nRangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: {\n width: 2\n },\n opacity: 1\n },\n labels: {\n visible: false,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n position: AUTO\n },\n notes: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: HIGHLIGHT_ZINDEX\n },\n tooltip: {\n format: '{0} - {1}'\n }\n};\n\nexport default RangeAreaPoint;\n","import { drawing as draw } from '@progress/kendo-drawing';\nimport AreaSegment from '../area-chart/area-segment';\n\nclass RangeAreaSegment extends AreaSegment {\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n }\n\n stackSegments() {\n let fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.toGeometryPoints(this.fromPoints().reverse()));\n }\n\n return fromSegments;\n }\n\n createStroke(style) {\n const toPath = new draw.Path(style);\n const fromPath = new draw.Path(style);\n\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n\n this.visual.append(toPath);\n this.visual.append(fromPath);\n }\n\n hasStackSegment() {\n return true;\n }\n\n fromPoints() {\n return this.linePoints.map(point => point.fromPoint);\n }\n\n toPoints() {\n return this.linePoints.map(point => point.toPoint);\n }\n}\n\nexport default RangeAreaSegment;","import { CurveProcessor } from '../../core';\n\nimport RangeAreaSegment from './range-area-segment';\n\nclass SplineRangeAreaSegment extends RangeAreaSegment {\n\n createStrokeSegments() {\n return this.createCurveSegments(this.toPoints());\n }\n\n stackSegments() {\n let fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n\n return fromSegments;\n }\n\n createCurveSegments(points) {\n const curveProcessor = new CurveProcessor();\n\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n\n\n}\n\nexport default SplineRangeAreaSegment;","import StepLineMixin from '../line-chart/step-line-mixin';\nimport RangeAreaSegment from './range-area-segment';\nimport { deepExtend } from '../../common';\n\nclass StepRangeAreaSegment extends RangeAreaSegment {\n\n createStrokeSegments() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n }\n\n stackSegments() {\n let fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.calculateStepPoints(this.fromPoints()));\n fromSegments.reverse();\n }\n\n return fromSegments;\n }\n}\n\ndeepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n\nexport default StepRangeAreaSegment;","import CategoricalChart from '../categorical-chart';\nimport LineChartMixin from '../mixins/line-chart-mixin';\nimport ClipAnimationMixin from '../mixins/clip-animation-mixin';\nimport RangeAreaPoint from './range-area-point';\nimport RangeAreaSegment from './range-area-segment';\nimport SplineRangeAreaSegment from './spline-range-area-segment';\nimport StepRangeAreaSegment from './step-range-area-segment';\n\nimport { Box } from '../../core';\nimport { ZERO } from '../constants';\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\nimport { isNumber } from '../../common';\nimport { deepExtend, isFunction } from '../../common';\nimport { hasValue } from '../utils';\n\nclass RangeAreaChart extends CategoricalChart {\n\n render() {\n super.render();\n\n this.renderSegments();\n }\n\n pointType() {\n return RangeAreaPoint;\n }\n\n createPoint(data, fields) {\n const { series, seriesIx } = fields;\n let value = data.valueFields;\n\n if (!hasValue(value.from) && !hasValue(value.to)) {\n if (this.seriesMissingValues(series) === ZERO) {\n value = {\n from: 0,\n to: 0\n };\n } else {\n return null;\n }\n }\n\n let pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n let color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n const point = new RangeAreaPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = (currentSeries.line || {}).style;\n let segmentType;\n if (style === \"smooth\") {\n segmentType = SplineRangeAreaSegment;\n } else if (style === \"step\") {\n segmentType = StepRangeAreaSegment;\n } else {\n segmentType = RangeAreaSegment;\n }\n\n return new segmentType(linePoints, currentSeries, seriesIx);\n }\n\n plotRange(point, startValue) {\n if (!point) {\n return [ startValue, startValue ];\n }\n\n return [ point.value.from, point.value.to ];\n }\n\n valueSlot(valueAxis, plotRange) {\n const fromSlot = valueAxis.getSlot(plotRange[0], plotRange[0], !this.options.clip);\n const toSlot = valueAxis.getSlot(plotRange[1], plotRange[1], !this.options.clip);\n if (fromSlot && toSlot) {\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n }\n\n pointSlot(categorySlot, valueSlot) {\n const { from, to } = valueSlot;\n let fromSlot, toSlot;\n\n if (this.options.invertAxes) {\n fromSlot = new Box(from.x1, categorySlot.y1, from.x2, categorySlot.y2);\n toSlot = new Box(to.x1, categorySlot.y1, to.x2, categorySlot.y2);\n } else {\n fromSlot = new Box(categorySlot.x1, from.y1, categorySlot.x2, from.y2);\n toSlot = new Box(categorySlot.x1, to.y1, categorySlot.x2, to.y2);\n }\n\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n\n addValue(data, fields) {\n const valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n\n super.addValue(data, fields);\n }\n\n updateRange(value, fields) {\n if (value !== null && isNumber(value.from) && isNumber(value.to)) {\n const axisName = fields.series.axis;\n const axisRange = this.valueAxisRanges[axisName] = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n const { from, to } = value;\n\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n\n return this.chartService.format.auto(format, value.from, value.to);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n if (point) {\n result.push((point.fromPoint || {}).marker);\n result.push((point.toPoint || {}).marker);\n }\n }\n\n return result.concat(this._segments);\n }\n}\n\ndeepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\n\nexport default RangeAreaChart;\n","import Candlestick from '../candlestick-chart/candlestick';\n\nclass OHLCPoint extends Candlestick {\n reflow(box) {\n const { options, value, owner: chart } = this;\n const valueAxis = chart.seriesValueAxis(options);\n const oPoints = [];\n const cPoints = [];\n const lhPoints = [];\n\n const lhSlot = valueAxis.getSlot(value.low, value.high);\n const oSlot = valueAxis.getSlot(value.open, value.open);\n const cSlot = valueAxis.getSlot(value.close, value.close);\n\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n\n const mid = lhSlot.center().x;\n\n oPoints.push([ oSlot.x1, oSlot.y1 ]);\n oPoints.push([ mid, oSlot.y1 ]);\n cPoints.push([ mid, cSlot.y1 ]);\n cPoints.push([ cSlot.x2, cSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y2 ]);\n\n this.lines = [\n oPoints, cPoints, lhPoints\n ];\n\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n\n this.reflowNote();\n }\n\n createBody() {}\n}\n\nexport default OHLCPoint;","import CandlestickChart from '../candlestick-chart/candlestick-chart';\nimport OHLCPoint from './ohlc-point';\n\nclass OHLCChart extends CandlestickChart {\n pointType() {\n return OHLCPoint;\n }\n}\n\nexport default OHLCChart;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement } from '../../core';\n\nimport { FADEIN, INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { alignPathToPixel, setDefaultOptions } from '../../common';\n\nclass WaterfallSegment extends ChartElement {\n constructor(from, to, series) {\n super();\n\n this.from = from;\n this.to = to;\n this.series = series;\n }\n\n linePoints() {\n const from = this.from;\n const { from: { box: fromBox }, to: { box: toBox } } = this;\n const points = [];\n\n if (from.isVertical) {\n const y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push(\n [ fromBox.x1, y ],\n [ toBox.x2, y ]\n );\n } else {\n const x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push(\n [ x, fromBox.y1 ],\n [ x, toBox.y2 ]\n );\n }\n\n return points;\n }\n\n createVisual() {\n super.createVisual();\n\n const line = this.series.line || {};\n\n const path = draw.Path.fromPoints(this.linePoints(), {\n stroke: {\n color: line.color,\n width: line.width,\n opacity: line.opacity,\n dashType: line.dashType\n }\n });\n\n alignPathToPixel(path);\n this.visual.append(path);\n }\n}\n\nsetDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n});\n\nexport default WaterfallSegment;","import BarChart from '../bar-chart/bar-chart';\nimport SeriesBinder from '../series-binder';\nimport WaterfallSegment from './waterfall-segment';\n\nimport categoriesCount from '../utils/categories-count';\n\nimport { isNumber } from '../../common';\n\nclass WaterfallChart extends BarChart {\n render() {\n super.render();\n this.createSegments();\n }\n\n traverseDataPoints(callback) {\n const series = this.options.series;\n const totalCategories = categoriesCount(series);\n const isVertical = !this.options.invertAxes;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n let total = 0;\n let runningTotal = 0;\n\n for (let categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n const data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n const value = data.valueFields.value;\n const summary = data.fields.summary;\n let from = total;\n let to;\n\n if (summary) {\n if (summary.toLowerCase() === \"total\") {\n data.valueFields.value = total;\n from = 0;\n to = total;\n } else {\n data.valueFields.value = runningTotal;\n to = from - runningTotal;\n runningTotal = 0;\n }\n } else if (isNumber(value)) {\n runningTotal += value;\n total += value;\n to = total;\n }\n\n callback(data, {\n category: this.categoryAxis.categoryAt(categoryIx),\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx,\n total: total,\n runningTotal: runningTotal,\n from: from,\n to: to,\n isVertical: isVertical\n });\n }\n }\n }\n\n updateRange(value, fields) {\n super.updateRange({ value: fields.to }, fields);\n }\n\n aboveAxis(point) {\n return point.value >= 0;\n }\n\n plotRange(point) {\n return [ point.from, point.to ];\n }\n\n createSegments() {\n const series = this.options.series;\n const seriesPoints = this.seriesPoints;\n const segments = this.segments = [];\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const points = seriesPoints[seriesIx];\n\n if (points) {\n let prevPoint;\n for (let pointIx = 0; pointIx < points.length; pointIx++) {\n const point = points[pointIx];\n\n if (point && prevPoint) {\n const segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this.append(segment);\n }\n\n prevPoint = point;\n }\n }\n }\n }\n}\n\nexport default WaterfallChart;","function trendlineFactory(registry, type, context) {\n const impl = registry[String(type)];\n if (impl) {\n return impl(context);\n }\n\n return null;\n}\n\nexport default trendlineFactory;\n","function calculateSlope(sourceValues, valueGetter) {\n let x = 0;\n let y = 0;\n let x2 = 0;\n let xy = 0;\n let count = 0;\n let slope, intercept;\n let xMin = Number.MAX_VALUE;\n let xMax = Number.MIN_VALUE;\n\n for (let i = 0; i < sourceValues.length; i++) {\n const value = sourceValues[i];\n const { xValue, yValue } = valueGetter(value);\n\n if (isFinite(xValue) && xValue !== null && isFinite(yValue) && yValue !== null) {\n xMin = Math.min(xValue, xMin);\n xMax = Math.max(xValue, xMax);\n\n count++;\n x += xValue;\n y += yValue;\n x2 += Math.pow(xValue, 2);\n xy += xValue * yValue;\n }\n }\n\n if (count > 0) {\n slope = (count * xy - x * y) / (count * x2 - Math.pow(x, 2));\n intercept = (y - slope * x) / count;\n }\n\n return { slope, intercept, count, xMin, xMax };\n}\n\nexport default calculateSlope;\n","import { MIN_MOVING_AVERAGE_PERIOD } from '../constants';\n\nfunction calculateMovingAverage(sourceValues, valueGetter, period) {\n const averagePoints = [];\n const values = [];\n const start = Math.max(MIN_MOVING_AVERAGE_PERIOD, period) - 1;\n\n let end = 0;\n let sum = 0;\n\n for (let i = 0; i < sourceValues.length; i++) {\n const value = sourceValues[i];\n const { xValue, yValue } = valueGetter(value);\n\n if (isFinite(yValue) && yValue !== null) {\n values.push(yValue);\n sum += yValue;\n end = Math.max(i, end);\n } else {\n values.push(null);\n }\n\n if (i >= start) {\n const count = values.filter(value => value !== null).length;\n const lastValue = values.shift() || 0;\n\n if (count > 0) {\n const average = sum / count;\n averagePoints.push([xValue, average]);\n\n sum -= lastValue;\n continue;\n }\n }\n\n averagePoints.push([xValue, null]);\n }\n\n return averagePoints.slice(0, end + 1);\n}\n\nexport default calculateMovingAverage;\n","import linearTrendline from './linear-trendline';\nimport movingAverageTrendline from './moving-average';\nimport { TRENDLINE_LINEAR, TRENDLINE_MOVING_AVERAGE } from '../constants';\n\nconst registry = {};\nregistry[TRENDLINE_LINEAR] = linearTrendline;\nregistry[TRENDLINE_MOVING_AVERAGE] = movingAverageTrendline;\n\nexport default registry;\n","import calculateSlope from './calculate-slope';\n\nfunction linearTrendline(context) {\n const {\n options,\n categoryAxis,\n seriesValues\n } = context;\n\n const { data } = getData({ seriesValues, categoryAxis, options });\n if (data) {\n return Object.assign({}, options,\n\n {type: 'line',\n data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n}\n\nconst valueGetter = fieldName => ({ categoryIx, valueFields }) =>\n ({ xValue: categoryIx + 1, yValue: valueFields[fieldName] });\n\nfunction getData({ seriesValues, categoryAxis, options }) {\n const { slope, intercept, count } = calculateSlope(seriesValues(), valueGetter(options.field));\n\n if (count > 0) {\n const data = [];\n const totalRange = categoryAxis.totalRangeIndices();\n const currentRange = categoryAxis.currentRangeIndices();\n const range = {\n min: Math.floor(Math.max(currentRange.min - 1, totalRange.min)),\n max: Math.ceil(Math.min(currentRange.max + 2, totalRange.max))\n };\n\n for (let i = range.min; i < range.max; i++) {\n data[i] = {\n category: categoryAxis.categoryAt(i, true),\n value: slope * (i + 1) + intercept\n };\n }\n\n return { data };\n }\n\n return { data: null };\n}\n\nexport default linearTrendline;\n","import { MIN_MOVING_AVERAGE_PERIOD } from '../constants';\nimport calculateMovingAverage from './calculate-moving-average';\n\nfunction movingAverageTrendline(context) {\n const { options } = context;\n\n const { data } = getData(context);\n if (data) {\n return Object.assign({}, options,\n\n {type: 'line',\n data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n}\n\nconst valueGetter = fieldName => ({ categoryIx, valueFields }) =>\n ({ xValue: categoryIx, yValue: valueFields[fieldName] });\n\nfunction calculatePoints({ options, categoryAxis, seriesValues }) {\n const period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;\n const totalRange = categoryAxis.totalRangeIndices();\n const currentRange = categoryAxis.currentRangeIndices();\n const range = {\n min: Math.floor(Math.max(currentRange.min - period, totalRange.min)),\n max: Math.ceil(Math.min(currentRange.max + period + 2, totalRange.max))\n };\n\n return calculateMovingAverage(seriesValues(range), valueGetter(options.field), period);\n}\n\nfunction getData(context) {\n const { categoryAxis } = context;\n const points = calculatePoints(context);\n const data = [];\n points.forEach(([categoryIx, value]) => {\n data[categoryIx] = {\n category: categoryAxis.categoryAt(categoryIx, true),\n value\n };\n });\n\n if (data.length > 0) {\n return { data };\n }\n\n return { data: null };\n}\n\nexport default movingAverageTrendline;\n","import PlotAreaBase from './plotarea-base';\nimport AxisGroupRangeTracker from '../axis-group-range-tracker';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\nimport SeriesAggregator from '../aggregates/series-aggregator';\nimport DefaultAggregates from '../aggregates/default-aggregates';\nimport SeriesBinder from '../series-binder';\nimport BarChart from '../bar-chart/bar-chart';\nimport RangeBarChart from '../range-bar-chart/range-bar-chart';\nimport BulletChart from '../bullet-chart/bullet-chart';\nimport LineChart from '../line-chart/line-chart';\nimport AreaChart from '../area-chart/area-chart';\nimport RangeAreaChart from '../range-area-chart/range-area-chart';\nimport OHLCChart from '../ohlc-chart/ohlc-chart';\nimport CandlestickChart from '../candlestick-chart/candlestick-chart';\nimport BoxPlotChart from '../box-plot-chart/box-plot-chart';\nimport WaterfallChart from '../waterfall-chart/waterfall-chart';\nimport trendlineFactory from '../trendlines/trendline-factory';\nimport trendlineRegistry from '../trendlines/trendline-registry';\n\nimport { CategoryAxis, DateCategoryAxis, NumericAxis, LogarithmicAxis, Point } from '../../core';\n\nimport { appendIfNotNull, categoriesCount, createOutOfRangePoints, equalsIgnoreCase, filterSeriesByType,\n getDateField, getField, isDateAxis, singleItemOrArray } from '../utils';\n\nimport { BAR, COLUMN, BULLET, VERTICAL_BULLET, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n RANGE_AREA, VERTICAL_RANGE_AREA, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL,\n BOX_PLOT, VERTICAL_BOX_PLOT, OHLC, CANDLESTICK, LOGARITHMIC, STEP, EQUALLY_SPACED_SERIES } from '../constants';\n\nimport { DATE, MAX_VALUE } from '../../common/constants';\nimport { setDefaultOptions, inArray, deepExtend, defined, eventElement, grep } from '../../common';\n\nconst AREA_SERIES = [ AREA, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA ];\nconst OUT_OF_RANGE_SERIES = [ LINE, VERTICAL_LINE ].concat(AREA_SERIES);\n\nclass CategoricalPlotArea extends PlotAreaBase {\n\n initFields(series) {\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n this._seriesPointsCache = {};\n this._currentPointsCache = {};\n\n if (series.length > 0) {\n this.invertAxes = inArray(\n series[0].type, [ BAR, BULLET, VERTICAL_LINE, VERTICAL_AREA, VERTICAL_RANGE_AREA,\n RANGE_BAR, HORIZONTAL_WATERFALL, VERTICAL_BOX_PLOT ]\n );\n\n for (let i = 0; i < series.length; i++) {\n const stack = series[i].stack;\n if (stack && stack.type === \"100%\") {\n this.stack100 = true;\n break;\n }\n }\n }\n }\n\n render(panes = this.panes) {\n this.series = [...this.originalSeries];\n this.createCategoryAxes(panes);\n\n this.aggregateCategories(panes);\n this.createTrendlineSeries(panes);\n\n this.createCategoryAxesLabels(panes);\n this.createCharts(panes);\n this.createValueAxes(panes);\n }\n\n removeAxis(axis) {\n const axisName = axis.options.name;\n\n super.removeAxis(axis);\n\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n }\n\n trendlineFactory(options, series) {\n const categoryAxis = this.seriesCategoryAxis(options);\n const seriesValues = this.seriesValues.bind(this, series.index);\n\n const trendline = trendlineFactory(trendlineRegistry, options.type, {\n options,\n categoryAxis,\n seriesValues\n });\n\n if (trendline) {\n // Inherit settings\n trendline.categoryAxis = series.categoryAxis;\n trendline.valueAxis = series.valueAxis;\n\n return this.filterSeries(trendline, categoryAxis);\n }\n\n return trendline;\n }\n\n trendlineAggregateForecast() {\n return this.series\n .map(series => (series.trendline || {}).forecast)\n .filter(forecast => forecast !== undefined)\n .reduce((result, forecast) => ({\n before: Math.max(result.before, forecast.before || 0),\n after: Math.max(result.after, forecast.after || 0)\n }), { before: 0, after: 0 });\n }\n\n seriesValues(seriesIx, range) {\n const result = [];\n\n let series = this.srcSeries[seriesIx];\n const categoryAxis = this.seriesCategoryAxis(series);\n const dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n if (dateAxis) {\n this._seriesPointsCache = {};\n this._currentPointsCache = {};\n categoryAxis.options.dataItems = [];\n series = this.aggregateSeries(series, categoryAxis, categoryAxis.totalRangeIndices());\n }\n\n const min = range ? range.min : 0;\n const max = range ? range.max : series.data.length;\n for (let categoryIx = min; categoryIx < max; categoryIx++) {\n const data = this.bindPoint(series, categoryIx);\n result.push({ categoryIx, category: data.fields.category, valueFields: data.valueFields });\n }\n\n return result;\n }\n\n createCharts(panes) {\n const seriesByPane = this.groupSeriesByPane();\n\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n const paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this.addToLegend(paneSeries);\n\n const visibleSeries = this.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n\n const groups = this.groupSeriesByCategoryAxis(visibleSeries);\n for (let groupIx = 0; groupIx < groups.length; groupIx++) {\n this.createChartGroup(groups[groupIx], pane);\n }\n }\n }\n\n createChartGroup(series, pane) {\n this.createAreaChart(\n filterSeriesByType(series, [ AREA, VERTICAL_AREA ]), pane\n );\n\n this.createRangeAreaChart(\n filterSeriesByType(series, [ RANGE_AREA, VERTICAL_RANGE_AREA ]), pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ COLUMN, BAR ]), pane\n );\n\n this.createRangeBarChart(\n filterSeriesByType(series, [ RANGE_COLUMN, RANGE_BAR ]), pane\n );\n\n this.createBulletChart(\n filterSeriesByType(series, [ BULLET, VERTICAL_BULLET ]), pane\n );\n\n this.createCandlestickChart(\n filterSeriesByType(series, CANDLESTICK), pane\n );\n\n this.createBoxPlotChart(\n filterSeriesByType(series, [ BOX_PLOT, VERTICAL_BOX_PLOT ]), pane\n );\n\n this.createOHLCChart(\n filterSeriesByType(series, OHLC), pane\n );\n\n this.createWaterfallChart(\n filterSeriesByType(series, [ WATERFALL, HORIZONTAL_WATERFALL ]), pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ LINE, VERTICAL_LINE ]), pane\n );\n }\n\n aggregateCategories(panes) {\n const series = [...this.series];\n const processedSeries = [];\n this._currentPointsCache = {};\n this._seriesPointsCache = this._seriesPointsCache || {};\n\n for (let i = 0; i < series.length; i++) {\n let currentSeries = series[i];\n\n if (!this.isTrendline(currentSeries)) {\n const categoryAxis = this.seriesCategoryAxis(currentSeries);\n const axisPane = this.findPane(categoryAxis.options.pane);\n const dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this.aggregateSeries(currentSeries, categoryAxis, categoryAxis.currentRangeIndices());\n } else {\n currentSeries = this.filterSeries(currentSeries, categoryAxis);\n }\n }\n\n processedSeries.push(currentSeries);\n }\n\n this._seriesPointsCache = this._currentPointsCache;\n this._currentPointsCache = null;\n\n this.srcSeries = series;\n this.series = processedSeries;\n }\n\n filterSeries(series, categoryAxis) {\n const dataLength = (series.data || {}).length;\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n\n if (!(defined(categoryAxis.options.min) || defined(categoryAxis.options.max))) {\n return series;\n }\n\n const range = categoryAxis.currentRangeIndices();\n const outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n const currentSeries = deepExtend({}, series);\n\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n\n if (outOfRangePoints) {\n createOutOfRangePoints(currentSeries, range, dataLength, (idx) => ({\n item: series.data[idx],\n category: categoryAxis.categoryAt(idx, true),\n categoryIx: idx - range.min\n }), (idx) => defined(series.data[idx]));\n }\n\n return currentSeries;\n }\n\n clearSeriesPointsCache() {\n this._seriesPointsCache = {};\n }\n\n seriesSourcePoints(series, categoryAxis) {\n const key = `${ series.index };${ categoryAxis.categoriesHash() }`;\n if (this._seriesPointsCache && this._seriesPointsCache[key]) {\n this._currentPointsCache[key] = this._seriesPointsCache[key];\n return this._seriesPointsCache[key];\n }\n\n const axisOptions = categoryAxis.options;\n const srcCategories = axisOptions.srcCategories;\n const dateAxis = equalsIgnoreCase(axisOptions.type, DATE);\n const srcData = series.data;\n const getFn = dateAxis ? getDateField : getField;\n const result = [];\n if (!dateAxis) {\n categoryAxis.mapCategories(); //fixes major performance issue caused by searching for the index for large data\n }\n\n for (let idx = 0; idx < srcData.length; idx++) {\n let category;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[idx], this.chartService.intl);\n } else {\n category = srcCategories[idx];\n }\n\n if (defined(category) && category !== null) {\n const categoryIx = categoryAxis.totalIndex(category);\n result[categoryIx] = result[categoryIx] || { items: [], category: category };\n result[categoryIx].items.push(idx);\n }\n }\n\n this._currentPointsCache[key] = result;\n\n return result;\n }\n\n aggregateSeries(series, categoryAxis, range) {\n const srcData = series.data;\n if (!srcData.length) {\n return series;\n }\n\n const srcPoints = this.seriesSourcePoints(series, categoryAxis);\n const result = deepExtend({}, series);\n const aggregator = new SeriesAggregator(deepExtend({}, series), SeriesBinder.current, DefaultAggregates.current);\n const data = result.data = [];\n\n const dataItems = categoryAxis.options.dataItems || [];\n\n const categoryItem = (idx) => {\n const categoryIdx = idx - range.min;\n let point = srcPoints[idx];\n if (!point) {\n point = srcPoints[idx] = {};\n }\n\n point.categoryIx = categoryIdx;\n\n if (!point.item) {\n const category = categoryAxis.categoryAt(idx, true);\n point.category = category;\n point.item = aggregator.aggregatePoints(point.items, category);\n }\n\n return point;\n };\n\n for (let idx = range.min; idx <= range.max; idx++) {\n const point = categoryItem(idx);\n data[point.categoryIx] = point.item;\n\n if (point.items && point.items.length) {\n dataItems[point.categoryIx] = point.item;\n }\n }\n\n if (inArray(result.type, OUT_OF_RANGE_SERIES)) {\n createOutOfRangePoints(result, range, categoryAxis.totalCount(), categoryItem, (idx) => srcPoints[idx]);\n }\n\n categoryAxis.options.dataItems = dataItems;\n\n return result;\n }\n\n appendChart(chart, pane) {\n const series = chart.options.series;\n const categoryAxis = this.seriesCategoryAxis(series[0]);\n let categories = categoryAxis.options.categories;\n let categoriesToAdd = Math.max(0, categoriesCount(series) - categories.length);\n\n if (categoriesToAdd > 0) {//consider setting an option to axis instead of adding fake categories\n categories = categoryAxis.options.categories = categoryAxis.options.categories.slice(0);\n while (categoriesToAdd--) {\n categories.push(\"\");\n }\n }\n\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n\n super.appendChart(chart, pane);\n }\n\n // TODO: Refactor, optionally use series.pane option\n seriesPaneName(series) {\n const options = this.options;\n const axisName = series.axis;\n const axisOptions = [].concat(options.valueAxis);\n const axis = grep(axisOptions, function(a) { return a.name === axisName; })[0];\n const panes = options.panes || [ {} ];\n const defaultPaneName = (panes[0] || {}).name || \"default\";\n const paneName = (axis || {}).pane || defaultPaneName;\n\n return paneName;\n }\n\n seriesCategoryAxis(series) {\n const axisName = series.categoryAxis;\n const axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n\n if (!axis) {\n throw new Error(\"Unable to locate category axis with name \" + axisName);\n }\n\n return axis;\n }\n\n stackableChartOptions(firstSeries, pane) {\n const stack = firstSeries.stack;\n const isStacked100 = stack && stack.type === \"100%\";\n const clip = pane.options.clip;\n\n return {\n isStacked: stack,\n isStacked100: isStacked100,\n clip: clip\n };\n }\n\n groupSeriesByCategoryAxis(series) {\n const categoryAxes = [];\n const unique = {};\n for (let idx = 0; idx < series.length; idx++) {\n const name = series[idx].categoryAxis || \"$$default$$\";\n if (!unique.hasOwnProperty(name)) {\n unique[name] = true;\n categoryAxes.push(name);\n }\n }\n\n const groups = [];\n for (let axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\n const axis = categoryAxes[axisIx];\n const axisSeries = groupSeries(series, axis, axisIx);\n if (axisSeries.length === 0) {\n continue;\n }\n\n groups.push(axisSeries);\n }\n\n return groups;\n }\n\n createBarChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const barChart = new BarChart(this, Object.assign({\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n }, this.stackableChartOptions(firstSeries, pane)));\n\n this.appendChart(barChart, pane);\n }\n\n createRangeBarChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const rangeColumnChart = new RangeBarChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n\n this.appendChart(rangeColumnChart, pane);\n }\n\n createBulletChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const bulletChart = new BulletChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(bulletChart, pane);\n }\n\n createLineChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const lineChart = new LineChart(this, Object.assign({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n\n this.appendChart(lineChart, pane);\n }\n\n createAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const areaChart = new AreaChart(this, Object.assign({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n\n this.appendChart(areaChart, pane);\n }\n\n createRangeAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n\n this.appendChart(rangeAreaChart, pane);\n }\n\n createOHLCChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const chart = new OHLCChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n }\n\n createCandlestickChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const chart = new CandlestickChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n }\n\n createBoxPlotChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const chart = new BoxPlotChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n }\n\n createWaterfallChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const waterfallChart = new WaterfallChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n\n this.appendChart(waterfallChart, pane);\n }\n\n axisRequiresRounding(categoryAxisName, categoryAxisIndex) {\n const centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n\n for (let seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n const currentSeries = this.series[seriesIx];\n if (inArray(currentSeries.type, AREA_SERIES)) {\n const line = currentSeries.line;\n if (line && line.style === STEP) {\n centeredSeries.push(currentSeries);\n }\n }\n }\n\n for (let seriesIx = 0; seriesIx < centeredSeries.length; seriesIx++) {\n const seriesAxis = centeredSeries[seriesIx].categoryAxis || \"\";\n if (seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) {\n return true;\n }\n }\n }\n\n aggregatedAxis(categoryAxisName, categoryAxisIndex) {\n const series = this.series;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const seriesAxis = series[seriesIx].categoryAxis || \"\";\n if ((seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) && series[seriesIx].categoryField) {\n return true;\n }\n }\n }\n\n createCategoryAxesLabels() {\n const axes = this.axes;\n for (let i = 0; i < axes.length; i++) {\n if (axes[i] instanceof CategoryAxis) {\n axes[i].createLabels();\n }\n }\n }\n\n createCategoryAxes(panes) {\n const invertAxes = this.invertAxes;\n const definitions = [].concat(this.options.categoryAxis);\n const axes = [];\n\n for (let i = 0; i < definitions.length; i++) {\n let axisOptions = definitions[i];\n const axisPane = this.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n const { name, categories = [] } = axisOptions;\n axisOptions = deepExtend({\n vertical: invertAxes,\n reverse: !invertAxes && this.chartService.rtl,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this.isJustified();\n }\n\n if (this.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n\n let categoryAxis;\n\n if (isDateAxis(axisOptions, categories[0])) {\n axisOptions._forecast = this.trendlineAggregateForecast();\n categoryAxis = new DateCategoryAxis(axisOptions, this.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this.chartService);\n }\n\n definitions[i].categories = categoryAxis.options.srcCategories;\n\n if (name) {\n if (this.namedCategoryAxes[name]) {\n throw new Error(`Category axis with name ${ name } is already defined`);\n }\n this.namedCategoryAxes[name] = categoryAxis;\n }\n\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this.appendAxis(categoryAxis);\n }\n }\n\n const primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n }\n\n isJustified() {\n const series = this.series;\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n if (!inArray(currentSeries.type, AREA_SERIES)) {\n return false;\n }\n }\n\n return true;\n }\n\n createValueAxes(panes) {\n const tracker = this.valueAxisRangeTracker;\n const defaultRange = tracker.query();\n const definitions = [].concat(this.options.valueAxis);\n const invertAxes = this.invertAxes;\n const baseOptions = { vertical: !invertAxes, reverse: invertAxes && this.chartService.rtl };\n const axes = [];\n\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: \"P0\" };\n }\n\n for (let i = 0; i < definitions.length; i++) {\n const axisOptions = definitions[i];\n const axisPane = this.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n const name = axisOptions.name;\n const defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n const range = tracker.query(name) || defaultRange || defaultAxisRange;\n\n if (i === 0 && range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n let axisType;\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = LogarithmicAxis;\n } else {\n axisType = NumericAxis;\n }\n\n const valueAxis = new axisType(range.min, range.max,\n deepExtend({}, baseOptions, axisOptions),\n this.chartService\n );\n\n if (name) {\n if (this.namedValueAxes[name]) {\n throw new Error(`Value axis with name ${ name } is already defined`);\n }\n this.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n\n axes.push(valueAxis);\n this.appendAxis(valueAxis);\n }\n }\n\n const primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\n }\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const pane = this.pointPane(point);\n const categories = [];\n const values = [];\n\n if (!pane) {\n return;\n }\n\n const allAxes = pane.axes;\n for (let i = 0; i < allAxes.length; i++) {\n const axis = allAxes[i];\n if (axis.getValue) {\n appendIfNotNull(values, axis.getValue(point));\n } else {\n appendIfNotNull(categories, axis.getCategory(point));\n }\n }\n\n if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\n }\n\n if (categories.length > 0 && values.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n category: singleItemOrArray(categories),\n value: singleItemOrArray(values)\n });\n }\n }\n\n pointPane(point) {\n const panes = this.panes;\n\n for (let i = 0; i < panes.length; i++) {\n const currentPane = panes[i];\n if (currentPane.contentBox.containsPoint(point)) {\n return currentPane;\n }\n }\n }\n\n updateAxisOptions(axis, options) {\n updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\n }\n}\n\nfunction updateAxisOptions(targetOptions, axis, options) {\n const axesOptions = axis instanceof CategoryAxis ? [].concat(targetOptions.categoryAxis) : [].concat(targetOptions.valueAxis);\n deepExtend(axesOptions[axis.axisIndex], options);\n}\n\nfunction groupSeries(series, axis, axisIx) {\n return grep(series, function(s) {\n return (axisIx === 0 && !s.categoryAxis) || (s.categoryAxis === axis);\n });\n}\n\nsetDefaultOptions(CategoricalPlotArea, {\n categoryAxis: {},\n valueAxis: {}\n});\n\ndeepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n\nexport default CategoricalPlotArea;\n","import Node from './node';\nimport { defined, isTransparent } from '../util';\nimport { DASH_ARRAYS, SOLID, BUTT } from '../core/constants';\nimport { NONE, POINT_DIGITS } from './constants';\nimport renderAllAttr from './utils/render-all-attributes';\nimport renderAttr from './utils/render-attribute';\n\nconst ATTRIBUTE_MAP = {\n \"fill.opacity\": \"fill-opacity\",\n \"stroke.color\": \"stroke\",\n \"stroke.width\": \"stroke-width\",\n \"stroke.opacity\": \"stroke-opacity\"\n};\n\nclass PathNode extends Node {\n\n geometryChange() {\n this.attr(\"d\", this.renderData());\n this.invalidate();\n }\n\n optionsChange(e) {\n switch (e.field) {\n case \"fill\":\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr(\"fill\");\n }\n break;\n\n case \"fill.color\":\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n\n case \"stroke\":\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr(\"stroke\");\n }\n break;\n\n case \"transform\":\n this.transformChange(e.value);\n break;\n\n default:\n const name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n\n this.accessibilityOptionsChange(e);\n\n super.optionsChange(e);\n }\n\n content() {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n }\n\n renderData() {\n return this.srcElement.toString(POINT_DIGITS) || undefined;\n }\n\n mapStroke(stroke) {\n const attrs = [];\n\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([ \"stroke\", stroke.color ]);\n attrs.push([ \"stroke-width\", stroke.width ]);\n attrs.push([ \"stroke-linecap\", this.renderLinecap(stroke) ]);\n attrs.push([ \"stroke-linejoin\", stroke.lineJoin ]);\n\n if (defined(stroke.opacity)) {\n attrs.push([ \"stroke-opacity\", stroke.opacity ]);\n }\n\n if (defined(stroke.dashType)) {\n attrs.push([ \"stroke-dasharray\", this.renderDashType(stroke) ]);\n }\n } else {\n attrs.push([ \"stroke\", NONE ]);\n }\n\n return attrs;\n }\n\n renderStroke() {\n return renderAllAttr(\n this.mapStroke(this.srcElement.options.stroke)\n );\n }\n\n renderDashType(stroke) {\n const { dashType, width = 1 } = stroke;\n\n if (dashType && dashType !== SOLID) {\n const dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n const result = [];\n\n for (let i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n\n return result.join(\" \");\n }\n }\n\n renderLinecap(stroke) {\n const { dashType, lineCap } = stroke;\n\n return (dashType && dashType !== \"solid\") ? BUTT : lineCap;\n }\n\n mapFill(fill) {\n const attrs = [];\n if (!(fill && fill.nodeType === \"Gradient\")) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([ \"fill\", fill.color ]);\n\n if (defined(fill.opacity)) {\n attrs.push([ \"fill-opacity\", fill.opacity ]);\n }\n } else {\n attrs.push([ \"fill\", NONE ]);\n }\n }\n\n return attrs;\n }\n\n renderFill() {\n return renderAllAttr(\n this.mapFill(this.srcElement.options.fill)\n );\n }\n\n template() {\n return ``;\n }\n}\n\nexport default PathNode;\n","import { POINT_DIGITS } from './constants';\nimport PathNode from './path-node';\n\nclass ArcNode extends PathNode {\n renderData() {\n return this.srcElement.toPath().toString(POINT_DIGITS);\n }\n}\n\nexport default ArcNode;\n","import PathNode from './path-node';\n\nclass CircleNode extends PathNode {\n\n geometryChange() {\n const center = this.center();\n this.attr(\"cx\", center.x);\n this.attr(\"cy\", center.y);\n this.attr(\"r\", this.radius());\n this.invalidate();\n }\n\n center() {\n return this.srcElement.geometry().center;\n }\n\n radius() {\n return this.srcElement.geometry().radius;\n }\n\n template() {\n return ``;\n }\n}\n\nexport default CircleNode;\n","import Node from './node';\nimport renderAttr from './utils/render-attribute';\n\nclass GroupNode extends Node {\n template() {\n return `${ this.renderChildren() }`;\n }\n\n optionsChange(e) {\n const { field, value } = e;\n\n if (field === \"transform\") {\n this.transformChange(value);\n }\n\n this.accessibilityOptionsChange(e);\n\n super.optionsChange(e);\n }\n}\n\nexport default GroupNode;\n","const ampRegExp = /&/g;\nconst ltRegExp = //g;\n\nexport default function htmlEncode(value) {\n return String(value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\n}","import PathNode from './path-node';\nimport renderAllAttr from './utils/render-all-attributes';\nimport { htmlEncode } from '../common';\n\nclass ImageNode extends PathNode {\n\n geometryChange() {\n this.allAttr(this.mapPosition());\n this.invalidate();\n }\n\n optionsChange(e) {\n if (e.field === \"src\") {\n this.allAttr(this.mapSource());\n }\n\n super.optionsChange(e);\n }\n\n mapPosition() {\n const rect = this.srcElement.rect();\n const tl = rect.topLeft();\n\n return [\n [ \"x\", tl.x ],\n [ \"y\", tl.y ],\n [ \"width\", rect.width() + \"px\" ],\n [ \"height\", rect.height() + \"px\" ]\n ];\n }\n\n renderPosition() {\n return renderAllAttr(this.mapPosition());\n }\n\n mapSource(encode) {\n let src = this.srcElement.src();\n\n if (encode) {\n src = htmlEncode(src);\n }\n\n return [ [ \"xlink:href\", src ] ];\n }\n\n renderSource() {\n return renderAllAttr(this.mapSource(true));\n }\n\n template() {\n return `` +\n ``;\n }\n}\n\nexport default ImageNode;\n","import { POINT_DIGITS } from './constants';\nimport PathNode from './path-node';\n\nclass MultiPathNode extends PathNode {\n renderData() {\n return this.srcElement.toString(POINT_DIGITS) || 'undefined';\n }\n}\n\nexport default MultiPathNode;\n","import PathNode from './path-node';\n\nclass RectNode extends PathNode {\n\n geometryChange() {\n const geometry = this.srcElement.geometry();\n this.attr(\"x\", geometry.origin.x);\n this.attr(\"y\", geometry.origin.y);\n this.attr(\"width\", geometry.size.width);\n this.attr(\"height\", geometry.size.height);\n this.attr(\"rx\", geometry.cornerRadius[0]);\n this.attr(\"ry\", geometry.cornerRadius[1]);\n this.invalidate();\n }\n\n size() {\n return this.srcElement.geometry().size;\n }\n\n origin() {\n return this.srcElement.geometry().origin;\n }\n\n rx() {\n return this.srcElement.geometry().cornerRadius[0];\n }\n\n ry() {\n return this.srcElement.geometry().cornerRadius[1];\n }\n\n template() {\n return ``;\n }\n}\n\nexport default RectNode;\n","import PathNode from './path-node';\nimport renderStyle from './utils/render-style';\nimport renderAttr from './utils/render-attribute';\nimport { htmlEncode, support } from '../common';\nimport { normalizeText } from '../text-metrics';\n\nconst ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n\nfunction decodeEntities(text) {\n if (!text || typeof text !== \"string\" || !ENTITY_REGEX.test(text)) {\n return text;\n }\n\n const element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n\n return text.replace(ENTITY_REGEX, (match) => {\n element.innerHTML = match;\n\n return element.textContent || element.innerText;\n });\n}\n\nif (typeof document !== \"undefined\") {\n decodeEntities._element = document.createElement(\"span\");\n}\n\nclass TextNode extends PathNode {\n\n geometryChange() {\n const pos = this.pos();\n this.attr(\"x\", pos.x);\n this.attr(\"y\", pos.y);\n this.invalidate();\n }\n\n optionsChange(e) {\n if (e.field === \"font\") {\n this.attr(\"style\", renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === \"content\") {\n super.content(this.srcElement.content());\n }\n\n super.optionsChange(e);\n }\n\n mapStyle(encode) {\n const style = super.mapStyle(encode);\n let font = this.srcElement.options.font;\n\n if (encode) {\n font = htmlEncode(font);\n }\n\n style.push([ \"font\", font ], [ \"white-space\", \"pre\" ]);\n\n return style;\n }\n\n pos() {\n const pos = this.srcElement.position();\n const size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n }\n\n renderContent() {\n let content = this.srcElement.content();\n content = decodeEntities(content);\n content = htmlEncode(content);\n\n return normalizeText(content);\n }\n\n renderTextAnchor() {\n let anchor;\n\n if ((this.options || {}).rtl && !(support.browser.msie || support.browser.edge)) {\n anchor = 'end';\n }\n\n return renderAttr(\"text-anchor\", anchor);\n }\n\n template() {\n return `${ this.renderContent() }`;\n }\n}\n\nexport default TextNode;\n","import BaseSurface from '../core/surface';\nimport RootNode from './root-node';\nimport Group from '../shapes/group';\nimport transform from '../geometry/transform';\nimport renderSVG from './utils/render-svg';\nimport { SVG_NS } from './constants';\nimport { bindEvents, unbindEvents, elementStyles } from '../util';\n\nimport ArcNode from './arc-node';\nimport CircleNode from './circle-node';\nimport GroupNode from './group-node';\nimport ImageNode from './image-node';\nimport MultiPathNode from './multi-path-node';\nimport PathNode from './path-node';\nimport RectNode from './rect-node';\nimport TextNode from './text-node';\nimport NODE_MAP from './node-map';\n\nNODE_MAP.Arc = ArcNode;\nNODE_MAP.Circle = CircleNode;\nNODE_MAP.Group = GroupNode;\nNODE_MAP.Image = ImageNode;\nNODE_MAP.MultiPath = MultiPathNode;\nNODE_MAP.Path = PathNode;\nNODE_MAP.Rect = RectNode;\nNODE_MAP.Text = TextNode;\n\nconst RTL = 'rtl';\n\nfunction alignToScreen(element) {\n let ctm;\n\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) { } // eslint-disable-line no-empty\n\n if (ctm) {\n const left = - ctm.e % 1;\n const top = - ctm.f % 1;\n const style = element.style;\n\n if (left !== 0 || top !== 0) {\n style.left = left + \"px\";\n style.top = top + \"px\";\n }\n }\n}\n\nclass Surface extends BaseSurface {\n get type() {\n return \"svg\";\n }\n\n constructor(element, options) {\n super(element, options);\n\n this._root = new RootNode(Object.assign({\n rtl: elementStyles(element, 'direction').direction === RTL\n }, this.options));\n\n renderSVG(this.element, this._template(''));\n\n this._rootElement = this.element.firstElementChild;\n this._rootElement.style.width = '100%';\n this._rootElement.style.height = '100%';\n this._rootElement.style.overflow = 'hidden';\n\n alignToScreen(this._rootElement);\n\n this._root.attachTo(this._rootElement);\n\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n\n this.resize();\n }\n\n destroy() {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n\n super.destroy();\n }\n\n translate(offset) {\n const viewBox = `${ Math.round(offset.x) } ${ Math.round(offset.y) } ${ this._size.width } ${ this._size.height }`;\n\n this._offset = offset;\n this._rootElement.setAttribute(\"viewBox\", viewBox);\n }\n\n draw(element) {\n super.draw(element);\n this._root.load([ element ]);\n }\n\n clear() {\n super.clear();\n this._root.clear();\n }\n\n svg() {\n return \"\" + this._template();\n }\n\n exportVisual() {\n let { _visual: visual, _offset: offset } = this;\n\n if (offset) {\n const wrap = new Group();\n wrap.children.push(visual);\n\n wrap.transform(\n transform().translate(-offset.x, -offset.y)\n );\n\n visual = wrap;\n }\n\n return visual;\n }\n\n _resize() {\n if (this._offset) {\n this.translate(this._offset);\n }\n }\n\n _template(svgStyles) {\n const styles = typeof svgStyles === 'string' ? svgStyles :\n \"style='width: 100%; height: 100%; overflow: hidden;' \";\n return `${ this._root.render() }`;\n }\n}\n\nexport default Surface;\n","import { Class, logToConsole } from './common';\nimport SVGSurface from './svg/surface';\nimport CanvasSurface from './canvas/surface';\n\nlet instance;\nlet support;\n\nconst hasDocument = () => typeof document !== \"undefined\";\n\nconst supportsCanvas = () => hasDocument() &&\n document.createElement(\"canvas\").getContext;\n\nconst supportsSVG = () => hasDocument() &&\n document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\");\n\nclass SurfaceFactory extends Class {\n static get support() {\n if (!support) {\n support = {\n canvas: supportsCanvas(),\n svg: supportsSVG()\n };\n }\n\n return support;\n }\n\n static get current() {\n if (!instance) {\n instance = new SurfaceFactory();\n }\n\n return instance;\n }\n\n constructor() {\n super();\n\n this._items = [ {\n name: \"svg\",\n type: SVGSurface\n }, {\n name: \"canvas\",\n type: CanvasSurface\n } ];\n }\n\n create(element, options) {\n const items = this._items;\n let match = items[0];\n\n if (options && options.type) {\n const preferred = options.type.toLowerCase();\n for (let i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n\n if (match) {\n return new match.type(element, options);\n }\n\n logToConsole(\n \"Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n\" +\n `- The browser does not support SVG and Canvas. User agent: ${ navigator.userAgent }`);\n }\n}\n\nexport default SurfaceFactory;\n\n","import BaseSurface from './core/surface';\nimport SurfaceFactory from './surface-factory';\n\nclass Surface extends BaseSurface {\n static get support() {\n return SurfaceFactory.support;\n }\n\n static create(element, options) {\n return SurfaceFactory.current.create(element, options);\n }\n}\n\nexport default Surface;\n\n","import { Class } from '../common';\n\nclass Highlight extends Class {\n constructor() {\n super();\n\n this._points = [];\n }\n\n destroy() {\n this._points = [];\n }\n\n show(points, opacity) {\n const arrayPoints = [].concat(points);\n this.hide();\n\n for (let i = 0; i < arrayPoints.length; i++) {\n const point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this.togglePointHighlight(point, true, opacity);\n this._points.push(point);\n }\n }\n }\n\n togglePointHighlight(point, show, opacity) {\n const toggleHandler = (point.options.highlight || {}).toggle;\n if (toggleHandler) {\n const eventArgs = {\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n value: point.value,\n stackValue: point.stackValue,\n preventDefault: preventDefault,\n visual: point.highlightVisual(),\n show: show\n };\n toggleHandler(eventArgs);\n if (!eventArgs._defaultPrevented) {\n point.toggleHighlight(show, opacity);\n }\n } else {\n point.toggleHighlight(show, opacity);\n }\n }\n\n hide() {\n const points = this._points;\n while (points.length) {\n this.togglePointHighlight(points.pop(), false);\n }\n }\n\n isHighlighted(element) {\n const points = this._points;\n\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n if (element === point) {\n return true;\n }\n }\n\n return false;\n }\n}\n\nfunction preventDefault() {\n this._defaultPrevented = true;\n}\n\nexport default Highlight;\n","export default function acceptKey(e, mouseKey) {\n const key = (mouseKey || \"\").toLowerCase();\n const event = e.event;\n const accept = (key === \"none\" && !(event.ctrlKey || event.shiftKey || event.altKey)) || event[key + \"Key\"];\n\n return accept;\n}","export default function toChartAxisRanges(axisRanges) {\n const ranges = {};\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const axisRange = axisRanges[idx];\n if (axisRange.axis.options.name) {\n ranges[axisRange.axis.options.name] = {\n min: axisRange.range.min,\n max: axisRange.range.max\n };\n }\n }\n return ranges;\n}","import acceptKey from './accept-key';\nimport toChartAxisRanges from './to-chart-axis-ranges';\n\nimport { X, Y } from '../../common/constants';\nimport { Class, deepExtend } from '../../common';\n\nclass Pannable extends Class {\n constructor(plotArea, options) {\n super();\n\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n }\n\n start(e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n }\n\n move(e) {\n if (this._active) {\n const axisRanges = this.axisRanges = this._panAxes(e, X).concat(this._panAxes(e, Y));\n if (axisRanges.length) {\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n }\n }\n\n end() {\n const active = this._active;\n this._active = false;\n\n return active;\n }\n\n pan() {\n const { plotArea, axisRanges } = this;\n if (axisRanges.length) {\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const range = axisRanges[idx];\n plotArea.updateAxisOptions(range.axis, range.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n }\n\n destroy() {\n delete this.plotArea;\n }\n\n _panAxes(e, position) {\n const plotArea = this.plotArea;\n const delta = -e[position].delta;\n const lock = (this.options.lock || \"\").toLowerCase();\n const updatedAxes = [];\n\n if (delta !== 0 && (lock || \"\").toLowerCase() !== position) {\n const axes = plotArea.axes;\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n const range = axis.pan(delta);\n\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n\n return updatedAxes;\n }\n}\n\nPannable.prototype.options = {\n key: \"none\",\n lock: \"none\"\n};\n\nexport default Pannable;","import acceptKey from './accept-key';\nimport toChartAxisRanges from './to-chart-axis-ranges';\n\nimport { X, Y } from '../../common/constants';\nimport { Class, deepExtend, elementStyles, elementOffset, defined } from '../../common';\n\nclass ZoomSelection extends Class {\n constructor(chart, options) {\n super();\n\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n }\n\n createElement() {\n const marquee = this._marquee = document.createElement(\"div\");\n marquee.className = \"k-marquee\";\n const marqueeColor = document.createElement(\"div\");\n marqueeColor.className = \"k-marquee-color\";\n marquee.appendChild(marqueeColor);\n }\n\n removeElement() {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n }\n\n setStyles(styles) {\n elementStyles(this._marquee, styles);\n }\n\n start(e) {\n if (acceptKey(e, this.options.key)) {\n const chart = this.chart;\n const point = chart._eventCoordinates(e);\n const zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n const clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n\n if (zoomPane && clipBox) {\n const offset = this._elementOffset();\n\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n\n document.body.appendChild(this._marquee);\n this.setStyles({\n left: e.pageX + 1,\n top: e.pageY + 1,\n width: 0,\n height: 0\n });\n\n return true;\n }\n }\n return false;\n }\n\n _elementOffset() {\n const chartElement = this.chart.element;\n const { paddingLeft, paddingTop } = elementStyles(chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n const offset = elementOffset(chartElement);\n\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n }\n\n move(e) {\n const zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\n }\n\n end(e) {\n const zoomPane = this._zoomPane;\n if (zoomPane) {\n const elementOffset = this._elementOffset();\n const selectionPosition = this._selectionPosition(e);\n selectionPosition.left -= elementOffset.left;\n selectionPosition.top -= elementOffset.top;\n\n const start = { x: selectionPosition.left, y: selectionPosition.top };\n const end = { x: selectionPosition.left + selectionPosition.width, y: selectionPosition.top + selectionPosition.height };\n this._updateAxisRanges(start, end);\n\n this.removeElement();\n delete this._zoomPane;\n\n return toChartAxisRanges(this.axisRanges);\n }\n }\n\n zoom() {\n const axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n const plotArea = this.chart._plotArea;\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n }\n\n destroy() {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n }\n\n _updateAxisRanges(start, end) {\n const lock = (this.options.lock || \"\").toLowerCase();\n const axisRanges = [];\n\n const axes = this._zoomPane.axes;\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n const vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && defined(axis.axisIndex)) {\n const range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n }\n\n _selectionPosition(e) {\n const clipBox = this._zoomPaneClipBox;\n const startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n const { x: { location: pageX }, y: { location: pageY } } = e;\n const lock = (this.options.lock || \"\").toLowerCase();\n let left = Math.min(startLocation.x, pageX);\n let top = Math.min(startLocation.y, pageY);\n let width = Math.abs(startLocation.x - pageX);\n let height = Math.abs(startLocation.y - pageY);\n\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n}\n\nZoomSelection.prototype.options = {\n key: \"shift\",\n lock: \"none\"\n};\n\nexport default ZoomSelection;","\nimport toChartAxisRanges from './to-chart-axis-ranges';\n\nimport { X, Y } from '../../common/constants';\nimport { Class, deepExtend } from '../../common';\nimport { limitValue } from '../../drawing-utils';\n\n// Limit the zoom rate between 1% and 90% per mousewheel event.\n// At zoom rates close to 100% the axis range quickly becomes 0.\nconst MIN_RATE = 0.01;\nconst MAX_RATE = 0.9;\nconst DEFAULT_RATE = 0.3;\n\nclass MousewheelZoom extends Class {\n constructor(chart, options) {\n super();\n\n this.chart = chart;\n this.options = deepExtend({\n rate: DEFAULT_RATE\n }, this.options, options);\n }\n\n updateRanges(delta, coords) {\n const lock = (this.options.lock || \"\").toLowerCase();\n const axisRanges = [];\n const axes = this.chart._plotArea.axes;\n\n for (let idx = 0; idx < axes.length; idx++) {\n const axis = axes[idx];\n const vertical = axis.options.vertical;\n\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && axis.zoomRange) {\n const rate = limitValue(this.options.rate, MIN_RATE, MAX_RATE);\n const range = axis.zoomRange(-delta * rate, coords);\n\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n\n zoom() {\n const axisRanges = this.axisRanges;\n const plotArea = this.chart._plotArea;\n\n if (axisRanges && axisRanges.length && plotArea.updateAxisOptions) {\n for (let idx = 0; idx < axisRanges.length; idx++) {\n const axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n }\n\n destroy() {\n delete this.chart;\n }\n}\n\nexport default MousewheelZoom;\n","import createTransform from '../geometry/transform';\n\nexport default function translateToPoint(point, bbox, element) {\n const transofrm = element.transform() || createTransform();\n const matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n\n transofrm.matrix(matrix);\n element.transform(transofrm);\n}","\nexport default function alignStart(size, rect, align, axis, sizeField) {\n let start;\n if (align === \"start\") {\n start = rect.origin[axis];\n } else if (align === \"end\") {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n\n return start;\n}","\nexport default function alignStartReverse(size, rect, align, axis, sizeField) {\n let start;\n if (align === \"start\") {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === \"end\") {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n\n return start;\n}","import Group from './group';\nimport Size from '../geometry/size';\nimport Rect from '../geometry/rect';\nimport Point from '../geometry/point';\nimport createTransform from '../geometry/transform';\nimport translateToPoint from '../alignment/translate-to-point';\nimport alignStart from '../alignment/align-start';\nimport alignStartReverse from '../alignment/align-start-reverse';\n\nconst DEFAULT_OPTIONS = {\n alignContent: \"start\",\n justifyContent: \"start\",\n alignItems: \"start\",\n spacing: 0,\n orientation: \"horizontal\",\n lineSpacing: 0,\n wrap: true,\n revers: false\n};\n\nconst forEach = (elements, callback) => {\n elements.forEach(callback);\n};\n\nconst forEachReverse = (elements, callback) => {\n const length = elements.length;\n\n for (let idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n};\n\nclass Layout extends Group {\n\n constructor(rect, options) {\n super(Object.assign({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n }\n\n rect(value) {\n if (value) {\n this._rect = value;\n return this;\n }\n\n return this._rect;\n }\n\n _initMap() {\n const options = this.options;\n const fieldMap = this._fieldMap;\n if (options.orientation === \"horizontal\") {\n fieldMap.sizeField = \"width\";\n fieldMap.groupsSizeField = \"height\";\n fieldMap.groupAxis = \"x\";\n fieldMap.groupsAxis = \"y\";\n } else {\n fieldMap.sizeField = \"height\";\n fieldMap.groupsSizeField = \"width\";\n fieldMap.groupAxis = \"y\";\n fieldMap.groupsAxis = \"x\";\n }\n\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n }\n\n reflow() {\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n\n if (this.options.transform) {\n this.transform(null);\n }\n\n const options = this.options;\n const rect = this._rect;\n const { groups, groupsSize } = this._initGroups();\n const { sizeField, groupsSizeField, groupAxis, groupsAxis } = this._fieldMap;\n const groupOrigin = new Point();\n const elementOrigin = new Point();\n const size = new Size();\n let groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n let elementStart, group, groupBox;\n\n const arrangeElements = (bbox, idx) => {\n const element = group.elements[idx];\n\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n\n for (let groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this.forEach(group.bboxes, arrangeElements);\n\n groupStart += group.lineSize + options.lineSpacing;\n }\n\n if (!options.wrap && group.size > rect.size[sizeField]) {\n const scale = rect.size[sizeField] / groupBox.size[sizeField];\n const scaledStart = groupBox.topLeft().scale(scale, scale);\n const scaledSize = groupBox.size[groupsSizeField] * scale;\n const newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n const transform = createTransform();\n if (groupAxis === \"x\") {\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform.scale(scale, scale);\n\n this.transform(transform);\n }\n }\n\n _initGroups() {\n const { options, children } = this;\n const { lineSpacing, wrap, spacing } = options;\n const sizeField = this._fieldMap.sizeField;\n let group = this._newGroup();\n const groups = [];\n const addGroup = function() {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n let groupsSize = -lineSpacing;\n\n for (let idx = 0; idx < children.length; idx++) {\n let element = children[idx];\n let bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this._addToGroup(group, bbox, element);\n addGroup();\n group = this._newGroup();\n } else {\n addGroup();\n group = this._newGroup();\n this._addToGroup(group, bbox, element);\n }\n } else {\n this._addToGroup(group, bbox, element);\n }\n }\n }\n\n if (group.bboxes.length) {\n addGroup();\n }\n\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n }\n\n _addToGroup(group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n }\n\n _newGroup() {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n}\n\nexport default Layout;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Box, rectToBox } from '../../core';\n\nclass LegendLayout extends ChartElement {\n\n constructor(options, chartService) {\n super(options);\n\n this.chartService = chartService;\n }\n\n render() {\n const { children, options } = this;\n const vertical = options.vertical;\n\n this.visual = new draw.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? \"vertical\" : \"horizontal\",\n reverse: options.rtl,\n alignItems: vertical ? \"start\" : \"center\"\n });\n\n for (let idx = 0; idx < children.length; idx++) {\n let legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n }\n\n reflow(box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n const bbox = this.visual.clippedBBox();\n\n if (bbox) {\n this.box = rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n }\n\n renderVisual() {\n this.addVisual();\n }\n\n createVisual() {}\n}\n\nexport default LegendLayout;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { BoxElement, FloatElement, ShapeElement, TextBox } from '../../core';\nimport { LEGEND_ITEM_CLICK, LEGEND_ITEM_HOVER, LEGEND_ITEM_LEAVE } from '../constants';\nimport { CENTER, WHITE } from '../../common/constants';\nimport { deepExtend, eventElement } from '../../common';\n\nclass LegendItem extends BoxElement {\n constructor(options) {\n super(options);\n\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n }\n\n createContainer() {\n this.container = new FloatElement({ vertical: false, wrap: false, align: CENTER, spacing: this.options.spacing });\n this.append(this.container);\n }\n\n createMarker() {\n this.container.append(new ShapeElement(this.markerOptions()));\n }\n\n markerOptions() {\n const options = this.options;\n const markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: {\n color: markerColor\n }\n });\n }\n\n createLabel() {\n const options = this.options;\n const labelOptions = deepExtend({}, options.labels);\n\n this.container.append(new TextBox(options.text, labelOptions));\n }\n\n renderComplete() {\n super.renderComplete();\n\n const cursor = this.options.cursor || {};\n const eventSink = this._itemOverlay = draw.Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n\n this.appendVisual(eventSink);\n }\n\n click(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n }\n\n over(widget, e) {\n const args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n\n // Don't trigger point hover for legend items\n return true;\n }\n\n out(widget, e) {\n widget._unsetActivePoint();\n\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n }\n\n eventArgs(e) {\n const options = this.options;\n\n return {\n element: eventElement(e),\n text: options.text,\n series: options.series,\n seriesIndex: options.series.index,\n pointIndex: options.pointIndex\n };\n }\n\n renderVisual() {\n const options = this.options;\n const customVisual = options.visual;\n\n if (customVisual) {\n this.visual = customVisual({\n active: options.active,\n series: options.series,\n sender: this.getSender(),\n pointIndex: options.pointIndex,\n options: {\n markers: this.markerOptions(),\n labels: options.labels\n },\n createVisual: () => {\n this.createVisual();\n this.renderChildren();\n this.renderComplete();\n\n const defaultVisual = this.visual;\n\n delete this.visual;\n\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n super.renderVisual();\n }\n }\n}\n\nexport default LegendItem;\n","\nimport { ChartElement, BoxElement, Box, TextBox, FloatElement } from '../../core';\nimport LegendLayout from './legend-layout';\nimport LegendItem from './legend-item';\n\nimport { TOP, RIGHT, BOTTOM, LEFT, CENTER, X, Y, BLACK } from '../../common/constants';\nimport { deepExtend, defined, getTemplate, getSpacing, inArray, setDefaultOptions } from '../../common';\n\nconst HORIZONTAL = \"horizontal\";\nconst POINTER = \"pointer\";\nconst CUSTOM = \"custom\";\n\nclass Legend extends ChartElement {\n constructor(options, chartService = {}) {\n super(options);\n\n this.chartService = chartService;\n\n if (!inArray(this.options.position, [ TOP, RIGHT, BOTTOM, LEFT, CUSTOM ])) {\n this.options.position = RIGHT;\n }\n\n this.createContainers();\n\n this.createLegendTitle(options.title);\n\n this.createItems();\n }\n\n createContainers() {\n const options = this.options;\n const { position, align: userAlign } = options;\n let align = position;\n let vAlign = CENTER;\n\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [ TOP, BOTTOM ])) {\n if (userAlign === \"start\") {\n align = LEFT;\n } else if (userAlign === \"end\") {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === \"start\") {\n vAlign = TOP;\n } else if (userAlign === \"end\") {\n vAlign = BOTTOM;\n }\n }\n\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n\n if (this.hasTitle()) {\n this.itemsContainer = new BoxElement({\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n } else {\n this.itemsContainer = this.container;\n }\n\n this.append(this.container);\n }\n\n createItems() {\n const chartService = this.getService();\n const options = this.options;\n const vertical = this.isVertical();\n const innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing,\n rtl: chartService.rtl\n }, chartService);\n let items = options.items;\n\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n\n const count = items.length;\n\n for (let i = 0; i < count; i++) {\n let item = items[i];\n\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n\n innerElement.render();\n this.itemsContainer.append(innerElement);\n }\n\n isVertical() {\n const { orientation, position } = this.options;\n const vertical = (position === CUSTOM && orientation !== HORIZONTAL) ||\n (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [ LEFT, RIGHT ]));\n\n return vertical;\n }\n\n hasItems() {\n return this.container.children[0].children.length > 0;\n }\n\n reflow(targetBox) {\n const options = this.options;\n const legendBox = targetBox.clone();\n\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n\n if (this.hasTitle()) {\n this.title.reflow(new Box(this.container.box.x1, this.title.box.y1, this.container.box.x2, this.title.box.y2));\n }\n }\n\n containerReflow(targetBox) {\n const { options, container } = this;\n const { position, width, height } = options;\n const pos = position === TOP || position === BOTTOM ? X : Y;\n const vertical = this.isVertical();\n const alignTarget = targetBox.clone();\n let containerBox = targetBox.clone();\n\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n\n container.reflow(containerBox);\n containerBox = container.box;\n\n const box = containerBox.clone();\n\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n container.reflow(containerBox);\n }\n\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n\n this.box = box;\n }\n\n containerCustomReflow(targetBox) {\n const { options, container } = this;\n const { offsetX, offsetY, width, height } = options;\n const vertical = this.isVertical();\n let containerBox = targetBox.clone();\n\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n\n container.reflow(new Box(\n offsetX, offsetY,\n offsetX + containerBox.width(), offsetY + containerBox.height()\n ));\n }\n\n renderVisual() {\n if (this.hasItems()) {\n super.renderVisual();\n }\n }\n\n createLegendTitle(title) {\n let titleOptions = deepExtend({}, {\n color: BLACK,\n position: TOP,\n align: CENTER\n }, title);\n let text = titleOptions.text;\n\n if (!title || title.visible === false) {\n return;\n }\n\n if (defined(titleOptions) && titleOptions.visible) {\n const labelTemplate = getTemplate(titleOptions);\n if (labelTemplate) {\n text = labelTemplate({ text: text });\n } else if (titleOptions.format) {\n text = this.chartService.format.auto(titleOptions.format, text);\n }\n }\n\n this.title = new TextBox(text, titleOptions);\n\n this.createTitleLayout();\n\n this.appendTitleLayoutContent();\n }\n\n createTitleLayout() {\n this.layout = new FloatElement({\n vertical: true,\n wrap: false\n });\n\n this.container.append(this.layout);\n }\n\n hasTitle() {\n return Boolean(this.options.title && this.options.title.visible !== false);\n }\n\n appendTitleLayoutContent() {\n const options = this.options;\n\n if (options.title.position === BOTTOM) {\n this.layout.append(this.itemsContainer);\n this.layout.append(this.title);\n } else {\n this.layout.append(this.title);\n this.layout.append(this.itemsContainer);\n }\n }\n}\n\nsetDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\n spacing: 6,\n background: \"\",\n zIndex: 1,\n markers: {\n border: {\n width: 0\n },\n width: 15,\n height: 3,\n type: \"rect\",\n align: LEFT,\n vAlign: CENTER\n }\n});\n\nexport default Legend;\n","import filterSeriesByType from '../utils/filter-series-by-type';\nimport { Class } from '../../common';\nimport { TRENDLINE_SERIES } from '../constants';\n\nclass PlotAreaFactory extends Class {\n\n constructor() {\n super();\n\n this._registry = [];\n }\n\n register(type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n }\n\n create(srcSeries, options, chartService) {\n const registry = this._registry;\n let match = registry[0];\n let series;\n\n for (let idx = 0; idx < registry.length; idx++) {\n const entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n const trendlines = filterSeriesByType(srcSeries, TRENDLINE_SERIES);\n\n if ((series.length - trendlines.length) > 0) {\n match = entry;\n break;\n }\n }\n\n return new match.type(series, options, chartService);\n }\n}\n\nPlotAreaFactory.current = new PlotAreaFactory();\n\nexport default PlotAreaFactory;\n","import { DomEventsBuilder } from '../services';\n\nimport { DateCategoryAxis, Point } from '../core';\n\nimport { MOUSEWHEEL_DELAY, MOUSEWHEEL, SELECT_START, SELECT, SELECT_END } from './constants';\n\nimport { LEFT, RIGHT, MIN_VALUE, MAX_VALUE, X } from '../common/constants';\nimport { addClass, Class, removeClass, eventCoordinates, deepExtend, elementStyles, eventElement, setDefaultOptions, limitValue, round, bindEvents, unbindEvents, mousewheelDelta, hasClasses } from '../common';\nimport { parseDate } from '../date-utils';\n\nconst ZOOM_ACCELERATION = 3;\nconst SELECTOR_HEIGHT_ADJUST = 0.1;\n\nfunction createDiv(classNames) {\n const element = document.createElement(\"div\");\n if (classNames) {\n element.className = classNames;\n }\n\n return element;\n}\n\nfunction closestHandle(element) {\n let current = element;\n while (current && !hasClasses(current, \"k-handle\")) {\n current = current.parentNode;\n }\n\n return current;\n}\n\nclass Selection extends Class {\n constructor(chart, categoryAxis, options, observer) {\n super();\n\n const chartElement = chart.element;\n\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof DateCategoryAxis;\n\n this.initOptions();\n\n this.visible = this.options.visible && chartElement.offsetHeight;\n\n if (this.visible) {\n this.createElements();\n\n this.set(this._index(this.options.from), this._index(this.options.to));\n\n this.bindEvents();\n }\n }\n\n onPane(pane) {\n return this.categoryAxis.pane === pane;\n }\n\n createElements() {\n const options = this.options;\n const wrapper = this.wrapper = createDiv(\"k-selector k-pointer-events-none\");\n elementStyles(wrapper, {\n top: options.offset.top,\n left: options.offset.left,\n width: options.width,\n height: options.height,\n direction: 'ltr'\n });\n\n const selection = this.selection = createDiv(\"k-selection k-pointer-events-none\");\n\n this.leftMask = createDiv(\"k-mask k-pointer-events-none\");\n this.rightMask = createDiv(\"k-mask k-pointer-events-none\");\n\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n\n const body = this.body = createDiv(\"k-selection-bg k-pointer-events-none\");\n selection.appendChild(body);\n\n const leftHandle = this.leftHandle = createDiv(\"k-handle k-left-handle k-pointer-events-auto\");\n const rightHandle = this.rightHandle = createDiv(\"k-handle k-right-handle k-pointer-events-auto\");\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n\n this.chartElement.appendChild(wrapper);\n const selectionStyles = elementStyles(selection, [ \"borderLeftWidth\", \"borderRightWidth\", \"height\" ]);\n const leftHandleHeight = elementStyles(leftHandle, \"height\").height;\n const rightHandleHeight = elementStyles(rightHandle, \"height\").height;\n\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n\n elementStyles(leftHandle, {\n top: (selectionStyles.height - leftHandleHeight) / 2\n });\n\n elementStyles(rightHandle, {\n top: (selectionStyles.height - rightHandleHeight) / 2\n });\n\n /* eslint no-self-assign: \"off\" */\n wrapper.style.cssText = wrapper.style.cssText;\n }\n\n bindEvents() {\n if (this.options.mousewheel !== false) {\n this._mousewheelHandler = this._mousewheel.bind(this);\n bindEvents(this.chartElement, {\n [ MOUSEWHEEL ]: this._mousewheelHandler\n });\n }\n\n this._domEvents = DomEventsBuilder.create(this.chartElement, {\n stopPropagation: true, // applicable for the jQuery UserEvents\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n press: this._press.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n }\n\n initOptions() {\n const { options, categoryAxis } = this;\n const box = categoryAxis.pane.chartsBox();\n const intlService = this.chart.chartService.intl;\n\n if (this._dateAxis) {\n deepExtend(options, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n from: parseDate(intlService, options.from),\n to: parseDate(intlService, options.to)\n });\n }\n\n const { paddingLeft, paddingTop } = elementStyles(this.chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST, //workaround for sub-pixel hover on the paths in chrome\n padding: {\n left: paddingLeft,\n top: paddingTop\n },\n offset: {\n left: box.x1 + paddingLeft,\n top: box.y1 + paddingTop\n },\n from: options.min,\n to: options.max\n }, options);\n }\n\n destroy() {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n\n clearTimeout(this._mwTimeout);\n this._state = null;\n\n if (this.wrapper) {\n if (this._mousewheelHandler) {\n unbindEvents(this.chartElement, {\n [ MOUSEWHEEL ]: this._mousewheelHandler\n });\n this._mousewheelHandler = null;\n }\n\n this.chartElement.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n _rangeEventArgs(range) {\n\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\n };\n }\n\n _pointInPane(x, y) {\n const paneBox = this.categoryAxis.pane.box;\n const modelCoords = this.chart._toModelCoordinates(x, y);\n return paneBox.containsPoint(modelCoords);\n }\n\n _start(e) {\n const options = this.options;\n const target = eventElement(e);\n if (this._state || !target) {\n return;\n }\n\n const coords = eventCoordinates(e);\n const inPane = this._pointInPane(coords.x, coords.y);\n if (!inPane) {\n return;\n }\n\n const handle = closestHandle(target);\n const bodyRect = this.body.getBoundingClientRect();\n const inBody = !handle && coords.x >= bodyRect.x && coords.x <= bodyRect.x + bodyRect.width &&\n coords.y >= bodyRect.y && coords.y <= bodyRect.y + bodyRect.height;\n\n this.chart._unsetActivePoint();\n this._state = {\n moveTarget: handle,\n startLocation: e.x ? e.x.location : 0,\n inBody,\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n\n const args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n }\n }\n\n _press(e) {\n let handle;\n if (this._state) {\n handle = this._state.moveTarget;\n } else {\n handle = closestHandle(eventElement(e));\n }\n if (handle) {\n addClass(handle, \"k-handle-active\");\n }\n }\n\n _move(e) {\n if (!this._state) {\n return;\n }\n\n const { _state: state, options, categoryAxis } = this;\n const { range, moveTarget: target } = state;\n const reverse = categoryAxis.options.reverse;\n const from = this._index(options.from);\n const to = this._index(options.to);\n const min = this._index(options.min);\n const max = this._index(options.max);\n const delta = state.startLocation - e.x.location;\n const oldRange = { from: range.from, to: range.to };\n const span = range.to - range.from;\n const scale = elementStyles(this.wrapper, \"width\").width / (categoryAxis.categoriesCount() - 1);\n const offset = Math.round(delta / scale) * (reverse ? -1 : 1);\n\n if (!target && !state.inBody) {\n return;\n }\n\n const leftHandle = target && hasClasses(target, \"k-left-handle\");\n const rightHandle = target && hasClasses(target, \"k-right-handle\");\n\n if (state.inBody) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n range.to = Math.min(\n range.from + span,\n max\n );\n } else if ((leftHandle && !reverse) || (rightHandle && reverse)) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - 1\n );\n range.to = Math.max(range.from + 1, range.to);\n } else if ((leftHandle && reverse) || (rightHandle && !reverse)) {\n range.to = Math.min(\n Math.max(min + 1, to - offset),\n max\n );\n range.from = Math.min(range.to - 1, range.from);\n }\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n }\n\n _end() {\n if (this._state) {\n const moveTarget = this._state.moveTarget;\n if (moveTarget) {\n removeClass(moveTarget, \"k-handle-active\");\n }\n\n const range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n\n delete this._state;\n }\n }\n\n _tap(e) {\n const { options, categoryAxis } = this;\n const coords = this.chart._eventCoordinates(e);\n const categoryIx = categoryAxis.pointCategoryIndex(new Point(coords.x, categoryAxis.box.y1));\n const from = this._index(options.from);\n const to = this._index(options.to);\n const min = this._index(options.min);\n const max = this._index(options.max);\n const span = to - from;\n const mid = from + span / 2;\n const range = {};\n const rightClick = e.event.which === 3;\n let offset = Math.round(mid - categoryIx);\n\n if (this._state || rightClick) {\n return;\n }\n\n\n this.chart._unsetActivePoint();\n\n if (!categoryAxis.options.justified) {\n offset--;\n }\n\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n\n range.to = Math.min(range.from + span, max);\n\n this._start(e);\n\n if (this._state) {\n this._state.range = range;\n this.trigger(SELECT, this._rangeEventArgs(range));\n this._end();\n }\n }\n\n _mousewheel(e) {\n let delta = mousewheelDelta(e);\n\n this._start(e);\n\n if (this._state) {\n const range = this._state.range;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n\n if (this.options.mousewheel.reverse) {\n delta *= -1;\n }\n\n if (this.expand(delta)) {\n this.trigger(SELECT, {\n axis: this.categoryAxis.options,\n delta: delta,\n originalEvent: e,\n from: this._value(range.from),\n to: this._value(range.to)\n });\n }\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(() => {\n this._end();\n }, MOUSEWHEEL_DELAY);\n }\n }\n\n _gesturestart(e) {\n const options = this.options;\n const touch = e.touches[0];\n const inPane = this._pointInPane(touch.pageX, touch.pageY);\n\n if (!inPane) {\n return;\n }\n\n this._state = {\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n const args = this._rangeEventArgs(this._state.range);\n\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\n }\n }\n\n _gestureend() {\n if (this._state) {\n this.trigger(SELECT_END, this._rangeEventArgs(this._state.range));\n delete this._state;\n }\n }\n\n _gesturechange(e) {\n if (!this._state) {\n return;\n }\n\n const { chart, _state: state, options, categoryAxis } = this;\n const range = state.range;\n const p0 = chart._toModelCoordinates(e.touches[0].x.location).x;\n const p1 = chart._toModelCoordinates(e.touches[1].x.location).x;\n const left = Math.min(p0, p1);\n const right = Math.max(p0, p1);\n\n e.preventDefault();\n\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n\n this.move(range.from, range.to);\n\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n\n _index(value) {\n let index = value;\n\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n\n return index;\n }\n\n _value(index) {\n let value = index;\n if (this._dateAxis) {\n value = this.categoryAxis.categoryAt(index);\n if (value > this.options.max) {\n value = this.options.max;\n }\n }\n\n return value;\n }\n\n _slot(value) {\n const categoryAxis = this.categoryAxis;\n const index = this._index(value);\n\n return categoryAxis.getSlot(index, index, true);\n }\n\n move(from, to) {\n const options = this.options;\n const reverse = this.categoryAxis.options.reverse;\n const { offset, padding, selection: { border } } = options;\n const left = reverse ? to : from;\n const right = reverse ? from : to;\n const edge = 'x' + (reverse ? 2 : 1);\n\n let box = this._slot(left);\n const leftMaskWidth = round(box[edge] - offset.left + padding.left);\n\n elementStyles(this.leftMask, {\n width: leftMaskWidth\n });\n elementStyles(this.selection, {\n left: leftMaskWidth\n });\n\n box = this._slot(right);\n\n const rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, {\n width: rightMaskWidth\n });\n\n let distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n\n elementStyles(this.rightMask, {\n left: distance\n });\n elementStyles(this.selection, {\n width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0)\n });\n }\n\n set(from, to) {\n const options = this.options;\n const min = this._index(options.min);\n const max = this._index(options.max);\n const fromValue = limitValue(this._index(from), min, max);\n const toValue = limitValue(this._index(to), fromValue + 1, max);\n\n if (options.visible) {\n this.move(fromValue, toValue);\n }\n\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\n }\n\n expand(delta) {\n const options = this.options;\n const min = this._index(options.min);\n const max = this._index(options.max);\n const zDir = options.mousewheel.zoom;\n const from = this._index(options.from);\n const to = this._index(options.to);\n let range = { from: from, to: to };\n const oldRange = deepExtend({}, range);\n\n if (this._state) {\n range = this._state.range;\n }\n\n if (zDir !== RIGHT) {\n range.from = limitValue(\n limitValue(from - delta, 0, to - 1),\n min, max\n );\n }\n\n if (zDir !== LEFT) {\n range.to = limitValue(\n limitValue(to + delta, range.from + 1, max),\n min,\n max\n );\n }\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n }\n\n zoom(delta, coords) {\n const options = this.options;\n const min = this._index(options.min);\n const max = this._index(options.max);\n const from = this._index(options.from);\n const to = this._index(options.to);\n let range = { from: from, to: to };\n const oldRange = deepExtend({}, range);\n\n const { reverse } = this.categoryAxis.options;\n const origin = X + (reverse ? '2' : '1');\n const lineBox = this.categoryAxis.lineBox();\n const relative = Math.abs(lineBox[origin] - coords[X]);\n const size = lineBox.width();\n const position = round(relative / size, 2);\n const minDelta = round(position * delta);\n const maxDelta = round((1 - position) * delta);\n\n if (this._state) {\n range = this._state.range;\n }\n\n range.from = limitValue(\n limitValue(from - minDelta, 0, to - 1),\n min, max\n );\n\n range.to = limitValue(\n limitValue(to + maxDelta, range.from + 1, max),\n min,\n max\n );\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n }\n\n trigger(name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n}\n\nsetDefaultOptions(Selection, {\n visible: true,\n mousewheel: {\n zoom: \"both\"\n },\n min: MIN_VALUE,\n max: MAX_VALUE\n});\n\nexport default Selection;\n","import BaseTooltip from './base-tooltip';\n\nimport { deepExtend } from '../../common';\n\nclass Tooltip extends BaseTooltip {\n show(point) {\n if (!point || !point.tooltipAnchor || (this._current && this._current === point)) {\n return;\n }\n\n const options = deepExtend({}, this.options, point.options.tooltip);\n const anchor = point.tooltipAnchor();\n\n if (anchor) {\n this._current = point;\n super.show({\n point: point,\n anchor: anchor\n }, options, point);\n } else {\n this.hide();\n }\n }\n\n hide() {\n delete this._current;\n super.hide();\n }\n}\n\nexport default Tooltip;","import BaseTooltip from './base-tooltip';\nimport { Point } from '../../core';\n\nimport { grep, setDefaultOptions } from '../../common';\n\nclass SharedTooltip extends BaseTooltip {\n constructor(plotArea, options) {\n super(plotArea.chartService, options);\n\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\n }\n\n showAt(points, coords) {\n const tooltipPoints = grep(points, function(point) {\n const tooltip = point.series.tooltip;\n const excluded = tooltip && tooltip.visible === false;\n\n return !excluded;\n });\n\n if (tooltipPoints.length > 0) {\n const point = tooltipPoints[0];\n const slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n\n const anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\n\n this.show({\n anchor: anchor,\n shared: true,\n points: points,\n category: point.category,\n categoryText: this.formatService.auto(this.options.categoryFormat, point.category),\n series: this.plotArea.series\n }, this.options);\n }\n }\n\n _slotAnchor(point, slot) {\n const axis = this.plotArea.categoryAxis;\n const align = {\n horizontal: \"left\",\n vertical: \"center\"\n };\n\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n\n return {\n point: point,\n align: align\n };\n }\n\n _defaultAnchor(point, slot) {\n const box = point.owner.pane.chartsBox();\n const vertical = this.plotArea.categoryAxis.options.vertical;\n const center = box.center();\n const slotCenter = slot.center();\n const align = {\n horizontal: \"center\",\n vertical: \"center\"\n };\n\n let centerPoint;\n if (vertical) {\n centerPoint = new Point(center.x, slotCenter.y);\n } else {\n centerPoint = new Point(slotCenter.x, center.y);\n }\n\n return {\n point: centerPoint,\n align: align\n };\n }\n}\n\nsetDefaultOptions(SharedTooltip, {\n categoryFormat: '{0:d}'\n});\n\nexport default SharedTooltip;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { INITIAL_ANIMATION_DURATION, BAR, START_SCALE } from '../constants';\n\nimport { X, Y } from '../../common/constants';\nimport { interpolateValue, setDefaultOptions } from '../../common';\n\nclass BarChartAnimation extends draw.Animation {\n\n setup() {\n const { element, options } = this;\n const bbox = element.bbox();\n\n if (bbox) {\n this.origin = options.origin;\n const axis = options.vertical ? Y : X;\n\n const fromScale = this.fromScale = new geom.Point(1, 1);\n fromScale[axis] = START_SCALE;\n\n element.transform(geom.transform()\n .scale(fromScale.x, fromScale.y)\n );\n } else {\n this.abort();\n }\n }\n\n step(pos) {\n const scaleX = interpolateValue(this.fromScale.x, 1, pos);\n const scaleY = interpolateValue(this.fromScale.y, 1, pos);\n\n this.element.transform(geom.transform()\n .scale(scaleX, scaleY, this.origin)\n );\n }\n\n abort() {\n super.abort();\n this.element.transform(null);\n }\n}\n\nsetDefaultOptions(BarChartAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n});\n\ndraw.AnimationFactory.current.register(BAR, BarChartAnimation);\n\nexport default BarChartAnimation;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { START_SCALE, BUBBLE } from '../constants';\n\nimport { setDefaultOptions } from '../../common';\n\nclass BubbleAnimation extends draw.Animation {\n setup() {\n const center = this.center = this.element.bbox().center();\n this.element.transform(geom.transform()\n .scale(START_SCALE, START_SCALE, center)\n );\n }\n\n step(pos) {\n this.element.transform(geom.transform()\n .scale(pos, pos, this.center)\n );\n }\n}\n\nsetDefaultOptions(BubbleAnimation, {\n easing: \"easeOutElastic\"\n});\n\ndraw.AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n\nexport default BubbleAnimation;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { FADEIN } from '../constants';\n\nimport { setDefaultOptions } from '../../common';\n\nclass FadeInAnimation extends draw.Animation {\n setup() {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n }\n\n step(pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n}\n\nsetDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: \"linear\"\n});\n\ndraw.AnimationFactory.current.register(FADEIN, FadeInAnimation);\n\nexport default FadeInAnimation;","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { START_SCALE, INITIAL_ANIMATION_DURATION, PIE } from '../constants';\n\nimport { setDefaultOptions } from '../../common';\n\nclass PieAnimation extends draw.Animation {\n setup() {\n this.element.transform(geom.transform()\n .scale(START_SCALE, START_SCALE, this.options.center)\n );\n }\n\n step(pos) {\n this.element.transform(geom.transform()\n .scale(pos, pos, this.options.center)\n );\n }\n}\n\nsetDefaultOptions(PieAnimation, {\n easing: \"easeOutElastic\",\n duration: INITIAL_ANIMATION_DURATION\n});\n\ndraw.AnimationFactory.current.register(PIE, PieAnimation);\n\nexport default PieAnimation;","import ScatterChart from './scatter-chart';\nimport LineChartMixin from '../mixins/line-chart-mixin';\nimport LineSegment from '../line-chart/line-segment';\nimport SplineSegment from '../line-chart/spline-segment';\n\nimport { SMOOTH, ZERO } from '../constants';\n\nimport hasValue from '../utils/has-value';\n\nimport { deepExtend } from '../../common';\n\nclass ScatterLineChart extends ScatterChart {\n render() {\n super.render();\n\n this.renderSegments();\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = currentSeries.style;\n let pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n }\n\n animationPoints() {\n const points = super.animationPoints();\n return points.concat(this._segments);\n }\n\n createMissingValue(value, missingValues) {\n if (missingValues === ZERO) {\n const missingValue = {\n x: value.x,\n y: value.y\n };\n if (!hasValue(missingValue.x)) {\n missingValue.x = 0;\n }\n if (!hasValue(missingValue.y)) {\n missingValue.y = 0;\n }\n return missingValue;\n }\n }\n}\n\ndeepExtend(ScatterLineChart.prototype, LineChartMixin);\n\nexport default ScatterLineChart;","const scatterValueGetter = fieldName => ({ valueFields }) =>\n ({ xValue: valueFields.x, yValue: valueFields[fieldName] });\n\nexport default scatterValueGetter;\n","import scatterLinearTrendLine from './scatter-linear-trendline';\nimport scatterMovingAverageTrendline from './scatter-moving-average';\nimport { TRENDLINE_LINEAR, TRENDLINE_MOVING_AVERAGE } from '../constants';\n\nconst scatterRegistry = {};\nscatterRegistry[TRENDLINE_LINEAR] = scatterLinearTrendLine;\nscatterRegistry[TRENDLINE_MOVING_AVERAGE] = scatterMovingAverageTrendline;\n\nexport default scatterRegistry;\n","import autoMajorUnit from '../../core/utils/auto-major-unit';\nimport { valueOrDefault } from '../../common';\nimport calculateSlope from './calculate-slope';\nimport scatterValueGetter from './scatter-value-getter';\n\nfunction scatterLinearTrendLine(context) {\n const {\n options,\n seriesValues\n } = context;\n\n const data = getData({ seriesValues, options });\n if (data) {\n return Object.assign({}, options,\n\n {type: 'scatterLine',\n data});\n }\n\n return null;\n}\n\nfunction getData({ seriesValues, options }) {\n let { slope, intercept, count, xMin, xMax } = calculateSlope(seriesValues(), scatterValueGetter(options.field));\n\n if (count > 0) {\n const data = [];\n const forecast = (options.trendline || {}).forecast;\n if (forecast) {\n if (forecast.before > 0) {\n xMin -= forecast.before;\n }\n\n if (forecast.after > 0) {\n xMax += forecast.after;\n }\n }\n\n const samplingInterval = (options.trendline || {}).samplingInterval;\n let delta = valueOrDefault(samplingInterval, autoMajorUnit(xMin, xMax) / 10);\n if (samplingInterval <= 0) {\n delta = xMax - xMin;\n }\n\n for (let x = xMin; x <= xMax; x += delta) {\n data.push([ x,\n slope * x + intercept\n ]);\n }\n\n return data;\n }\n\n return null;\n}\n\nexport default scatterLinearTrendLine;\n","import calculateMovingAverage from './calculate-moving-average';\nimport { MIN_MOVING_AVERAGE_PERIOD } from '../constants';\nimport scatterValueGetter from './scatter-value-getter';\n\nfunction scatterMovingAverageTrendline(context) {\n const { options } = context;\n\n const data = getData(context);\n if (data) {\n return Object.assign({}, options,\n\n {type: 'scatterLine',\n data});\n }\n\n return null;\n}\n\nfunction getData({ options, seriesValues }) {\n const period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;\n const range = { before: period, after: period };\n const data = calculateMovingAverage(seriesValues(range), scatterValueGetter(options.field), period);\n\n if (data.length > 0) {\n return data;\n }\n\n return null;\n}\n\nexport default scatterMovingAverageTrendline;\n","import PlotAreaBase from './plotarea-base';\nimport AxisGroupRangeTracker from '../axis-group-range-tracker';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\nimport ScatterChart from '../scatter-charts/scatter-chart';\nimport ScatterLineChart from '../scatter-charts/scatter-line-chart';\nimport BubbleChart from '../bubble-chart/bubble-chart';\nimport SeriesBinder from '../series-binder';\nimport trendlineFactory from '../trendlines/trendline-factory';\nimport scatterTrendlineRegistry from '../trendlines/scatter-trendline-registry';\n\nimport { NumericAxis, LogarithmicAxis, DateValueAxis, Point } from '../../core';\n\nimport { filterSeriesByType, equalsIgnoreCase, singleItemOrArray } from '../utils';\n\nimport { SCATTER, SCATTER_LINE, BUBBLE, LOGARITHMIC } from '../constants';\n\nimport { DATE } from '../../common/constants';\nimport { deepExtend, eventElement, grep, inArray, setDefaultOptions } from '../../common';\n\nclass XYPlotArea extends PlotAreaBase {\n initFields() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n }\n\n render(panes = this.panes) {\n this.series = [...this.originalSeries];\n this.createTrendlineSeries();\n\n const seriesByPane = this.groupSeriesByPane();\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n const paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this.addToLegend(paneSeries);\n const filteredSeries = this.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this.createScatterChart(\n filterSeriesByType(filteredSeries, SCATTER),\n pane\n );\n\n this.createScatterLineChart(\n filterSeriesByType(filteredSeries, SCATTER_LINE),\n pane\n );\n\n this.createBubbleChart(\n filterSeriesByType(filteredSeries, BUBBLE),\n pane\n );\n }\n\n this.createAxes(panes);\n }\n\n appendChart(chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n\n super.appendChart(chart, pane);\n }\n\n removeAxis(axis) {\n const axisName = axis.options.name;\n\n super.removeAxis(axis);\n\n if (axis.options.vertical) {\n this.yAxisRangeTracker.reset(axisName);\n delete this.namedYAxes[axisName];\n } else {\n this.xAxisRangeTracker.reset(axisName);\n delete this.namedXAxes[axisName];\n }\n\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\n }\n\n // TODO: Refactor, optionally use series.pane option\n seriesPaneName(series) {\n const options = this.options;\n const xAxisName = series.xAxis;\n const xAxisOptions = [].concat(options.xAxis);\n const xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n const yAxisName = series.yAxis;\n const yAxisOptions = [].concat(options.yAxis);\n const yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n const panes = options.panes || [ {} ];\n const defaultPaneName = panes[0].name || \"default\";\n const paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n }\n\n createScatterChart(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n }\n\n createScatterLineChart(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterLineChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n }\n\n createBubbleChart(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new BubbleChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n }\n\n createXYAxis(options, vertical, axisIndex) {\n const axisName = options.name;\n const namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n const tracker = vertical ? this.yAxisRangeTracker : this.xAxisRangeTracker;\n const axisOptions = deepExtend({ reverse: !vertical && this.chartService.rtl }, options, { vertical: vertical });\n const isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC);\n const defaultRange = tracker.query();\n const defaultAxisRange = isLog ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n const range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n const typeSamples = [ axisOptions.min, axisOptions.max ];\n const series = this.series;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n const firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n break;\n }\n }\n\n if (axisIndex === 0 && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n let inferredDate;\n\n for (let i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n\n let axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n axisType = DateValueAxis;\n } else if (isLog) {\n axisType = LogarithmicAxis;\n } else {\n axisType = NumericAxis;\n }\n\n const axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error(`${ vertical ? \"Y\" : \"X\" } axis with name ${ axisName } is already defined`);\n }\n namedAxes[axisName] = axis;\n }\n\n this.appendAxis(axis);\n\n return axis;\n }\n\n createAxes(panes) {\n const options = this.options;\n const xAxesOptions = [].concat(options.xAxis);\n const xAxes = [];\n const yAxesOptions = [].concat(options.yAxis);\n const yAxes = [];\n\n for (let idx = 0; idx < xAxesOptions.length; idx++) {\n const axisPane = this.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (let idx = 0; idx < yAxesOptions.length; idx++) {\n const axisPane = this.findPane(yAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n yAxes.push(this.createXYAxis(yAxesOptions[idx], true, idx));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const allAxes = this.axes;\n const length = allAxes.length;\n const xValues = [];\n const yValues = [];\n\n for (let i = 0; i < length; i++) {\n const axis = allAxes[i];\n const values = axis.options.vertical ? yValues : xValues;\n const currentValue = axis.getValue(point);\n if (currentValue !== null) {\n values.push(currentValue);\n }\n }\n\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n }\n\n updateAxisOptions(axis, options) {\n const vertical = axis.options.vertical;\n const axes = this.groupAxes(this.panes);\n const index = (vertical ? axes.y : axes.x).indexOf(axis);\n\n updateAxisOptions(this.options, index, vertical, options);\n updateAxisOptions(this.originalOptions, index, vertical, options);\n }\n\n trendlineFactory(options, series) {\n const seriesValues = this.seriesValues.bind(this, series.index);\n\n const trendline = trendlineFactory(scatterTrendlineRegistry, options.type, {\n options,\n seriesValues\n });\n\n if (trendline) {\n // Inherit settings\n trendline.xAxis = series.xAxis;\n trendline.yAxis = series.yAxis;\n }\n\n return trendline;\n }\n\n seriesValues(seriesIx) {\n const result = [];\n const currentSeries = this.series[seriesIx];\n\n for (let pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n const data = this.bindPoint(currentSeries, pointIx);\n result.push({ pointIx, valueFields: data.valueFields });\n }\n\n return result;\n }\n}\n\nfunction updateAxisOptions(targetOptions, axisIndex, vertical, options) {\n const axisOptions = ([].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis))[axisIndex];\n deepExtend(axisOptions, options);\n}\n\nsetDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n});\n\ndeepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n\nexport default XYPlotArea;\n","import { drawing as draw, geometry as geom } from '@progress/kendo-drawing';\n\nimport { ChartElement, ShapeBuilder, TextBox, Box } from '../../core';\n\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nimport { OUTSIDE_END, INSIDE_END, PIE, FADEIN, TOOLTIP_OFFSET } from '../constants';\nimport hasGradientOverlay from '../utils/has-gradient-overlay';\n\nimport { TOP, BOTTOM, LEFT, RIGHT, DEFAULT_FONT, CIRCLE, WHITE, CENTER, DEFAULT_PRECISION } from '../../common/constants';\nimport { autoTextColor, setDefaultOptions, getSpacing, getTemplate, deepExtend, round, rad } from '../../common';\n\nclass PieSegment extends ChartElement {\n constructor(value, sector, options) {\n super(options);\n\n this.value = value;\n this.sector = sector;\n }\n\n render() {\n const labels = this.options.labels;\n const chartService = this.owner.chartService;\n let labelText = this.value;\n\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n\n const labelTemplate = getTemplate(labels);\n const pointData = this.pointData();\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n labels.color = autoTextColor(this.options.color);\n }\n if (!labels.background) {\n labels.background = this.options.color;\n }\n } else {\n const themeLabels = chartService.theme.seriesDefaults.labels;\n labels.color = labels.color || themeLabels.color;\n labels.background = labels.background || themeLabels.background;\n }\n\n\n this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: \"\",\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }), pointData);\n\n this.append(this.label);\n }\n }\n\n reflow(targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n }\n\n reflowLabel() {\n const { options: { labels: labelsOptions }, label } = this;\n const sector = this.sector.clone();\n const labelsDistance = labelsOptions.distance;\n const angle = sector.middle();\n\n if (label) {\n const labelHeight = label.box.height();\n const labelWidth = label.box.width();\n let lp;\n\n if (labelsOptions.position === CENTER) {\n sector.radius = Math.abs((sector.radius - labelHeight) / 2) + labelHeight;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else if (labelsOptions.position === INSIDE_END) {\n sector.radius = sector.radius - labelHeight / 2;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n let x1;\n lp = sector.clone().expand(labelsDistance).point(angle);\n if (lp.x >= sector.center.x) {\n x1 = lp.x + labelWidth;\n label.orientation = RIGHT;\n } else {\n x1 = lp.x - labelWidth;\n label.orientation = LEFT;\n }\n label.reflow(new Box(x1, lp.y - labelHeight, lp.x, lp.y));\n }\n }\n }\n\n createVisual() {\n const { sector, options } = this;\n\n super.createVisual();\n\n if (this.value) {\n if (options.visual) {\n const startAngle = (sector.startAngle + 180) % 360;\n const visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n center: new geom.Point(sector.center.x, sector.center.y),\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n startAngle: startAngle,\n endAngle: startAngle + sector.angle,\n options: options,\n sender: this.getSender(),\n createVisual: () => {\n const group = new draw.Group();\n this.createSegmentVisual(group);\n\n return group;\n }\n });\n\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\n }\n }\n\n createSegmentVisual(group) {\n const { sector, options } = this;\n const borderOptions = options.border || {};\n const border = borderOptions.width > 0 ? {\n stroke: {\n color: borderOptions.color,\n width: borderOptions.width,\n opacity: borderOptions.opacity,\n dashType: borderOptions.dashType\n }\n } : {};\n const color = options.color;\n const fill = {\n color: color,\n opacity: options.opacity\n };\n const visual = this.createSegment(sector, deepExtend({\n fill: fill,\n stroke: {\n opacity: options.opacity\n },\n zIndex: options.zIndex\n }, border));\n\n group.append(visual);\n\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [ sector.center.x, sector.center.y ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n }\n\n createSegment(sector, options) {\n if (options.singleSegment) {\n return new draw.Circle(new geom.Circle(new geom.Point(sector.center.x, sector.center.y), sector.radius), options);\n }\n\n return ShapeBuilder.current.createRing(sector, options);\n }\n\n createAnimation() {\n const { options, sector: { center } } = this;\n\n deepExtend(options, {\n animation: {\n center: [ center.x, center.y ],\n delay: this.animationDelay\n }\n });\n\n super.createAnimation();\n }\n\n createHighlight(options) {\n const highlight = this.options.highlight || {};\n const border = highlight.border || {};\n\n return this.createSegment(this.sector, deepExtend({}, options, {\n fill: {\n color: highlight.color,\n opacity: highlight.opacity\n },\n stroke: {\n opacity: border.opacity,\n width: border.width,\n color: border.color\n }\n }));\n }\n\n highlightVisual() {\n return this.visual.children[0];\n }\n\n highlightVisualArgs() {\n const sector = this.sector;\n\n return {\n options: this.options,\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n center: new geom.Point(sector.center.x, sector.center.y),\n startAngle: sector.startAngle,\n endAngle: sector.angle + sector.startAngle,\n visual: this.visual\n };\n }\n\n tooltipAnchor() {\n const sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n const midAndle = sector.middle();\n const midPoint = sector.point(midAndle);\n\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n pointData() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n };\n }\n}\n\nconst RAD_30 = round(rad(30), DEFAULT_PRECISION);\nconst RAD_60 = round(rad(60), DEFAULT_PRECISION);\n\nfunction tooltipAlignment(angle) {\n const radians = rad(angle);\n const sine = round(Math.sin(radians), DEFAULT_PRECISION);\n const cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n\n\n let horizontal;\n if (Math.abs(sine) > RAD_60) {\n horizontal = CENTER;\n } else if (cosine < 0) {\n horizontal = RIGHT;\n } else {\n horizontal = LEFT;\n }\n\n let vertical;\n if (Math.abs(sine) < RAD_30) {\n vertical = CENTER;\n } else if (sine < 0) {\n vertical = BOTTOM;\n } else {\n vertical = TOP;\n }\n\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n}\n\nsetDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: {\n gradient: \"roundedBevel\"\n },\n border: {\n width: 0.5\n },\n labels: {\n visible: false,\n distance: 35,\n font: DEFAULT_FONT,\n margin: getSpacing(0.5),\n align: CIRCLE,\n zIndex: 1,\n position: OUTSIDE_END\n },\n animation: {\n type: PIE\n },\n highlight: {\n visible: true,\n border: {\n width: 1\n }\n },\n visible: true\n});\n\ndeepExtend(PieSegment.prototype, PointEventsMixin);\n\nexport default PieSegment;\n","import { getTemplate } from '../../common';\nimport { hasValue } from '../utils';\n\nconst PieChartMixin = {\n createLegendItem: function(value, point, options) {\n const legendOptions = this.options.legend || {};\n const labelsOptions = legendOptions.labels || {};\n const inactiveItems = legendOptions.inactiveItems || {};\n const inactiveItemsLabels = inactiveItems.labels || {};\n\n if (options && options.visibleInLegend !== false) {\n const pointVisible = options.visible !== false;\n const labelTemplate = pointVisible ? getTemplate(labelsOptions) :\n getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n let text = options.category;\n\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: options.series,\n dataItem: options.dataItem,\n percentage: options.percentage,\n value: value\n });\n }\n\n let itemLabelOptions, markerColor;\n if (pointVisible) {\n itemLabelOptions = {};\n markerColor = point.color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = (inactiveItems.markers || {}).color;\n }\n\n if (hasValue(text) && text !== \"\") {\n this.legendItems.push({\n active: pointVisible,\n pointIndex: options.index,\n text: text,\n series: options.series,\n markerColor: markerColor,\n labels: itemLabelOptions\n });\n }\n }\n }\n};\n\nexport default PieChartMixin;","import { drawing as draw, geometry } from '@progress/kendo-drawing';\n\nimport PieSegment from './pie-segment';\nimport PieChartMixin from '../mixins/pie-chart-mixin';\nimport { ChartElement, Ring, Box, Point } from '../../core';\n\nimport { OUTSIDE_END, FADEIN, COLUMN } from '../constants';\nimport { bindSegments, evalOptions } from '../utils';\n\nimport { CIRCLE, RIGHT, CENTER } from '../../common/constants';\nimport { deepExtend, defined, find, isFunction, last, round, setDefaultOptions, valueOrDefault } from '../../common';\n\nconst PIE_SECTOR_ANIM_DELAY = 70;\n\nclass PieChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n }\n\n render() {\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n traverseDataPoints(callback) {\n const { options, plotArea: { options: { seriesColors = [] } } } = this;\n const colorsCount = seriesColors.length;\n const series = options.series;\n const seriesCount = series.length;\n\n for (let seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n const currentSeries = series[seriesIx];\n const data = currentSeries.data;\n const { total, points, count } = bindSegments(currentSeries);\n const anglePerValue = 360 / total;\n let constantAngle;\n if (!isFinite(anglePerValue)) {\n constantAngle = 360 / count;\n }\n let currentAngle;\n\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n\n for (let i = 0; i < points.length; i++) {\n const pointData = points[i];\n if (!pointData) {\n continue;\n }\n\n const { fields, value, visible } = pointData;\n const angle = value !== 0 ? (constantAngle || (value * anglePerValue)) : 0;\n const explode = data.length !== 1 && Boolean(fields.explode);\n\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n\n callback(value, new Ring(null, 0, 0, currentAngle, angle), {\n owner: this,\n category: defined(fields.category) ? fields.category : \"\",\n index: i,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: total !== 0 ? value / total : 0,\n explode: explode,\n visibleInLegend: fields.visibleInLegend,\n visible: visible,\n zIndex: seriesCount - seriesIx,\n animationDelay: this.animationDelay(i, seriesIx, seriesCount)\n });\n\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n }\n\n evalSegmentOptions(options, value, fields) {\n const series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, { defaults: series._defaults, excluded: [ \"data\", \"content\", \"template\", \"visual\", \"toggle\" ] });\n }\n\n addValue(value, sector, fields) {\n const segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n\n this.createLegendItem(value, segmentOptions, fields);\n\n if (fields.visible === false) {\n return;\n }\n\n const segment = new PieSegment(value, sector, segmentOptions);\n Object.assign(segment, fields);\n this.append(segment);\n this.points.push(segment);\n }\n\n reflow(targetBox) {\n const { options, points, seriesConfigs = [] } = this;\n const count = points.length;\n const box = targetBox.clone();\n const space = 5;\n const minWidth = Math.min(box.width(), box.height());\n const halfMinWidth = minWidth / 2;\n const defaultPadding = minWidth - minWidth * 0.85;\n const newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n const newBoxCenter = newBox.center();\n const boxCenter = box.center();\n const seriesCount = options.series.length;\n const leftSideLabels = [];\n const rightSideLabels = [];\n let padding = valueOrDefault(options.padding, defaultPadding);\n\n this.targetBox = targetBox;\n\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n\n const radius = halfMinWidth - padding;\n const center = new Point(\n radius + newBox.x1 + padding,\n radius + newBox.y1 + padding\n );\n\n for (let i = 0; i < count; i++) {\n const segment = points[i];\n const sector = segment.sector;\n const seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n\n if (seriesConfigs.length) {\n const seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n\n segment.reflow(newBox);\n\n const label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n\n this.box = newBox;\n }\n\n leftLabelsReflow(labels) {\n const distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n }\n\n rightLabelsReflow(labels) {\n const distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n }\n\n distanceBetweenLabels(labels) {\n const segment = last(this.points);\n const sector = segment.sector;\n const count = labels.length - 1;\n const lr = sector.radius + segment.options.labels.distance;\n const distances = [];\n let firstBox = labels[0].box;\n let distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n\n distances.push(distance);\n\n for (let i = 0; i < count; i++) {\n const secondBox = labels[i + 1].box;\n\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n\n return distances;\n }\n\n distributeLabels(distances, labels) {\n const count = distances.length;\n let left, right, remaining;\n\n for (let i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this._takeDistance(distances, i, --left, remaining);\n remaining = this._takeDistance(distances, i, ++right, remaining);\n }\n }\n\n this.reflowLabels(distances, labels);\n }\n\n _takeDistance(distances, anchor, position, amount) {\n let result = amount;\n if (distances[position] > 0) {\n const available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n\n return result;\n }\n\n reflowLabels(distances, labels) {\n const segment = last(this.points);\n const sector = segment.sector;\n const labelOptions = segment.options.labels;\n const labelsCount = labels.length;\n const labelDistance = labelOptions.distance;\n let boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n let boxX;\n\n distances[0] += 2;\n for (let i = 0; i < labelsCount; i++) {\n const label = labels[i];\n const box = label.box;\n\n boxY += distances[i];\n boxX = this.hAlignLabel(\n box.x2,\n sector.clone().expand(labelDistance),\n boxY,\n boxY + box.height(),\n label.orientation === RIGHT);\n\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n\n boxY += box.height();\n }\n }\n\n createVisual() {\n const { options: { connectors }, points } = this;\n const count = points.length;\n const space = 4;\n\n super.createVisual();\n\n this._connectorLines = [];\n\n for (let i = 0; i < count; i++) {\n const segment = points[i];\n const { sector, label } = segment;\n const angle = sector.middle();\n const connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n\n if (label) {\n const connectorLine = new draw.Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n\n if (label.options.position === OUTSIDE_END) {\n const box = label.box;\n const centerPoint = sector.center;\n let start = sector.point(angle);\n let middle = new Point(box.x1, box.center().y);\n let sr, end, crossing;\n\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n // TODO: Extract into a method to remove duplication\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n\n if (this.pointInCircle(crossing, sector.center, sector.radius + space) ||\n crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n\n if (this.pointInCircle(crossing, sector.center, sector.radius + space) ||\n crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n\n connectorLine.lineTo(end.x, end.y);\n\n this._connectorLines.push(connectorLine);\n this.visual.append(connectorLine);\n }\n }\n }\n }\n\n renderVisual() {\n super.renderVisual();\n\n if (find(this.options.series, options => options.autoFit)) {\n const targetBox = this.targetBox;\n const pieCenter = this.box.center();\n const bbox = this.visual.bbox();\n if (!bbox) {\n return;\n }\n\n const bboxBottom = bbox.bottomRight();\n\n const scale = Math.min(\n (pieCenter.y - targetBox.y1) / (pieCenter.y - bbox.origin.y),\n (targetBox.y2 - pieCenter.y) / (bboxBottom.y - pieCenter.y),\n (pieCenter.x - targetBox.x1) / (pieCenter.x - bbox.origin.x),\n (targetBox.x2 - pieCenter.x) / (bboxBottom.x - pieCenter.x)\n );\n\n if (scale < 1) {\n this.visual.transform(geometry.transform().scale(scale, scale, [ pieCenter.x, pieCenter.y ]));\n }\n }\n }\n\n labelComparator(reverse) {\n const reverseValue = reverse ? -1 : 1;\n\n return function(a, b) {\n const first = (a.parent.sector.middle() + 270) % 360;\n const second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n }\n\n hAlignLabel(originalX, sector, y1, y2, direction) {\n const { radius, center: { x: cx, y: cy } } = sector;\n const t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n\n if (t > radius) {\n return originalX;\n }\n\n return cx + Math.sqrt((radius * radius) - (t * t)) * (direction ? 1 : -1);\n }\n\n pointInCircle(point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n }\n\n formatPointValue(point, format) {\n return this.chartService.format.auto(format, point.value);\n }\n\n animationDelay(categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n }\n\n stackRoot() {\n return this;\n }\n}\n\nfunction intersection(a1, a2, b1, b2) {\n const uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n let result;\n if (ub !== 0) {\n const ua = (uat / ub);\n\n result = new Point(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n );\n }\n\n return result;\n}\n\nsetDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: \"#939393\",\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n});\n\ndeepExtend(PieChart.prototype, PieChartMixin);\n\nPieChart.prototype.isStackRoot = true;\n\nexport default PieChart;\n","import PlotAreaBase from './plotarea-base';\nimport PieChart from '../pie-chart/pie-chart';\n\nimport { append } from '../../common';\n\nclass PiePlotArea extends PlotAreaBase {\n render() {\n this.createPieChart(this.series);\n }\n\n createPieChart(series) {\n const firstSeries = series[0];\n const pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n\n this.appendChart(pieChart);\n }\n\n appendChart(chart, pane) {\n super.appendChart(chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n}\n\nexport default PiePlotArea;","import PieSegment from '../pie-chart/pie-segment';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nimport { PIE } from '../constants';\n\nimport { ShapeBuilder, Box } from '../../core';\n\nimport { CENTER } from '../../common/constants';\nimport { deepExtend, setDefaultOptions } from '../../common';\n\nclass DonutSegment extends PieSegment {\n reflowLabel() {\n const { options: { labels: labelsOptions }, label } = this;\n const sector = this.sector.clone();\n const angle = sector.middle();\n\n if (label) {\n const labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n\n const lp = sector.point(angle);\n\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n super.reflowLabel();\n }\n }\n }\n\n createSegment(sector, options) {\n return ShapeBuilder.current.createRing(sector, options);\n }\n}\n\nsetDefaultOptions(DonutSegment, {\n overlay: {\n gradient: \"roundedGlass\"\n },\n labels: {\n position: CENTER\n },\n animation: {\n type: PIE\n }\n});\n\ndeepExtend(DonutSegment.prototype, PointEventsMixin);\n\n\nexport default DonutSegment;\n","import PieChart from '../pie-chart/pie-chart';\nimport DonutSegment from './donut-segment';\n\nimport { INITIAL_ANIMATION_DURATION } from '../constants';\n\nimport { deepExtend, defined, setDefaultOptions, valueOrDefault } from '../../common';\n\nconst DONUT_SECTOR_ANIM_DELAY = 50;\n\nclass DonutChart extends PieChart {\n addValue(value, sector, fields) {\n const segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n\n this.createLegendItem(value, segmentOptions, fields);\n\n if (fields.visible === false) {\n return;\n }\n\n const segment = new DonutSegment(value, sector, segmentOptions);\n\n Object.assign(segment, fields);\n this.append(segment);\n this.points.push(segment);\n }\n\n reflow(targetBox) {\n const options = this.options;\n const box = targetBox.clone();\n const space = 5;\n const minWidth = Math.min(box.width(), box.height());\n const halfMinWidth = minWidth / 2;\n const defaultPadding = minWidth - minWidth * 0.85;\n const series = options.series;\n const seriesCount = series.length;\n\n let padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n\n let totalSize = halfMinWidth - padding;\n let seriesWithoutSize = 0;\n let holeSize;\n\n for (let i = 0; i < seriesCount; i++) {\n const currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n\n if (!defined(holeSize)) {\n const currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n\n let innerRadius = holeSize;\n let margin = 0;\n let size, radius;\n\n this.seriesConfigs = [];\n\n for (let i = 0; i < seriesCount; i++) {\n const currentSeries = series[i];\n size = valueOrDefault(currentSeries.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this.seriesConfigs.push({ innerRadius: innerRadius, radius: radius });\n margin = currentSeries.margin || 0;\n innerRadius = radius;\n }\n\n super.reflow(targetBox);\n }\n\n animationDelay(categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY +\n (INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1));\n }\n}\n\n\nsetDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: \"#939393\",\n padding: 8\n }\n});\n\nexport default DonutChart;\n","import PlotAreaBase from './plotarea-base';\nimport AxisGroupRangeTracker from '../axis-group-range-tracker';\nimport { RadarLogarithmicAxis, RadarNumericAxis } from '../../core';\n\nimport { LOGARITHMIC } from '../constants';\n\nimport { getSpacing } from '../../common';\nimport { Y, CENTER } from '../../common/constants';\n\nconst DEFAULT_PADDING = 0.15;\n\nclass PolarPlotAreaBase extends PlotAreaBase {\n initFields() {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n }\n\n render() {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n }\n\n alignAxes() {\n const axis = this.valueAxis;\n const range = axis.range();\n const crossingValue = axis.options.reverse ? range.max : range.min;\n const slot = axis.getSlot(crossingValue);\n const center = this.polarAxis.getSlot(0).center;\n const axisBox = axis.box.translate(\n center.x - slot.x1,\n center.y - slot.y1\n );\n\n axis.reflow(axisBox);\n }\n\n createValueAxis() {\n const tracker = this.valueAxisRangeTracker;\n const defaultRange = tracker.query();\n const axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n let axisType, axisDefaultRange;\n\n if (axisOptions.type === LOGARITHMIC) {\n axisType = RadarLogarithmicAxis;\n axisDefaultRange = { min: 0.1, max: 1 };\n } else {\n axisType = RadarNumericAxis;\n axisDefaultRange = { min: 0, max: 1 };\n }\n\n const range = tracker.query(name) || defaultRange || axisDefaultRange;\n\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n const valueAxis = new axisType(\n range.min, range.max,\n axisOptions,\n this.chartService\n );\n\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n }\n\n reflowAxes() {\n const { options: { plotArea: options }, valueAxis, polarAxis, box } = this;\n const defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n const padding = getSpacing(options.padding || {}, defaultPadding);\n const paddingBox = box.clone().unpad(padding);\n const axisBox = paddingBox.clone();\n\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n\n const valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n const heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n }\n\n backgroundBox() {\n return this.box;\n }\n\n detachLabels() {}\n}\n\nexport default PolarPlotAreaBase;\n","import ScatterChart from '../scatter-charts/scatter-chart';\n\nimport { Point, Box } from '../../core';\n\nimport { setDefaultOptions } from '../../common';\n\nclass PolarScatterChart extends ScatterChart {\n pointSlot(slotX, slotY) {\n const valueRadius = slotX.center.y - slotY.y1;\n const slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n}\n\nsetDefaultOptions(PolarScatterChart, {\n clip: false\n});\n\nexport default PolarScatterChart;","import ScatterLineChart from '../scatter-charts/scatter-line-chart';\nimport PolarScatterChart from '../polar-scatter-chart/polar-scatter-chart';\n\nimport { setDefaultOptions } from '../../common';\n\nclass PolarLineChart extends ScatterLineChart {\n}\n\nPolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n\nsetDefaultOptions(PolarLineChart, {\n clip: false\n});\n\nexport default PolarLineChart;","import SplineAreaSegment from '../area-chart/spline-area-segment';\nimport { CurveProcessor } from '../../core';\n\nclass SplinePolarAreaSegment extends SplineAreaSegment {\n fillToAxes(fillPath) {\n const center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n }\n\n _polarAxisCenter() {\n const polarAxis = this.parent.plotArea.polarAxis;\n const center = polarAxis.box.center();\n return center;\n }\n\n strokeSegments() {\n let segments = this._strokeSegments;\n\n if (!segments) {\n const center = this._polarAxisCenter();\n const curveProcessor = new CurveProcessor(false);\n const linePoints = this.points();\n\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n\n return segments;\n }\n}\n\nexport default SplinePolarAreaSegment;","import { geometry as geom } from '@progress/kendo-drawing';\nimport AreaSegment from '../area-chart/area-segment';\n\nclass PolarAreaSegment extends AreaSegment {\n fillToAxes(fillPath) {\n const polarAxis = this.parent.plotArea.polarAxis;\n const center = polarAxis.box.center();\n const centerSegment = new geom.Segment([ center.x, center.y ]);\n\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n}\n\nexport default PolarAreaSegment;","import PolarLineChart from '../polar-line-chart/polar-line-chart';\nimport SplinePolarAreaSegment from './spline-polar-area-segment';\nimport PolarAreaSegment from './polar-area-segment';\n\nimport { SMOOTH, INTERPOLATE, ZERO, GAP } from '../constants';\n\nimport hasValue from '../utils/has-value';\n\nclass PolarAreaChart extends PolarLineChart {\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = (currentSeries.line || {}).style;\n let segment;\n\n if (style === SMOOTH) {\n segment = new SplinePolarAreaSegment(linePoints, currentSeries, seriesIx);\n } else {\n segment = new PolarAreaSegment(linePoints, currentSeries, seriesIx);\n }\n return segment;\n }\n\n createMissingValue(value, missingValues) {\n let missingValue;\n\n if (hasValue(value.x) && missingValues !== INTERPOLATE) {\n missingValue = {\n x: value.x,\n y: value.y\n };\n if (missingValues === ZERO) {\n missingValue.y = 0;\n }\n }\n\n return missingValue;\n }\n\n seriesMissingValues(series) {\n return series.missingValues || ZERO;\n }\n\n _hasMissingValuesGap() {\n const series = this.options.series;\n\n for (let idx = 0; idx < series.length; idx++) {\n if (this.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n }\n\n sortPoints(points) {\n points.sort(xComparer);\n\n if (this._hasMissingValuesGap()) {\n for (let idx = 0; idx < points.length; idx++) {\n const point = points[idx];\n if (point) {\n const value = point.value;\n if (!hasValue(value.y) && this.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n\n return points;\n }\n}\n\nfunction xComparer(a, b) {\n return a.value.x - b.value.x;\n}\n\nexport default PolarAreaChart;","import PolarPlotAreaBase from './polar-plotarea-base';\nimport PlotAreaBase from './plotarea-base';\nimport PolarLineChart from '../polar-line-chart/polar-line-chart';\nimport PolarScatterChart from '../polar-scatter-chart/polar-scatter-chart';\nimport PolarAreaChart from '../polar-area-chart/polar-area-chart';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\n\nimport { PolarAxis, Point } from '../../core';\n\nimport { POLAR_AREA, POLAR_LINE, POLAR_SCATTER } from '../constants';\n\nimport filterSeriesByType from '../utils/filter-series-by-type';\n\nimport { ARC } from '../../common/constants';\nimport { deepExtend, eventElement, setDefaultOptions } from '../../common';\nimport XYPlotArea from './xy-plotarea';\n\nclass PolarPlotArea extends PolarPlotAreaBase {\n createPolarAxis() {\n const polarAxis = new PolarAxis(this.options.xAxis, this.chartService);\n\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n }\n\n render() {\n this.series = [...this.originalSeries];\n this.createTrendlineSeries();\n\n super.render();\n }\n\n valueAxisOptions(defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n }\n\n createValueAxis() {\n super.createValueAxis();\n this.axisY = this.valueAxis;\n }\n\n trendlineFactory(options, series) {\n const trendline = XYPlotArea.prototype.trendlineFactory.call(this, options, series);\n if (trendline) {\n trendline.type = POLAR_LINE;\n }\n\n return trendline;\n }\n\n appendChart(chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n }\n\n createCharts() {\n const series = this.filterVisibleSeries(this.series);\n const pane = this.panes[0];\n\n this.createLineChart(\n filterSeriesByType(series, [ POLAR_LINE ]),\n pane\n );\n\n this.createScatterChart(\n filterSeriesByType(series, [ POLAR_SCATTER ]),\n pane\n );\n\n this.createAreaChart(\n filterSeriesByType(series, [ POLAR_AREA ]),\n pane\n );\n }\n\n createLineChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const lineChart = new PolarLineChart(this, { series: series });\n\n this.appendChart(lineChart, pane);\n }\n\n createScatterChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const scatterChart = new PolarScatterChart(this, { series: series });\n\n this.appendChart(scatterChart, pane);\n }\n\n createAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const areaChart = new PolarAreaChart(this, { series: series });\n\n this.appendChart(areaChart, pane);\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const xValue = this.axisX.getValue(point);\n const yValue = this.axisY.getValue(point);\n\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n }\n\n createCrosshairs() {}\n}\n\nsetDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n});\n\ndeepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin, {\n seriesValues: XYPlotArea.prototype.seriesValues\n});\n\nexport default PolarPlotArea;\n","import LineChart from '../line-chart/line-chart';\nimport SplineSegment from '../line-chart/spline-segment';\nimport LineSegment from '../line-chart/line-segment';\n\nimport { Point, Box } from '../../core';\n\nimport { SMOOTH, INTERPOLATE } from '../constants';\n\nimport { setDefaultOptions, last } from '../../common';\n\nfunction groupBySeriesIx(segments) {\n const seriesSegments = [];\n for (let idx = 0; idx < segments.length; idx++) {\n const segment = segments[idx];\n seriesSegments[segment.seriesIx] = seriesSegments[segment.seriesIx] || [];\n seriesSegments[segment.seriesIx].push(segment);\n }\n\n return seriesSegments;\n}\n\nclass RadarLineChart extends LineChart {\n\n pointSlot(categorySlot, valueSlot) {\n const valueRadius = categorySlot.center.y - valueSlot.y1;\n const slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n\n renderSegments() {\n super.renderSegments();\n\n if (this._segments && this._segments.length > 1) {\n const seriesSegments = groupBySeriesIx(this._segments);\n\n for (let idx = 0; idx < seriesSegments.length; idx++) {\n const segments = seriesSegments[idx];\n if (segments && segments.length > 1) {\n const firstPoint = segments[0].linePoints[0];\n const lastSegment = last(segments);\n const lastPoint = last(lastSegment.linePoints);\n const isFirstDataPoint = firstPoint.categoryIx === 0;\n const isLastDataPoint = lastPoint.categoryIx === lastPoint.categoriesCount - 1;\n if (isFirstDataPoint && isLastDataPoint) {\n last(segments).linePoints.push(firstPoint);\n }\n }\n }\n }\n }\n\n createSegment(linePoints, currentSeries, seriesIx) {\n const style = currentSeries.style;\n let pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n const segment = new pointType(linePoints, currentSeries, seriesIx);\n const missingValues = this.seriesMissingValues(currentSeries);\n\n if (linePoints.length === currentSeries.data.length || missingValues === INTERPOLATE) {\n segment.options.closed = true;\n }\n\n return segment;\n }\n}\n\nsetDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n});\n\nexport default RadarLineChart;\n","import SplineAreaSegment from '../area-chart/spline-area-segment';\n\nclass SplineRadarAreaSegment extends SplineAreaSegment {\n fillToAxes() {}\n}\n\nexport default SplineRadarAreaSegment;","import AreaSegment from '../area-chart/area-segment';\n\nclass RadarAreaSegment extends AreaSegment {\n fillToAxes() {}\n}\n\nexport default RadarAreaSegment;","import RadarLineChart from '../radar-line-chart/radar-line-chart';\nimport SplineRadarAreaSegment from './spline-radar-area-segment';\nimport RadarAreaSegment from './radar-area-segment';\n\nimport { SMOOTH, ZERO } from '../constants';\n\nclass RadarAreaChart extends RadarLineChart {\n createSegment(linePoints, currentSeries, seriesIx, prevSegment) {\n const isStacked = this.options.isStacked;\n const style = (currentSeries.line || {}).style;\n let previousSegment;\n let stackPoints;\n let segment;\n\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n\n return segment;\n }\n\n seriesMissingValues(series) {\n return series.missingValues || ZERO;\n }\n}\n\nexport default RadarAreaChart;","import DonutSegment from '../donut-chart/donut-segment';\n\nimport { setDefaultOptions } from '../../common';\n\nclass RadarSegment extends DonutSegment {\n constructor(value, options) {\n super(value, null, options);\n }\n}\n\nsetDefaultOptions(RadarSegment, {\n overlay: {\n gradient: \"none\"\n },\n labels: {\n distance: 10\n }\n});\n\nexport default RadarSegment;","import { ChartElement } from '../../core';\n\nimport { setDefaultOptions } from '../../common';\n\nimport { forEach, forEachReverse } from './utils';\n\nclass RadarClusterLayout extends ChartElement {\n constructor(options) {\n super(options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n }\n\n reflow(sector) {\n const { options, children } = this;\n const { gap, spacing } = options;\n const count = children.length;\n const slots = count + gap + (spacing * (count - 1));\n const slotAngle = sector.angle / slots;\n let angle = sector.startAngle + slotAngle * (gap / 2);\n\n this.forEach(children, (child) => {\n const slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n\n child.reflow(slotSector);\n child.sector = slotSector;\n\n angle += slotAngle + (slotAngle * spacing);\n });\n }\n}\n\nsetDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n});\n\nexport default RadarClusterLayout;","import { ChartElement, Box } from '../../core';\n\nclass RadarStackLayout extends ChartElement {\n reflow(sector) {\n const { options: { reverse }, children } = this;\n const childrenCount = children.length;\n const first = reverse ? childrenCount - 1 : 0;\n const step = reverse ? -1 : 1;\n\n this.box = new Box();\n\n for (let i = first; i >= 0 && i < childrenCount; i += step) {\n const childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n}\n\nexport default RadarStackLayout;","import BarChart from '../bar-chart/bar-chart';\nimport RadarSegment from './radar-segment';\nimport RadarClusterLayout from '../layout/radar-cluster-layout';\nimport RadarStackLayout from '../layout/radar-stack-layout';\nimport CategoricalChart from '../categorical-chart';\n\nimport { setDefaultOptions } from '../../common';\n\nclass RadarBarChart extends BarChart {\n pointType() {\n return RadarSegment;\n }\n\n clusterType() {\n return RadarClusterLayout;\n }\n\n stackType() {\n return RadarStackLayout;\n }\n\n categorySlot(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n }\n\n pointSlot(categorySlot, valueSlot) {\n const slot = categorySlot.clone();\n const y = categorySlot.center.y;\n\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n\n return slot;\n }\n\n reflowPoint(point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n }\n\n createAnimation() {\n this.options.animation.center = this.box.toRect().center();\n super.createAnimation();\n }\n}\n\nRadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n\nsetDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: {\n type: \"pie\"\n }\n});\n\nexport default RadarBarChart;","import PolarPlotAreaBase from './polar-plotarea-base';\nimport CategoricalPlotArea from './categorical-plotarea';\nimport RadarAreaChart from '../radar-area-chart/radar-area-chart';\nimport RadarLineChart from '../radar-line-chart/radar-line-chart';\nimport RadarBarChart from '../radar-bar-chart/radar-bar-chart';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\n\nimport { RadarCategoryAxis, Point } from '../../core';\n\nimport { RADAR_AREA, RADAR_LINE, RADAR_COLUMN } from '../constants';\n\nimport filterSeriesByType from '../utils/filter-series-by-type';\n\nimport { ARC } from '../../common/constants';\nimport { eventElement, deepExtend, setDefaultOptions } from '../../common';\n\nclass RadarPlotArea extends PolarPlotAreaBase {\n createPolarAxis() {\n const categoryAxis = new RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createTrendlineSeries();\n this.createCategoryAxesLabels();\n }\n\n valueAxisOptions(defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: \"P0\" }\n });\n }\n\n return deepExtend(defaults, this.options.valueAxis);\n }\n\n aggregateCategories() {\n // No separate panes in radar charts\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n }\n\n createCategoryAxesLabels() {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n }\n\n filterSeries(currentSeries) {\n // Not supported for radar charts\n return currentSeries;\n }\n\n trendlineFactory(options, series) {\n const trendline = CategoricalPlotArea.prototype.trendlineFactory.call(this, options, series);\n if (trendline) {\n trendline.type = RADAR_LINE;\n }\n\n return trendline;\n }\n\n createCharts() {\n const series = this.filterVisibleSeries(this.series);\n const pane = this.panes[0];\n\n this.createAreaChart(\n filterSeriesByType(series, [ RADAR_AREA ]),\n pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ RADAR_LINE ]),\n pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ RADAR_COLUMN ]),\n pane\n );\n }\n\n chartOptions(series) {\n const options = { series: series };\n const firstSeries = series[0];\n if (firstSeries) {\n const filteredSeries = this.filterVisibleSeries(series);\n const stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === \"100%\" && filteredSeries.length > 1;\n\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n\n return options;\n }\n\n createAreaChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n }\n\n createLineChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n }\n\n createBarChart(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n const firstSeries = series[0];\n const options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n\n const barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n\n this._hasBarCharts = true;\n }\n\n seriesCategoryAxis() {\n return this.categoryAxis;\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const category = this.categoryAxis.getCategory(point);\n const value = this.valueAxis.getValue(point);\n\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n }\n\n createCrosshairs() {}\n}\n\ndeepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints,\n seriesValues: CategoricalPlotArea.prototype.seriesValues\n});\n\nsetDefaultOptions(RadarPlotArea, {\n categoryAxis: {\n categories: []\n },\n valueAxis: {}\n});\n\nexport default RadarPlotArea;\n","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { ChartElement, Box, Point } from '../../core';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nimport { WHITE } from '../../common/constants';\nimport { deepExtend, setDefaultOptions } from '../../common';\n\nclass FunnelSegment extends ChartElement {\n constructor(value, options, segmentOptions) {\n super(options);\n\n this.value = value;\n this.options.index = segmentOptions.index;\n }\n\n reflow(chartBox) {\n const points = this.points;\n const label = this.children[0];\n\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n }\n\n createVisual() {\n const options = this.options;\n let visual;\n\n super.createVisual();\n\n if (options.visual) {\n visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n points: this.points,\n options: options,\n sender: this.getSender(),\n createVisual: () => this.createPath()\n });\n } else {\n visual = this.createPath();\n }\n\n if (visual) {\n this.visual.append(visual);\n }\n }\n\n createPath() {\n const options = this.options;\n const border = options.border;\n const path = draw.Path.fromPoints(this.points, {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: {\n color: border.color,\n opacity: border.opacity,\n width: border.width\n }\n }).close();\n\n return path;\n }\n\n createHighlight(style) {\n return draw.Path.fromPoints(this.points, style);\n }\n\n highlightVisual() {\n return this.visual.children[0];\n }\n\n highlightVisualArgs() {\n const path = draw.Path.fromPoints(this.points).close();\n\n return {\n options: this.options,\n path: path\n };\n }\n\n tooltipAnchor() {\n const box = this.box;\n return {\n point: new Point(box.center().x, box.y1),\n align: {\n horizontal: \"center\",\n vertical: \"top\"\n }\n };\n }\n\n formatValue(format) {\n const point = this;\n return point.owner.formatPointValue(point, format);\n }\n}\n\nsetDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: {\n width: 1\n }\n});\n\ndeepExtend(FunnelSegment.prototype, PointEventsMixin);\n\nexport default FunnelSegment;","import { geometry as geom } from '@progress/kendo-drawing';\n\nimport { ChartElement, TextBox } from '../../core';\nimport PieChartMixin from '../mixins/pie-chart-mixin';\nimport FunnelSegment from './funnel-segment';\n\nimport { bindSegments, evalOptions } from '../utils';\n\nimport { CENTER, LEFT } from '../../common/constants';\nimport { autoTextColor, deepExtend, isFunction, getTemplate, limitValue, setDefaultOptions } from '../../common';\n\nclass FunnelChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n }\n\n formatPointValue(point, format) {\n return this.chartService.format.auto(format,point.value);\n }\n\n render() {\n const { options, plotArea: { options: { seriesColors = [] } } } = this;\n const series = options.series[0];\n const data = series.data;\n\n if (!data) {\n return;\n }\n\n const { total, points } = bindSegments(series);\n\n for (let i = 0; i < points.length; i++) {\n const pointData = points[i];\n\n if (!pointData) {\n continue;\n }\n\n let fields = pointData.fields;\n\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n\n fields = deepExtend({\n index: i,\n owner: this,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n\n const value = pointData.valueFields.value;\n const segment = this.createSegment(value, fields);\n const label = this.createLabel(value, fields);\n\n if (segment && label) {\n segment.append(label);\n }\n }\n }\n\n evalSegmentOptions(options, value, fields) {\n const series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, { defaults: series._defaults, excluded: [ \"data\", \"content\", \"template\", \"toggle\", \"visual\" ] });\n }\n\n createSegment(value, fields) {\n const seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n\n this.createLegendItem(value, seriesOptions, fields);\n\n if (fields.visible !== false) {\n\n const segment = new FunnelSegment(value, seriesOptions, fields);\n Object.assign(segment, fields);\n\n this.append(segment);\n this.points.push(segment);\n\n return segment;\n }\n }\n\n createLabel(value, fields) {\n const { series, dataItem } = fields;\n const labels = deepExtend({}, this.options.labels, series.labels);\n let text = value;\n\n if (labels.visible) {\n const labelTemplate = getTemplate(labels);\n const data = {\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n };\n if (labelTemplate) {\n text = labelTemplate(data);\n } else if (labels.format) {\n text = this.plotArea.chartService.format.auto(labels.format, text);\n }\n\n if (!labels.color) {\n labels.color = autoTextColor(series.color);\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n\n this.evalSegmentOptions(labels, value, fields);\n const textBox = new TextBox(text, deepExtend({\n vAlign: labels.position\n }, labels), data);\n\n this.labels.push(textBox);\n\n return textBox;\n }\n }\n\n labelPadding() {\n const labels = this.labels;\n const padding = { left: 0, right: 0 };\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n const align = label.options.align;\n if (align !== CENTER) {\n const width = labels[i].box.width();\n\n if (align === LEFT) {\n padding.left = Math.max(padding.left, width);\n } else {\n padding.right = Math.max(padding.right, width);\n }\n }\n }\n\n return padding;\n }\n\n dynamicSlopeReflow(box, width, totalHeight) {\n const { options, points: segments } = this;\n const count = segments.length;\n const firstSegment = segments[0];\n let maxSegment = firstSegment;\n\n for (let idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n\n let lastUpperSide = (firstSegment.percentage / maxSegment.percentage) * width;\n let previousOffset = (width - lastUpperSide) / 2;\n let previousHeight = 0;\n\n for (let idx = 0; idx < count; idx++) {\n const percentage = segments[idx].percentage;\n const nextSegment = segments[idx + 1];\n const nextPercentage = (nextSegment ? nextSegment.percentage : percentage);\n const points = segments[idx].points = [];\n const height = (options.dynamicHeight) ? (totalHeight * percentage) : (totalHeight / count);\n let offset;\n\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n\n offset = limitValue(offset, 0, width);\n\n points.push(new geom.Point(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - offset, box.y1 + height + previousHeight));\n points.push(new geom.Point(box.x1 + offset, box.y1 + height + previousHeight));\n\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\n }\n\n constantSlopeReflow(box, width, totalHeight) {\n const { options, points: segments } = this;\n const count = segments.length;\n const decreasingWidth = options.neckRatio <= 1;\n const neckRatio = decreasingWidth ? options.neckRatio * width : width;\n let previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n const topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n const finalNarrow = (topMostWidth - neckRatio) / 2;\n let previousHeight = 0;\n\n for (let idx = 0; idx < count; idx++) {\n const points = segments[idx].points = [];\n const percentage = segments[idx].percentage;\n const offset = (options.dynamicHeight) ? (finalNarrow * percentage) : (finalNarrow / count);\n const height = (options.dynamicHeight) ? (totalHeight * percentage) : (totalHeight / count);\n\n points.push(new geom.Point(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new geom.Point(box.x1 + width - previousOffset - offset, box.y1 + height + previousHeight));\n points.push(new geom.Point(box.x1 + previousOffset + offset,box.y1 + height + previousHeight));\n previousOffset += offset;\n previousHeight += height + options.segmentSpacing;\n }\n }\n\n reflow(chartBox) {\n const points = this.points;\n const count = points.length;\n\n if (!count) {\n return;\n }\n\n const options = this.options;\n const box = chartBox.clone().unpad(this.labelPadding());\n const totalHeight = box.height() - options.segmentSpacing * (count - 1);\n const width = box.width();\n\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n\n for (let idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\n }\n}\n\nsetDefaultOptions(FunnelChart, {\n neckRatio: 0.3,\n width: 300,\n dynamicSlope: false,\n dynamicHeight: true,\n segmentSpacing: 0,\n labels: {\n visible: false,\n align: CENTER,\n position: CENTER,\n zIndex: 1\n }\n});\n\ndeepExtend(FunnelChart.prototype, PieChartMixin);\n\nexport default FunnelChart;\n","import FunnelChart from './funnel-chart';\n\nconst MAX_NECK_RATIO = 1e6;\n\nclass PyramidChart extends FunnelChart {\n constructor(plotArea, options) {\n options.dynamicSlope = false;\n options.neckRatio = MAX_NECK_RATIO;\n\n super(plotArea, options);\n }\n}\n\nexport default PyramidChart;\n","import { autoTextColor, deepExtend, getTemplate, valueOrDefault } from '../../common';\nimport { CENTER, ROUNDED_RECT, BOTTOM, WHITE } from '../../common/constants';\nimport { ChartElement, Point, rectToBox, ShapeElement, TextBox } from '../../core';\nimport { TOOLTIP_OFFSET } from '../constants';\nimport NoteMixin from '../mixins/note-mixin';\nimport PointEventsMixin from '../mixins/point-events-mixin';\n\nclass HeatmapPoint extends ChartElement {\n constructor(value, options) {\n super();\n\n this.options = options;\n this.color = options.color || WHITE;\n this.value = value;\n }\n\n render() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createMarker();\n this.createLabel();\n this.createNote();\n }\n\n createLabel() {\n const options = this.options;\n const labels = options.labels;\n\n if (labels.visible) {\n const pointData = this.pointData();\n let labelTemplate = getTemplate(labels);\n let labelText;\n let labelColor = labels.color;\n\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n\n if (!labelColor) {\n labelColor = autoTextColor(this.color);\n }\n\n this.label = new TextBox(labelText,\n deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n },\n labels, {\n color: labelColor\n }),\n pointData\n );\n this.append(this.label);\n }\n }\n\n formatValue(format) {\n return this.owner.formatPointValue(this, format);\n }\n\n reflow(targetBox) {\n this.render();\n\n const label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.reflow(this.markerBox());\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n this.marker.reflow(this.markerBox());\n }\n\n markerBox() {\n const options = this.options;\n const markers = options.markers;\n const border = markers.border;\n const rect = this.box.toRect();\n const type = valueOrDefault(markers.type, 'rect');\n const isRoundRect = type === ROUNDED_RECT;\n let borderWidth = valueOrDefault(border.width, isRoundRect ? 1 : 0);\n const halfBorderWidth = Math.round(borderWidth / 2);\n\n if (markers.size) {\n const center = rect.center();\n rect.size.width = rect.size.height = markers.size;\n rect.origin.x = Math.round(center.x - rect.size.width / 2);\n rect.origin.y = Math.round(center.y - rect.size.height / 2);\n }\n\n rect.size.width -= borderWidth;\n rect.size.height -= borderWidth;\n rect.origin.y += halfBorderWidth + 0.5;\n rect.origin.x += halfBorderWidth + 0.5;\n\n return rectToBox(rect);\n }\n\n markerBorder() {\n const options = this.options;\n const markers = options.markers;\n const border = markers.border;\n const opacity = valueOrDefault(border.opacity, options.opacity);\n\n return {\n color: border.color || this.color,\n width: border.width,\n opacity: opacity,\n dashType: border.dashType\n };\n }\n\n createMarker() {\n const options = this.options;\n const markerOptions = options.markers;\n const marker = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n\n this.marker = marker;\n this.append(marker);\n }\n\n createHighlight(style) {\n const options = this.options;\n const markerOptions = this.options.highlight.markers || this.options.markers;\n\n const highlight = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: markerOptions.color || this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n });\n\n highlight.reflow(this.markerBox());\n const visual = highlight.getElement();\n\n visual.options.fill = style.fill;\n visual.options.stroke = style.stroke;\n\n return visual;\n }\n\n highlightVisual() {\n return this.rectVisual;\n }\n\n highlightVisualArgs() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n }\n\n tooltipAnchor() {\n const left = this.box.center().x;\n const top = this.box.y1 - TOOLTIP_OFFSET;\n\n return {\n point: new Point(left, top),\n align: {\n horizontal: CENTER,\n vertical: BOTTOM\n }\n };\n }\n\n overlapsBox(box) {\n return this.box.overlaps(box);\n }\n\n unclipElements() {\n /* noop, clip labels */\n }\n\n pointData() {\n return {\n x: this.value.x,\n y: this.value.y,\n value: this.value.value,\n dataItem: this.dataItem,\n series: this.series\n };\n }\n}\n\ndeepExtend(HeatmapPoint.prototype, PointEventsMixin);\ndeepExtend(HeatmapPoint.prototype, NoteMixin);\n\nHeatmapPoint.prototype.defaults = {\n markers: {\n type: 'rect',\n borderRadius: 4,\n border: {\n color: 'transparent'\n }\n },\n padding: { top: 1 },\n labels: {\n visible: false,\n padding: 3\n },\n opacity: 1,\n notes: {\n label: {}\n }\n};\n\nexport default HeatmapPoint;\n","import { deepExtend, defined, isFunction, setDefaultOptions } from '../../common';\nimport { MAX_VALUE, MIN_VALUE } from '../../common/constants';\nimport { Box, ChartElement } from '../../core';\nimport evalOptions from '../utils/eval-options';\nimport colorScale from './color-scale';\nimport HeatmapPoint from './heatmap-point';\n\nclass HeatmapChart extends ChartElement {\n constructor(plotArea, options) {\n super(options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n }\n\n _initFields() {\n this.points = [];\n this.seriesOptions = [];\n this.valueRange = { min: MAX_VALUE, max: MIN_VALUE };\n this._evalSeries = [];\n }\n\n render() {\n this.setRange();\n this.traverseDataPoints(this.addValue.bind(this));\n }\n\n setRange() {\n const { options: { series } } = this;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n\n for (let pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n const { valueFields } = this.plotArea.bindPoint(currentSeries, pointIx);\n if (defined(valueFields.value) && valueFields.value !== null) {\n this.valueRange.min = Math.min(this.valueRange.min, valueFields.value);\n this.valueRange.max = Math.max(this.valueRange.max, valueFields.value);\n }\n }\n }\n }\n\n addValue(value, fields) {\n let point;\n if (value && defined(value.value) && value.value !== null) {\n point = this.createPoint(value, fields);\n if (point) {\n Object.assign(point, fields);\n }\n }\n\n this.points.push(point);\n }\n\n evalPointOptions(options, value, fields) {\n const { series, seriesIx } = fields;\n const state = {\n defaults: series._defaults,\n excluded: [\n \"data\", \"tooltip\", \"content\", \"template\",\n \"visual\", \"toggle\", \"drilldownSeriesFactory\"\n ]\n };\n\n let doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n let pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n min: this.valueRange.min,\n max: this.valueRange.max\n }, state);\n }\n\n return pointOptions;\n }\n\n pointType() {\n return HeatmapPoint;\n }\n\n pointOptions(series, seriesIx) {\n let options = this.seriesOptions[seriesIx];\n if (!options) {\n const defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n }\n\n createPoint(value, fields) {\n const series = fields.series;\n let pointOptions = this.pointOptions(series, fields.seriesIx);\n let color = fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n } else if (this.valueRange.max !== 0) {\n const scale = colorScale(color);\n color = scale(value.value / this.valueRange.max);\n }\n\n const point = new HeatmapPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n }\n\n seriesAxes(series) {\n const { xAxis: xAxisName, yAxis: yAxisName } = series;\n const plotArea = this.plotArea;\n const xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n const yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis, yAxis };\n }\n\n reflow(targetBox) {\n const chartPoints = this.points;\n const limit = !this.options.clip;\n let pointIx = 0;\n\n\n this.traverseDataPoints((value, fields) => {\n const point = chartPoints[pointIx++];\n const { xAxis, yAxis } = this.seriesAxes(fields.series);\n const indexX = xAxis.categoryIndex(value.x);\n const indexY = yAxis.categoryIndex(value.y);\n const slotX = xAxis.getSlot(indexX, indexX, limit);\n const slotY = yAxis.getSlot(indexY, indexY, limit);\n\n if (point) {\n if (slotX && slotY) {\n const pointSlot = this.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n }\n\n pointSlot(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n }\n\n traverseDataPoints(callback) {\n const { options: { series } } = this;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const { xAxis, yAxis } = this.seriesAxes(currentSeries);\n const xRange = xAxis.currentRangeIndices();\n const yRange = yAxis.currentRangeIndices();\n\n for (let pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n const { valueFields: value, fields } = this.plotArea.bindPoint(currentSeries, pointIx);\n const xIndex = xAxis.totalIndex(value.x);\n const yIndex = yAxis.totalIndex(value.y);\n const xIn = xRange.min <= xIndex && xIndex <= xRange.max;\n const yIn = yRange.min <= yIndex && yIndex <= yRange.max;\n\n if (xIn && yIn) {\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this\n }, fields));\n }\n }\n }\n }\n\n formatPointValue(point, format) {\n const value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.value);\n }\n\n animationPoints() {\n const points = this.points;\n const result = [];\n for (let idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n}\nsetDefaultOptions(HeatmapChart, {\n series: [],\n tooltip: {\n format: \"{0}, {1}: {2}\"\n },\n labels: {\n format: \"{2}\"\n },\n clip: true\n});\n\nexport default HeatmapChart;\n","import { parseColor } from '@progress/kendo-drawing';\n\n// Linear color scale from the given color to white minus minimum lightness offset.\nconst colorScale = (color, minLightnessOffset = 0.05) => {\n const baseColor = parseColor(color);\n const offset = 1 - minLightnessOffset;\n\n return (value) => {\n const hsl = baseColor.toHSL();\n const range = 100 - hsl.l;\n const point = offset - value;\n hsl.l += Math.min(point * range, range);\n\n return hsl.toCss();\n };\n};\n\nexport default colorScale;\n","import { deepExtend, eventElement, grep, inArray, setDefaultOptions, createHashSet } from '../../common';\nimport { DATE } from '../../common/constants';\nimport { CategoryAxis, DateCategoryAxis, Point } from '../../core';\nimport { HEATMAP } from '../constants';\nimport HeatmapChart from '../heatmap-chart/heatmap-chart';\nimport PlotAreaEventsMixin from '../mixins/plotarea-events-mixin';\nimport SeriesBinder from '../series-binder';\nimport { appendIfNotNull, equalsIgnoreCase, filterSeriesByType, singleItemOrArray } from '../utils';\nimport PlotAreaBase from './plotarea-base';\n\n\nclass HeatmapPlotArea extends PlotAreaBase {\n initFields() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n }\n\n render(panes = this.panes) {\n this.bindCategories();\n this.createAxes(panes);\n this.createCharts(panes);\n this.createAxisLabels();\n }\n\n bindCategories() {\n const series = this.srcSeries || this.series;\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n const data = currentSeries.data || [];\n const { xAxis, yAxis } = this.seriesAxes(currentSeries);\n\n const xCategories = createHashSet(xAxis.categories || []);\n const yCategories = createHashSet(yAxis.categories || []);\n\n for (let pointIndex = 0; pointIndex < data.length; pointIndex++) {\n const { x, y } = SeriesBinder.current.bindPoint(currentSeries, pointIndex).valueFields;\n\n if (!xCategories.has(x)) {\n xCategories.add(x);\n }\n\n if (!yCategories.has(y)) {\n yCategories.add(y);\n }\n }\n\n xAxis.categories = xCategories.values();\n yAxis.categories = yCategories.values();\n }\n }\n\n createCharts(panes) {\n const seriesByPane = this.groupSeriesByPane();\n\n for (let i = 0; i < panes.length; i++) {\n const pane = panes[i];\n const paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this.addToLegend(paneSeries);\n const filteredSeries = this.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this.createHeatmapChart(\n filterSeriesByType(filteredSeries, [ HEATMAP ]),\n pane\n );\n }\n }\n\n createHeatmapChart(series, pane) {\n const chart = new HeatmapChart(this, {\n series: series\n });\n\n this.appendChart(chart, pane);\n }\n\n seriesPaneName(series) {\n const options = this.options;\n const xAxisName = series.xAxis;\n const xAxisOptions = [].concat(options.xAxis);\n const xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n const yAxisName = series.yAxis;\n const yAxisOptions = [].concat(options.yAxis);\n const yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n const panes = options.panes || [ {} ];\n const defaultPaneName = panes[0].name || \"default\";\n const paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n }\n\n seriesAxes(series) {\n let xAxis;\n let yAxis;\n\n const options = this.options;\n\n const xAxisOptions = [].concat(options.xAxis);\n const xAxisName = series.xAxis;\n if (xAxisName) {\n xAxis = xAxisOptions.find(axis => axis.name === xAxisName);\n } else {\n xAxis = xAxisOptions[0];\n }\n\n const yAxisOptions = [].concat(options.yAxis);\n const yAxisName = series.yAxis;\n if (yAxisName) {\n yAxis = yAxisOptions.find(axis => axis.name === yAxisName);\n } else {\n yAxis = yAxisOptions[0];\n }\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis, yAxis };\n }\n\n createAxisLabels() {\n const axes = this.axes;\n for (let i = 0; i < axes.length; i++) {\n axes[i].createLabels();\n }\n }\n\n createXYAxis(options, vertical, axisIndex) {\n const axisName = options.name;\n const namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n const axisOptions = Object.assign({\n axisCrossingValue: 0\n }, options, {\n vertical: vertical,\n reverse: (vertical || this.chartService.rtl) ? !options.reverse : options.reverse,\n justified: false\n });\n const firstCategory = axisOptions.categories ? axisOptions.categories[0] : null;\n const typeSamples = [ axisOptions.min, axisOptions.max, firstCategory ];\n const series = this.series;\n\n for (let seriesIx = 0; seriesIx < series.length; seriesIx++) {\n const currentSeries = series[seriesIx];\n const seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n const firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n break;\n }\n }\n\n let inferredDate;\n\n for (let i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n\n let axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n axisType = DateCategoryAxis;\n } else {\n axisType = CategoryAxis;\n }\n\n const axis = new axisType(axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error(`${ vertical ? \"Y\" : \"X\" } axis with name ${ axisName } is already defined`);\n }\n namedAxes[axisName] = axis;\n }\n\n this.appendAxis(axis);\n axis.mapCategories();\n\n return axis;\n }\n\n createAxes(panes) {\n const options = this.options;\n const xAxesOptions = [].concat(options.xAxis);\n const xAxes = [];\n const yAxesOptions = [].concat(options.yAxis);\n const yAxes = [];\n\n for (let idx = 0; idx < xAxesOptions.length; idx++) {\n const axisPane = this.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (let idx = 0; idx < yAxesOptions.length; idx++) {\n const axisPane = this.findPane(yAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n yAxes.push(this.createXYAxis(yAxesOptions[idx], true, idx));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n }\n\n removeAxis(axis) {\n const axisName = axis.options.name;\n\n super.removeAxis(axis);\n\n if (axis.options.vertical) {\n delete this.namedYAxes[axisName];\n } else {\n delete this.namedXAxes[axisName];\n }\n\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\n }\n\n _dispatchEvent(chart, e, eventType) {\n const coords = chart._eventCoordinates(e);\n const point = new Point(coords.x, coords.y);\n const allAxes = this.axes;\n const length = allAxes.length;\n const xValues = [];\n const yValues = [];\n\n for (let i = 0; i < length; i++) {\n const axis = allAxes[i];\n const values = axis.options.vertical ? yValues : xValues;\n appendIfNotNull(values, axis.getCategory(point));\n }\n\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n }\n\n updateAxisOptions(axis, options) {\n const vertical = axis.options.vertical;\n const axes = this.groupAxes(this.panes);\n const index = (vertical ? axes.y : axes.x).indexOf(axis);\n\n updateAxisOptions(this.options, index, vertical, options);\n updateAxisOptions(this.originalOptions, index, vertical, options);\n }\n\n crosshairOptions(axis) {\n // Stack the crosshair above the series points.\n return Object.assign({}, axis.options.crosshair, { zIndex: 0 });\n }\n}\n\nfunction updateAxisOptions(targetOptions, axisIndex, vertical, options) {\n const axisOptions = ([].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis))[axisIndex];\n deepExtend(axisOptions, options);\n}\n\nsetDefaultOptions(HeatmapPlotArea, {\n xAxis: {},\n yAxis: {}\n});\n\ndeepExtend(HeatmapPlotArea.prototype, PlotAreaEventsMixin);\n\nexport default HeatmapPlotArea;\n","import PlotAreaFactory from './plotarea/plotarea-factory';\nimport SeriesBinder from './series-binder';\nimport DefaultAggregates from './aggregates/default-aggregates';\nimport CategoricalPlotArea from './plotarea/categorical-plotarea';\nimport XYPlotArea from './plotarea/xy-plotarea';\nimport PiePlotArea from './plotarea/pie-plotarea';\nimport DonutPlotArea from './plotarea/donut-plotarea';\nimport PolarPlotArea from './plotarea/polar-plotarea';\nimport RadarPlotArea from './plotarea/radar-plotarea';\nimport FunnelPlotArea from './plotarea/funnel-plotarea';\nimport HeatmapPlotArea from './plotarea/heatmap-plotarea';\n\nimport { COLUMN, DONUT, PIE, FUNNEL, PYRAMID, BAR, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT, VERTICAL_BOX_PLOT, RANGE_COLUMN,\n RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL, SCATTER, SCATTER_LINE, BUBBLE,\n POLAR_AREA, POLAR_LINE, POLAR_SCATTER, RADAR_AREA, RADAR_COLUMN, RADAR_LINE, CATEGORY,\n RANGE_AREA, VERTICAL_RANGE_AREA, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD,\n ERROR_LOW_FIELD, ERROR_HIGH_FIELD, HEATMAP, DRILLDOWN_FIELD, TRENDLINE_SERIES } from './constants';\nimport { X, Y, VALUE } from '../common/constants';\n\nconst COLOR = \"color\";\nconst FIRST = \"first\";\nconst FROM = \"from\";\nconst MAX = \"max\";\nconst MIN = \"min\";\nconst NOTE_TEXT = \"noteText\";\nconst SUMMARY_FIELD = \"summary\";\nconst TO = \"to\";\n\nPlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT, VERTICAL_BOX_PLOT,\n RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL, RANGE_AREA, VERTICAL_RANGE_AREA,\n ...TRENDLINE_SERIES\n]);\n\nPlotAreaFactory.current.register(XYPlotArea, [\n SCATTER, SCATTER_LINE, BUBBLE,\n ...TRENDLINE_SERIES\n]);\n\nPlotAreaFactory.current.register(PiePlotArea, [ PIE ]);\nPlotAreaFactory.current.register(DonutPlotArea, [ DONUT ]);\nPlotAreaFactory.current.register(FunnelPlotArea, [ FUNNEL, PYRAMID ]);\n\nPlotAreaFactory.current.register(PolarPlotArea, [\n POLAR_AREA, POLAR_LINE, POLAR_SCATTER,\n ...TRENDLINE_SERIES\n]);\n\nPlotAreaFactory.current.register(RadarPlotArea, [\n RADAR_AREA, RADAR_COLUMN, RADAR_LINE,\n ...TRENDLINE_SERIES\n]);\n\nPlotAreaFactory.current.register(HeatmapPlotArea, [ HEATMAP ]);\n\nSeriesBinder.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, ERROR_LOW_FIELD, ERROR_HIGH_FIELD, DRILLDOWN_FIELD ]\n);\n\nSeriesBinder.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n [ FROM, TO ], [ CATEGORY, COLOR, NOTE_TEXT, DRILLDOWN_FIELD ]\n);\n\nSeriesBinder.current.register(\n [ WATERFALL, HORIZONTAL_WATERFALL ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, SUMMARY_FIELD, DRILLDOWN_FIELD ]\n);\n\nSeriesBinder.current.register([ POLAR_AREA, POLAR_LINE, POLAR_SCATTER ], [ X, Y ], [ COLOR, DRILLDOWN_FIELD ]);\nSeriesBinder.current.register([ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ], [ VALUE ], [ COLOR, DRILLDOWN_FIELD ]);\n\nSeriesBinder.current.register(\n [ FUNNEL, PYRAMID ],\n [ VALUE ], [ CATEGORY, COLOR, \"visibleInLegend\", \"visible\", DRILLDOWN_FIELD ]\n);\n\nDefaultAggregates.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA, WATERFALL, HORIZONTAL_WATERFALL ],\n { value: MAX, color: FIRST, noteText: FIRST, errorLow: MIN, errorHigh: MAX }\n);\n\nDefaultAggregates.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n { from: MIN, to: MAX, color: FIRST, noteText: FIRST }\n);\n\nDefaultAggregates.current.register(\n [ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ],\n { value: MAX, color: FIRST }\n);\n\nSeriesBinder.current.register(\n [ SCATTER, SCATTER_LINE, BUBBLE ],\n [ X, Y ], [ COLOR, NOTE_TEXT, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD ]\n);\n\nSeriesBinder.current.register(\n [ BUBBLE ], [ X, Y, \"size\" ], [ COLOR, CATEGORY, NOTE_TEXT ]\n);\n\nSeriesBinder.current.register(\n [ HEATMAP ],\n [ X, Y, VALUE ], [ COLOR, NOTE_TEXT ]\n);\n\nSeriesBinder.current.register(\n [ CANDLESTICK, OHLC ],\n [ \"open\", \"high\", \"low\", \"close\" ], [ CATEGORY, COLOR, \"downColor\", NOTE_TEXT ]\n);\n\nDefaultAggregates.current.register(\n [ CANDLESTICK, OHLC ],\n { open: MAX, high: MAX, low: MIN, close: MAX,\n color: FIRST, downColor: FIRST, noteText: FIRST }\n);\n\nSeriesBinder.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n [ \"lower\", \"q1\", \"median\", \"q3\", \"upper\", \"mean\", \"outliers\" ], [ CATEGORY, COLOR, NOTE_TEXT, DRILLDOWN_FIELD ]\n);\n\nDefaultAggregates.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n { lower: MAX, q1: MAX, median: MAX, q3: MAX, upper: MAX, mean: MAX, outliers: FIRST,\n color: FIRST, noteText: FIRST }\n);\n\nSeriesBinder.current.register(\n [ BULLET, VERTICAL_BULLET ],\n [ \"current\", \"target\" ], [ CATEGORY, COLOR, \"visibleInLegend\", NOTE_TEXT, DRILLDOWN_FIELD ]\n);\n\nDefaultAggregates.current.register(\n [ BULLET, VERTICAL_BULLET ],\n { current: MAX, target: MAX, color: FIRST, noteText: FIRST }\n);\n\nSeriesBinder.current.register(\n [ PIE, DONUT ],\n [ VALUE ], [ CATEGORY, COLOR, \"explode\", \"visibleInLegend\", \"visible\", DRILLDOWN_FIELD ]\n);\n","import PiePlotArea from './pie-plotarea';\nimport DonutChart from '../donut-chart/donut-chart';\n\nclass DonutPlotArea extends PiePlotArea {\n render() {\n this.createDonutChart(this.series);\n }\n\n createDonutChart(series) {\n const firstSeries = series[0];\n const donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n\n this.appendChart(donutChart);\n }\n}\n\nexport default DonutPlotArea;","import PlotAreaBase from './plotarea-base';\nimport FunnelChart from '../funnel-chart/funnel-chart';\nimport PyramidChart from '../funnel-chart/pyramid-chart';\n\nimport { append } from '../../common';\nimport { filterSeriesByType } from '../utils';\n\nimport { FUNNEL, PYRAMID } from '../constants';\n\nclass FunnelPlotArea extends PlotAreaBase {\n render() {\n this.createChart(FunnelChart, filterSeriesByType(this.series, [ FUNNEL ]));\n this.createChart(PyramidChart, filterSeriesByType(this.series, [ PYRAMID ]));\n }\n\n createChart(chartType, series) {\n const firstSeries = series[0];\n if (!firstSeries) {\n return;\n }\n\n const chart = new chartType(this, {\n series: series,\n legend: this.options.legend,\n neckRatio: firstSeries.neckRatio,\n dynamicHeight: firstSeries.dynamicHeight,\n dynamicSlope: firstSeries.dynamicSlope,\n segmentSpacing: firstSeries.segmentSpacing,\n highlight: firstSeries.highlight\n });\n\n this.appendChart(chart);\n }\n\n appendChart(chart, pane) {\n super.appendChart(chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n}\n\nexport default FunnelPlotArea;\n","import { drawing as draw, throttle, geometry } from '@progress/kendo-drawing';\n\nimport { RootElement, Title, CategoryAxis, Point } from '../core';\n\nimport Highlight from './highlight';\nimport Pannable from './pan-and-zoom/pannable';\nimport ZoomSelection from './pan-and-zoom/zoom-selection';\nimport MousewheelZoom from './pan-and-zoom/mousewheel-zoom';\nimport Legend from './legend/legend';\nimport PlotAreaFactory from './plotarea/plotarea-factory';\nimport Selection from './selection';\nimport SeriesBinder from './series-binder';\nimport Tooltip from './tooltip/tooltip';\nimport SharedTooltip from './tooltip/shared-tooltip';\nimport CategoricalPlotArea from './plotarea/categorical-plotarea';\nimport PlotAreaBase from './plotarea/plotarea-base';\nimport { ChartService, DomEventsBuilder } from '../services';\nimport getField from './utils/get-field';\nimport isDateAxis from './utils/is-date-axis';\nimport getDateField from './utils/get-date-field';\nimport { ChartPane, ChartPlotArea, findAxisByName } from './api-elements';\n\nimport { X, Y, VALUE, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_SERIES_OPACITY } from '../common/constants';\nimport { addClass, Class, setDefaultOptions, deepExtend, defined, find, isObject, isFunction, elementSize, elementOffset,\n elementScale, elementStyles, eventCoordinates, bindEvents, unbindEvents, mousewheelDelta, FontLoader, inArray, last, round,\n HashMap, valueOrDefault } from '../common';\n\nimport { dateComparer } from '../date-utils';\n\nimport { DRAG_START, DRAG, DRAG_END, ZOOM_START, ZOOM, ZOOM_END, SELECT_START, SELECT, SELECT_END, PLOT_AREA_HOVER, PLOT_AREA_LEAVE,\n RENDER, CATEGORY, PIE, DONUT, FUNNEL, PYRAMID, COLUMN, MOUSEWHEEL, MOUSEWHEEL_DELAY, MOUSEWHEEL_ZOOM_RATE, SHOW_TOOLTIP, SERIES_HOVER,\n SERIES_OVER, SERIES_LEAVE, SERIES_CLICK, DRILLDOWN } from './constants';\n\nimport './animations';\nimport './register-charts';\n\nconst AXIS_NAMES = [ CATEGORY, VALUE, X, Y ];\n\nconst MOUSEMOVE = \"mousemove\";\nconst CONTEXTMENU = \"contextmenu\";\nconst MOUSELEAVE = \"mouseleave\";\nconst MOUSEMOVE_DELAY = 20;\n\nclass Chart extends Class {\n constructor(element, userOptions, themeOptions, context = {}) {\n super();\n\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new ChartService(this, context);\n this.chartService.theme = themeOptions;\n\n this._initElement(element);\n\n const options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n\n this._initHandlers();\n this._initSurface();\n\n this.bindCategories();\n FontLoader.preloadFonts(userOptions, () => {\n this.fontLoaded = true;\n if (!this._destroyed) {\n this.trigger('init');\n this._redraw();\n this._attachEvents();\n }\n });\n }\n\n _initElement(element) {\n this._setElementClass(element);\n element.style.position = \"relative\";\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n this.element = element;\n }\n\n _setElementClass(element) {\n addClass(element, \"k-chart\");\n }\n\n _initTheme(options, themeOptions) {\n const seriesCopies = [];\n const series = options.series || [];\n\n for (let i = 0; i < series.length; i++) {\n seriesCopies.push(Object.assign({}, series[i]));\n }\n options.series = seriesCopies;\n\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n\n // Clean up default if not overriden by data attributes\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\n }\n\n getSize() {\n const chartArea = this.options.chartArea || {};\n const width = chartArea.width ? parseInt(chartArea.width, 10) : Math.floor(this.element.offsetWidth);\n const height = chartArea.height ? parseInt(chartArea.height, 10) : Math.floor(this.element.offsetHeight);\n\n return {\n width: width,\n height: height\n };\n }\n\n resize(force) {\n const size = this.getSize();\n const currentSize = this._size;\n const hasSize = size.width > 0 || size.height > 0;\n\n if (force || hasSize && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger(\"resize\", size);\n } else if (hasSize && this._selections && find(this._selections, s => !s.visible)) {\n this._destroySelections();\n this._setupSelection();\n }\n }\n\n _resize() {\n this._noTransitionsRedraw();\n }\n\n redraw(paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n\n if (paneName) {\n const plotArea = this._model._plotArea;\n const pane = plotArea.findPane(paneName);\n plotArea.redraw(pane);\n } else {\n this._redraw();\n }\n }\n\n getAxis(name) {\n return findAxisByName(name, this._plotArea.axes);\n }\n\n findAxisByName(name) {\n return this.getAxis(name);\n }\n\n findPaneByName(name) {\n const panes = this._plotArea.panes;\n\n for (let idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(panes[idx]);\n }\n }\n }\n\n findPaneByIndex(idx) {\n const panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\n }\n\n plotArea() {\n return new ChartPlotArea(this._plotArea);\n }\n\n toggleHighlight(show, filter) {\n const plotArea = this._plotArea;\n const firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n let points;\n\n if (isFunction(filter)) {\n points = plotArea.filterPoints(filter);\n } else {\n let seriesName, categoryName;\n if (isObject(filter)) {\n seriesName = filter.series;\n categoryName = filter.category;\n } else {\n seriesName = categoryName = filter;\n }\n\n if (firstSeries.type === DONUT) {\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\n } else if (inArray(firstSeries.type, [ PIE, FUNNEL, PYRAMID ])) {\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\n } else {\n points = plotArea.pointsBySeriesName(seriesName);\n }\n }\n\n if (points) {\n this.togglePointsHighlight(show, points);\n }\n }\n\n togglePointsHighlight(show, points) {\n const highlight = this._highlight;\n for (let idx = 0; idx < points.length; idx++) {\n highlight.togglePointHighlight(points[idx], show);\n }\n }\n\n showTooltip(filter) {\n const shared = this._sharedTooltip();\n const { _tooltip: tooltip, _plotArea: plotArea } = this;\n let point, categoryIndex;\n\n if (isFunction(filter)) {\n point = plotArea.findPoint(filter);\n if (point && shared) {\n categoryIndex = point.categoryIx;\n }\n } else if (shared && defined(filter)) {\n categoryIndex = plotArea.categoryAxis.categoryIndex(filter);\n }\n\n if (shared) {\n if (categoryIndex >= 0) {\n const points = this._plotArea.pointsByCategoryIndex(categoryIndex);\n tooltip.showAt(points);\n }\n } else if (point) {\n tooltip.show(point);\n }\n }\n\n hideTooltip() {\n this._tooltip.hide();\n }\n\n _initSurface() {\n const surface = this.surface;\n const wrap = this._surfaceWrap();\n\n const chartArea = this.options.chartArea || {};\n if (chartArea.width) {\n elementSize(wrap, { width: chartArea.width });\n }\n if (chartArea.height) {\n elementSize(wrap, { height: chartArea.height });\n }\n\n if (!surface || surface.options.type !== this.options.renderAs) {\n this._destroySurface();\n\n this.surface = draw.Surface.create(wrap, {\n type: this.options.renderAs\n });\n\n this.surface.bind(\"mouseenter\", this._surfaceMouseenterHandler);\n this.surface.bind(\"mouseleave\", this._surfaceMouseleaveHandler);\n\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n }\n\n _surfaceWrap() {\n return this.element;\n }\n\n _redraw() {\n const model = this._getModel();\n this._size = {\n width: model.options.width,\n height: model.options.height\n };\n\n this._destroyView();\n\n this._model = model;\n this._plotArea = model._plotArea;\n\n model.renderVisual();\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n\n this._initSurface();\n this.surface.draw(model.visual);\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.play();\n }\n });\n }\n\n this._tooltip = this._createTooltip();\n this._highlight = new Highlight();\n this._setupSelection();\n this._createPannable();\n this._createZoomSelection();\n this._createMousewheelZoom();\n\n this.trigger(RENDER);\n triggerPaneRender(this._plotArea.panes);\n\n if (!this._navState) {\n this._cancelDomEvents();\n }\n }\n\n exportVisual(exportOptions) {\n let visual;\n if (exportOptions && (exportOptions.width || exportOptions.height || exportOptions.options)) {\n const currentOptions = this.options;\n const options = deepExtend({}, exportOptions.options, {\n chartArea: {\n width: exportOptions.width,\n height: exportOptions.height\n }\n });\n\n clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n\n const model = this._getModel();\n\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n\n visual = model.visual;\n\n this.options = currentOptions;\n } else {\n visual = this.surface.exportVisual();\n }\n\n return visual;\n }\n\n _sharedTooltip() {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip && this.options.tooltip.shared;\n }\n\n _createPannable() {\n const options = this.options;\n if (options.pannable !== false) {\n this._pannable = new Pannable(this._plotArea, options.pannable);\n }\n }\n\n _createZoomSelection() {\n const zoomable = this.options.zoomable;\n const selection = (zoomable || {}).selection;\n if (zoomable !== false && selection !== false) {\n this._zoomSelection = new ZoomSelection(this, selection);\n }\n }\n\n _createMousewheelZoom() {\n const zoomable = this.options.zoomable;\n const mousewheel = (zoomable || {}).mousewheel;\n if (zoomable !== false && mousewheel !== false) {\n this._mousewheelZoom = new MousewheelZoom(this, mousewheel);\n }\n }\n\n _toggleDragZoomEvents() {\n const pannable = this.options.pannable;\n const zoomable = this.options.zoomable;\n const selection = (zoomable || {}).selection;\n const mousewheel = (zoomable || {}).mousewheel;\n const allowDrag = !pannable && (zoomable === false || selection === false) && !this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ]);\n const allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([ ZOOM_START, ZOOM, ZOOM_END ]);\n const element = this.element;\n\n if (this._dragZoomEnabled && allowDrag && allowZoom) {\n element.style.touchAction = this._touchAction || '';\n this._dragZoomEnabled = false;\n } else if (!this._dragZoomEnabled && !(allowDrag && allowZoom)) {\n element.style.touchAction = \"none\";\n\n this._dragZoomEnabled = true;\n }\n\n this._toggleDomEvents(!allowDrag, !allowZoom);\n }\n\n _toggleDomEvents(drag, zoom) {\n const domEvents = this.domEvents;\n if (!domEvents) {\n return;\n }\n\n if (domEvents.toggleDrag) {\n domEvents.toggleDrag(drag);\n }\n\n if (domEvents.toggleZoom) {\n domEvents.toggleZoom(zoom);\n }\n }\n\n _createTooltip() {\n const { options: { tooltip: tooltipOptions } } = this;\n let tooltip;\n\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n\n return tooltip;\n }\n\n _createSharedTooltip(options) {\n return new SharedTooltip(this._plotArea, options);\n }\n\n applyDefaults(options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n }\n\n applySeriesColors() {\n const options = this.options;\n const series = options.series;\n const colors = options.seriesColors || [];\n\n for (let i = 0; i < series.length; i++) {\n const currentSeries = series[i];\n const seriesColor = colors[i % colors.length];\n const defaults = currentSeries._defaults;\n\n currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\n }\n }\n }\n\n _getModel() {\n const options = this.options;\n const plotArea = this._createPlotArea();\n const model = new RootElement(this._modelOptions());\n model.chart = this;\n model._plotArea = plotArea;\n\n const title = Title.buildTitle(options.title);\n const subtitle = Title.buildTitle(options.subtitle, {\n align: options.title.align,\n position: options.title.position\n });\n model.append.apply(model, Title.orderTitles([title, subtitle]));\n\n if (options.legend && options.legend.visible) {\n model.append(new Legend(plotArea.options.legend, this.chartService));\n }\n model.append(plotArea);\n model.reflow();\n\n return model;\n }\n\n _modelOptions() {\n const options = this.options;\n const size = this.getSize();\n\n return deepExtend({\n transitions: options.transitions,\n width: size.width || DEFAULT_WIDTH,\n height: size.height || DEFAULT_HEIGHT\n }, options.chartArea);\n }\n\n _createPlotArea(skipSeries) {\n const options = this.options;\n\n const plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n\n return plotArea;\n }\n\n _setupSelection() {\n const { _plotArea: { axes } } = this;\n const selections = this._selections = [];\n\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const options = axis.options;\n if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n const range = axis.range();\n\n const selection = new Selection(this, axis,\n deepExtend({ min: range.min, max: range.max }, options.select)\n );\n\n selections.push(selection);\n }\n }\n }\n\n _selectStart(e) {\n return this.trigger(SELECT_START, e);\n }\n\n _select(e) {\n return this.trigger(SELECT, e);\n }\n\n _selectEnd(e) {\n return this.trigger(SELECT_END, e);\n }\n\n _initHandlers() {\n this._clickHandler = this._click.bind(this);\n this._mousewheelHandler = this._mousewheel.bind(this);\n this._mouseleaveHandler = this._mouseleave.bind(this);\n this._surfaceMouseenterHandler = this._mouseover.bind(this);\n this._surfaceMouseleaveHandler = this._mouseout.bind(this);\n\n this._mousemove = throttle(\n this._mousemove.bind(this),\n MOUSEMOVE_DELAY\n );\n }\n\n addObserver(observer) {\n if (observer) {\n this.observers.push(observer);\n }\n }\n\n removeObserver(observer) {\n const index = this.observers.indexOf(observer);\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n }\n\n requiresHandlers(eventNames) {\n const observers = this.observers;\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].requiresHandlers(eventNames)) {\n return true;\n }\n }\n }\n\n trigger(name, args = {}) {\n args.sender = this;\n\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n } else if (name === SERIES_OVER) {\n this._updateDrilldownPoint(args.point);\n } else if (name === SERIES_LEAVE) {\n this._resetDrilldownPoint();\n } else if (name === SERIES_CLICK) {\n this._startDrilldown(args.point);\n }\n\n const observers = this.observers;\n let isDefaultPrevented = false;\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n\n return isDefaultPrevented;\n }\n\n _attachEvents() {\n const element = this.element;\n\n this._touchAction = element.style.touchAction;\n\n bindEvents(element, {\n [ CONTEXTMENU ]: this._clickHandler,\n [ MOUSEWHEEL ]: this._mousewheelHandler,\n [ MOUSELEAVE ]: this._mouseleaveHandler\n });\n\n if (this._shouldAttachMouseMove()) {\n bindEvents(element, { [ MOUSEMOVE ]: this._mousemove });\n }\n\n this.domEvents = DomEventsBuilder.create(this.element, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n\n this._toggleDragZoomEvents();\n }\n\n _mouseleave(e) {\n if (this._hoveredPoint) {\n this._hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (this._plotAreaHovered) {\n this._plotAreaHovered = false;\n this.trigger(PLOT_AREA_LEAVE);\n }\n\n if (this._hasInactiveOpacity() && this._activeChartInstance) {\n this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n this._updateSeriesOpacity(null, true);\n }\n }\n\n _cancelDomEvents() {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\n }\n\n _gesturestart(e) {\n if (this._mousewheelZoom && !this._stopChartHandlers(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\n }\n }\n\n _gestureend(e) {\n if (this._zooming && !this._stopChartHandlers(e)) {\n if (this.surface) {\n this.surface.resumeTracking();\n }\n this._zooming = false;\n this.trigger(ZOOM_END, {});\n }\n }\n\n _gesturechange(e) {\n const mousewheelZoom = this._mousewheelZoom;\n\n if (mousewheelZoom && !this._stopChartHandlers(e)) {\n e.preventDefault();\n const previousGestureDistance = this._gestureDistance;\n let scaleDelta = -e.distance / previousGestureDistance + 1;\n\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n\n this._gestureDistance = e.distance;\n const args = { delta: scaleDelta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n const coords = this._eventCoordinates(e);\n\n if (!this._zooming) {\n this._zooming = true;\n }\n\n const ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta, coords);\n if (ranges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n }\n }\n }\n }\n\n _mouseout(e) {\n if (e.element) {\n const element = this._drawingChartElement(e.element, e);\n\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n }\n\n _start(e) {\n const coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n\n if (this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\n\n if (this._pannable && this._pannable.start(e)) {\n this.surface.suspendTracking();\n this._unsetActivePoint();\n this._suppressHover = true;\n this.chartService.panning = true;\n }\n\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, { axisRanges: axisRanges(this._plotArea.axes), originalEvent: e });\n }\n }\n }\n\n _move(e) {\n let { _navState: state, _pannable: pannable } = this;\n\n if (this._stopChartHandlers(e)) {\n return;\n }\n\n if (pannable) {\n const ranges = pannable.move(e);\n\n if (ranges && !this.trigger(DRAG, { axisRanges: ranges, originalEvent: e })) {\n pannable.pan();\n }\n } else if (state) {\n const ranges = {};\n const axes = state.axes;\n\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n const axisName = currentAxis.options.name;\n if (axisName) {\n const axis = currentAxis.options.vertical ? e.y : e.x;\n const delta = axis.startLocation - axis.location;\n\n if (delta !== 0) {\n ranges[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n\n state.axisRanges = ranges;\n this.trigger(DRAG, {\n axisRanges: ranges,\n originalEvent: e\n });\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n }\n\n _end(e) {\n if (this._stopChartHandlers(e)) {\n return;\n }\n\n const pannable = this._pannable;\n if (pannable && pannable.end(e)) {\n this.surface.resumeTracking();\n this.trigger(DRAG_END, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n this._suppressHover = false;\n this.chartService.panning = false;\n } else {\n this._endNavigation(e, DRAG_END);\n }\n\n if (this._zoomSelection) {\n const ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, { axisRanges: ranges, originalEvent: e })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, { axisRanges: ranges, originalEvent: e });\n }\n }\n }\n\n _stopChartHandlers(e) {\n const selections = this._selections || [];\n if (!selections.length) {\n return false;\n }\n\n const coords = this._eventCoordinates(e);\n const pane = this._plotArea.paneByPoint(coords);\n if (pane) {\n for (let idx = 0; idx < selections.length; idx++) {\n if (selections[idx].onPane(pane)) {\n return true;\n }\n }\n }\n }\n\n _mousewheelZoomRate() {\n const zoomable = this.options.zoomable;\n const mousewheel = (zoomable || {}).mousewheel || {};\n return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);\n }\n\n _mousewheel(e) {\n const delta = mousewheelDelta(e);\n const mousewheelZoom = this._mousewheelZoom;\n const coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n if (mousewheelZoom) {\n const args = { delta: delta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n\n if (!this._zooming) {\n this._unsetActivePoint();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n args.axisRanges = mousewheelZoom.updateRanges(delta, coords);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n\n this._mwTimeout = setTimeout(() => {\n this.trigger(ZOOM_END, args);\n this._zooming = false;\n if (this.surface) {\n this.surface.resumeTracking();\n }\n }, MOUSEWHEEL_DELAY);\n }\n } else {\n let state = this._navState;\n if (!state) {\n const prevented = this._startNavigation(e, coords, ZOOM_START);\n if (!prevented) {\n state = this._navState;\n }\n }\n\n if (state) {\n const totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n\n const axes = this._navState.axes;\n const ranges = {};\n\n for (let i = 0; i < axes.length; i++) {\n const currentAxis = axes[i];\n const axisName = currentAxis.options.name;\n if (axisName) {\n ranges[axisName] = currentAxis.scaleRange(-totalDelta * this._mousewheelZoomRate(), coords);\n }\n }\n\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(() => {\n this._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\n }\n }\n }\n\n _startNavigation(e, coords, chartEvent) {\n const plotArea = this._model._plotArea;\n const pane = plotArea.findPointPane(coords);\n const axes = plotArea.axes.slice(0);\n\n if (!pane) {\n return;\n }\n\n const ranges = axisRanges(axes);\n\n const prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\n\n if (prevented) {\n this._cancelDomEvents();\n } else {\n this._suppressHover = true;\n this._unsetActivePoint();\n this._navState = {\n axisRanges: ranges,\n pane: pane,\n axes: axes\n };\n }\n }\n\n _endNavigation(e, chartEvent) {\n if (this._navState) {\n this.trigger(chartEvent, {\n axisRanges: this._navState.axisRanges,\n originalEvent: e\n });\n this._suppressHover = false;\n this._navState = null;\n }\n }\n\n _getChartElement(e, match) {\n const element = this.surface.eventTarget(e);\n if (element) {\n return this._drawingChartElement(element, e, match);\n }\n }\n\n _drawingChartElement(element, e, match) {\n let current = element;\n let chartElement;\n while (current && !chartElement) {\n chartElement = current.chartElement;\n current = current.parent;\n }\n\n if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n\n if (match) {\n chartElement = chartElement.closest(match);\n if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\n }\n\n return chartElement;\n }\n }\n\n _eventCoordinates(e) {\n const coordinates = eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n }\n\n _elementPadding() {\n if (!this._padding) {\n const { paddingLeft, paddingTop } = elementStyles(this.element, [ \"paddingLeft\", \"paddingTop\" ]);\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n\n return this._padding;\n }\n\n _toDocumentCoordinates(point) {\n const padding = this._elementPadding();\n const offset = elementOffset(this.element);\n\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\n };\n }\n\n // TODO: Breaking change due to peer version change\n // Reuse by exposing _surfacePoint on Surface\n _toModelCoordinates(clientX, clientY) {\n const element = this.element;\n const offset = elementOffset(element);\n const padding = this._elementPadding();\n const inverseTransform = elementScale(element).invert();\n const point = new geometry.Point(\n clientX - offset.left - padding.left,\n clientY - offset.top - padding.top\n ).transform(inverseTransform);\n\n return new Point(point.x, point.y);\n }\n\n _tap(e) {\n const drawingElement = this.surface.eventTarget(e);\n const element = this._drawingChartElement(drawingElement, e);\n const sharedTooltip = this._sharedTooltip();\n\n if (!this._startHover(drawingElement, e) && !sharedTooltip) {\n this._unsetActivePoint();\n }\n\n if (sharedTooltip) {\n this._trackSharedTooltip(this._eventCoordinates(e), e, true);\n }\n\n this._propagateClick(element, e);\n\n //part of fix for hover issue on windows touch\n this.handlingTap = true;\n setTimeout(() => {\n this.handlingTap = false;\n }, 0);\n }\n\n _click(e) {\n const element = this._getChartElement(e);\n this._propagateClick(element, e);\n }\n\n _propagateClick(element, e) {\n let current = element;\n while (current) {\n if (current.click) {\n current.click(this, e);\n }\n\n current = current.parent;\n }\n }\n\n _startHover(element, e) {\n if (this._suppressHover) {\n return false;\n }\n\n let point = this._drawingChartElement(element, e, function(element) {\n return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n });\n\n this._showInactiveOpacity(point, e);\n\n return point;\n }\n\n _displayTooltip(point) {\n const tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n this._tooltip.show(point);\n }\n }\n\n _displayInactiveOpacity(activePoint, multipleSeries, highlightPoints) {\n const chartInstance = this._activeChartInstance = this._chartInstanceFromPoint(activePoint);\n if (!chartInstance) {\n return;\n }\n\n if (multipleSeries) {\n this._updateSeriesOpacity(activePoint);\n this._applySeriesOpacity(chartInstance.children, null, true);\n this._applySeriesOpacity(chartInstance.children, activePoint.series);\n this._highlight.show(highlightPoints || activePoint);\n } else {\n let inactivePoints;\n\n if (!chartInstance.supportsPointInactiveOpacity()) {\n this._highlight.show(activePoint);\n return;\n }\n\n inactivePoints = this._getInactivePoints(activePoint, chartInstance);\n\n if (inactivePoints && inactivePoints.length) {\n this._highlight.show(inactivePoints, 1 - this._getInactiveOpacityForSeries(activePoint.series));\n }\n }\n }\n\n _getInactivePoints(activePoint, chartInstance) {\n let allPoints = this._getAllPointsOfType(chartInstance, activePoint.constructor);\n\n return allPoints.filter(point => point !== activePoint);\n }\n\n _getAllPointsOfType(container, type) {\n let points = [];\n\n for (let i = 0; i < container.children.length; i++) {\n const element = container.children[i];\n\n if (element.constructor === type) {\n points.push(element);\n } else if (element.children && element.children.length) {\n points = points.concat(this._getAllPointsOfType(element, type));\n }\n }\n\n return points;\n }\n\n _updateHoveredPoint(point, e) {\n const hoveredPoint = this._hoveredPoint;\n\n if (hoveredPoint && hoveredPoint !== point) {\n hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (point && hoveredPoint !== point && point.over) {\n this._hoveredPoint = point;\n point.over(this, e);\n }\n }\n\n _updateDrilldownPoint(point) {\n if (!point || !point.series) {\n return;\n }\n\n const { fields } = SeriesBinder.current.bindPoint(point.series, null, point.dataItem);\n if (fields.drilldown) {\n this._drilldownState = { cursor: this.element.style.cursor };\n this.element.style.cursor = 'pointer';\n }\n }\n\n _resetDrilldownPoint() {\n if (this._drilldownState) {\n this.element.style.cursor = this._drilldownState.cursor;\n this._drilldownState = null;\n }\n }\n\n _startDrilldown(point) {\n if (!point || !point.series) {\n return;\n }\n\n const series = point.series;\n const { fields } = SeriesBinder.current.bindPoint(series, null, point.dataItem);\n const value = fields.drilldown;\n if (value) {\n const args = { series, point, value, sender: this };\n this.trigger(DRILLDOWN, args);\n }\n }\n\n _updateSeriesOpacity(point, resetOpacity) {\n const plotArea = this._plotArea;\n const length = plotArea.series.length;\n\n for (let i = 0; i < length; i++) {\n const currSeries = plotArea.series[i];\n const defaultOpacity = this._getDefaultOpacityForSeries(currSeries);\n const inactiveOpacity = this._getInactiveOpacityForSeries(currSeries);\n\n if (!resetOpacity && currSeries !== point.series) {\n currSeries.defaultOpacity = defaultOpacity;\n currSeries.opacity = inactiveOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = inactiveOpacity;\n }\n } else {\n currSeries.opacity = defaultOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = defaultOpacity;\n }\n }\n }\n }\n\n _applySeriesOpacity(elements, activeSeries, reset, series) {\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n const currSeries = element.series || series;\n const shouldHighlight = currSeries && (currSeries.highlight || {}).visible;\n\n if (shouldHighlight && element.visual) {\n const opacity = series ? series.opacity : element.series.opacity;\n if (currSeries !== activeSeries || reset) {\n element.visual.opacity(reset ? 1 : opacity);\n }\n }\n\n if (element.children && element.children.length) {\n this._applySeriesOpacity(element.children, activeSeries, reset, element.series);\n }\n }\n }\n\n _chartInstanceFromPoint(point) {\n let chartInstance = point.parent;\n\n while (chartInstance && !chartInstance.plotArea) {\n chartInstance = chartInstance.parent;\n }\n\n return chartInstance;\n }\n\n _showInactiveOpacity(point, e) {\n const activePoint = this._activePoint;\n const multipleSeries = this._plotArea.series.length > 1;\n const hasInactiveOpacity = this._hasInactiveOpacity();\n\n this._updateHoveredPoint(point, e);\n\n if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n this._displayTooltip(point);\n\n if (hasInactiveOpacity) {\n this._displayInactiveOpacity(point, multipleSeries);\n } else {\n this._highlight.show(point);\n }\n }\n }\n\n return point;\n }\n\n _hideInactiveOpacity(point) {\n const multipleSeries = this._plotArea.series.length > 1;\n const hasInactiveOpacity = this._hasInactiveOpacity();\n if (hasInactiveOpacity) {\n if (multipleSeries && this._activeChartInstance) {\n this._updateSeriesOpacity(point, true);\n this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n this._activeChartInstance = null;\n }\n this._highlight && this._highlight.hide();\n this._activePoint = null;\n }\n }\n\n _hasInactiveOpacity() {\n let hasDefaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity !== undefined;\n let hasInactiveOpacity = this.options.series.filter(s => s.highlight.inactiveOpacity !== undefined ).length > 0;\n return hasDefaultInactiveOpacity || hasInactiveOpacity;\n }\n\n _getInactiveOpacityForSeries(series) {\n let defaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity;\n let seriesInactiveOpacity = series.highlight.inactiveOpacity;\n return seriesInactiveOpacity || defaultInactiveOpacity || series.opacity || DEFAULT_SERIES_OPACITY;\n }\n\n _getDefaultOpacityForSeries(series) {\n return series.defaultOpacity || series.opacity || DEFAULT_SERIES_OPACITY;\n }\n\n _mouseover(e) {\n const point = this._startHover(e.element, e.originalEvent);\n\n if (point && point.tooltipTracking && !this._mouseMoveTrackHandler && !this._sharedTooltip()) {\n this._mouseMoveTrackHandler = this._mouseMoveTracking.bind(this);\n bindEvents(document, {\n [ MOUSEMOVE ]: this._mouseMoveTrackHandler\n });\n }\n }\n\n _mouseMoveTracking(e) {\n const { options, _tooltip: tooltip, _highlight: highlight, _activePoint: point } = this;\n const coords = this._eventCoordinates(e);\n\n if (this._plotArea.box.containsPoint(coords)) {\n if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\n const seriesPoint = point.parent.getNearestPoint(coords.x, coords.y, point.seriesIx);\n if (seriesPoint && seriesPoint !== point) {\n this._activePoint = seriesPoint;\n\n if (!seriesPoint.hover(this, e)) {\n const tooltipOptions = deepExtend({}, options.tooltip, seriesPoint.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\n }\n\n highlight.show(seriesPoint);\n }\n }\n }\n } else {\n unbindEvents(document, {\n [ MOUSEMOVE ]: this._mouseMoveTrackHandler\n });\n this._unsetActivePoint();\n this._mouseMoveTrackHandler = null;\n\n this._hideInactiveOpacity(point);\n }\n }\n\n _mousemove(e) {\n const coords = this._eventCoordinates(e);\n const plotArea = this._plotArea;\n\n this._trackCrosshairs(coords);\n\n if (plotArea.hover) {\n const overPlotArea = plotArea.backgroundContainsPoint(coords);\n if (overPlotArea) {\n this._plotAreaHovered = true;\n this._plotArea.hover(this, e);\n } else if (this._plotAreaHovered && !overPlotArea) {\n this._plotAreaHovered = false;\n this.trigger(PLOT_AREA_LEAVE);\n }\n }\n\n if (this._sharedTooltip()) {\n this._trackSharedTooltip(coords, e);\n }\n }\n\n _trackCrosshairs(coords) {\n const crosshairs = this._plotArea.crosshairs;\n\n for (let i = 0; i < crosshairs.length; i++) {\n const current = crosshairs[i];\n\n if (current.box.containsPoint(coords)) {\n current.showAt(coords);\n } else {\n current.hide();\n }\n }\n }\n\n _trackSharedTooltip(coords, e, toggle) {\n if (this._suppressHover) {\n return;\n }\n\n const { options: { tooltip: tooltipOptions }, _plotArea: plotArea, _plotArea: { categoryAxis }, _tooltip: tooltip, _highlight: highlight } = this;\n\n if (plotArea.backgroundContainsPoint(coords)) {\n const index = categoryAxis.pointCategoryIndex(coords);\n if (index !== this._tooltipCategoryIx || (!this._sharedHighlight && toggle)) {\n const points = plotArea.pointsByCategoryIndex(index);\n const pointArgs = points.map(function(point) {\n return point.eventArgs(e);\n });\n const hoverArgs = pointArgs[0] || {};\n hoverArgs.categoryPoints = pointArgs;\n\n if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n if (tooltipOptions.visible) {\n tooltip.showAt(points, coords);\n }\n\n highlight.show(points);\n\n this._sharedHighlight = true;\n } else {\n tooltip.hide();\n }\n\n this._tooltipCategoryIx = index;\n } else if (toggle && this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._sharedHighlight = false;\n }\n } else if (this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n }\n }\n\n hideElements(options) {\n const plotArea = this._plotArea;\n this._mousemove.cancel();\n\n plotArea.hideCrosshairs();\n\n this._unsetActivePoint(options);\n }\n\n _unsetActivePoint(options) {\n const { _tooltip: tooltip, _highlight: highlight } = this;\n\n this._activePoint = null;\n this._hoveredPoint = null;\n\n if (tooltip && !(options && options.keepTooltipOpen)) {\n tooltip.hide();\n }\n\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n\n if (highlight) {\n highlight.hide();\n }\n }\n\n _deferRedraw() {\n this._redraw();\n }\n\n _clearRedrawTimeout() {\n if (this._redrawTimeout) {\n clearInterval(this._redrawTimeout);\n this._redrawTimeout = null;\n }\n }\n\n bindCategories() {\n const options = this.options;\n const definitions = [].concat(options.categoryAxis);\n\n for (let axisIx = 0; axisIx < definitions.length; axisIx++) {\n const axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n this.bindCategoryAxisFromSeries(axis, axisIx);\n }\n }\n }\n\n bindCategoryAxisFromSeries(axis, axisIx) {\n const series = this.options.series;\n const seriesLength = series.length;\n const uniqueCategories = new HashMap();//perf improvement in case type category with dates\n let items = [];\n let bindable = false;\n let dateAxis;\n\n for (let seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n const s = series[seriesIx];\n const onAxis = s.categoryAxis === axis.name || (!s.categoryAxis && axisIx === 0);\n const data = s.data;\n const dataLength = data.length;\n const bind = s.categoryField && onAxis;\n bindable = bind || bindable;\n\n if (bind && dataLength > 0) {\n dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\n\n const getFn = dateAxis ? getDateField : getField;\n\n for (let dataIx = 0; dataIx < dataLength; dataIx++) {\n const dataRow = data[dataIx];\n const category = getFn(s.categoryField, dataRow, this.chartService.intl);\n\n if (dateAxis || !uniqueCategories.get(category)) {\n items.push([ category, dataRow ]);\n\n if (!dateAxis) {\n uniqueCategories.set(category, true);\n }\n }\n }\n }\n }\n\n if (items.length > 0) {\n if (dateAxis) {\n items = uniqueDates(items, function(a, b) {\n return dateComparer(a[0], b[0]);\n });\n }\n\n const result = transpose(items);\n axis.categories = result[0];\n } else if (bindable) {\n axis.categories = [];\n }\n }\n\n _isBindable(series) {\n const valueFields = SeriesBinder.current.valueFields(series);\n let result = true;\n\n for (let i = 0; i < valueFields.length; i++) {\n let field = valueFields[i];\n if (field === VALUE) {\n field = \"field\";\n } else {\n field = field + \"Field\";\n }\n\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n\n return result;\n }\n\n _noTransitionsRedraw() {\n const options = this.options;\n let transitionsState;\n\n if (options.transitions !== false) {\n options.transitions = false;\n transitionsState = true;\n }\n\n this._redraw();\n\n if (transitionsState) {\n options.transitions = true;\n }\n }\n\n _legendItemHover(seriesIndex, pointIndex) {\n const { _plotArea: plotArea, _highlight: highlight } = this;\n const currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n let items;\n\n if (inArray(currentSeries.type, [ PIE, DONUT, FUNNEL, PYRAMID ])) {\n items = plotArea.findPoint(function(point) {\n return point.series.index === seriesIndex && point.index === pointIndex;\n });\n } else {\n items = plotArea.pointsBySeriesIndex(seriesIndex);\n }\n\n if (this._hasInactiveOpacity() && currentSeries.visible && items) {\n const multipleSeries = plotArea.series.length > 1;\n const point = items.length ? items[0] : items;\n\n this._displayInactiveOpacity(point, multipleSeries, items);\n } else {\n highlight.show(items);\n }\n }\n\n _shouldAttachMouseMove() {\n return this._plotArea.crosshairs.length || (this._tooltip && this._sharedTooltip()) || this.requiresHandlers([ PLOT_AREA_HOVER, PLOT_AREA_LEAVE ]);\n }\n\n updateMouseMoveHandler() {\n unbindEvents(this.element, {\n [ MOUSEMOVE ]: this._mousemove\n });\n\n if (this._shouldAttachMouseMove()) {\n bindEvents(this.element, {\n [ MOUSEMOVE ]: this._mousemove\n });\n }\n }\n\n applyOptions(options, theme) {\n clearMissingValues(this._originalOptions, options);\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n\n if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n\n this._toggleDragZoomEvents();\n }\n\n setOptions(options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n }\n\n setDirection(rtl) {\n this.chartService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this._destroySurface();\n }\n }\n\n setIntlService(intl) {\n this.chartService.intl = intl;\n }\n\n noTransitionsRedraw() {\n this._noTransitionsRedraw();\n }\n\n destroy() {\n this._destroyed = true;\n\n unbindEvents(this.element, {\n [ CONTEXTMENU ]: this._clickHandler,\n [ MOUSEWHEEL ]: this._mousewheelHandler,\n [ MOUSEMOVE ]: this._mousemove,\n [ MOUSELEAVE ]: this._mouseleaveHandler\n });\n\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n\n if (this._mouseMoveTrackHandler) {\n unbindEvents(document, {\n [ MOUSEMOVE ]: this._mouseMoveTrackHandler\n });\n }\n\n this._destroyView();\n\n this._destroySurface();\n\n this._clearRedrawTimeout();\n }\n\n _destroySurface() {\n const surface = this.surface;\n if (surface) {\n surface.unbind(\"mouseenter\", this._surfaceMouseenterHandler);\n surface.unbind(\"mouseleave\", this._surfaceMouseleaveHandler);\n surface.destroy();\n\n this.surface = null;\n }\n }\n\n _destroySelections() {\n const selections = this._selections;\n\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n }\n\n _destroyView() {\n const model = this._model;\n\n if (model) {\n model.destroy();\n this._model = null;\n }\n\n this._unsetActivePoint();\n this._resetDrilldownPoint();\n this._destroySelections();\n\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n\n if (this._highlight) {\n this._highlight.destroy();\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n}\n\nfunction resolveAxisAliases(options) {\n const aliases = AXIS_NAMES;\n\n for (let idx = 0; idx < aliases.length; idx++) {\n const alias = aliases[idx] + \"Axes\";\n if (options[alias]) {\n options[aliases[idx] + \"Axis\"] = options[alias];\n delete options[alias];\n }\n }\n}\n\nfunction pointByCategoryName(points, name) {\n if (points) {\n for (let idx = 0; idx < points.length; idx++) {\n if (points[idx].category === name) {\n return [ points[idx] ];\n }\n }\n }\n}\n\nfunction applyAxisDefaults(options, themeOptions) {\n const themeAxisDefaults = ((themeOptions || {}).axisDefaults) || {};\n let axisName, axisDefaults, axes;\n\n function mapAxisOptions(axisOptions) {\n const axisColor = (axisOptions || {}).color || axisDefaults.color;\n const result = deepExtend({},\n themeAxisDefaults,\n themeAxisDefaults[axisName],\n axisDefaults,\n axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n },\n axisOptions\n );\n\n delete result[axisName];\n\n return result;\n }\n\n for (let idx = 0; idx < AXIS_NAMES.length; idx++) {\n axisName = AXIS_NAMES[idx] + \"Axis\";\n axisDefaults = options.axisDefaults || {};\n axes = [].concat(options[axisName]);\n\n axes = axes.map(mapAxisOptions);\n\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\n}\n\nfunction applySeriesDefaults(options, themeOptions) {\n const series = options.series;\n const seriesLength = series.length;\n const seriesDefaults = options.seriesDefaults;\n const commonDefaults = deepExtend({}, options.seriesDefaults);\n const themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n const commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n\n for (let i = 0; i < seriesLength; i++) {\n const seriesType = series[i].type || options.seriesDefaults.type;\n\n const baseOptions = deepExtend(\n { data: [] },\n commonThemeDefaults,\n themeSeriesDefaults[seriesType],\n { tooltip: options.tooltip },\n commonDefaults,\n seriesDefaults[seriesType]\n );\n\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n series[i].data = series[i].data || [];\n }\n}\n\nfunction cleanupNestedSeriesDefaults(seriesDefaults) {\n delete seriesDefaults.bar;\n delete seriesDefaults.column;\n delete seriesDefaults.rangeColumn;\n delete seriesDefaults.line;\n delete seriesDefaults.verticalLine;\n delete seriesDefaults.pie;\n delete seriesDefaults.donut;\n delete seriesDefaults.area;\n delete seriesDefaults.verticalArea;\n delete seriesDefaults.scatter;\n delete seriesDefaults.scatterLine;\n delete seriesDefaults.bubble;\n delete seriesDefaults.candlestick;\n delete seriesDefaults.ohlc;\n delete seriesDefaults.boxPlot;\n delete seriesDefaults.bullet;\n delete seriesDefaults.verticalBullet;\n delete seriesDefaults.polarArea;\n delete seriesDefaults.polarLine;\n delete seriesDefaults.radarArea;\n delete seriesDefaults.radarLine;\n delete seriesDefaults.waterfall;\n}\n\n\nfunction axisRanges(axes) {\n const ranges = {};\n\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const axisName = axis.options.name;\n if (axisName) {\n ranges[axisName] = axis.range();\n }\n }\n\n return ranges;\n}\n\nfunction sortDates(dates, comparer = dateComparer) {\n for (let i = 1, length = dates.length; i < length; i++) {\n if (comparer(dates[i], dates[i - 1]) < 0) {\n dates.sort(comparer);\n break;\n }\n }\n\n return dates;\n}\n\nfunction uniqueDates(srcDates, comparer = dateComparer) {\n const dates = sortDates(srcDates, comparer);\n const length = dates.length;\n const result = length > 0 ? [ dates[0] ] : [];\n\n for (let i = 1; i < length; i++) {\n if (comparer(dates[i], last(result)) !== 0) {\n result.push(dates[i]);\n }\n }\n\n return result;\n}\n\nfunction transpose(rows) {\n const rowCount = rows.length;\n const result = [];\n\n for (let rowIx = 0; rowIx < rowCount; rowIx++) {\n const row = rows[rowIx];\n const colCount = row.length;\n\n for (let colIx = 0; colIx < colCount; colIx++) {\n result[colIx] = result[colIx] || [];\n result[colIx].push(row[colIx]);\n }\n }\n\n return result;\n}\n\nconst DATA_FIELDS = [ 'data', 'categories' ];\n\nfunction clearMissingValues(originalOptions, options) {\n for (let field in options) {\n if (!inArray(field, DATA_FIELDS) && options.hasOwnProperty(field)) {\n const fieldValue = options[field];\n const originalValue = originalOptions[field];\n if (defined(originalValue)) {\n const nullValue = fieldValue === null;\n if ((nullValue || !defined(fieldValue))) {\n delete originalOptions[field];\n if (nullValue) {\n delete options[field];\n }\n } else if (originalValue && isObject(fieldValue)) {\n if (isObject(originalValue)) {\n clearMissingValues(originalValue, fieldValue);\n }\n }\n }\n }\n }\n}\n\nfunction triggerPaneRender(panes) {\n for (let idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n}\n\nsetDefaultOptions(Chart, {\n renderAs: \"\",\n chartArea: {},\n legend: {\n visible: true,\n labels: {}\n },\n categoryAxis: {},\n seriesDefaults: {\n type: COLUMN,\n data: [],\n highlight: {\n visible: true\n },\n labels: {},\n negativeValues: {\n visible: false\n }\n },\n series: [],\n seriesColors: null,\n tooltip: {\n visible: false\n },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [ {} ],\n pannable: false,\n zoomable: false\n});\n\nexport default Chart;\n","import { SharedTooltip as ChartSharedTooltip } from '../chart';\nimport { Point } from '../core';\nconst TOP_OFFSET = -2;\n\nclass SharedTooltip extends ChartSharedTooltip {\n _slotAnchor(coords, slot) {\n const axis = this.plotArea.categoryAxis;\n const vertical = axis.options.vertical;\n const align = vertical ? {\n horizontal: \"left\",\n vertical: \"center\"\n } : {\n horizontal: \"center\",\n vertical: \"bottom\"\n };\n\n let point;\n\n if (vertical) {\n point = new Point(this.plotArea.box.x2, slot.center().y);\n } else {\n point = new Point(slot.center().x, TOP_OFFSET);\n }\n\n return {\n point: point,\n align: align\n };\n }\n\n _defaultAnchor(point, slot) {\n return this._slotAnchor({}, slot);\n }\n}\n\nexport default SharedTooltip;","import { Chart } from '../chart';\nimport { BAR, BULLET, PIE, COLUMN, VERTICAL_BULLET } from '../chart/constants';\nimport { addClass, deepExtend, elementSize, getSpacing, inArray, isArray, isNumber, setDefaultOptions } from '../common';\nimport SharedTooltip from './shared-tooltip';\n\nconst DEAULT_BAR_WIDTH = 150;\nconst DEAULT_BULLET_WIDTH = 150;\nconst NO_CROSSHAIR = [ BAR, BULLET ];\n\nfunction hide(children) {\n const state = [];\n for (let idx = 0; idx < children.length; idx++) {\n const child = children[idx];\n state[idx] = child.style.display;\n child.style.display = \"none\";\n }\n\n return state;\n}\n\nfunction show(children, state) {\n for (let idx = 0; idx < children.length; idx++) {\n children[idx].style.display = state[idx];\n }\n}\n\nfunction wrapNumber(value) {\n return isNumber(value) ? [ value ] : value;\n}\n\nclass Sparkline extends Chart {\n _setElementClass(element) {\n addClass(element, 'k-sparkline');\n }\n\n _initElement(element) {\n super._initElement(element);\n\n this._initialWidth = Math.floor(elementSize(element).width);\n }\n\n _resize() {\n const element = this.element;\n const state = hide(element.childNodes);\n\n this._initialWidth = Math.floor(elementSize(element).width);\n\n show(element.childNodes, state);\n\n super._resize();\n }\n\n _modelOptions() {\n const chartOptions = this.options;\n const stage = this._surfaceWrap();\n const displayState = hide(stage.childNodes);\n\n const space = document.createElement('span');\n space.innerHTML = ' ';\n\n stage.appendChild(space);\n\n const options = deepExtend({\n width: this._autoWidth,\n height: elementSize(stage).height,\n transitions: chartOptions.transitions\n }, chartOptions.chartArea, {\n inline: true,\n align: false\n });\n\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n\n stage.removeChild(space);\n\n show(stage.childNodes, displayState);\n\n if (this.surface) {\n this.surface.resize();\n }\n\n return options;\n }\n\n _surfaceWrap() {\n if (!this.stage) {\n const stage = this.stage = document.createElement('span');\n this.element.appendChild(stage);\n }\n return this.stage;\n }\n\n _createPlotArea(skipSeries) {\n const plotArea = super._createPlotArea(skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n\n return plotArea;\n }\n\n _calculateWidth(plotArea) {\n const options = this.options;\n const margin = getSpacing(options.chartArea.margin);\n const charts = plotArea.charts;\n const stage = this._surfaceWrap();\n let total = 0;\n\n\n for (let i = 0; i < charts.length; i++) {\n const currentChart = charts[i];\n const firstSeries = (currentChart.options.series || [])[0];\n if (!firstSeries) {\n continue;\n }\n\n if (firstSeries.type === BAR) {\n return DEAULT_BAR_WIDTH;\n }\n\n if (firstSeries.type === BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n\n if (firstSeries.type === PIE) {\n return elementSize(stage).height;\n }\n\n const categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n const pointsCount = categoryAxis.categoriesCount() *\n (!currentChart.options.isStacked && inArray(firstSeries.type, [ COLUMN, VERTICAL_BULLET ]) ? currentChart.seriesOptions.length : 1);\n\n total = Math.max(total, pointsCount);\n }\n }\n\n let size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n\n return size;\n }\n\n _createSharedTooltip(options) {\n return new SharedTooltip(this._plotArea, options);\n }\n\n static normalizeOptions(userOptions) {\n let options = wrapNumber(userOptions);\n\n if (isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n\n if (!options.series) {\n options.series = [ { data: wrapNumber(options.data) } ];\n }\n\n deepExtend(options, {\n seriesDefaults: {\n type: options.type\n }\n });\n\n if (inArray(options.series[0].type, NO_CROSSHAIR) ||\n inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, {\n categoryAxis: {\n crosshair: {\n visible: false\n }\n }\n }, options);\n }\n\n return options;\n }\n}\n\nsetDefaultOptions(Sparkline, {\n chartArea: {\n margin: 2\n },\n axisDefaults: {\n visible: false,\n majorGridLines: {\n visible: false\n },\n valueAxis: {\n narrowRange: true\n }\n },\n seriesDefaults: {\n type: \"line\",\n area: {\n line: {\n width: 0.5\n }\n },\n bar: {\n stack: true\n },\n padding: 2,\n width: 0.5,\n overlay: {\n gradient: null\n },\n highlight: {\n visible: false\n },\n border: {\n width: 0\n },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: {\n visible: false\n }\n }\n },\n legend: {\n visible: false\n },\n transitions: false,\n\n pointWidth: 5,\n\n panes: [ { clip: false } ]\n});\n\nexport default Sparkline;","import { drawing as draw } from '@progress/kendo-drawing';\n\nimport { interpolateValue, elementStyles } from '../common';\n\nclass FadeOutAnimation extends draw.Animation {\n\n setup() {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n }\n\n step(pos) {\n elementStyles(this.element, {\n opacity: String(interpolateValue(this._initialOpacity, 0, pos))\n });\n }\n\n abort() {\n super.abort();\n elementStyles(this.element, {\n display: 'none',\n opacity: String(this._initialOpacity)\n });\n }\n\n cancel() {\n super.abort();\n elementStyles(this.element, {\n opacity: String(this._initialOpacity)\n });\n }\n}\n\nexport default FadeOutAnimation;","import { Class, deepExtend, elementStyles, getTemplate, setDefaultOptions } from '../common';\nimport { toDate, toTime } from '../date-utils';\nimport FadeOutAnimation from './fade-out-animation';\n\nfunction createDiv(className, style) {\n const div = document.createElement(\"div\");\n div.className = className;\n if (style) {\n div.style.cssText = style;\n }\n\n return div;\n}\n\nclass NavigatorHint extends Class {\n constructor(container, chartService, options) {\n super();\n\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n\n const padding = elementStyles(container, [ \"paddingLeft\", \"paddingTop\" ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n\n this.createElements();\n container.appendChild(this.element);\n }\n\n createElements() {\n const element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n const tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n const scroll = this.scroll = createDiv('k-scroll');\n\n tooltip.innerHTML = ' ';\n\n element.appendChild(tooltip);\n element.appendChild(scroll);\n }\n\n show(from, to, bbox) {\n const { element, options, scroll, tooltip } = this;\n const middle = toDate(toTime(from) + toTime(to - from) / 2);\n const scrollWidth = bbox.width() * 0.4;\n const minPos = bbox.center().x - scrollWidth;\n const maxPos = bbox.center().x;\n const posRange = maxPos - minPos;\n const range = options.max - options.min;\n const scale = posRange / range;\n const offset = middle - options.min;\n let text = this.chartService.intl.format(options.format, from, to);\n const template = getTemplate(options);\n\n this.clearHideTimeout();\n\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n\n const tooltipStyle = elementStyles(tooltip, [ 'marginTop', 'borderTopWidth', 'height' ]);\n\n elementStyles(scroll, {\n width: scrollWidth,\n left: minPos + offset * scale,\n top: bbox.y1 + tooltipStyle.marginTop + tooltipStyle.borderTopWidth + tooltipStyle.height / 2\n });\n\n elementStyles(element, {\n visibility: 'visible'\n });\n }\n\n clearHideTimeout() {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n }\n\n hide() {\n this.clearHideTimeout();\n\n this._hideTimeout = setTimeout(() => {\n this._visible = false;\n this._hideAnimation = new FadeOutAnimation(this.element);\n this._hideAnimation.setup();\n this._hideAnimation.play();\n }, this.options.hideDelay);\n }\n\n destroy() {\n this.clearHideTimeout();\n if (this.container) {\n this.container.removeChild(this.element);\n }\n delete this.container;\n delete this.chartService;\n delete this.element;\n delete this.tooltip;\n delete this.scroll;\n }\n}\n\nsetDefaultOptions(NavigatorHint, {\n format: \"{0:d} - {1:d}\",\n hideDelay: 500\n});\n\nexport default NavigatorHint;","const NAVIGATOR_PANE = \"_navigator\";\nconst NAVIGATOR_AXIS = NAVIGATOR_PANE;\nconst DEFAULT_PANE = \"_default\";\n\nexport { NAVIGATOR_AXIS, NAVIGATOR_PANE, DEFAULT_PANE };\n","import NavigatorHint from './navigator-hint';\nimport { Selection, filterSeriesByType } from '../chart';\nimport { DRAG, DRAG_END, EQUALLY_SPACED_SERIES, ZOOM, ZOOM_END } from '../chart/constants';\nimport { DateCategoryAxis } from '../core';\nimport { addDuration, parseDate, toDate, toTime } from '../date-utils';\nimport { Class, deepExtend, defined, getTemplate, InstanceObserver, last, limitValue, valueOrDefault } from '../common';\nimport { NAVIGATOR_AXIS, NAVIGATOR_PANE, DEFAULT_PANE } from './constants';\n\nconst ZOOM_ACCELERATION = 3;\n\nclass Navigator extends Class {\n constructor(chart) {\n super();\n\n this.chart = chart;\n const options = this.options = deepExtend({}, this.options, chart.options.navigator);\n const select = options.select;\n if (select) {\n select.from = this.parseDate(select.from);\n select.to = this.parseDate(select.to);\n }\n\n if (!defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\n\n this.chartObserver = new InstanceObserver(this, {\n [DRAG]: '_drag',\n [DRAG_END]: '_dragEnd',\n [ZOOM]: '_zoom',\n [ZOOM_END]: '_zoomEnd'\n });\n chart.addObserver(this.chartObserver);\n }\n\n parseDate(value) {\n return parseDate(this.chart.chartService.intl, value);\n }\n\n clean() {\n if (this.selection) {\n this.selection.destroy();\n this.selection = null;\n }\n\n if (this.hint) {\n this.hint.destroy();\n this.hint = null;\n }\n }\n\n destroy() {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n\n this.clean();\n }\n\n redraw() {\n this._redrawSelf();\n this.initSelection();\n }\n\n initSelection() {\n const { chart, options } = this;\n const axis = this.mainAxis();\n const { min, max } = axis.roundedRange();\n const { from, to, mousewheel } = options.select;\n const axisClone = clone(axis);\n\n if (axis.categoriesCount() === 0) {\n return;\n }\n\n this.clean();\n\n // \"Freeze\" the selection axis position until the next redraw\n axisClone.box = axis.box;\n\n this.selection = new Selection(chart, axisClone, {\n min: min,\n max: max,\n from: from || min,\n to: to || max,\n mousewheel: valueOrDefault(mousewheel, { zoom: \"left\" }),\n visible: options.visible\n }, new InstanceObserver(this, {\n selectStart: '_selectStart',\n select: '_select',\n selectEnd: '_selectEnd'\n }));\n\n if (options.hint.visible) {\n this.hint = new NavigatorHint(chart.element, chart.chartService, {\n min: min,\n max: max,\n template: getTemplate(options.hint),\n format: options.hint.format\n });\n }\n }\n\n setRange() {\n const plotArea = this.chart._createPlotArea(true);\n const axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n\n const { min, max } = axis.roundedRange();\n\n const select = this.options.select || {};\n let from = select.from || min;\n if (from < min) {\n from = min;\n }\n\n let to = select.to || max;\n if (to > max) {\n to = max;\n }\n\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n\n this.filterAxes();\n }\n\n _redrawSelf(silent) {\n const plotArea = this.chart._plotArea;\n\n if (plotArea) {\n plotArea.redraw(last(plotArea.panes), silent);\n }\n }\n\n redrawSlaves() {\n const chart = this.chart;\n const plotArea = chart._plotArea;\n const slavePanes = plotArea.panes.filter(pane => pane.options.name !== NAVIGATOR_PANE);\n\n // Update the original series and categoryAxis before partial refresh.\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.clearSeriesPointsCache();\n\n plotArea.redraw(slavePanes);\n }\n\n _drag(e) {\n const { chart, selection } = this;\n const coords = chart._eventCoordinates(e.originalEvent);\n const navigatorAxis = this.mainAxis();\n const naviRange = navigatorAxis.roundedRange();\n const inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n const axis = chart._plotArea.categoryAxis;\n const range = e.axisRanges[axis.options.name];\n const select = this.options.select;\n let duration;\n\n if (!range || inNavigator || !selection) {\n return;\n }\n\n if (select.from && select.to) {\n duration = toTime(select.to) - toTime(select.from);\n } else {\n duration = toTime(selection.options.to) - toTime(selection.options.from);\n }\n\n const from = toDate(limitValue(\n toTime(range.min),\n naviRange.min, toTime(naviRange.max) - duration\n ));\n\n const to = toDate(limitValue(\n toTime(from) + duration,\n toTime(naviRange.min) + duration, naviRange.max\n ));\n\n this.options.select = { from: from, to: to };\n\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n\n selection.set(from, to);\n\n this.showHint(from, to);\n }\n\n _dragEnd() {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n if (this.hint) {\n this.hint.hide();\n }\n }\n\n readSelection() {\n const { selection: { options: { from, to } }, options: { select } } = this;\n\n select.from = from;\n select.to = to;\n }\n\n filterAxes() {\n const { options: { select = { } }, chart } = this;\n const allAxes = chart.options.categoryAxis;\n const { from, to } = select;\n\n for (let idx = 0; idx < allAxes.length; idx++) {\n const axis = allAxes[idx];\n if (axis.pane !== NAVIGATOR_PANE) {\n axis.min = from;\n axis.max = to;\n }\n }\n }\n\n filter() {\n const { chart, options: { select } } = this;\n\n if (!chart.requiresHandlers([ \"navigatorFilter\" ])) {\n return;\n }\n\n const mainAxis = this.mainAxis();\n const args = {\n from: select.from,\n to: select.to\n };\n\n if (mainAxis.options.type !== 'category') {\n const axisOptions = new DateCategoryAxis(deepExtend({\n baseUnit: \"fit\"\n }, chart.options.categoryAxis[0], {\n categories: [ select.from, select.to ]\n }), chart.chartService).options;\n\n args.from = addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit);\n args.to = addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit);\n }\n\n this.chart.trigger(\"navigatorFilter\", args);\n }\n\n _zoom(e) {\n const { chart: { _plotArea: { categoryAxis: axis } }, selection, options: { select, liveDrag } } = this;\n const mainAxis = this.mainAxis();\n let delta = e.delta;\n\n if (!selection) {\n return;\n }\n\n const fromIx = mainAxis.categoryIndex(selection.options.from);\n const toIx = mainAxis.categoryIndex(selection.options.to);\n const coords = this.chart._eventCoordinates(e.originalEvent);\n\n e.originalEvent.preventDefault();\n\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n\n if (toIx - fromIx > 1) {\n selection.zoom(delta, coords);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta * this.chart._mousewheelZoomRate(), coords).min;\n }\n\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n\n selection.set(select.from, select.to);\n\n this.showHint(this.options.select.from, this.options.select.to);\n }\n\n _zoomEnd(e) {\n this._dragEnd(e);\n }\n\n showHint(from, to) {\n const plotArea = this.chart._plotArea;\n\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n }\n\n _selectStart(e) {\n return this.chart._selectStart(e);\n }\n\n _select(e) {\n this.showHint(e.from, e.to);\n\n return this.chart._select(e);\n }\n\n _selectEnd(e) {\n if (this.hint) {\n this.hint.hide();\n }\n\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n return this.chart._selectEnd(e);\n }\n\n mainAxis() {\n const plotArea = this.chart._plotArea;\n\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n }\n\n select(from, to) {\n const select = this.options.select;\n\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n\n this.selection.set(from, to);\n }\n\n return {\n from: select.from,\n to: select.to\n };\n }\n\n static setup(options = {}, themeOptions = {}) {\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n\n const naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n const panes = options.panes = [].concat(options.panes);\n const paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n\n if (options.navigator.position !== 'top') {\n panes.push(paneOptions);\n } else {\n panes.unshift(paneOptions);\n }\n\n panes.forEach(pane => pane.name = pane.name || DEFAULT_PANE);\n\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n }\n\n static attachAxes(options, naviOptions) {\n const series = naviOptions.series || [];\n const categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n const valueAxes = options.valueAxis = [].concat(options.valueAxis);\n const allAxes = categoryAxes.concat(valueAxes);\n allAxes.forEach(axis => axis.pane = axis.pane || DEFAULT_PANE);\n\n const equallySpacedSeries = filterSeriesByType(series, EQUALLY_SPACED_SERIES);\n const justifyAxis = equallySpacedSeries.length === 0;\n\n const base = deepExtend({\n type: \"date\",\n pane: NAVIGATOR_PANE,\n roundToBaseUnit: !justifyAxis,\n justified: justifyAxis,\n _collapse: false,\n majorTicks: { visible: true },\n tooltip: { visible: false },\n labels: { step: 1 },\n autoBind: naviOptions.autoBindElements,\n autoBaseUnitSteps: {\n minutes: [ 1 ],\n hours: [ 1, 2 ],\n days: [ 1, 2 ],\n weeks: [],\n months: [ 1 ],\n years: [ 1 ]\n }\n });\n const user = naviOptions.categoryAxis;\n\n categoryAxes.push(\n deepExtend({}, base, {\n maxDateGroups: 200\n }, user, {\n name: NAVIGATOR_AXIS,\n title: null,\n baseUnit: \"fit\",\n baseUnitStep: \"auto\",\n labels: { visible: false },\n majorTicks: { visible: false }\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + \"_labels\",\n maxDateGroups: 20,\n baseUnitStep: \"auto\",\n labels: { position: \"\" },\n plotBands: [],\n autoBaseUnitSteps: {\n minutes: []\n },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + \"_ticks\",\n maxDateGroups: 200,\n majorTicks: {\n width: 0.5\n },\n plotBands: [],\n title: null,\n labels: { visible: false, mirror: true },\n _overlap: true\n })\n );\n\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: {\n visible: false\n },\n visible: false\n }, naviOptions.valueAxis));\n }\n\n static attachSeries(options, naviOptions, themeOptions) {\n const series = options.series = options.series || [];\n const navigatorSeries = [].concat(naviOptions.series || []);\n const seriesColors = themeOptions.seriesColors;\n const defaults = naviOptions.seriesDefaults;\n\n for (let idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(\n deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: {\n visible: false\n }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n })\n );\n }\n }\n}\n\nfunction ClonedObject() { }\nfunction clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n}\n\nexport default Navigator;\n","import { Chart } from '../chart';\n\nimport Navigator from './navigator';\nimport { DEFAULT_WIDTH } from '../common/constants';\nimport { addClass, deepExtend, elementSize, grep, setDefaultOptions } from '../common';\nimport { NAVIGATOR_AXIS, NAVIGATOR_PANE } from './constants';\n\nconst AUTO_CATEGORY_WIDTH = 28;\n\nclass StockChart extends Chart {\n\n applyDefaults(options, themeOptions) {\n const width = elementSize(this.element).width || DEFAULT_WIDTH;\n let theme = themeOptions;\n\n const stockDefaults = {\n seriesDefaults: {\n categoryField: options.dateField\n },\n axisDefaults: {\n categoryAxis: {\n name: \"default\",\n majorGridLines: {\n visible: false\n },\n labels: {\n step: 2\n },\n majorTicks: {\n visible: false\n },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n\n Navigator.setup(options, theme);\n\n super.applyDefaults(options, theme);\n }\n\n _setElementClass(element) {\n addClass(element, 'k-chart k-stockchart');\n }\n\n setOptions(options) {\n this.destroyNavigator();\n super.setOptions(options);\n }\n\n noTransitionsRedraw() {\n const transitions = this.options.transitions;\n\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n }\n\n _resize() {\n this.noTransitionsRedraw();\n }\n\n _redraw() {\n const navigator = this.navigator;\n\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\n }\n\n _dirty() {\n const options = this.options;\n const series = [].concat(options.series, options.navigator.series);\n const seriesCount = grep(series, function(s) { return s && s.visible; }).length;\n const dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n\n return dirty;\n }\n\n _fullRedraw() {\n let navigator = this.navigator;\n\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger(\"navigatorCreated\", { navigator: navigator });\n }\n\n navigator.clean();\n navigator.setRange();\n\n super._redraw();\n\n navigator.initSelection();\n }\n\n _trackSharedTooltip(coords) {\n const plotArea = this._plotArea;\n const pane = plotArea.paneByPoint(coords);\n\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n super._trackSharedTooltip(coords);\n }\n }\n\n bindCategories() {\n super.bindCategories();\n this.copyNavigatorCategories();\n }\n\n copyNavigatorCategories() {\n const definitions = [].concat(this.options.categoryAxis);\n let categories;\n\n for (let axisIx = 0; axisIx < definitions.length; axisIx++) {\n const axis = definitions[axisIx];\n if (axis.name === NAVIGATOR_AXIS) {\n categories = axis.categories;\n } else if (categories && axis.pane === NAVIGATOR_PANE) {\n axis.categories = categories;\n }\n }\n }\n\n destroyNavigator() {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n }\n\n destroy() {\n this.destroyNavigator();\n super.destroy();\n }\n\n _stopChartHandlers(e) {\n const coords = this._eventCoordinates(e);\n const pane = this._plotArea.paneByPoint(coords);\n\n return super._stopChartHandlers(e) || (pane && pane.options.name === NAVIGATOR_PANE);\n }\n\n _toggleDragZoomEvents() {\n if (!this._dragZoomEnabled) {\n this.element.style.touchAction = \"none\";\n\n this._dragZoomEnabled = true;\n }\n }\n}\n\nsetDefaultOptions(StockChart, {\n dateField: \"date\",\n axisDefaults: {\n categoryAxis: {\n type: \"date\",\n baseUnit: \"fit\",\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: {\n format: \"C\"\n }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: {\n visible: false\n },\n tooltip: {\n visible: false\n },\n highlight: {\n visible: false\n },\n line: {\n width: 2\n }\n },\n hint: {},\n visible: true\n },\n tooltip: {\n visible: true\n },\n legend: {\n visible: false\n }\n});\n\nexport default StockChart;\n","import GeometryArc from '../geometry/arc';\nimport Element from './element';\nimport { Path } from './path';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport withGeometry from '../mixins/with-geometry';\nimport { defined } from '../util';\n\n\nconst DEFAULT_STROKE = \"#000\";\n\nclass Arc extends paintable(measurable(withGeometry(Element))) {\n get nodeType() {\n return \"Arc\";\n }\n\n constructor(geometry = new GeometryArc(), options = {}) {\n super(options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n\n _bbox(matrix) {\n return this._geometry.bbox(matrix);\n }\n\n rawBBox() {\n return this.geometry().bbox();\n }\n\n toPath() {\n const path = new Path();\n const curvePoints = this.geometry().curvePoints();\n\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n\n for (let i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n\n return path;\n }\n\n _containsPoint(point) {\n return this.geometry().containsPoint(point);\n }\n\n _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n}\n\nexport default Arc;\n","import withGeometry from '../mixins/with-geometry';\nimport Element from './element';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport GeometryRect from '../geometry/rect';\nimport { defined } from '../util';\n\n\nclass Rect extends paintable(measurable(withGeometry(Element))) {\n get nodeType() {\n return \"Rect\";\n }\n\n constructor(geometry = new GeometryRect(), options = {}) {\n super(options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(\"#000\");\n }\n }\n\n _bbox(matrix) {\n return this._geometry.bbox(matrix);\n }\n\n rawBBox() {\n return this._geometry.bbox();\n }\n\n _containsPoint(point) {\n return this._geometry.containsPoint(point);\n }\n\n _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n}\n\nexport default Rect;\n","import translateToPoint from './translate-to-point';\nimport alignStart from './align-start';\n\nexport default function alignElements(elements, rect, alignment, axis, sizeField) {\n for (let idx = 0; idx < elements.length; idx++) {\n const bbox = elements[idx].clippedBBox();\n if (bbox) {\n const point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || \"start\", axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n}","\nimport alignElements from './align-elements';\n\nexport default function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"x\", \"width\");\n}","import alignElements from './align-elements';\n\nexport default function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"y\", \"height\");\n}","import Point from '../geometry/point';\nimport translateToPoint from './translate-to-point';\n\nexport default function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n const origin = new Point();\n let previousBBox = elements[0].bbox;\n\n for (let idx = 1; idx < elements.length; idx++) {\n let element = elements[idx].element;\n let bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n}","export default function createStackElements(elements) {\n const stackElements = [];\n\n for (let idx = 0; idx < elements.length; idx++) {\n let element = elements[idx];\n let bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n\n return stackElements;\n}","import stackElements from './stack-elements';\nimport createStackElements from './create-stack-elements';\n\nexport default function stack(elements) {\n stackElements(createStackElements(elements), \"x\", \"y\", \"width\");\n}","import stackElements from './stack-elements';\nimport createStackElements from './create-stack-elements';\n\nexport default function vStack(elements) {\n stackElements(createStackElements(elements), \"y\", \"x\", \"height\");\n}","import translateToPoint from './translate-to-point';\nimport stackElements from './stack-elements';\n\nfunction getStacks(elements, rect, sizeField) {\n const maxSize = rect.size[sizeField];\n const stacks = [];\n let stack = [];\n let stackSize = 0;\n let element, bbox;\n\n const addElementToStack = function() {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n\n for (let idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n\n bbox = element.clippedBBox();\n if (bbox) {\n let size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n\n if (stack.length) {\n stacks.push(stack);\n }\n\n return stacks;\n}\n\nexport default function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n const stacks = getStacks(elements, rect, sizeField);\n const origin = rect.origin.clone();\n const result = [];\n\n for (let idx = 0; idx < stacks.length; idx++) {\n let stack = stacks[idx];\n let startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (let elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n}","import wrapElements from './wrap-elements';\n\nexport default function wrap(elements, rect) {\n return wrapElements(elements, rect, \"x\", \"y\", \"width\");\n}","import wrapElements from './wrap-elements';\n\nexport default function vWrap(elements, rect) {\n return wrapElements(elements, rect, \"y\", \"x\", \"height\");\n}","import createTransform from '../geometry/transform';\n\nexport default function fit(element, rect) {\n const bbox = element.clippedBBox();\n if (bbox) {\n const elementSize = bbox.size;\n const rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n const scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n const transform = element.transform() || createTransform();\n transform.scale(scale, scale);\n element.transform(transform);\n }\n }\n}","import { Class } from '../common';\nimport { MultiPath } from '../shapes/path';\nimport parsePath from './parse-path';\n\nlet instance;\n\nclass PathParser extends Class {\n static get current() {\n if (!instance) {\n instance = new PathParser();\n }\n\n return instance;\n }\n\n parse(str, options) {\n const multiPath = new MultiPath(options);\n return parsePath(multiPath, str);\n }\n}\n\nexport default PathParser;\n\n","const ANGULAR_SPEED = 150;\nconst LINEAR_SPEED = 250;\nconst ARROW = \"arrow\";\nconst ARROW_POINTER = \"arrowPointer\";\nconst BAR_POINTER = \"barPointer\";\nconst DEFAULT_HEIGHT = 200;\nconst DEFAULT_LINE_WIDTH = 0.5;\nconst DEFAULT_WIDTH = 200;\nconst DEGREE = Math.PI / 180;\nconst INSIDE = \"inside\";\nconst LINEAR = \"linear\";\nconst OUTSIDE = \"outside\";\nconst RADIAL_POINTER = \"radialPointer\";\nconst RADIAL_RANGE_POINTER = \"radialRangePointer\";\n\nexport {\n ANGULAR_SPEED, LINEAR_SPEED, ARROW, ARROW_POINTER, BAR_POINTER,\n DEFAULT_HEIGHT, DEFAULT_LINE_WIDTH, DEFAULT_WIDTH,\n DEGREE, INSIDE, LINEAR, OUTSIDE, RADIAL_POINTER, RADIAL_RANGE_POINTER\n};","import { getSpacing } from '../../common';\n\nexport default function pad(bbox, value) {\n const origin = bbox.getOrigin();\n const size = bbox.getSize();\n const spacing = getSpacing(value);\n\n bbox.setOrigin([ origin.x - spacing.left, origin.y - spacing.top ]);\n bbox.setSize([ size.width + (spacing.left + spacing.right), size.height + (spacing.top + spacing.bottom) ]);\n\n return bbox;\n}","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport pad from './pad';\n\nconst { Group, Path, Text } = drawing;\n\nexport default function buildLabelElement(label, options) {\n const labelBox = label.box;\n const textBox = label.children[0].box;\n const border = options.border || {};\n const background = options.background || \"\";\n\n const wrapper = Path.fromRect(new geo.Rect([ labelBox.x1, labelBox.y1 ], [ labelBox.width(), labelBox.height() ]), {\n stroke: {}\n });\n\n const text = new Text(label.text, new geo.Point(textBox.x1, textBox.y1), {\n font: options.font,\n fill: { color: options.color }\n });\n\n const styleGeometry = pad(text.bbox().clone(), options.padding);\n\n const styleBox = Path.fromRect(styleGeometry, {\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n opacity: border.opacity,\n dashType: border.dashType,\n lineJoin: \"round\",\n lineCap: \"round\"\n },\n fill: {\n color: background\n }\n });\n\n const elements = new Group();\n elements.append(wrapper);\n elements.append(styleBox);\n elements.append(text);\n\n return elements;\n}","import { defined } from '../../common';\nimport { MIN_VALUE, MAX_VALUE } from '../../common/constants';\n\nexport default function getRange(range, min, max) {\n const from = defined(range.from) ? range.from : MIN_VALUE;\n const to = defined(range.to) ? range.to : MAX_VALUE;\n\n range.from = Math.max(Math.min(to, from), min);\n range.to = Math.min(Math.max(to, from), max);\n\n return range;\n}","import { getSpacing } from '../../common';\nimport pad from './pad';\n\nexport default function unpad(bbox, value) {\n const spacing = getSpacing(value);\n\n spacing.left = -spacing.left; spacing.top = -spacing.top;\n spacing.right = -spacing.right; spacing.bottom = -spacing.bottom;\n\n return pad(bbox, spacing);\n}","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { Class, elementSize, setDefaultOptions, deepExtend, isArray, isNumber } from '../common';\nimport { DEFAULT_WIDTH, DEFAULT_HEIGHT } from './constants';\nimport { ChartService } from '../services';\nimport { unpad } from './utils';\n\nconst DEFAULT_MARGIN = 5;\nconst { Path, Surface } = drawing;\n\nclass Gauge extends Class {\n\n constructor(element, userOptions, theme, context = {}) {\n super();\n\n this.element = element;\n this.theme = theme;\n this.contextService = new ChartService(this, context);\n this._originalOptions = deepExtend({}, this.options, userOptions);\n this.options = deepExtend({}, this._originalOptions);\n this._initTheme(theme);\n\n this.redraw();\n }\n\n destroy() {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n\n delete this.element;\n delete this.surfaceElement;\n }\n\n value(pointerValue) {\n const pointer = this.pointers[0];\n\n if (arguments.length === 0) {\n return pointer.value();\n }\n\n pointer.value(pointerValue);\n this._setValueOptions(pointerValue);\n }\n\n _draw() {\n const surface = this.surface;\n\n surface.clear();\n surface.draw(this._visuals);\n }\n\n exportVisual() {\n return this._visuals;\n }\n\n allValues(values) {\n const pointers = this.pointers;\n const allValues = [];\n\n if (arguments.length === 0) {\n for (let i = 0; i < pointers.length; i++) {\n allValues.push(pointers[i].value());\n }\n\n return allValues;\n }\n\n if (isArray(values)) {\n for (let i = 0; i < values.length; i++) {\n if (isNumber(values[i])) {\n pointers[i].value(values[i]);\n }\n }\n }\n\n this._setValueOptions(values);\n }\n\n _setValueOptions(values) {\n const pointers = [].concat(this.options.pointer);\n const arrayValues = [].concat(values);\n\n for (let i = 0; i < arrayValues.length; i++) {\n pointers[i].value = arrayValues[i];\n }\n }\n\n resize() {\n this.noTransitionsRedraw();\n }\n\n noTransitionsRedraw() {\n const transitions = this.options.transitions;\n\n this._toggleTransitions(false);\n\n this.redraw();\n\n this._toggleTransitions(transitions);\n }\n\n redraw() {\n const size = this._surfaceSize();\n const wrapper = new geo.Rect([ 0, 0 ], [ size.width, size.height ]);\n\n this._initSurface();\n\n this.gaugeArea = this._createGaugeArea();\n\n this._createModel();\n\n const bbox = unpad(wrapper.bbox(), this._gaugeAreaMargin);\n this.reflow(bbox);\n }\n\n setOptions(options, theme) {\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n\n this._initTheme(theme);\n\n this.redraw();\n }\n\n setDirection(rtl) {\n this.contextService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this.surface.destroy();\n this.surface = null;\n }\n }\n\n setIntlService(intl) {\n this.contextService.intl = intl;\n }\n\n _initTheme(theme) {\n let currentTheme = theme || this.theme || {};\n this.theme = currentTheme;\n\n this.options = deepExtend({}, currentTheme, this.options);\n const options = this.options;\n const pointer = options.pointer;\n\n if (isArray(pointer)) {\n const pointers = [];\n for (let i = 0; i < pointer.length; i++) {\n pointers.push(deepExtend({}, currentTheme.pointer, pointer[i]));\n }\n options.pointer = pointers;\n }\n }\n\n _createGaugeArea() {\n const options = this.options.gaugeArea;\n const size = this.surface.size();\n const border = options.border || {};\n let areaGeometry = new geo.Rect([ 0, 0 ], [ size.width, size.height ]);\n\n this._gaugeAreaMargin = options.margin || DEFAULT_MARGIN;\n\n if (border.width > 0) {\n areaGeometry = unpad(areaGeometry, border.width);\n }\n\n const gaugeArea = Path.fromRect(areaGeometry, {\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType,\n lineJoin: \"round\",\n lineCap: \"round\"\n },\n fill: {\n color: options.background\n }\n });\n\n return gaugeArea;\n }\n\n _initSurface() {\n const { options, surface } = this;\n const element = this._surfaceElement();\n const size = this._surfaceSize();\n\n elementSize(element, size);\n\n if (!surface || surface.options.type !== options.renderAs) {\n if (surface) {\n surface.destroy();\n }\n\n this.surface = Surface.create(element, {\n type: options.renderAs\n });\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n }\n\n _surfaceSize() {\n const options = this.options;\n const size = this._getSize();\n\n if (options.gaugeArea) {\n deepExtend(size, options.gaugeArea);\n }\n\n return size;\n }\n\n _surfaceElement() {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.element.appendChild(this.surfaceElement);\n }\n\n return this.surfaceElement;\n }\n\n getSize() {\n return this._getSize();\n }\n\n _getSize() {\n const element = this.element;\n const defaultSize = this._defaultSize();\n let width = element.offsetWidth;\n let height = element.offsetHeight;\n\n if (!width) {\n width = defaultSize.width;\n }\n\n if (!height) {\n height = defaultSize.height;\n }\n\n return { width: width, height: height };\n }\n\n _defaultSize() {\n return {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT\n };\n }\n\n _toggleTransitions(value) {\n this.options.transitions = value;\n for (let i = 0; i < this.pointers.length; i++) {\n this.pointers[i].options.animation.transitions = value;\n }\n }\n}\n\nsetDefaultOptions(Gauge, {\n plotArea: {},\n theme: \"default\",\n renderAs: \"\",\n pointer: {},\n scale: {},\n gaugeArea: {}\n});\n\nexport default Gauge;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { setDefaultOptions, deepExtend, defined } from '../../common';\nimport { BLACK } from '../../common/constants';\nimport { NumericAxis } from '../../core';\nimport { DEFAULT_LINE_WIDTH, INSIDE } from '../constants';\nimport { autoMajorUnit } from '../../core';\nimport { buildLabelElement, getRange } from '../utils';\n\nconst { Path, Group } = drawing;\nconst Point = geo.Point;\n\nfunction renderAxisTick(tickRenderOptions, tickOptions) {\n const { position, tickX, tickY } = tickRenderOptions;\n let start, end;\n\n if (tickRenderOptions.vertical) {\n start = new Point(tickX, position);\n end = new Point(tickX + tickOptions.size, position);\n } else {\n start = new Point(position, tickY);\n end = new Point(position, tickY + tickOptions.size);\n }\n\n const tickPath = new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(start).lineTo(end);\n\n return tickPath;\n}\n\nfunction renderTicks(tickGroup, tickPositions, tickRenderOptions, tickOptions) {\n const count = tickPositions.length;\n\n if (tickOptions.visible) {\n const { mirror, lineBox } = tickRenderOptions;\n for (let i = tickOptions.skip; i < count; i += tickOptions.step) {\n if (i % tickOptions.skipUnit === 0) {\n continue;\n }\n\n tickRenderOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickRenderOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickRenderOptions.position = tickPositions[i];\n\n tickGroup.append(renderAxisTick(tickRenderOptions, tickOptions));\n }\n }\n}\n\nclass LinearScale extends NumericAxis {\n constructor(options, service) {\n let scaleOptions = options || {};\n if (!defined(scaleOptions.reverse) && scaleOptions.vertical === false && (service || {}).rtl) {\n scaleOptions = Object.assign({}, scaleOptions, {\n reverse: true\n });\n }\n\n super(0, 1, scaleOptions, service);\n\n this.options.minorUnit = this.options.minorUnit || this.options.majorUnit / 10;\n }\n\n initUserOptions(options) {\n let scaleOptions = deepExtend({}, this.options, options);\n scaleOptions = deepExtend({}, scaleOptions , { labels: { mirror: scaleOptions.mirror } });\n scaleOptions.majorUnit = scaleOptions.majorUnit || autoMajorUnit(scaleOptions.min, scaleOptions.max);\n\n return scaleOptions;\n }\n\n initFields() {\n }\n\n render() {\n const elements = this.elements = new Group();\n const labels = this.renderLabels();\n const scaleLine = this.renderLine();\n const scaleTicks = this.renderTicks();\n const ranges = this.renderRanges();\n\n elements.append(scaleLine, labels, scaleTicks, ranges);\n\n return elements;\n }\n\n renderRanges() {\n const options = this.options;\n const { min, max, vertical, labels: { mirror } } = options;\n const ranges = options.ranges || [];\n const elements = new Group();\n const count = ranges.length;\n const rangeSize = options.rangeSize || options.minorTicks.size / 2;\n\n for (let i = 0; i < count; i++) {\n const range = getRange(ranges[i], min, max);\n const slot = this.getSlot(range.from, range.to);\n const slotX = vertical ? this.lineBox() : slot;\n const slotY = vertical ? slot : this.lineBox();\n if (vertical) {\n slotX.x1 -= rangeSize * (mirror ? -1 : 1);\n } else {\n slotY.y2 += rangeSize * (mirror ? -1 : 1);\n }\n\n elements.append(Path.fromRect(new geo.Rect([ slotX.x1, slotY.y1 ], [ slotX.x2 - slotX.x1, slotY.y2 - slotY.y1 ]), {\n fill: { color: range.color, opacity: range.opacity },\n stroke: { }\n }));\n }\n\n return elements;\n }\n\n renderLabels() {\n const { labels, options } = this;\n const elements = new Group();\n\n for (let i = 0; i < labels.length; i++) {\n elements.append(buildLabelElement(labels[i], options.labels));\n }\n\n return elements;\n }\n\n renderLine() {\n const line = this.options.line;\n const lineBox = this.lineBox();\n const elements = new Group();\n\n if (line.width > 0 && line.visible) {\n const linePath = new Path({\n stroke: {\n color: line.color,\n dashType: line.dashType,\n width: line.width\n }\n });\n\n linePath.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n elements.append(linePath);\n }\n\n return elements;\n }\n\n renderTicks() {\n const ticks = new Group();\n const options = this.options;\n const majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n const tickRenderOptions = {\n vertical: options.vertical,\n mirror: options.labels.mirror,\n lineBox: this.lineBox()\n };\n\n renderTicks(ticks, this.getMajorTickPositions(), tickRenderOptions, options.majorTicks);\n renderTicks(ticks, this.getMinorTickPositions(), tickRenderOptions, deepExtend({}, {\n skipUnit: majorUnit / options.minorUnit\n }, options.minorTicks));\n\n return ticks;\n }\n}\n\nsetDefaultOptions(LinearScale, {\n min: 0,\n max: 50,\n\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n line: {\n width: DEFAULT_LINE_WIDTH\n },\n\n labels: {\n position: INSIDE,\n padding: 2\n },\n mirror: false,\n _alignLines: false\n});\n\nexport default LinearScale;","import { Class, setDefaultOptions, defined, deepExtend, limitValue } from '../common';\nimport { BLACK } from '../common/constants';\n\nclass Pointer extends Class {\n constructor(scale, userOptions) {\n super();\n\n const { min, max } = scale.options;\n const options = this.options = deepExtend({}, this.options, userOptions);\n\n options.fill = options.color;\n\n this.scale = scale;\n\n if (defined(options.value)) {\n options.value = limitValue(options.value, min, max);\n } else {\n options.value = min;\n }\n }\n\n value(newValue) {\n const options = this.options;\n const value = options.value;\n\n if (arguments.length === 0) {\n return value;\n }\n\n const { min, max } = this.scale.options;\n\n options._oldValue = defined(options._oldValue) ? options.value : min;\n options.value = limitValue(newValue, min, max);\n\n if (this.elements) {\n this.repaint();\n }\n }\n}\n\nsetDefaultOptions(Pointer, {\n color: BLACK\n});\n\nexport default Pointer;","import { setDefaultOptions, deepExtend, defined, getSpacing } from '../../common';\nimport { Box } from '../../core';\nimport { BLACK } from '../../common/constants';\nimport { BAR_POINTER } from '../constants';\nimport Pointer from '../pointer';\n\nclass LinearPointer extends Pointer {\n constructor(scale, options) {\n super(scale, options);\n\n this.options = deepExtend({\n track: {\n visible: defined(options.track)\n }\n }, this.options);\n }\n\n reflow() {\n const { options, scale } = this;\n const { mirror, vertical } = scale.options;\n const scaleLine = scale.lineBox();\n const trackSize = options.track.size || options.size;\n const pointerHalfSize = options.size / 2;\n const margin = getSpacing(options.margin);\n let space = vertical ?\n margin[mirror ? \"left\" : \"right\"] :\n margin[mirror ? \"bottom\" : \"top\"];\n let pointerBox, pointerRangeBox, trackBox;\n\n space = mirror ? -space : space;\n\n if (vertical) {\n trackBox = new Box(\n scaleLine.x1 + space, scaleLine.y1,\n scaleLine.x1 + space, scaleLine.y2);\n\n if (mirror) {\n trackBox.x1 -= trackSize;\n } else {\n trackBox.x2 += trackSize;\n }\n\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(\n scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize,\n scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize\n );\n pointerBox = pointerRangeBox;\n }\n } else {\n trackBox = new Box(\n scaleLine.x1, scaleLine.y1 - space,\n scaleLine.x2, scaleLine.y1 - space);\n\n if (mirror) {\n trackBox.y2 += trackSize;\n } else {\n trackBox.y1 -= trackSize;\n }\n\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box(\n scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space,\n scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space\n );\n pointerBox = pointerRangeBox;\n }\n }\n\n this.trackBox = trackBox;\n this.pointerRangeBox = pointerRangeBox;\n this.box = pointerBox || trackBox.clone().pad(options.border.width);\n }\n\n getElementOptions() {\n const options = this.options;\n\n return {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: defined(options.border) ? {\n color: options.border.width ? options.border.color || options.color : \"\",\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: options.opacity\n } : null\n };\n }\n\n _margin() {\n const { scale, options } = this;\n const { mirror, vertical } = scale.options;\n const margin = getSpacing(options.margin);\n\n const space = vertical ?\n margin[mirror ? \"left\" : \"right\"] :\n margin[mirror ? \"bottom\" : \"top\"];\n\n return space;\n }\n}\n\nsetDefaultOptions(LinearPointer, {\n shape: BAR_POINTER,\n\n track: {\n border: {\n width: 1\n }\n },\n\n color: BLACK,\n border: {\n width: 1\n },\n opacity: 1,\n\n margin: getSpacing(3),\n animation: {\n type: BAR_POINTER\n },\n visible: true\n});\n\nexport default LinearPointer;","import { geometry, drawing } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions } from '../../common';\nimport { ARROW_POINTER, LINEAR_SPEED, LINEAR } from '../constants';\n\nclass ArrowLinearPointerAnimation extends drawing.Animation {\n\n setup() {\n const options = this.options;\n const { margin, from, to, vertical } = options;\n const axis = vertical ? \"x1\" : \"y1\";\n\n if (options.mirror === vertical) {\n from[axis] -= margin; to[axis] -= margin;\n } else {\n from[axis] += margin; to[axis] += margin;\n }\n\n const fromScale = this.fromScale = new geometry.Point(from.x1, from.y1);\n const toScale = this.toScale = new geometry.Point(to.x1, to.y1);\n\n if (options.duration !== 0) {\n options.duration = Math.max((fromScale.distanceTo(toScale) / options.duration) * 1000, 1);\n }\n }\n\n step(pos) {\n const translateX = interpolateValue(this.fromScale.x, this.toScale.x, pos);\n const translateY = interpolateValue(this.fromScale.y, this.toScale.y, pos);\n\n this.element.transform(geometry.transform().translate(translateX, translateY));\n }\n}\n\nsetDefaultOptions(ArrowLinearPointerAnimation, {\n easing: LINEAR,\n duration: LINEAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n\nexport default ArrowLinearPointerAnimation;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { deepExtend, defined } from '../../common';\nimport { ARROW_POINTER } from '../constants';\nimport LinearPointer from './linear-pointer';\nimport ArrowLinearPointerAnimation from './arrow-linear-pointer-animation';\n\nconst Point = geo.Point;\nconst Path = drawing.Path;\n\nclass ArrowLinearPointer extends LinearPointer {\n constructor(scale, options) {\n super(scale, options);\n\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.6;\n }\n }\n\n pointerShape() {\n const { scale, options: { size } } = this;\n const halfSize = size / 2;\n const sign = (scale.options.mirror ? -1 : 1);\n let shape;\n\n if (scale.options.vertical) {\n shape = [\n new Point(0, 0 - halfSize), new Point(0 - sign * size, 0), new Point(0, 0 + halfSize)\n ];\n } else {\n shape = [\n new Point(0 - halfSize, 0), new Point(0, 0 + sign * size), new Point(0 + halfSize, 0)\n ];\n }\n\n return shape;\n }\n\n repaint() {\n const { scale, options } = this;\n const animation = new ArrowLinearPointerAnimation(this.elements, deepExtend(options.animation, {\n vertical: scale.options.vertical,\n mirror: scale.options.mirror,\n margin: this._margin(options.margin),\n from: scale.getSlot(options._oldValue),\n to: scale.getSlot(options.value)\n }));\n\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n\n animation.setup();\n animation.play();\n }\n\n render() {\n const { scale, options } = this;\n const elementOptions = this.getElementOptions();\n const shape = this.pointerShape(options.value);\n\n options.animation.type = ARROW_POINTER;\n\n const elements = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n }).moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).close();\n\n const slot = scale.getSlot(options.value);\n elements.transform(geo.transform().translate(slot.x1, slot.y1));\n\n this.elements = elements;\n\n return elements;\n }\n}\n\nexport default ArrowLinearPointer;","import { drawing } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions } from '../../common';\nimport { X, Y } from '../../common/constants';\nimport { BAR_POINTER, LINEAR_SPEED, LINEAR } from '../constants';\n\nclass BarLinearPointerAnimation extends drawing.Animation {\n\n setup() {\n const options = this.options;\n const axis = this.axis = options.vertical ? Y : X;\n const to = this.to = options.newPoints[0][axis];\n const from = this.from = options.oldPoints[0][axis];\n\n if (options.duration !== 0) {\n options.duration = Math.max((Math.abs(to - from) / options.speed) * 1000, 1);\n }\n\n this._set(from);\n }\n\n step(pos) {\n const value = interpolateValue(this.from, this.to, pos);\n this._set(value);\n }\n\n _set(value) {\n const setter = \"set\" + this.axis.toUpperCase();\n const points = this.options.newPoints;\n\n points[0][setter](value);\n points[1][setter](value);\n }\n}\n\nsetDefaultOptions(BarLinearPointerAnimation, {\n easing: LINEAR,\n speed: LINEAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n\nexport default BarLinearPointerAnimation;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { deepExtend, defined } from '../../common';\nimport { X, Y } from '../../common/constants';\nimport LinearPointer from './linear-pointer';\nimport BarLinearPointerAnimation from './bar-linear-pointer-animation';\n\nconst { Group, Path } = drawing;\n\nclass BarLinearPointer extends LinearPointer {\n constructor(scale, options) {\n super(scale, options);\n\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.3;\n }\n }\n\n pointerShape(value) {\n const { scale, options } = this;\n const { mirror, vertical } = scale.options;\n const dir = mirror === vertical ? -1 : 1;\n const size = options.size * dir;\n const minSlot = scale.getSlot(scale.options.min);\n const slot = scale.getSlot(value);\n const axis = vertical ? Y : X;\n const sizeAxis = vertical ? X : Y;\n const margin = this._margin() * dir;\n\n const p1 = new geo.Point();\n p1[axis] = minSlot[axis + \"1\"];\n p1[sizeAxis] = minSlot[sizeAxis + \"1\"];\n\n const p2 = new geo.Point();\n p2[axis] = slot[axis + \"1\"];\n p2[sizeAxis] = slot[sizeAxis + \"1\"];\n\n if (vertical) {\n p1.translate(margin, 0);\n p2.translate(margin, 0);\n } else {\n p1.translate(0, margin);\n p2.translate(0, margin);\n }\n\n const p3 = p2.clone();\n const p4 = p1.clone();\n\n if (vertical) {\n p3.translate(size, 0);\n p4.translate(size, 0);\n } else {\n p3.translate(0, size);\n p4.translate(0, size);\n }\n\n return [ p1, p2, p3, p4 ];\n }\n\n repaint() {\n const { scale, options } = this;\n const shape = this.pointerShape(options.value);\n const pointerPath = this.pointerPath;\n const oldShape = this.pointerShape(options._oldValue);\n\n pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n\n const animation = new BarLinearPointerAnimation(pointerPath, deepExtend(options.animation, {\n reverse: scale.options.reverse,\n vertical: scale.options.vertical,\n oldPoints: [ oldShape[1], oldShape[2] ],\n newPoints: [ shape[1], shape[2] ]\n }));\n\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n\n animation.setup();\n animation.play();\n }\n\n render() {\n const group = new Group();\n const elementOptions = this.getElementOptions();\n\n if (this.options.track.visible) {\n group.append(this.renderTrack());\n }\n\n const pointer = this.pointerPath = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n });\n\n group.append(pointer);\n\n this.elements = group;\n\n return group;\n }\n\n renderTrack() {\n const trackOptions = this.options.track;\n const border = trackOptions.border || {};\n const trackBox = this.trackBox.clone().pad(border.width || 0);\n\n return new Path.fromRect(trackBox.toRect(), {\n fill: {\n color: trackOptions.color,\n opacity: trackOptions.opacity\n },\n stroke: {\n color: border.width ? border.color || trackOptions.color : \"\",\n width: border.width,\n dashType: border.dashType\n }\n });\n }\n}\n\nexport default BarLinearPointer;","import { drawing } from '@progress/kendo-drawing';\nimport { Box } from '../../core';\nimport { setDefaultOptions, deepExtend, isArray } from '../../common';\nimport { ARROW, DEFAULT_WIDTH, DEFAULT_HEIGHT } from '../constants';\nimport Gauge from '../gauge';\nimport LinearScale from './linear-scale';\nimport ArrowLinearPointer from './arrow-linear-pointer';\nimport BarLinearPointer from './bar-linear-pointer';\n\nconst DEFAULT_MIN_WIDTH = 60;\nconst DEFAULT_MIN_HEIGHT = 60;\n\nconst Group = drawing.Group;\n\nclass LinearGauge extends Gauge {\n\n reflow(bbox) {\n const pointers = this.pointers;\n const bboxX = bbox.origin.x;\n const bboxY = bbox.origin.y;\n\n const box = new Box(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n\n this.scale.reflow(box);\n this._shrinkScaleWidth(box);\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow();\n }\n\n this.bbox = this._getBox(box);\n this._alignElements();\n this._shrinkElements();\n this._buildVisual();\n this._draw();\n }\n\n _buildVisual() {\n const visuals = new Group();\n const scaleElements = this.scale.render();\n const pointers = this.pointers;\n\n visuals.append(this.gaugeArea);\n visuals.append(scaleElements);\n\n for (let i = 0; i < pointers.length; i++) {\n const current = pointers[i];\n visuals.append(current.render());\n current.value(current.options.value);\n }\n\n this._visuals = visuals;\n }\n\n _createModel() {\n const options = this.options;\n const scale = this.scale = new LinearScale(options.scale, this.contextService);\n\n this.pointers = [];\n\n let pointers = options.pointer;\n pointers = isArray(pointers) ? pointers : [ pointers ];\n\n for (let i = 0; i < pointers.length; i++) {\n const currentOptions = deepExtend({}, pointers[i], {\n animation: {\n transitions: options.transitions\n }\n });\n const pointerType = currentOptions.shape === ARROW ? ArrowLinearPointer : BarLinearPointer;\n\n this.pointers.push(new pointerType(scale, currentOptions));\n }\n }\n\n _defaultSize() {\n const vertical = this.options.scale.vertical;\n\n return {\n width: vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH,\n height: vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT\n };\n }\n\n _getBox(box) {\n const { scale, pointers } = this;\n const boxCenter = box.center();\n let plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n\n for (let i = 0; i < pointers.length; i++) {\n plotAreaBox.wrap(pointers[i].box.clone());\n }\n\n let size;\n if (scale.options.vertical) {\n size = plotAreaBox.width() / 2;\n plotAreaBox = new Box(\n boxCenter.x - size, box.y1,\n boxCenter.x + size, box.y2\n );\n } else {\n size = plotAreaBox.height() / 2;\n plotAreaBox = new Box(\n box.x1, boxCenter.y - size,\n box.x2, boxCenter.y + size\n );\n }\n\n return plotAreaBox;\n }\n\n _alignElements() {\n const { scale, pointers } = this;\n const scaleBox = scale.box;\n const box = pointers[0].box.clone().wrap(scale.box);\n const plotAreaBox = this.bbox;\n\n for (let i = 0; i < pointers.length; i++) {\n box.wrap(pointers[i].box.clone());\n }\n\n let diff;\n if (scale.options.vertical) {\n diff = plotAreaBox.center().x - box.center().x;\n scale.reflow(new Box(\n scaleBox.x1 + diff, plotAreaBox.y1,\n scaleBox.x2 + diff, plotAreaBox.y2\n ));\n } else {\n diff = plotAreaBox.center().y - box.center().y;\n scale.reflow(new Box(\n scaleBox.x1, scaleBox.y1 + diff,\n scaleBox.x2, scaleBox.y2 + diff\n ));\n }\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this.bbox);\n }\n }\n\n _shrinkScaleWidth(bbox) {\n const { scale } = this;\n if (!scale.options.vertical) {\n const overflow = scale.contentBox().width() - bbox.width();\n if (overflow > 0) {\n scale.box.shrink(overflow, 0);\n scale.box.alignTo(bbox, 'center');\n scale.reflow(scale.box);\n }\n }\n }\n\n _shrinkElements() {\n const { scale, pointers } = this;\n const scaleBox = scale.box.clone();\n const pos = scale.options.vertical ? \"y\" : \"x\";\n const pointerBox = pointers[0].box;\n\n for (let i = 0; i < pointers.length; i++) {\n pointerBox.wrap(pointers[i].box.clone());\n }\n\n scaleBox[pos + 1] += Math.max(scaleBox[pos + 1] - pointerBox[pos + 1], 0);\n scaleBox[pos + 2] -= Math.max(pointerBox[pos + 2] - scaleBox[pos + 2], 0);\n\n scale.reflow(scaleBox);\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this.bbox);\n }\n }\n}\n\nsetDefaultOptions(LinearGauge, {\n transitions: true,\n gaugeArea: {\n background: \"\"\n },\n scale: {\n vertical: true\n }\n});\n\nexport default LinearGauge;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { setDefaultOptions, deepExtend, defined, round, getSpacing } from '../../common';\nimport { BLACK, COORD_PRECISION } from '../../common/constants';\nimport { autoMajorUnit, Box, NumericAxis } from '../../core';\nimport { buildLabelElement, getRange } from '../utils';\n\nimport { DEGREE, DEFAULT_LINE_WIDTH, INSIDE, OUTSIDE } from '../constants';\n\nconst GEO_ARC_ADJUST_ANGLE = 180;\n\nconst { Arc, Path, Group } = drawing;\n\nfunction drawTicks(arc, tickAngles, unit, tickOptions) {\n const ticks = new Group();\n const center = arc.center;\n const radius = arc.getRadiusX();\n\n if (tickOptions.visible) {\n for (let i = 0; i < tickAngles.length; i++) {\n const tickStart = arc.pointAt(tickAngles[i]);\n const tickEnd = new geo.Point(center.x + radius - tickOptions.size, center.y).rotate(tickAngles[i], center);\n\n ticks.append(new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(tickStart).lineTo(tickEnd));\n }\n }\n\n return ticks;\n}\n\nfunction rangeSegment(from, to, color, opacity) {\n return { from: from, to: to, color: color, opacity: opacity };\n}\n\nclass RadialScale extends NumericAxis {\n constructor(options, service) {\n super(0, 1, options, service);\n }\n\n initUserOptions(options) {\n const scaleOptions = deepExtend({}, this.options, options);\n scaleOptions.majorUnit = scaleOptions.majorUnit || autoMajorUnit(scaleOptions.min, scaleOptions.max);\n scaleOptions.minorUnit = scaleOptions.minorUnit || scaleOptions.majorUnit / 10;\n\n return scaleOptions;\n }\n\n initFields() {\n }\n\n render(center, radius) {\n const arc = this.renderArc(center, radius);\n\n this.bbox = arc.bbox();\n this.labelElements = this.renderLabels();\n this.ticks = this.renderTicks();\n this.ranges = this.renderRanges();\n }\n\n reflow(bbox) {\n const center = bbox.center();\n const radius = Math.min(bbox.height(), bbox.width()) / 2;\n\n if (defined(this.bbox)) {\n this.bbox = this.arc.bbox();\n this.radius(this.arc.getRadiusX());\n this.repositionRanges();\n this.renderLabels();\n } else {\n return this.render(center, radius);\n }\n }\n\n slotAngle(value) {\n const { min, max, reverse, startAngle, endAngle } = this.options;\n const angle = endAngle - startAngle;\n let result;\n\n if (reverse) {\n result = endAngle - (value - min) / (max - min) * angle;\n } else {\n result = ((value - min) / (max - min) * angle) + startAngle;\n }\n\n return result + GEO_ARC_ADJUST_ANGLE;\n }\n\n hasRanges() {\n const ranges = this.options.ranges;\n\n return ranges && ranges.length;\n }\n\n ticksSize() {\n const { majorTicks, minorTicks } = this.options;\n let size = 0;\n if (majorTicks.visible) {\n size = majorTicks.size;\n }\n\n if (minorTicks.visible) {\n size = Math.max(minorTicks.size, size);\n }\n\n return size;\n }\n\n labelsCount() {\n let count = super.labelsCount();\n const options = this.options;\n const angle = options.endAngle - options.startAngle;\n\n if (angle >= 360 && (options.max % options.majorUnit === 0)) {\n count -= 1;\n }\n\n return count;\n }\n\n renderLabels() {\n const options = this.options;\n const arc = this.arc.clone();\n let radius = arc.getRadiusX();\n const tickAngles = this.tickAngles(arc, options.majorUnit);\n const rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n const labelsGroup = new Group();\n\n let rangeDistance = radius * 0.05;\n if (defined(options.rangeDistance)) {\n rangeDistance = options.rangeDistance;\n } else {\n options.rangeDistance = rangeDistance;\n }\n\n const labelsOptions = options.labels;\n const isInside = labelsOptions.position === INSIDE;\n const hasLabelElements = defined(this.labelElements);\n\n if (isInside) {\n radius -= this.ticksSize();\n\n if (this.hasRanges() && !hasLabelElements) {\n radius -= rangeSize + rangeDistance;\n }\n arc.setRadiusX(radius).setRadiusY(radius);\n }\n\n const labels = this.labels;\n const count = labels.length;\n const padding = getSpacing(labelsOptions.padding);\n const paddingWidth = (padding.left + padding.right) / 2;\n const paddingHeight = (padding.top + padding.bottom) / 2;\n\n for (let i = 0; i < count; i++) {\n const label = labels[i];\n const halfWidth = label.box.width() / 2;\n const halfHeight = label.box.height() / 2;\n const angle = tickAngles[i];\n const labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n\n const lp = arc.pointAt(angle);\n const cx = lp.x + (Math.cos(labelAngle) * (halfWidth + paddingWidth) * (isInside ? 1 : -1));\n const cy = lp.y + (Math.sin(labelAngle) * (halfHeight + paddingHeight) * (isInside ? 1 : -1));\n\n label.reflow(new Box(cx - halfWidth, cy - halfHeight, cx + halfWidth, cy + halfHeight));\n const labelPos = new geo.Point(label.box.x1, label.box.y1);\n\n let labelElement;\n if (!hasLabelElements) {\n labelElement = buildLabelElement(label, options.labels);\n labelsGroup.append(labelElement);\n } else {\n labelElement = this.labelElements.children[i];\n const prevLabelPos = labelElement.bbox().origin;\n\n const labelTransform = labelElement.transform() || geo.transform();\n labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n labelElement.transform(labelTransform);\n }\n\n this.bbox = geo.Rect.union(this.bbox, labelElement.bbox());\n }\n\n return labelsGroup;\n }\n\n repositionRanges() {\n const ranges = this.ranges.children;\n\n if (ranges.length > 0) {\n const { rangeDistance, rangeSize } = this.options;\n let rangeRadius = this.getRangeRadius();\n\n if (this.options.labels.position === INSIDE) {\n rangeRadius += rangeSize + rangeDistance;\n }\n\n const newRadius = rangeRadius + (rangeSize / 2);\n\n for (let i = 0; i < ranges.length; i++) {\n ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n }\n\n this.bbox = geo.Rect.union(this.bbox, this.ranges.bbox());\n }\n }\n\n renderRanges() {\n const segments = this.rangeSegments();\n const segmentsCount = segments.length;\n const result = new Group();\n\n if (segmentsCount) {\n const { rangeSize, reverse, rangeDistance } = this.options;\n const rangeRadius = this.getRangeRadius();\n\n // move the ticks with a range distance and a range size\n this.radius(this.radius() - rangeSize - rangeDistance);\n\n for (let i = 0; i < segmentsCount; i++) {\n const segment = segments[i];\n const from = this.slotAngle(segment[reverse ? \"to\" : \"from\"]);\n const to = this.slotAngle(segment[!reverse ? \"to\" : \"from\"]);\n\n if (to - from !== 0) {\n result.append(this.createRange(from, to, rangeRadius, segment));\n }\n }\n }\n\n return result;\n }\n\n createRange(startAngle, endAngle, rangeRadius, options) {\n const rangeSize = this.options.rangeSize;\n const rangeGeom = new geo.Arc(this.arc.center, {\n radiusX: rangeRadius + (rangeSize / 2),\n radiusY: rangeRadius + (rangeSize / 2),\n startAngle: startAngle,\n endAngle: endAngle\n });\n\n return new Arc(rangeGeom, {\n stroke: {\n width: rangeSize,\n color: options.color,\n opacity: options.opacity,\n lineCap: options.lineCap\n }\n });\n }\n\n rangeSegments() {\n const options = this.options;\n const ranges = options.ranges || [];\n const count = ranges.length;\n const segments = [];\n\n if (count) {\n const { min, max, rangePlaceholderColor: defaultColor } = options;\n segments.push(rangeSegment(min, max, defaultColor));\n\n for (let i = 0; i < count; i++) {\n const range = getRange(ranges[i], min, max);\n const segmentsCount = segments.length;\n\n for (let j = 0; j < segmentsCount; j++) {\n const segment = segments[j];\n\n if (segment.from <= range.from && range.from <= segment.to) {\n segments.push(rangeSegment(range.from, range.to, range.color, range.opacity));\n\n if (segment.from <= range.to && range.to <= segment.to) {\n segments.push(rangeSegment(range.to, segment.to, defaultColor, range.opacity));\n }\n\n segment.to = range.from;\n\n break;\n }\n }\n }\n }\n\n return segments;\n }\n\n getRangeRadius() {\n const { arc, options } = this;\n const { rangeSize, rangeDistance, majorTicks: { size: majorTickSize } } = options;\n let radius;\n\n if (options.labels.position === OUTSIDE) {\n radius = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n } else {\n radius = arc.getRadiusX() - rangeSize;\n }\n\n return radius;\n }\n\n renderArc(center, radius) {\n const options = this.options;\n\n const arc = this.arc = new geo.Arc(center, {\n radiusX: radius,\n radiusY: radius,\n startAngle: options.startAngle + GEO_ARC_ADJUST_ANGLE,\n endAngle: options.endAngle + GEO_ARC_ADJUST_ANGLE\n });\n\n return arc;\n }\n\n renderTicks() {\n const { arc, options } = this;\n const tickArc = arc.clone();\n\n this.majorTickAngles = this.tickAngles(arc, options.majorUnit);\n this.majorTicks = drawTicks(tickArc, this.majorTickAngles, options.majorUnit, options.majorTicks);\n\n const allTicks = new Group();\n allTicks.append(this.majorTicks);\n\n const majorTickSize = options.majorTicks.size;\n const minorTickSize = options.minorTicks.size;\n\n this._tickDifference = majorTickSize - minorTickSize;\n\n if (options.labels.position === OUTSIDE) {\n const radius = tickArc.getRadiusX();\n tickArc.setRadiusX(radius - majorTickSize + minorTickSize)\n .setRadiusY(radius - majorTickSize + minorTickSize);\n }\n\n this.minorTickAngles = this.normalizeTickAngles(this.tickAngles(arc, options.minorUnit));\n this.minorTicks = drawTicks(tickArc, this.minorTickAngles, options.minorUnit, options.minorTicks);\n allTicks.append(this.minorTicks);\n\n return allTicks;\n }\n\n normalizeTickAngles(angles) {\n const options = this.options;\n const skip = options.majorUnit / options.minorUnit;\n\n for (let i = angles.length - 1; i >= 0; i--) {\n if (i % skip === 0) {\n angles.splice(i, 1);\n }\n }\n\n return angles;\n }\n\n tickAngles(ring, stepValue) {\n const options = this.options;\n const reverse = options.reverse;\n const range = options.max - options.min;\n const angle = ring.endAngle - ring.startAngle;\n let tickCount = range / stepValue;\n let pos = ring.startAngle;\n let step = angle / tickCount;\n\n if (reverse) {\n pos += angle;\n step = -step;\n }\n\n if (angle >= 360 && (options.max % stepValue === 0)) {\n tickCount -= 1;\n }\n\n const positions = [];\n for (let i = 0; i < tickCount; i++) {\n positions.push(round(pos, COORD_PRECISION));\n pos += step;\n }\n\n if (round(pos) <= ring.endAngle) {\n positions.push(pos);\n }\n\n return positions;\n }\n\n radius(value) {\n if (value) {\n this.arc.setRadiusX(value).setRadiusY(value);\n this.repositionTicks(this.majorTicks.children, this.majorTickAngles);\n this.repositionTicks(this.minorTicks.children, this.minorTickAngles, true);\n } else {\n return this.arc.getRadiusX();\n }\n }\n\n repositionTicks(ticks, tickAngles, minor) {\n const diff = minor ? (this._tickDifference || 0) : 0;\n let tickArc = this.arc;\n const radius = tickArc.getRadiusX();\n\n if (minor && this.options.labels.position === OUTSIDE && diff !== 0) {\n tickArc = this.arc.clone();\n tickArc.setRadiusX(radius - diff).setRadiusY(radius - diff);\n }\n\n for (let i = 0; i < ticks.length; i++) {\n const newPoint = tickArc.pointAt(tickAngles[i]);\n const segments = ticks[i].segments;\n const xDiff = newPoint.x - segments[0].anchor().x;\n const yDiff = newPoint.y - segments[0].anchor().y;\n\n ticks[i].transform(new geo.transform().translate(xDiff, yDiff));\n }\n }\n}\n\nsetDefaultOptions(RadialScale, {\n min: 0,\n max: 100,\n\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n\n startAngle: -30,\n endAngle: 210,\n\n labels: {\n position: INSIDE,\n padding: 2\n }\n});\n\nexport default RadialScale;\n","import { geometry, drawing } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions } from '../../common';\nimport { ANGULAR_SPEED, LINEAR, RADIAL_POINTER } from '../constants';\n\nclass RadialPointerAnimation extends drawing.Animation {\n constructor(element, options) {\n super(element, options);\n\n const animationOptions = this.options;\n\n animationOptions.duration = Math.max((Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration) * 1000, 1);\n }\n\n step(pos) {\n const options = this.options;\n const angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n\n this.element.transform(geometry.transform().rotate(angle, options.center));\n }\n}\n\nsetDefaultOptions(RadialPointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n\nexport default RadialPointerAnimation;","import { geometry as geo, drawing } from '@progress/kendo-drawing';\n\nimport { setDefaultOptions, deepExtend, limitValue } from '../../common';\nimport { ANGULAR_SPEED, DEGREE, DEFAULT_LINE_WIDTH, RADIAL_POINTER } from '../constants';\nimport Pointer from '../pointer';\nimport RadialPointerAnimation from './radial-pointer-animation';\n\nconst CAP_SIZE = 0.05;\nconst { Circle, Group, Path } = drawing;\n\nclass RadialPointer extends Pointer {\n\n setAngle(angle) {\n this.elements.transform(geo.transform().rotate(angle, this.center));\n }\n\n repaint() {\n const { scale, options } = this;\n const oldAngle = scale.slotAngle(options._oldValue);\n const newAngle = scale.slotAngle(options.value);\n\n if (options.animation.transitions === false) {\n this.setAngle(newAngle);\n } else {\n new RadialPointerAnimation(this.elements, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n })).play();\n }\n }\n\n render() {\n const { scale, options } = this;\n const elements = new Group();\n\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n\n elements.append(this._renderNeedle(), this._renderCap());\n\n this.elements = elements;\n this.setAngle(DEGREE);\n\n return elements;\n }\n\n reflow(arc) {\n const center = this.center = arc.center;\n const length = limitValue(this.options.length || 1, 0.1, 1.5);\n const radius = this.radius = arc.getRadiusX() * length;\n const capSize = this.capSize = Math.round(radius * this.options.cap.size);\n\n this.bbox = geo.Rect.fromPoints(new geo.Point(center.x - capSize, center.y - capSize),\n new geo.Point(center.x + capSize, center.y + capSize));\n }\n\n _renderNeedle() {\n const minorTickSize = this.scale.options.minorTicks.size;\n const center = this.center;\n const needleColor = this.options.color;\n\n const needlePath = new Path({\n fill: { color: needleColor },\n stroke: { color: needleColor, width: DEFAULT_LINE_WIDTH }\n });\n\n needlePath.moveTo(center.x + this.radius - minorTickSize, center.y)\n .lineTo(center.x, center.y - (this.capSize / 2))\n .lineTo(center.x, center.y + (this.capSize / 2))\n .close();\n\n return needlePath;\n }\n\n _renderCap() {\n const options = this.options;\n const capColor = options.cap.color || options.color;\n const circle = new geo.Circle(this.center, this.capSize);\n\n const cap = new Circle(circle, {\n fill: { color: capColor },\n stroke: { color: capColor }\n });\n\n return cap;\n }\n}\n\nsetDefaultOptions(RadialPointer, {\n cap: {\n size: CAP_SIZE\n },\n arrow: {\n width: 16,\n height: 14\n },\n animation: {\n type: RADIAL_POINTER,\n duration: ANGULAR_SPEED\n }\n});\n\nexport default RadialPointer;\n","import { geometry as geo, drawing } from '@progress/kendo-drawing';\nimport { setDefaultOptions, deepExtend, round, isArray } from '../../common';\nimport { COORD_PRECISION } from '../../common/constants';\nimport Gauge from '../gauge';\nimport RadialScale from './radial-scale';\nimport RadialPointer from './radial-pointer';\n\nconst Group = drawing.Group;\n\nclass RadialGauge extends Gauge {\n\n reflow(bbox) {\n const pointers = this.pointers;\n this.scale.reflow(bbox);\n this._initialPlotArea = this.scale.bbox;\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this.scale.arc);\n this._initialPlotArea = geo.Rect.union(this._initialPlotArea, pointers[i].bbox);\n }\n\n this.fitScale(bbox);\n this.alignScale(bbox);\n this._buildVisual(this.gaugeArea, pointers, this.scale);\n this._draw();\n }\n\n _buildVisual(gaugeArea, pointers, scale) {\n const visuals = this._visuals = new Group();\n\n visuals.append(gaugeArea);\n visuals.append(scale.ticks);\n visuals.append(scale.ranges);\n this._buildPointers(pointers);\n visuals.append(scale.labelElements);\n }\n\n _buildPointers(pointers) {\n for (let i = 0; i < pointers.length; i++) {\n const current = pointers[i];\n current.render();\n this._visuals.append(current.elements);\n\n current.value(current.options.value);\n }\n }\n\n fitScale(bbox) {\n const arc = this.scale.arc;\n const plotAreaBox = this._initialPlotArea;\n const step = Math.abs(this.getDiff(plotAreaBox, bbox));\n let min = round(step, COORD_PRECISION);\n let max = round(-step, COORD_PRECISION);\n let minDiff, midDiff, maxDiff, mid, oldDiff;\n let staleFlag = 0;\n let i = 0;\n\n while (i++ < 100) {\n staleFlag = (oldDiff === maxDiff) ? (staleFlag + 1) : 0;\n\n if (staleFlag > 5) {\n break;\n }\n\n if (min !== mid) {\n minDiff = this.getPlotBox(min, bbox, arc);\n if (0 <= minDiff && minDiff <= 2) {\n break;\n }\n }\n\n if (max !== mid) {\n maxDiff = this.getPlotBox(max, bbox, arc);\n if (0 <= maxDiff && maxDiff <= 2) {\n break;\n }\n }\n\n if (minDiff > 0 && maxDiff > 0) {\n mid = min * 2;\n } else if (minDiff < 0 && maxDiff < 0) {\n mid = max * 2;\n } else {\n mid = round(((min + max) / 2) || 1, COORD_PRECISION);\n }\n\n midDiff = this.getPlotBox(mid, bbox, arc);\n if (0 <= midDiff && midDiff <= 2) {\n break;\n }\n\n oldDiff = maxDiff;\n\n if (midDiff > 0) {\n max = mid;\n maxDiff = midDiff;\n } else {\n min = mid;\n minDiff = midDiff;\n }\n }\n }\n\n getPlotBox(step, bbox, arc) {\n const scale = this.scale;\n const pointers = this.pointers;\n const radius = arc.getRadiusX();\n const scaleArc = arc.clone();\n\n scaleArc.setRadiusX(radius + step).setRadiusY(radius + step);\n\n scale.arc = scaleArc;\n scale.reflow(bbox);\n this.plotBbox = scale.bbox;\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scaleArc);\n this.plotBbox = geo.Rect.union(this.plotBbox, pointers[i].bbox);\n }\n\n return this.getDiff(this.plotBbox, bbox);\n }\n\n getDiff(plotBox, box) {\n return Math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n }\n\n alignScale(bbox) {\n const plotBoxCenter = this.plotBbox.center();\n const boxCenter = bbox.center();\n const paddingX = plotBoxCenter.x - boxCenter.x;\n const paddingY = plotBoxCenter.y - boxCenter.y;\n const { scale, pointers } = this;\n\n scale.arc.center.x -= paddingX;\n scale.arc.center.y -= paddingY;\n\n scale.reflow(bbox);\n\n for (let i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scale.arc);\n this.plotBbox = geo.Rect.union(scale.bbox, pointers[i].bbox);\n }\n }\n\n _createModel() {\n const options = this.options;\n const pointers = options.pointer;\n const scale = this.scale = new RadialScale(options.scale, this.contextService);\n\n this.pointers = [];\n\n const pointersArr = isArray(pointers) ? pointers : [ pointers ];\n for (let i = 0; i < pointersArr.length; i++) {\n const current = new RadialPointer(scale, deepExtend({}, pointersArr[i], {\n animation: {\n transitions: options.transitions\n }\n }));\n\n this.pointers.push(current);\n }\n }\n}\n\nsetDefaultOptions(RadialGauge, {\n transitions: true,\n gaugeArea: {\n background: \"\"\n }\n});\n\nexport default RadialGauge;","import RadialScale from '../radial/radial-scale';\nimport { setDefaultOptions } from '../../common';\n\nclass ArcScale extends RadialScale {\n\n rangeSegments() {\n const { min, max, rangePlaceholderColor, rangeLineCap } = this.options;\n\n return [ { from: min, to: max, color: rangePlaceholderColor, lineCap: rangeLineCap } ];\n }\n\n hasRanges() {\n return true;\n }\n\n placeholderRangeAngle(angle) {\n const geometry = this.ranges.children[0].geometry();\n\n if (this.options.reverse) {\n geometry.setEndAngle(angle);\n } else {\n geometry.setStartAngle(angle);\n }\n }\n\n addRange(from, to, options) {\n const reverse = this.options.reverse;\n\n const startAngle = this.slotAngle(reverse ? to : from);\n const endAngle = this.slotAngle(reverse ? from : to);\n\n const range = this.createRange(startAngle, endAngle, this.getRangeRadius(), options);\n\n this.ranges.append(range);\n\n return range;\n }\n}\n\nsetDefaultOptions(ArcScale, {\n min: 0,\n max: 100,\n\n majorTicks: {\n visible: false\n },\n\n minorTicks: {\n visible: false\n },\n\n labels: {\n visible: false\n },\n\n startAngle: 0,\n endAngle: 180,\n rangeLineCap: 'round'\n});\n\nexport default ArcScale;","import { drawing, Color } from '@progress/kendo-drawing';\nimport { interpolateValue, setDefaultOptions, round, limitValue } from '../../common';\nimport { ANGULAR_SPEED, LINEAR, RADIAL_RANGE_POINTER } from '../constants';\n\nconst MAX_DURATION = 800;\n\nclass RangePointerAnimation extends drawing.Animation {\n constructor(element, options) {\n super(element, options);\n\n const animationOptions = this.options;\n const duration = (Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration) * 1000;\n animationOptions.duration = limitValue(duration, ANGULAR_SPEED, MAX_DURATION);\n\n const startColor = element.elements.options.get(\"stroke.color\");\n const color = element.currentColor();\n if (startColor !== color) {\n this.startColor = new Color(startColor);\n this.color = new Color(color);\n }\n }\n\n step(pos) {\n const { options, startColor, color } = this;\n const angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n this.element.angle(angle);\n\n if (color) {\n const r = round(interpolateValue(startColor.r, color.r, pos));\n const g = round(interpolateValue(startColor.g, color.g, pos));\n const b = round(interpolateValue(startColor.b, color.b, pos));\n\n this.element.stroke(new Color(r, g, b).toHex());\n }\n }\n}\n\nsetDefaultOptions(RangePointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n});\n\ndrawing.AnimationFactory.current.register(RADIAL_RANGE_POINTER, RangePointerAnimation);\n\nexport default RangePointerAnimation;","import { setDefaultOptions, deepExtend, isNumber } from '../../common';\nimport { ANGULAR_SPEED, RADIAL_RANGE_POINTER } from '../constants';\nimport Pointer from '../pointer';\nimport RangePointerAnimation from './range-pointer-animation';\n\nclass RangePointer extends Pointer {\n\n repaint() {\n const { scale, options } = this;\n const oldAngle = scale.slotAngle(options._oldValue);\n const newAngle = scale.slotAngle(options.value);\n\n if (this.animation) {\n this.animation.abort();\n }\n\n if (options.animation.transitions === false) {\n this.angle(newAngle);\n this.stroke(this.currentColor());\n } else {\n this.animation = new RangePointerAnimation(this, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n }));\n\n this.animation.play();\n }\n }\n\n angle(value) {\n const geometry = this.elements.geometry();\n if (this.scale.options.reverse) {\n geometry.setStartAngle(value);\n } else {\n geometry.setEndAngle(value);\n }\n this.scale.placeholderRangeAngle(value);\n }\n\n stroke(value) {\n this.elements.stroke(value);\n }\n\n render() {\n if (this.elements) {\n return;\n }\n\n const { scale, options } = this;\n\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n\n this.elements = scale.addRange(scale.options.min, this.options.value, {\n color: this.currentColor(),\n opacity: options.opacity,\n lineCap: scale.options.rangeLineCap\n });\n }\n\n currentColor() {\n const { min, max } = this.scale.options;\n const { colors, color, value } = this.options;\n const currentValue = isNumber(value) ? value : min;\n\n if (colors) {\n for (let idx = 0; idx < colors.length; idx++) {\n const { color: rangeColor, from = min, to = max } = colors[idx];\n\n if (from <= currentValue && currentValue <= to) {\n return rangeColor;\n }\n }\n }\n\n return color;\n }\n\n reflow() {\n this.render();\n\n this.bbox = this.elements.bbox();\n }\n}\n\nsetDefaultOptions(RangePointer, {\n animation: {\n type: RADIAL_RANGE_POINTER,\n duration: ANGULAR_SPEED\n }\n});\n\nexport default RangePointer;\n","import RadialGauge from '../radial/radial-gauge';\nimport ArcScale from './arc-scale';\nimport RangePointer from './range-pointer';\n\nimport { deepExtend } from '../../common';\n\n\nclass ArcGauge extends RadialGauge {\n\n _initTheme(theme) {\n super._initTheme(theme);\n\n this.options.color = this.options.color || (this.theme.pointer || {}).color;\n }\n\n _createModel() {\n const options = this.options;\n const scale = this.scale = new ArcScale(options.scale, this.contextService);\n\n const pointer = new RangePointer(scale, deepExtend({}, {\n colors: options.colors,\n color: options.color,\n value: options.value,\n opacity: options.opacity,\n animation: {\n transitions: options.transitions\n }\n }));\n\n this.pointers = [ pointer ];\n }\n\n _buildPointers(pointers) {\n for (let i = 0; i < pointers.length; i++) {\n const current = pointers[i];\n current.render();\n\n current.value(current.options.value);\n }\n }\n\n _setValueOptions(value) {\n this.options.value = value;\n }\n\n currentColor() {\n const pointer = this.pointers[0];\n if (pointer) {\n return pointer.currentColor();\n }\n }\n\n centerLabelPosition(width, height) {\n const size = this.getSize();\n const center = this.scale.arc.center;\n\n let left = center.x - width / 2;\n let top = center.y - height / 2;\n\n if (width < size.width) {\n const right = left + width;\n\n left = Math.max(left, 0);\n\n if (right > size.width) {\n left -= right - size.width;\n }\n }\n\n if (height < size.height) {\n const bbox = this.scale.bbox;\n const yLimit = bbox.bottomRight().y;\n const bottom = top + height;\n\n top = Math.max(top, bbox.origin.y);\n\n if (bottom > yLimit) {\n top -= bottom - yLimit;\n }\n }\n\n return {\n left: left,\n top: top\n };\n }\n}\n\nexport default ArcGauge;","import ArcGauge from '../arc/arc-gauge';\n\nconst defaultStartAngle = 90;\n\nclass CircularGauge extends ArcGauge {\n _createModel() {\n const scaleOptions = this.options.scale;\n if (typeof scaleOptions.startAngle !== 'number') {\n scaleOptions.startAngle = defaultStartAngle;\n }\n\n scaleOptions.endAngle = scaleOptions.startAngle + 360;\n\n super._createModel();\n }\n}\n\nexport default CircularGauge;\n","import {\n Class,\n defined,\n setDefaultOptions\n} from '../../common';\n\nconst DEFAULT_QUIET_ZONE_LENGTH = 10;\n\nexport class Encoding extends Class {\n constructor(options) {\n super();\n this.setOptions(options);\n this.initProperties();\n }\n\n initProperties() { }\n\n setOptions(options) {\n this.options = Object.assign({}, this.options, options);\n this.quietZoneLength = this.options.addQuietZone ? 2 * this.options.quietZoneLength : 0;\n }\n\n encode(value, width, height) {\n const convertedValue = defined(value) ? String(value) : value;\n\n this.initValue(convertedValue, width, height);\n\n if (this.options.addQuietZone) {\n this.addQuietZone();\n }\n\n this.addData();\n\n if (this.options.addQuietZone) {\n this.addQuietZone();\n }\n\n return {\n baseUnit: this.baseUnit,\n pattern: this.pattern\n };\n }\n\n initValue() { }\n\n addQuietZone() {\n this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIET_ZONE_LENGTH);\n }\n\n addData() { }\n\n invalidCharacterError(character) {\n throw new Error(`Character \"${character}\" is not valid for symbology ${this.name}.`);\n }\n}\n\nsetDefaultOptions(Encoding, {\n quietZoneLength: DEFAULT_QUIET_ZONE_LENGTH,\n addQuietZone: true,\n addCheckSum: true\n});\n","import { Encoding } from './encoding';\nimport { setDefaultOptions } from '../../common';\n\nconst extend = Object.assign;\n\nexport class Code11 extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 11\",\n characterMap: [\"111121\", \"211121\", \"121121\", \"221111\", \"112121\", \"212111\", \"122111\", \"111221\", \"211211\", \"211111\", \"112111\"],\n cCheckSumTotal: 10,\n kCheckSumTotal: 9,\n kCheckSumMinLength: 10,\n checkSumMod: 11,\n DASH_VALUE: 10,\n DASH: \"-\",\n START: \"112211\",\n STOP: \"11221\"\n });\n }\n\n initValue(value, width) {\n this.pattern = [];\n this.value = value;\n this.width = width;\n this.totalUnits = 0;\n }\n\n addData() {\n const value = this.value;\n\n this.addPattern(this.START);\n\n for (let i = 0; i < value.length; i++) {\n this.addCharacter(value.charAt(i));\n }\n\n if (this.options.addCheckSum) {\n this.addCheckSum();\n }\n\n this.addPattern(this.STOP);\n this.setBaseUnit();\n }\n\n setBaseUnit() {\n this.baseUnit = this.width / (this.totalUnits + this.quietZoneLength);\n }\n\n addCheckSum() {\n const value = this.value;\n let length = value.length;\n const cValue = this.getWeightedSum(value, length, this.cCheckSumTotal) % this.checkSumMod;\n\n this.checksum = String(cValue);\n this.addPattern(this.characterMap[cValue]);\n\n length++;\n\n if (length >= this.kCheckSumMinLength) {\n let kValue = (cValue + this.getWeightedSum(value, length, this.kCheckSumTotal)) % this.checkSumMod;\n this.checksum += kValue;\n this.addPattern(this.characterMap[kValue]);\n }\n }\n\n getWeightedSum(value, length, total) {\n let weightedSum = 0;\n\n for (let i = 0; i < value.length; i++) {\n weightedSum += this.weightedValue(this.getValue(value.charAt(i)), length, i, total);\n }\n\n return weightedSum;\n }\n\n weightedValue(value, length, index, total) {\n const weight = (length - index) % total || total;\n return weight * value;\n }\n\n getValue(character) {\n if (!isNaN(character)) {\n return parseInt(character, 10);\n } else if (character !== this.DASH) {\n this.invalidCharacterError(character);\n }\n\n return this.DASH_VALUE;\n }\n\n addCharacter(character) {\n const value = this.getValue(character);\n const pattern = this.characterMap[value];\n\n this.addPattern(pattern);\n }\n\n addPattern(pattern) {\n let value;\n\n for (let i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n this.totalUnits += value;\n }\n }\n}\n\nsetDefaultOptions(Code11, {\n addCheckSum: true\n});\n","import { setDefaultOptions } from '../../common';\nimport { Encoding } from './encoding';\n\nconst extend = Object.assign;\n\nexport class Code39Base extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n minBaseUnitLength: 0.7\n });\n }\n\n addData() {\n const value = this.value;\n\n this.addStart();\n\n for (let idx = 0; idx < value.length; idx++) {\n this.addCharacter(value.charAt(idx));\n }\n\n if (this.options.addCheckSum) {\n this.pushCheckSum();\n }\n\n this.addStop();\n this.prepareValues();\n }\n\n addCharacter(character) {\n const characterData = this.characterMap[character];\n\n if (!characterData) {\n this.invalidCharacterError(character);\n }\n\n this.addBase(characterData);\n }\n\n addBase() { }\n}\n\nexport class Code39 extends Code39Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 39\",\n checkSumMod: 43,\n minRatio: 2.5,\n maxRatio: 3,\n gapWidth: 1,\n splitCharacter: \"|\",\n patternMappings: {\n \"b\": \"1|\",\n \"w\": \"1|\",\n \"B\": \"ratio|\",\n \"W\": \"ratio|\"\n },\n characterMap: {\n \"0\": { \"pattern\": \"bwbWBwBwb\", \"value\": 0 },\n \"1\": { \"pattern\": \"BwbWbwbwB\", \"value\": 1 },\n \"2\": { \"pattern\": \"bwBWbwbwB\", \"value\": 2 },\n \"3\": { \"pattern\": \"BwBWbwbwb\", \"value\": 3 },\n \"4\": { \"pattern\": \"bwbWBwbwB\", \"value\": 4 },\n \"5\": { \"pattern\": \"BwbWBwbwb\", \"value\": 5 },\n \"6\": { \"pattern\": \"bwBWBwbwb\", \"value\": 6 },\n \"7\": { \"pattern\": \"bwbWbwBwB\", \"value\": 7 },\n \"8\": { \"pattern\": \"BwbWbwBwb\", \"value\": 8 },\n \"9\": { \"pattern\": \"bwBWbwBwb\", \"value\": 9 },\n \"A\": { \"pattern\": \"BwbwbWbwB\", \"value\": 10 },\n \"B\": { \"pattern\": \"bwBwbWbwB\", \"value\": 11 },\n \"C\": { \"pattern\": \"BwBwbWbwb\", \"value\": 12 },\n \"D\": { \"pattern\": \"bwbwBWbwB\", \"value\": 13 },\n \"E\": { \"pattern\": \"BwbwBWbwb\", \"value\": 14 },\n \"F\": { \"pattern\": \"bwBwBWbwb\", \"value\": 15 },\n \"G\": { \"pattern\": \"bwbwbWBwB\", \"value\": 16 },\n \"H\": { \"pattern\": \"BwbwbWBwb\", \"value\": 17 },\n \"I\": { \"pattern\": \"bwBwbWBwb\", \"value\": 18 },\n \"J\": { \"pattern\": \"bwbwBWBwb\", \"value\": 19 },\n \"K\": { \"pattern\": \"BwbwbwbWB\", \"value\": 20 },\n \"L\": { \"pattern\": \"bwBwbwbWB\", \"value\": 21 },\n \"M\": { \"pattern\": \"BwBwbwbWb\", \"value\": 22 },\n \"N\": { \"pattern\": \"bwbwBwbWB\", \"value\": 23 },\n \"O\": { \"pattern\": \"BwbwBwbWb\", \"value\": 24 },\n \"P\": { \"pattern\": \"bwBwBwbWb\", \"value\": 25 },\n \"Q\": { \"pattern\": \"bwbwbwBWB\", \"value\": 26 },\n \"R\": { \"pattern\": \"BwbwbwBWb\", \"value\": 27 },\n \"S\": { \"pattern\": \"bwBwbwBWb\", \"value\": 28 },\n \"T\": { \"pattern\": \"bwbwBwBWb\", \"value\": 29 },\n \"U\": { \"pattern\": \"BWbwbwbwB\", \"value\": 30 },\n \"V\": { \"pattern\": \"bWBwbwbwB\", \"value\": 31 },\n \"W\": { \"pattern\": \"BWBwbwbwb\", \"value\": 32 },\n \"X\": { \"pattern\": \"bWbwBwbwB\", \"value\": 33 },\n \"Y\": { \"pattern\": \"BWbwBwbwb\", \"value\": 34 },\n \"Z\": { \"pattern\": \"bWBwBwbwb\", \"value\": 35 },\n \"-\": { \"pattern\": \"bWbwbwBwB\", \"value\": 36 },\n \".\": { \"pattern\": \"BWbwbwBwb\", \"value\": 37 },\n \" \": { \"pattern\": \"bWBwbwBwb\", \"value\": 38 },\n \"$\": { \"pattern\": \"bWbWbWbwb\", \"value\": 39 },\n \"/\": { \"pattern\": \"bWbWbwbWb\", \"value\": 40 },\n \"+\": { \"pattern\": \"bWbwbWbWb\", \"value\": 41 },\n \"%\": { \"pattern\": \"bwbWbWbWb\", \"value\": 42 },\n START: { pattern: \"bWbwBwBwb\" }\n }\n });\n }\n\n initValue(value, width, height) {\n this.width = width;\n this.height = height;\n this.value = value;\n this.dataLength = value.length;\n this.pattern = [];\n this.patternString = \"\";\n }\n\n prepareValues() {\n const minBaseUnit = this.minBaseUnitLength;\n const minRatio = this.minRatio;\n const minHeight = Math.ceil(Math.max(0.15 * this.width, 24));\n let baseUnit;\n let ratio = this.maxRatio;\n\n if (this.height < minHeight) {\n throw new Error(`Insufficient height for Code39 encoding: the current height is ${this.height}px and the minimum height is ${minHeight}px.`);\n }\n\n baseUnit = this.getBaseUnit(ratio);\n\n while (baseUnit < minBaseUnit && ratio > minRatio) {\n ratio = parseFloat((ratio - 0.1).toFixed(1));\n baseUnit = this.getBaseUnit(ratio);\n }\n\n if (baseUnit < minBaseUnit) {\n let minWidth = Math.ceil(this.getBaseWidth(minRatio) * minBaseUnit);\n throw new Error(`Insufficient width for Code39 encoding: the current width is ${this.width}px and the minimum width for value \"${this.value}\" is ${minWidth}px.`);\n }\n\n this.ratio = ratio;\n this.baseUnit = baseUnit;\n this.patternString = this.patternString.substring(0, this.patternString.length - 1);\n this.pattern = this.pattern.concat(this.patternString.replace(/ratio/g, ratio).split(this.splitCharacter));\n }\n\n getBaseUnit(ratio) {\n return this.width / this.getBaseWidth(ratio);\n }\n\n getBaseWidth(ratio) {\n const characterLength = 3 * (ratio + 2);\n return this.quietZoneLength + characterLength * (this.dataLength + 2) + this.gapWidth * (this.dataLength + 1);\n }\n\n addStart() {\n this.addPattern(this.characterMap.START.pattern);\n this.addCharacterGap();\n }\n\n addBase(character) {\n this.addPattern(character.pattern);\n this.addCharacterGap();\n }\n\n addStop() {\n this.addPattern(this.characterMap.START.pattern);\n }\n\n addPattern(pattern) {\n for (let i = 0; i < pattern.length; i++) {\n this.patternString += this.patternMappings[pattern.charAt(i)];\n }\n }\n\n addCharacterGap() {\n this.patternString += this.gapWidth + this.splitCharacter;\n }\n}\n\nsetDefaultOptions(Code39, {\n addCheckSum: false\n});\n","import { Code39 } from './code39';\nimport deepExtend from '../../common/deep-extend';\n\nexport const Code39ExtendedBase = {\n addCharacter(character) {\n if (this.characterMap[character]) {\n this.addBase(this.characterMap[character]);\n } else if (character.charCodeAt(0) > 127) {\n this.invalidCharacterError(character);\n } else {\n this.addExtended(character.charCodeAt(0));\n }\n },\n\n addExtended(code) {\n let patterns;\n\n for (let i = 0; i < this.extendedMappings.length; i++) {\n patterns = this.extendedMappings[i].call(this, code);\n\n if (patterns) {\n for (let patternIndex = 0; patternIndex < patterns.length; patternIndex++) {\n const pattern = patterns[patternIndex];\n this.addBase(pattern);\n }\n\n this.dataLength += patterns.length - 1;\n return;\n }\n }\n },\n\n extendedMappings: [\n function(code) {\n if (97 <= code && code <= 122) {\n return [this.characterMap[this.shiftCharacters[0]], this.characterMap[String.fromCharCode(code - 32)]];\n }\n },\n function(code) {\n if (33 <= code && code <= 58) {\n return [this.characterMap[this.shiftCharacters[1]], this.characterMap[String.fromCharCode(code + 32)]];\n }\n },\n function(code) {\n if (1 <= code && code <= 26) {\n return [this.characterMap[this.shiftCharacters[2]], this.characterMap[String.fromCharCode(code + 64)]];\n }\n },\n function(code) {\n let result;\n let dataCharacter;\n\n if (!this.specialAsciiCodes[code]) {\n dataCharacter = Math.floor(code / 32) * 6 + (code - 27) % 32 + 64;\n result = [this.characterMap[this.shiftCharacters[3]], this.characterMap[String.fromCharCode(dataCharacter)]];\n } else {\n result = [];\n\n for (let i = 0; i < this.specialAsciiCodes[code].length; i++) {\n result.push(this.characterMap[this.shiftCharacters[3]]);\n result.push(this.characterMap[this.specialAsciiCodes[code][i]]);\n }\n }\n\n return result;\n }\n ],\n specialAsciiCodes: {\n \"0\": [\"U\"],\n \"64\": [\"V\"],\n \"96\": [\"W\"],\n \"127\": [\"T\", \"X\", \"Y\", \"Z\"]\n },\n shiftValuesAsciiCodes: {\n \"39\": 36,\n \"40\": 47,\n \"41\": 43,\n \"42\": 37\n },\n characterMap: {\n \"+\": false,\n \"/\": false,\n \"$\": false,\n \"%\": false\n },\n shiftCharacters: [\"SHIFT0\", \"SHIFT1\", \"SHIFT2\", \"SHIFT3\"]\n};\n\nexport class Code39Extended extends Code39 {\n initProperties() {\n super.initProperties();\n\n deepExtend(this, Code39ExtendedBase, {\n name: \"Code 39 extended\",\n characterMap: {\n SHIFT0: { \"pattern\": \"bWbwbWbWb\", \"value\": 41 },\n SHIFT1: { \"pattern\": \"bWbWbwbWb\", \"value\": 40 },\n SHIFT2: { \"pattern\": \"bWbWbWbwb\", \"value\": 39 },\n SHIFT3: { \"pattern\": \"bwbWbWbWb\", \"value\": 42 }\n }\n });\n }\n}\n","import { Code39Base } from './code39';\n\nconst extend = Object.assign;\n\nexport class Code93 extends Code39Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 93\",\n cCheckSumTotal: 20,\n kCheckSumTotal: 15,\n checkSumMod: 47,\n characterMap: {\n \"0\": { \"pattern\": \"131112\", \"value\": 0 },\n \"1\": { \"pattern\": \"111213\", \"value\": 1 },\n \"2\": { \"pattern\": \"111312\", \"value\": 2 },\n \"3\": { \"pattern\": \"111411\", \"value\": 3 },\n \"4\": { \"pattern\": \"121113\", \"value\": 4 },\n \"5\": { \"pattern\": \"121212\", \"value\": 5 },\n \"6\": { \"pattern\": \"121311\", \"value\": 6 },\n \"7\": { \"pattern\": \"111114\", \"value\": 7 },\n \"8\": { \"pattern\": \"131211\", \"value\": 8 },\n \"9\": { \"pattern\": \"141111\", \"value\": 9 },\n \"A\": { \"pattern\": \"211113\", \"value\": 10 },\n \"B\": { \"pattern\": \"211212\", \"value\": 11 },\n \"C\": { \"pattern\": \"211311\", \"value\": 12 },\n \"D\": { \"pattern\": \"221112\", \"value\": 13 },\n \"E\": { \"pattern\": \"221211\", \"value\": 14 },\n \"F\": { \"pattern\": \"231111\", \"value\": 15 },\n \"G\": { \"pattern\": \"112113\", \"value\": 16 },\n \"H\": { \"pattern\": \"112212\", \"value\": 17 },\n \"I\": { \"pattern\": \"112311\", \"value\": 18 },\n \"J\": { \"pattern\": \"122112\", \"value\": 19 },\n \"K\": { \"pattern\": \"132111\", \"value\": 20 },\n \"L\": { \"pattern\": \"111123\", \"value\": 21 },\n \"M\": { \"pattern\": \"111222\", \"value\": 22 },\n \"N\": { \"pattern\": \"111321\", \"value\": 23 },\n \"O\": { \"pattern\": \"121122\", \"value\": 24 },\n \"P\": { \"pattern\": \"131121\", \"value\": 25 },\n \"Q\": { \"pattern\": \"212112\", \"value\": 26 },\n \"R\": { \"pattern\": \"212211\", \"value\": 27 },\n \"S\": { \"pattern\": \"211122\", \"value\": 28 },\n \"T\": { \"pattern\": \"211221\", \"value\": 29 },\n \"U\": { \"pattern\": \"221121\", \"value\": 30 },\n \"V\": { \"pattern\": \"222111\", \"value\": 31 },\n \"W\": { \"pattern\": \"112122\", \"value\": 32 },\n \"X\": { \"pattern\": \"112221\", \"value\": 33 },\n \"Y\": { \"pattern\": \"122121\", \"value\": 34 },\n \"Z\": { \"pattern\": \"123111\", \"value\": 35 },\n \"-\": { \"pattern\": \"121131\", \"value\": 36 },\n \".\": { \"pattern\": \"311112\", \"value\": 37 },\n \" \": { \"pattern\": \"311211\", \"value\": 38 },\n \"$\": { \"pattern\": \"321111\", \"value\": 39 },\n \"/\": { \"pattern\": \"112131\", \"value\": 40 },\n \"+\": { \"pattern\": \"113121\", \"value\": 41 },\n \"%\": { \"pattern\": \"211131\", \"value\": 42 },\n SHIFT0: { \"pattern\": \"122211\", \"value\": 46 },\n SHIFT1: { \"pattern\": \"311121\", \"value\": 45 },\n SHIFT2: { \"pattern\": \"121221\", \"value\": 43 },\n SHIFT3: { \"pattern\": \"312111\", \"value\": 44 },\n START: { \"pattern\": \"111141\" },\n TERMINATION_BAR: \"1\"\n }\n });\n }\n\n initValue(value, width, height) {\n this.value = value;\n this.width = width;\n this.height = height;\n this.pattern = [];\n this.values = [];\n this.dataLength = value.length;\n }\n\n prepareValues() {\n let minHeight = Math.ceil(Math.max(0.15 * this.width, 24));\n\n if (this.height < minHeight) {\n throw new Error(`Insufficient height for Code93 encoding: the current height is ${this.height}px, the minimum required height is ${minHeight}px.`);\n }\n\n this.setBaseUnit();\n\n if (this.baseUnit < this.minBaseUnitLength) {\n const minWidth = Math.ceil(this.minBaseUnitLength * (this.width / this.baseUnit));\n throw new Error(`Insufficient width for Code93 encoding: the current width is ${this.width}px and the minimum required width for value \"${this.value}\" is ${minWidth}px.`);\n }\n }\n\n setBaseUnit() {\n const checkSumLength = 2;\n\n this.baseUnit = this.width / (9 * (this.dataLength + 2 + checkSumLength) + this.quietZoneLength + 1);\n }\n\n addStart() {\n let pattern = this.characterMap.START.pattern;\n this.addPattern(pattern);\n }\n\n addStop() {\n this.addStart();\n this.pattern.push(this.characterMap.TERMINATION_BAR);\n }\n\n addBase(charData) {\n this.addPattern(charData.pattern);\n this.values.push(charData.value);\n }\n\n pushCheckSum() {\n const checkValues = this._getCheckValues();\n let charData;\n\n this.checksum = checkValues.join(\"\");\n\n for (let i = 0; i < checkValues.length; i++) {\n charData = this.characterMap[this._findCharacterByValue(checkValues[i])];\n this.addPattern(charData.pattern);\n }\n }\n\n _getCheckValues() {\n const values = this.values;\n const length = values.length;\n let wightedSum = 0;\n let cValue;\n let kValue;\n let idx;\n\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += this.weightedValue(values[idx], length - idx, this.cCheckSumTotal);\n }\n\n cValue = wightedSum % this.checkSumMod;\n\n wightedSum = this.weightedValue(cValue, 1, this.kCheckSumTotal);\n\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += this.weightedValue(values[idx], length - idx + 1, this.kCheckSumTotal);\n }\n\n kValue = wightedSum % this.checkSumMod;\n return [cValue, kValue];\n }\n\n _findCharacterByValue(value) {\n for (let character in this.characterMap) {\n if (this.characterMap[character].value === value) {\n return character;\n }\n }\n }\n\n weightedValue(value, index, total) {\n return (index % total || total) * value;\n }\n\n addPattern(pattern) {\n let value;\n\n for (let i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n }\n }\n}\n","import { Encoding } from './encoding';\nimport inArray from '../../common/in-array';\n\nconst numberRegex = /^\\d+$/;\nconst extend = Object.assign;\n\nexport class Postnet extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Postnet\",\n START: \"2\",\n VALID_CODE_LENGTHS: [5, 9, 11],\n DIGIT_SEPARATOR: \"-\",\n characterMap: [\"22111\", \"11122\", \"11212\", \"11221\", \"12112\", \"12121\", \"12211\", \"21112\", \"21121\", \"21211\"]\n });\n }\n\n initValue(value, width, height) {\n this.height = height;\n this.width = width;\n this.baseHeight = height / 2;\n this.value = value.replace(new RegExp(this.DIGIT_SEPARATOR, \"g\"), \"\");\n this.pattern = [];\n this.validate(this.value);\n this.checkSum = 0;\n this.setBaseUnit();\n }\n\n addData() {\n const value = this.value;\n\n this.addPattern(this.START);\n\n for (let i = 0; i < value.length; i++) {\n this.addCharacter(value.charAt(i));\n }\n\n if (this.options.addCheckSum) {\n this.addCheckSum();\n }\n\n this.addPattern(this.START);\n this.pattern.pop();\n }\n\n addCharacter(character) {\n const pattern = this.characterMap[character];\n this.checkSum += parseInt(character, 10);\n this.addPattern(pattern);\n }\n\n addCheckSum() {\n this.checksum = (10 - (this.checkSum % 10)) % 10;\n this.addCharacter(this.checksum);\n }\n\n setBaseUnit() {\n const startStopLength = 3;\n\n this.baseUnit = this.width / ((this.value.length + 1) * 10 + startStopLength + this.quietZoneLength);\n }\n\n validate(value) {\n if (!numberRegex.test(value)) {\n this.invalidCharacterError(value.match(/[^0-9]/)[0]);\n }\n\n if (!inArray(value.length, this.VALID_CODE_LENGTHS)) {\n throw new Error(\"Invalid value length. Valid lengths for the Postnet symbology are \" + this.VALID_CODE_LENGTHS.join(\",\") + \".\");\n }\n }\n\n addPattern(pattern) {\n let y1;\n\n for (let i = 0; i < pattern.length; i++) {\n y1 = this.height - this.baseHeight * pattern.charAt(i);\n this.pattern.push({ width: 1, y1: y1, y2: this.height });\n this.pattern.push(1);\n }\n }\n}\n","import { Class } from '../../common';\nimport { Encoding } from './encoding';\nimport deepExtend from '../../common/deep-extend';\nimport inArray from '../../common/in-array';\n\nconst numberRegex = /^\\d+$/;\nconst alphanumericRegex = /^[a-z0-9]+$/i;\nconst extend = Object.assign;\n\nexport class State128 extends Class {\n constructor(encoding) {\n super();\n this.encoding = encoding;\n this.initProperties();\n }\n\n initProperties() { }\n\n addStart() { }\n\n is() { }\n\n isCode() {\n return false;\n }\n\n move() { }\n\n pushState() { }\n}\n\nexport class State128AB extends State128 {\n constructor(encoding, states) {\n super(encoding);\n this.states = states;\n this._initMoves(states);\n }\n\n initProperties() {\n super.initProperties();\n\n deepExtend(this, {\n FNC4: \"FNC4\",\n SHIFT: 98\n });\n }\n\n addStart() {\n this.encoding.addPattern(this.START);\n }\n\n is(value, index) {\n let code = value.charCodeAt(index);\n return this.isCode(code);\n }\n\n move(encodingState) {\n let idx = 0;\n\n while (!this._moves[idx].call(this, encodingState) && idx < this._moves.length) {\n idx++;\n }\n }\n\n pushState(encodingState) {\n let states = this.states,\n value = encodingState.value,\n maxLength = value.length,\n code;\n\n if (inArray(\"C\", states)) {\n let numberMatch = value.substr(encodingState.index).match(/\\d{4,}/g);\n\n if (numberMatch) {\n maxLength = value.indexOf(numberMatch[0], encodingState.index);\n }\n }\n\n while ((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 &&\n this.isCode(code) &&\n encodingState.index < maxLength) {\n this.encoding.addPattern(this.getValue(code));\n encodingState.index++;\n }\n }\n\n _initMoves(states) {\n this._moves = [];\n\n if (inArray(this.FNC4, states)) {\n this._moves.push(this._moveFNC);\n }\n\n if (inArray(this.shiftKey, states)) {\n this._moves.push(this._shiftState);\n }\n\n this._moves.push(this._moveState);\n }\n\n _moveFNC(encodingState) {\n if (encodingState.fnc) {\n encodingState.fnc = false;\n return encodingState.previousState === this.key;\n }\n }\n\n _shiftState(encodingState) {\n if (encodingState.previousState === this.shiftKey &&\n (encodingState.index + 1 >= encodingState.value.length ||\n this.encoding[this.shiftKey].is(encodingState.value, encodingState.index + 1))) {\n this.encoding.addPattern(this.SHIFT);\n encodingState.shifted = true;\n return true;\n }\n }\n\n _moveState() {\n this.encoding.addPattern(this.MOVE);\n return true;\n }\n}\n\nconst states128 = {};\n\nstates128.A = class State128A extends State128AB {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"A\",\n shiftKey: \"B\",\n MOVE: 101,\n START: 103\n });\n }\n\n isCode(code) {\n return 0 <= code && code < 96;\n }\n\n getValue(code) {\n if (code < 32) {\n return code + 64;\n }\n\n return code - 32;\n }\n};\n\nstates128.B = class State128B extends State128AB {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"B\",\n shiftKey: \"A\",\n MOVE: 100,\n START: 104\n });\n }\n\n isCode(code) {\n return 32 <= code && code < 128;\n }\n\n getValue(code) {\n return code - 32;\n }\n};\n\nstates128.C = class State128C extends State128 {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"C\",\n MOVE: 99,\n START: 105\n });\n }\n\n addStart() {\n this.encoding.addPattern(this.START);\n }\n\n is(value, index) {\n let next4 = getSubstring(value, index, 4);\n return (index + 4 <= value.length || value.length === 2) && numberRegex.test(next4);\n }\n\n move() {\n this.encoding.addPattern(this.MOVE);\n }\n\n pushState(encodingState) {\n let code;\n\n while ((code = getSubstring(encodingState.value, encodingState.index, 2)) &&\n numberRegex.test(code) && code.length === 2) {\n this.encoding.addPattern(parseInt(code, 10));\n encodingState.index += 2;\n }\n }\n\n getValue(code) {\n return code;\n }\n};\n\nstates128.FNC4 = class State128FNC4 extends State128 {\n constructor(encoding, states) {\n super(encoding);\n this._initSubStates(states);\n }\n\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"FNC4\",\n dependentStates: [\"A\", \"B\"]\n });\n }\n\n addStart(encodingState) {\n let code = encodingState.value.charCodeAt(0) - 128,\n subState = this._getSubState(code);\n\n this.encoding[subState].addStart();\n }\n\n is(value, index) {\n let code = value.charCodeAt(index);\n return this.isCode(code);\n }\n\n isCode(code) {\n return 128 <= code && code < 256;\n }\n\n pushState(encodingState) {\n let subState = this._initSubState(encodingState),\n encoding = this.encoding,\n length = subState.value.length;\n let code;\n\n encodingState.index += length;\n\n if (length < 3) {\n for (; subState.index < length; subState.index++) {\n code = subState.value.charCodeAt(subState.index);\n subState.state = this._getSubState(code);\n\n if (subState.previousState !== subState.state) {\n subState.previousState = subState.state;\n encoding[subState.state].move(subState);\n }\n\n encoding.addPattern(encoding[subState.state].MOVE);\n encoding.addPattern(encoding[subState.state].getValue(code));\n }\n } else {\n if (subState.state !== subState.previousState) {\n encoding[subState.state].move(subState);\n }\n\n this._pushStart(subState);\n encoding.pushData(subState, this.subStates);\n\n if (encodingState.index < encodingState.value.length) {\n this._pushStart(subState);\n }\n }\n\n encodingState.fnc = true;\n encodingState.state = subState.state;\n }\n\n _pushStart(subState) {\n this.encoding.addPattern(this.encoding[subState.state].MOVE);\n this.encoding.addPattern(this.encoding[subState.state].MOVE);\n }\n\n _initSubState(encodingState) {\n const subState = {\n value: this._getAll(encodingState.value, encodingState.index),\n index: 0\n };\n\n subState.state = this._getSubState(subState.value.charCodeAt(0));\n subState.previousState = encodingState.previousState === this.key ?\n subState.state :\n encodingState.previousState;\n\n return subState;\n }\n\n _initSubStates(states) {\n this.subStates = [];\n\n for (let i = 0; i < states.length; i++) {\n if (inArray(states[i], this.dependentStates)) {\n this.subStates.push(states[i]);\n }\n }\n }\n\n _getSubState(code) {\n for (let i = 0; i < this.subStates.length; i++) {\n if (this.encoding[this.subStates[i]].isCode(code)) {\n return this.subStates[i];\n }\n }\n }\n\n _getAll(value, index) {\n let code;\n let result = \"\";\n let i = index;\n\n while ((code = value.charCodeAt(i++)) && this.isCode(code)) {\n result += String.fromCharCode(code - 128);\n }\n\n return result;\n }\n};\n\nstates128.FNC1 = class States128FNC1 extends State128 {\n constructor(encoding, states) {\n super(encoding);\n this.states = states;\n }\n\n initProperties() {\n super.initProperties();\n\n extend(this, {\n key: \"FNC1\",\n startState: \"C\",\n startAI: \"(\",\n endAI: \")\",\n dependentStates: [\"C\", \"B\"],\n applicationIdentifiers: {\n \"22\": { max: 29, type: \"alphanumeric\" },\n \"402\": { length: 17 },\n \"7004\": { max: 4, type: \"alphanumeric\" },\n \"242\": { max: 6, type: \"alphanumeric\" },\n \"8020\": { max: 25, type: \"alphanumeric\" },\n \"703\": { min: 3, max: 30, type: \"alphanumeric\" },\n \"8008\": { min: 8, max: 12, type: \"alphanumeric\" },\n \"253\": { min: 13, max: 17, type: \"alphanumeric\" },\n \"8003\": { min: 14, max: 30, type: \"alphanumeric\" },\n multiKey: [{\n ids: [\"15\", \"17\", \"8005\", \"8100\"],\n ranges: [\n [11, 13],\n [310, 316],\n [320, 336],\n [340, 369]\n ],\n type: { length: 6 }\n }, {\n ids: [\"240\", \"241\", \"250\", \"251\", \"400\", \"401\", \"403\", \"7002\", \"8004\", \"8007\", \"8110\"],\n ranges: [[90 - 99]],\n type: { max: 30, type: \"alphanumeric\" }\n }, {\n ids: [\"7001\"],\n ranges: [[410, 414]],\n type: { length: 13 }\n }, {\n ids: [\"10\", \"21\", \"254\", \"420\", \"8002\"],\n type: { max: 20, type: \"alphanumeric\" }\n }, {\n ids: [\"00\", \"8006\", \"8017\", \"8018\"],\n type: { length: 18 }\n }, {\n ids: [\"01\", \"02\", \"8001\"],\n type: { length: 14 }\n }, {\n ids: [\"422\"],\n ranges: [\n [424, 426]\n ],\n type: { length: 3 }\n }, {\n ids: [\"20\", \"8102\"],\n type: { length: 2 }\n }, {\n ids: [\"30\", \"37\"],\n type: { max: 8, type: \"alphanumeric\" }\n }, {\n ids: [\"390\", \"392\"],\n type: { max: 15, type: \"alphanumeric\" }\n }, {\n ids: [\"421\", \"423\"],\n type: { min: 3, max: 15, type: \"alphanumeric\" }\n }, {\n ids: [\"391\", \"393\"],\n type: { min: 3, max: 18, type: \"alphanumeric\" }\n }, {\n ids: [\"7003\", \"8101\"],\n type: { length: 10 }\n }]\n },\n START: 102\n });\n }\n\n\n addStart() {\n this.encoding[this.startState].addStart();\n }\n\n is() {\n return inArray(this.key, this.states);\n }\n\n pushState(encodingState) {\n let encoding = this.encoding,\n value = encodingState.value.replace(/\\s/g, \"\"),\n regexSeparators = new RegExp(\"[\" + this.startAI + this.endAI + \"]\", \"g\"),\n index = encodingState.index,\n subState = {\n state: this.startState\n },\n current,\n nextStart,\n separatorLength;\n\n encoding.addPattern(this.START);\n\n const trueCondition = true;\n\n while (trueCondition) {\n subState.index = 0;\n\n separatorLength = value.charAt(index) === this.startAI ? 2 : 0;\n current = separatorLength > 0 ? this.getBySeparator(value, index) : this.getByLength(value, index);\n\n if (current.ai.length) {\n nextStart = index + separatorLength + current.id.length + current.ai.length;\n } else {\n nextStart = value.indexOf(this.startAI, index + 1);\n\n if (nextStart < 0) {\n if (index + current.ai.max + current.id.length + separatorLength < value.length) {\n throw new Error(\"Separators are required after variable length identifiers\");\n }\n\n nextStart = value.length;\n }\n }\n\n subState.value = value.substring(index, nextStart).replace(regexSeparators, \"\");\n this.validate(current, subState.value);\n encoding.pushData(subState, this.dependentStates);\n\n if (nextStart >= value.length) {\n break;\n }\n\n index = nextStart;\n\n if (subState.state !== this.startState) {\n encoding[this.startState].move(subState);\n subState.state = this.startState;\n }\n\n if (!current.ai.length) {\n encoding.addPattern(this.START);\n }\n }\n\n encodingState.index = encodingState.value.length;\n }\n\n validate(current, value) {\n let code = value.substr(current.id.length),\n ai = current.ai;\n\n if (!ai.type && !numberRegex.test(code)) {\n throw new Error(\"Application identifier \" + current.id + \" is numeric only but contains non numeric character(s).\");\n }\n\n if (ai.type === \"alphanumeric\" && !alphanumericRegex.test(code)) {\n throw new Error(\"Application identifier \" + current.id + \" is alphanumeric only but contains non alphanumeric character(s).\");\n }\n\n if (ai.length && ai.length !== code.length) {\n throw new Error(\"Application identifier \" + current.id + \" must be \" + ai.length + \" characters long.\");\n }\n\n if (ai.min && ai.min > code.length) {\n throw new Error(\"Application identifier \" + current.id + \" must be at least \" + ai.min + \" characters long.\");\n }\n\n if (ai.max && ai.max < code.length) {\n throw new Error(\"Application identifier \" + current.id + \" must be at most \" + ai.max + \" characters long.\");\n }\n }\n\n getByLength(value, index) {\n let id;\n let applicationIdentifier;\n\n for (let i = 2; i <= 4; i++) {\n id = getSubstring(value, index, i);\n applicationIdentifier = this.getApplicationIdentifier(id) || this.getApplicationIdentifier(id.substring(0, id.length - 1));\n if (applicationIdentifier) {\n return {\n id: id,\n ai: applicationIdentifier\n };\n }\n }\n this.unsupportedAIError(id);\n }\n\n unsupportedAIError(id) {\n throw new Error(\"'\" + id + \"' is not a supported Application Identifier\");\n }\n\n getBySeparator(value, index) {\n let start = value.indexOf(this.startAI, index),\n end = value.indexOf(this.endAI, start),\n id = value.substring(start + 1, end),\n ai = this.getApplicationIdentifier(id) || this.getApplicationIdentifier(id.substr(id.length - 1));\n\n if (!ai) {\n this.unsupportedAIError(id);\n }\n\n return {\n ai: ai,\n id: id\n };\n }\n\n getApplicationIdentifier(id) {\n let applicationIdentifier = this.applicationIdentifiers,\n multiKey = applicationIdentifier.multiKey;\n\n if (applicationIdentifier[id]) {\n return applicationIdentifier[id];\n }\n\n for (let i = 0; i < multiKey.length; i++) {\n if (multiKey[i].ids && inArray(id, multiKey[i].ids)) {\n return multiKey[i].type;\n } else if (multiKey[i].ranges) {\n let ranges = multiKey[i].ranges;\n\n for (let j = 0; j < ranges.length; j++) {\n if (ranges[j][0] <= id && id <= ranges[j][1]) {\n return multiKey[i].type;\n }\n }\n }\n }\n }\n};\n\nexport class Code128Base extends Encoding {\n constructor(options) {\n super(options);\n this._initStates();\n }\n\n initProperties() {\n super.initProperties();\n\n extend(this, {\n characterMap: [\n 212222, 222122, 222221, 121223, 121322, 131222, 122213, 122312, 132212, 221213,\n 221312, 231212, 112232, 122132, 122231, 113222, 123122, 123221, 223211, 221132,\n 221231, 213212, 223112, 312131, 311222, 321122, 321221, 312212, 322112, 322211,\n 212123, 212321, 232121, 111323, 131123, 131321, 112313, 132113, 132311, 211313,\n 231113, 231311, 112133, 112331, 132131, 113123, 113321, 133121, 313121, 211331,\n 231131, 213113, 213311, 213131, 311123, 311321, 331121, 312113, 312311, 332111,\n 314111, 221411, 431111, 111224, 111422, 121124, 121421, 141122, 141221, 112214,\n 112412, 122114, 122411, 142112, 142211, 241211, 221114, 413111, 241112, 134111,\n 111242, 121142, 121241, 114212, 124112, 124211, 411212, 421112, 421211, 212141,\n 214121, 412121, 111143, 111341, 131141, 114113, 114311, 411113, 411311, 113141,\n 114131, 311141, 411131, 211412, 211214, 211232, 2331112\n ],\n STOP: 106\n });\n }\n\n _initStates() {\n for (let i = 0; i < this.states.length; i++) {\n this[this.states[i]] = new states128[this.states[i]](this, this.states);\n }\n }\n\n initValue(value, width, height) {\n this.pattern = [];\n this.value = value;\n this.width = width;\n this.height = height;\n this.checkSum = 0;\n this.totalUnits = 0;\n this.index = 0;\n this.position = 1;\n }\n\n addData() {\n let encodingState = {\n value: this.value,\n index: 0,\n state: \"\"\n };\n\n if (this.value.length === 0) {\n return;\n }\n\n encodingState.state =\n encodingState.previousState = this.getNextState(encodingState, this.states);\n\n this.addStart(encodingState);\n\n this.pushData(encodingState, this.states);\n\n this.addCheckSum();\n this.addStop();\n this.setBaseUnit();\n }\n\n pushData(encodingState, states) {\n const trueCondition = true;\n\n while (trueCondition) {\n this[encodingState.state].pushState(encodingState);\n\n if (encodingState.index >= encodingState.value.length) {\n break;\n }\n\n if (!encodingState.shifted) {\n encodingState.previousState = encodingState.state;\n encodingState.state = this.getNextState(encodingState, states);\n this[encodingState.state].move(encodingState);\n } else {\n let temp = encodingState.state;\n encodingState.state = encodingState.previousState;\n encodingState.previousState = temp;\n encodingState.shifted = false;\n }\n }\n }\n\n addStart(encodingState) {\n this[encodingState.state].addStart(encodingState);\n this.position = 1;\n }\n\n addCheckSum() {\n this.checksum = this.checkSum % 103;\n this.addPattern(this.checksum);\n }\n\n addStop() {\n this.addPattern(this.STOP);\n }\n\n setBaseUnit() {\n this.baseUnit = this.width / (this.totalUnits + this.quietZoneLength);\n }\n\n addPattern(code) {\n const pattern = this.characterMap[code].toString();\n let value;\n\n for (let i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n this.totalUnits += value;\n }\n this.checkSum += code * this.position++;\n }\n\n getNextState(encodingState, states) {\n for (let i = 0; i < states.length; i++) {\n if (this[states[i]].is(encodingState.value, encodingState.index)) {\n return states[i];\n }\n }\n\n this.invalidCharacterError(encodingState.value.charAt(encodingState.index));\n }\n}\n\nexport class Code128a extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128 A\",\n states: [\"A\"]\n });\n }\n}\n\nexport class Code128b extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128 B\",\n states: [\"B\"]\n });\n }\n}\n\nexport class Code128c extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128 C\",\n states: [\"C\"]\n });\n }\n}\n\nexport class Code128 extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code 128\",\n states: [\"C\", \"B\", \"A\", \"FNC4\"]\n });\n }\n}\n\nexport class CodeGS1128 extends Code128Base {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"Code GS1-128\",\n states: [\"FNC1\", \"C\", \"B\"]\n });\n }\n}\n\nfunction getSubstring(value, index, count) {\n return value.substring(index, index + count);\n}\n","import { Encoding } from './encoding';\n\nconst extend = Object.assign;\n\nexport class MsiBase extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n characterMap: [\n \"12121212\",\n \"12121221\",\n \"12122112\",\n \"12122121\",\n \"12211212\",\n \"12211221\",\n \"12212112\",\n \"12212121\",\n \"21121212\",\n \"21121221\"\n ],\n START: \"21\",\n STOP: \"121\",\n checkSumType: \"\",\n checkSums: checkSums\n });\n }\n\n initValue(value, width) {\n this.pattern = [];\n this.value = value;\n this.checkSumLength = 0;\n this.width = width;\n }\n\n setBaseUnit() {\n const startStopLength = 7;\n\n this.baseUnit = this.width /\n (12 * (this.value.length + this.checkSumLength) + this.quietZoneLength + startStopLength);\n }\n\n addData() {\n const value = this.value;\n\n this.addPattern(this.START);\n\n for (let i = 0; i < value.length; i++) {\n this.addCharacter(value.charAt(i));\n }\n\n if (this.options.addCheckSum) {\n this.addCheckSum();\n }\n\n this.addPattern(this.STOP);\n this.setBaseUnit();\n }\n\n addCharacter(character) {\n const pattern = this.characterMap[character];\n\n if (!pattern) {\n this.invalidCharacterError(character);\n }\n\n this.addPattern(pattern);\n }\n\n addPattern(pattern) {\n for (let i = 0; i < pattern.length; i++) {\n this.pattern.push(parseInt(pattern.charAt(i), 10));\n }\n }\n\n addCheckSum() {\n const checkSumFunction = this.checkSums[this.checkSumType];\n const checkValues = checkSumFunction.call(this.checkSums, this.value);\n\n this.checksum = checkValues.join(\"\");\n\n for (let i = 0; i < checkValues.length; i++) {\n this.checkSumLength++;\n this.addPattern(this.characterMap[checkValues[i]]);\n }\n }\n}\n\nexport class MsiMod10 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo10\",\n checkSumType: \"Modulo10\"\n });\n }\n}\n\nexport class MsiMod11 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo11\",\n checkSumType: \"Modulo11\"\n });\n }\n}\n\nexport class MsiMod1010 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo10 Modulo10\",\n checkSumType: \"Modulo10Modulo10\"\n });\n }\n}\n\nexport class MsiMod1110 extends MsiBase {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"MSI Modulo11 Modulo10\",\n checkSumType: \"Modulo11Modulo10\"\n });\n }\n}\n\nconst checkSums = {\n Modulo10(value) {\n let checkValues = [0, \"\"],\n odd = value.length % 2,\n idx,\n evenSum,\n oddSum;\n\n for (idx = 0; idx < value.length; idx++) {\n checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx), 10);\n }\n\n oddSum = checkValues[0];\n evenSum = (checkValues[1] * 2).toString();\n\n for (idx = 0; idx < evenSum.length; idx++) {\n oddSum += parseInt(evenSum.charAt(idx), 10);\n }\n\n return [(10 - (oddSum % 10)) % 10];\n },\n Modulo11(value) {\n let weightedSum = 0,\n mod = 11,\n length = value.length,\n weight,\n checkValue;\n\n for (let i = 0; i < length; i++) {\n weight = ((length - i) % 6 || 6) + 1;\n weightedSum += weight * value.charAt(i);\n }\n\n checkValue = (mod - weightedSum % mod) % mod;\n\n if (checkValue !== 10) {\n return [checkValue];\n }\n\n return [1, 0];\n },\n Modulo11Modulo10(value) {\n let checkValues = this.Modulo11(value),\n mod11Value;\n mod11Value = value + checkValues[0];\n\n return checkValues.concat(this.Modulo10(mod11Value));\n },\n Modulo10Modulo10(value) {\n let checkValues = this.Modulo10(value),\n mod10Value;\n mod10Value = value + checkValues[0];\n\n return checkValues.concat(this.Modulo10(mod10Value));\n }\n};\n","import { Encoding } from './encoding';\n\nconst extend = Object.assign;\n\nexport class Ean13 extends Encoding {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"EAN 13\",\n keyTable: [\n '000000',\n '001011',\n '001101',\n '001110',\n '010011',\n '011001',\n '011100',\n '010101',\n '010110',\n '011010'\n ],\n characterMap: {\n digits: [\n [3, 2, 1, 1],\n [2, 2, 2, 1],\n [2, 1, 2, 2],\n [1, 4, 1, 1],\n [1, 1, 3, 2],\n [1, 2, 3, 1],\n [1, 1, 1, 4],\n [1, 3, 1, 2],\n [1, 2, 1, 3],\n [3, 1, 1, 2]\n ],\n start: [1, 1, 1],\n middle: [1, 1, 1, 1, 1]\n }\n });\n }\n\n initValue(value, width, height) {\n const valueAsString = String(value);\n\n if (valueAsString.length !== 12 || /\\D/.test(valueAsString)) {\n throw new Error('The value of the \"EAN13\" encoding should be 12 symbols');\n }\n\n this.pattern = [];\n this.options.height = height;\n this.baseUnit = width / (95 + this.quietZoneLength);\n this.value = valueAsString;\n this.checksum = this.calculateChecksum();\n this.leftKey = valueAsString[0];\n this.leftPart = valueAsString.substr(1, 6);\n this.rightPart = valueAsString.substr(7) + this.checksum;\n }\n\n addData() {\n this.addPieces(this.characterMap.start);\n this.addSide(this.leftPart, this.leftKey);\n this.addPieces(this.characterMap.middle);\n this.addSide(this.rightPart);\n this.addPieces(this.characterMap.start);\n }\n\n addSide(leftPart, key) {\n for (let i = 0; i < leftPart.length; i++) {\n if (key && parseInt(this.keyTable[key].charAt(i), 10)) {\n this.addPieces(Array.prototype.slice.call(this.characterMap.digits[leftPart.charAt(i)]).reverse(), true);\n } else {\n this.addPieces(this.characterMap.digits[leftPart.charAt(i)], true);\n }\n }\n }\n\n addPieces(arrToAdd, limitedHeight) {\n for (let i = 0; i < arrToAdd.length; i++) {\n if (limitedHeight) {\n this.pattern.push({\n y1: 0,\n y2: this.options.height * 0.95,\n width: arrToAdd[i]\n });\n } else {\n this.pattern.push(arrToAdd[i]);\n }\n }\n }\n\n calculateChecksum() {\n let odd = 0,\n even = 0,\n value = this.value.split(\"\").reverse().join(\"\");\n\n for (let i = 0; i < value.length; i++) {\n if (i % 2) {\n even += parseInt(value.charAt(i), 10);\n } else {\n odd += parseInt(value.charAt(i), 10);\n }\n }\n\n let checksum = (10 - ((3 * odd + even) % 10)) % 10;\n\n return checksum;\n }\n}\n","import { Ean13 } from './ean13';\n\nconst extend = Object.assign;\n\nexport class Ean8 extends Ean13 {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n name: \"EAN 8\"\n });\n }\n\n initValue(value, width, height) {\n if (value.length !== 7 || /\\D/.test(value)) {\n throw new Error('Invalid value provided');\n }\n\n this.value = value;\n this.options.height = height;\n this.checksum = this.calculateChecksum(this.value);\n this.leftPart = this.value.substr(0, 4);\n this.rightPart = this.value.substr(4) + this.checksum;\n this.pattern = [];\n this.baseUnit = width / (67 + this.quietZoneLength);\n }\n}\n","import { Code11 } from './code11';\nimport { Code39 } from './code39';\nimport { Code39Extended } from './code39-extended';\nimport { Code93 } from './code93';\nimport { Code93Extended } from './code93-extended';\nimport { Postnet } from './postnet';\n\nimport {\n Code128,\n Code128a,\n Code128b,\n Code128c,\n CodeGS1128\n} from './code128';\n\nimport {\n MsiMod10,\n MsiMod11,\n MsiMod1010,\n MsiMod1110\n} from './msi';\n\nimport { Ean8 } from './ean8';\nimport { Ean13 } from './ean13';\n\nexport const Encodings = {\n code11: Code11,\n\n code39: Code39,\n code39extended: Code39Extended,\n\n code93: Code93,\n code93extended: Code93Extended,\n\n code128: Code128,\n code128a: Code128a,\n code128b: Code128b,\n code128c: Code128c,\n [\"gs1-128\"]: CodeGS1128,\n\n msimod10: MsiMod10,\n msimod11: MsiMod11,\n msimod1010: MsiMod1010,\n msimod1110: MsiMod1110,\n\n postnet: Postnet,\n\n ean8: Ean8,\n ean13: Ean13\n};\n","import { Code93 } from './code93';\nimport { Code39ExtendedBase } from './code39-extended';\nimport deepExtend from '../../common/deep-extend';\n\nexport class Code93Extended extends Code93 {\n initProperties() {\n super.initProperties();\n\n deepExtend(this, Code39ExtendedBase, {\n name: \"Code 93 extended\",\n pushCheckSum: function() {\n const checkValues = this._getCheckValues();\n let value;\n\n this.checksum = checkValues.join(\"\");\n\n for (let i = 0; i < checkValues.length; i++) {\n value = checkValues[i];\n\n if (this.shiftValuesAsciiCodes[value]) {\n this.addExtended(this.shiftValuesAsciiCodes[value]);\n } else {\n const characterByValue = this._findCharacterByValue(value);\n this.addPattern(this.characterMap[characterByValue].pattern);\n }\n }\n }\n });\n }\n}\n","export function surfaceSize(element, surfaceType) {\n const display = element.style.display;\n if (surfaceType === 'canvas') {\n // The Canvas default size is different from SVG for\n // inline-block containers such as the Barcode and QR Code.\n //\n // Switch to display: block to get same dimensions.\n element.style.display = 'block';\n }\n\n const size = {\n width: element.clientWidth,\n height: element.clientHeight\n };\n\n element.style.display = display;\n\n return size;\n}\n","import {\n geometry as geom,\n drawing as draw\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n defined,\n addClass,\n setDefaultOptions,\n deepExtend,\n getSpacing,\n isObject,\n defaultErrorHandler\n} from '../common';\n\nimport {\n Box,\n TextBox\n} from '../core';\n\nimport { Encodings } from './encodings/main';\nimport { surfaceSize } from './surface-size';\n\nconst DEFAULT_BARCODE_WIDTH = 300;\nconst DEFAULT_BARCODE_HEIGHT = 100;\n\nclass Barcode extends Class {\n constructor(element, options, errorHandler = defaultErrorHandler) {\n super();\n\n this.options = deepExtend({}, this.options, options);\n this.element = element;\n this.onError = errorHandler;\n\n this._initElement();\n this._initSurface();\n this._setOptions(options);\n\n if (options && defined(options.value)) {\n this.redraw();\n }\n }\n\n destroy() {\n this._destroySurface();\n }\n\n _initElement() {\n addClass(this.element, \"k-barcode\");\n }\n\n _initSurface() {\n const { options, surface } = this;\n\n if (!surface || surface.options.type !== options.renderAs) {\n this._destroySurface();\n this._initSurfaceElement();\n this.surface = this._createSurface();\n }\n }\n\n _createSurface() {\n return draw.Surface.create(this.surfaceElement, {\n type: this.options.renderAs\n });\n }\n\n _destroySurface() {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n this._destroySurfaceElement();\n }\n }\n\n _initSurfaceElement() {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.surfaceElement.style.position = 'relative';\n this.element.appendChild(this.surfaceElement);\n }\n }\n\n _destroySurfaceElement() {\n if (this.surfaceElement && this.surfaceElement.parentNode) {\n this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n this.surfaceElement = null;\n }\n }\n\n setOptions(options) {\n this._setOptions(options);\n this._initSurface();\n this.redraw();\n }\n\n redraw() {\n let size = this._getSize();\n\n this.surface.clear();\n\n this.surface.setSize({\n width: size.width,\n height: size.height\n });\n\n this.createVisual();\n\n this.surface.draw(this.visual);\n }\n\n getSize() {\n return {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight\n };\n }\n\n _resize() {\n this.redraw();\n }\n\n createVisual() {\n this.visual = this._render();\n }\n\n _render() {\n const options = this.options;\n const value = options.value;\n const textOptions = options.text;\n const textMargin = getSpacing(textOptions.margin);\n const size = this._getSize();\n const border = options.border || {};\n const encoding = this.encoding;\n const contentBox = new Box(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding);\n let barHeight = contentBox.height();\n let encodedValue;\n let textToDisplay;\n let textHeight;\n const visual = new draw.Group();\n\n this.contentBox = contentBox;\n visual.append(this._getBackground(size));\n\n if (textOptions.visible) {\n textHeight = draw.util.measureText(value, { font: textOptions.font }).height;\n barHeight -= textHeight + textMargin.top + textMargin.bottom;\n }\n\n try {\n encodedValue = encoding.encode(value, contentBox.width(), barHeight);\n } catch (error) {\n this.onError(error);\n return visual;\n }\n\n if (textOptions.visible) {\n textToDisplay = value;\n\n if (options.checksum && defined(encoding.checksum)) {\n textToDisplay += \" \" + encoding.checksum;\n }\n\n visual.append(this._getText(textToDisplay));\n }\n\n this.barHeight = barHeight;\n this._bandsGroup = this._getBands(encodedValue.pattern, encodedValue.baseUnit);\n visual.append(this._bandsGroup);\n\n return visual;\n }\n\n exportVisual() {\n return this._render();\n }\n\n _getSize() {\n const element = this.element;\n const elementSize = surfaceSize(element, this.options.renderAs);\n const size = new geom.Size(DEFAULT_BARCODE_WIDTH, DEFAULT_BARCODE_HEIGHT);\n\n if (elementSize.width > 0) {\n size.width = elementSize.width;\n }\n\n if (elementSize.height > 0) {\n size.height = elementSize.height;\n }\n\n if (this.options.width) {\n size.width = this.options.width;\n }\n\n if (this.options.height) {\n size.height = this.options.height;\n }\n\n return size;\n }\n\n value(value) {\n if (!defined(value)) {\n return this.options.value;\n }\n\n this.options.value = String(value);\n this.redraw();\n }\n\n _getBands(pattern, baseUnit) {\n const contentBox = this.contentBox;\n let offsetX = contentBox.x1;\n let stepX;\n let patternItem;\n const group = new draw.Group();\n\n for (let i = 0; i < pattern.length; i++) {\n patternItem = isObject(pattern[i]) ? pattern[i] : {\n width: pattern[i],\n y1: 0,\n y2: this.barHeight\n };\n\n stepX = patternItem.width * baseUnit;\n\n if (i % 2) {\n const rect = geom.Rect.fromPoints(\n new geom.Point(offsetX, patternItem.y1 + contentBox.y1),\n new geom.Point(offsetX + stepX, patternItem.y2 + contentBox.y1)\n );\n\n const path = draw.Path.fromRect(rect, {\n fill: {\n color: this.options.color\n },\n stroke: null\n });\n\n group.append(path);\n }\n\n offsetX += stepX;\n }\n\n return group;\n }\n\n _getBackground(size) {\n const options = this.options;\n const border = options.border || {};\n const box = new Box(0, 0, size.width, size.height).unpad(border.width / 2);\n const path = draw.Path.fromRect(box.toRect(), {\n fill: {\n color: options.background\n },\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType\n }\n });\n\n return path;\n }\n\n _getText(value) {\n const textOptions = this.options.text;\n const text = this._textbox = new TextBox(value, {\n font: textOptions.font,\n color: textOptions.color,\n align: \"center\",\n vAlign: \"bottom\",\n margin: textOptions.margin\n });\n\n text.reflow(this.contentBox);\n text.renderVisual();\n\n return text.visual;\n }\n\n _setOptions(options) {\n this.type = (options.type || this.options.type).toLowerCase();\n\n if (this.type === \"upca\") {\n this.type = \"ean13\";\n options.value = '0' + options.value;\n }\n\n if (this.type === \"upce\") {\n this.type = \"ean8\";\n options.value = '0' + options.value;\n }\n\n if (!Encodings[this.type]) {\n throw new Error(`Encoding '${this.type}' is not supported.`);\n }\n\n this.encoding = new Encodings[this.type]();\n\n this.options = deepExtend({}, this.options, options);\n }\n}\n\nsetDefaultOptions(Barcode, {\n name: \"Barcode\",\n renderAs: \"svg\",\n value: \"\",\n type: \"code39\",\n checksum: false,\n width: 0,\n height: 0,\n color: \"black\",\n background: \"white\",\n text: {\n visible: true,\n font: \"16px Consolas, Monaco, Sans Mono, monospace, sans-serif\",\n color: \"black\",\n margin: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n },\n border: {\n width: 0,\n dashType: \"solid\",\n color: \"black\"\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n});\n\nexport default Barcode;\n","import { Encodings } from './encodings/main';\n\nconst validate = (encoding, size, prefix) => (value) => {\n try {\n encoding.encode(\n prefix + value,\n size.width,\n size.height\n );\n } catch (error) {\n return {\n valid: false,\n error\n };\n }\n\n return {\n valid: true\n };\n};\n\n// A default size for encodings, so the validator can check only the value if no size is provided.\nconst fallbackSize = { width: 500, height: 100 };\n\nfunction barcodeValidator(type, size = fallbackSize) {\n if (!type) {\n throw new Error(`Please specify barcode type to validate.`);\n }\n\n let resolvedType = type.toLowerCase();\n let prefix = '';\n if (resolvedType === 'upca') {\n resolvedType = 'ean13';\n prefix = '0';\n } else if (resolvedType === 'upce') {\n resolvedType = 'ean8';\n prefix = '0';\n }\n\n if (!Encodings[resolvedType]) {\n throw new Error(`Encoding '${type}' is not supported.`);\n }\n\n const encoding = new Encodings[resolvedType]();\n return validate(encoding, size, prefix);\n}\n\nexport default barcodeValidator;\n","export const extend = Object.assign;\n\nexport function splitInto(str, chunkLength) {\n let result = [];\n let idx = 0;\n\n while (idx < str.length) {\n result.push(str.substring(idx, idx + chunkLength));\n idx += chunkLength;\n }\n\n return result;\n}\n\nexport function toBitsString(value, length) {\n let bitString = Number(value).toString(2);\n\n if (bitString.length < length) {\n bitString = new Array(length - bitString.length + 1).join(0) + bitString;\n }\n\n return bitString;\n}\n\nexport function toDecimal(value) {\n return parseInt(value, 2);\n}\n\n","import { Class } from '../../common';\n\nexport class FreeCellVisitor extends Class {\n constructor(matrix) {\n super();\n\n this.matrix = matrix;\n this.row = matrix.length - 1;\n this.column = matrix.length - 1;\n this.startColumn = this.column;\n this.dir = -1;\n this.c = 0;\n }\n\n move() {\n this.row += this.dir * this.c;\n this.c ^= 1;\n this.column = this.startColumn - this.c;\n }\n\n getNextCell() {\n while (this.matrix[this.row][this.column] !== undefined) {\n this.move();\n\n if (this.row < 0 || this.row >= this.matrix.length) {\n this.dir = -this.dir;\n this.startColumn -= this.startColumn !== 8 ? 2 : 3;\n this.column = this.startColumn;\n this.row = this.dir < 0 ? this.matrix.length - 1 : 0;\n }\n }\n\n return {\n row: this.row,\n column: this.column\n };\n }\n\n getNextRemainderCell() {\n this.move();\n\n if (this.matrix[this.row][this.column] === undefined) {\n return {\n row: this.row,\n column: this.column\n };\n }\n }\n}\n","import { Class } from '../../common';\n\nexport class EncodingResult extends Class {\n constructor(dataString, version) {\n super();\n\n this.dataString = dataString;\n this.version = version;\n }\n}\n","import { Class } from '../../../common';\nimport { EncodingResult } from '../encoding-result';\nimport {\n getModes,\n getVersion,\n getDataCodewordsCount,\n getDataString\n} from '../encoding';\n\nexport class IsoEncoder extends Class {\n getEncodingResult(inputString, errorCorrectionLevel) {\n let modes = getModes(inputString),\n dataCodewordsCount = getDataCodewordsCount(modes),\n version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n dataString = getDataString(modes, version);\n\n return new EncodingResult(dataString, version);\n }\n}\n","import {\n toBitsString,\n toDecimal\n} from '../utils';\nimport { FreeCellVisitor } from './free-cell-visitor';\nimport { IsoEncoder } from './encoders/iso-encoder';\nimport { Utf8Encoder } from './encoders/utf8-encoder';\nimport { VersionsCodewordsInformation } from './version-codewords';\nimport { DataModeInstances } from './data-modes/data-mode-instances';\n\nlet terminator = \"0000\",\n NUMERIC = \"numeric\",\n ALPHA_NUMERIC = \"alphanumeric\",\n BYTE = \"byte\",\n powersOfTwo = { \"1\": 0 },\n powersOfTwoResult = { \"0\": 1 },\n irregularAlignmentPatternsStartDistance = {\n 15: 20, 16: 20, 18: 24, 19: 24, 22: 20,\n 24: 22, 26: 24, 28: 20, 30: 20, 31: 24,\n 32: 28, 33: 24, 36: 18, 37: 22, 39: 20, 40: 24\n },\n finderPattern = [1, 0, 1, 1, 1],\n alignmentPattern = [1, 0, 1],\n errorCorrectionPatterns = { L: \"01\", M: \"00\", Q: \"11\", H: \"10\" },\n formatMaskPattern = \"101010000010010\",\n formatGeneratorPolynomial = \"10100110111\",\n versionGeneratorPolynomial = \"1111100100101\",\n paddingCodewords = [\"11101100\", \"00010001\"],\n finderPatternValue = 93,\n /* eslint-disable arrow-body-style */\n /* eslint-disable no-unused-vars */\n maskPatternConditions = [\n (row, column) => { return (row + column) % 2 === 0; },\n (row, column) => { return row % 2 === 0; },\n (row, column) => { return column % 3 === 0; },\n (row, column) => { return (row + column) % 3 === 0; },\n (row, column) => { return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0; },\n (row, column) => { return ((row * column) % 2) + ((row * column) % 3) === 0; },\n (row, column) => { return (((row * column) % 2) + ((row * column) % 3)) % 2 === 0; },\n (row, column) => { return (((row + column) % 2) + ((row * column) % 3)) % 2 === 0; }\n ],\n /* eslint-enable no-unused-vars */\n /* eslint-enable arrow-body-style */\n numberRegex = /^\\d+/,\n alphaPattern = \"A-Z0-9 $%*+./:-\",\n alphaExclusiveSet = \"A-Z $%*+./:-\",\n alphaRegex = new RegExp(\"^[\" + alphaExclusiveSet + \"]+\"),\n alphaNumericRegex = new RegExp(\"^[\" + alphaPattern + \"]+\"),\n byteRegex = new RegExp(\"^[^\" + alphaPattern + \"]+\"),\n initMinNumericBeforeAlpha = 8,\n initMinNumericBeforeByte = 5,\n initMinAlphaBeforeByte = 8,\n minNumericBeforeAlpha = 17,\n minNumericBeforeByte = 9,\n minAlphaBeforeByte = 16;\n\nexport const generatorPolynomials = [[1, 0], [1, 25, 0]];\n\nexport function fillFunctionCell(matrices, bit, x, y) {\n for (let i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n}\n\nexport function fillDataCell(matrices, bit, x, y) {\n for (let i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n}\n\nexport function fillData(matrices, blocks) {\n let cellVisitor = new FreeCellVisitor(matrices[0]),\n block,\n codewordIdx,\n cell;\n\n for (let blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n\n while (block.length > 0) {\n for (let i = 0; i < block.length; i++) {\n for (let j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n\n codewordIdx++;\n\n while (block[0] && codewordIdx === block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n\n while ((cell = cellVisitor.getNextRemainderCell())) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n}\n\nexport function padDataString(initialDataString, totalDataCodewords) {\n let dataBitsCount = totalDataCodewords * 8,\n terminatorIndex = 0,\n paddingCodewordIndex = 0;\n let dataString = initialDataString;\n\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join(\"0\");\n }\n\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n\n return dataString;\n}\n\nexport function generatePowersOfTwo() {\n let result;\n let power;\n\n for (power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n\n result = (powersOfTwoResult[power - 1] * 2) ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n}\n\nexport function xorPolynomials(x, y) {\n let result = [],\n idx = x.length - 2;\n\n for (let i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n\n return result;\n}\n\nexport function multiplyPolynomials(x, y) {\n let result = [];\n\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n\n return result;\n}\n\nexport function generateGeneratorPolynomials() {\n let maxErrorCorrectionCodeWordsCount = 68;\n\n for (let idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n let firstPolynomial = generatorPolynomials[idx - 1],\n secondPolynomial = [idx, 0];\n\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n}\n\n//possibly generate on demand\ngeneratePowersOfTwo();\ngenerateGeneratorPolynomials();\n\nexport function multiplyByConstant(polynomial, power) {\n let result = [],\n idx = polynomial.length - 1;\n\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n }\n while (polynomial[idx] !== undefined);\n\n return result;\n}\n\nexport function generateErrorCodewords(data, errorCodewordsCount) {\n let generator = generatorPolynomials[errorCodewordsCount - 1],\n result = new Array(errorCodewordsCount).concat(data),\n generatorPolynomial = new Array(result.length - generator.length).concat(generator),\n steps = data.length,\n errorCodewords = [],\n divisor,\n idx;\n\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n\n result = xorPolynomials(divisor, result);\n }\n\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n\n return errorCodewords;\n}\n\nexport function getBlocks(dataStream, versionCodewordsInformation) {\n let codewordStart = 0,\n dataBlocks = [],\n errorBlocks = [],\n dataBlock,\n versionGroups = versionCodewordsInformation.groups,\n blockCodewordsCount,\n groupBlocksCount,\n messagePolynomial,\n codeword;\n\n for (let groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n\n for (let blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n\n for (let codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial,\n versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [dataBlocks, errorBlocks];\n}\n\nexport function chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n let numeric = numberRegex.exec(str),\n numericMatch = numeric ? numeric[0] : \"\",\n alpha = alphaRegex.exec(str),\n alphaMatch = alpha ? alpha[0] : \"\",\n alphaNumeric = alphaNumericRegex.exec(str),\n alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : \"\",\n mode,\n modeString;\n\n if (numericMatch &&\n (numericMatch.length >= minNumericBeforeAlpha || str.length === numericMatch.length ||\n (numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length))))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length === alphaNumericMatch.length ||\n alphaNumericMatch.length >= minAlphaBeforeByte || previousMode === ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n\n return {\n mode: mode,\n modeString: modeString\n };\n}\n\nexport function getModes(inputString) {\n let modes = [],\n previousMode,\n idx = 0;\n let str = inputString;\n\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n\n while (str.length > 0) {\n let nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n\n if (nextMode.mode !== previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n\n str = str.substr(nextMode.modeString.length);\n }\n\n return modes;\n}\n\nexport function getDataCodewordsCount(modes) {\n let length = 0,\n mode;\n\n for (let i = 0; i < modes.length; i++) {\n mode = DataModeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n\n return Math.ceil(length / 8);\n}\n\nexport function getVersion(dataCodewordsCount, errorCorrectionLevel) {\n let x = 0,\n y = VersionsCodewordsInformation.length - 1,\n version = Math.floor(VersionsCodewordsInformation.length / 2);\n\n do {\n if (dataCodewordsCount < VersionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n\n if (dataCodewordsCount <= VersionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n\n return y + 1;\n}\n\nexport function getDataString(modes, version) {\n let dataString = \"\",\n mode;\n\n for (let i = 0; i < modes.length; i++) {\n mode = DataModeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n\n return dataString;\n}\n\n//fix case all zeros\nexport function encodeFormatInformation(format) {\n let formatNumber = toDecimal(format),\n encodedString,\n result = \"\";\n\n if (formatNumber === 0) {\n return \"101010000010010\";\n }\n\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n\n for (let i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n\n return result;\n}\n\nexport function encodeBCH(value, generatorPolynomial, codeLength) {\n let generatorNumber = toDecimal(generatorPolynomial),\n polynomialLength = generatorPolynomial.length - 1,\n valueNumber = value << polynomialLength,\n length = codeLength - polynomialLength,\n valueString = toBitsString(value, length),\n result = dividePolynomials(valueNumber, generatorNumber);\n\n result = valueString + toBitsString(result, polynomialLength);\n\n return result;\n}\n\nexport function dividePolynomials(numberX, numberY) {\n let yLength = numberY.toString(2).length,\n xLength = numberX.toString(2).length;\n let x = numberX;\n\n do {\n x ^= numberY << xLength - yLength;\n xLength = x.toString(2).length;\n }\n while (xLength >= yLength);\n\n return x;\n}\n\nexport function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n}\n\nexport function initMatrices(version) {\n let matrices = [],\n modules = 17 + 4 * version;\n\n for (let i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n\n for (let j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n\n return matrices;\n}\n\nexport function addFormatInformation(matrices, formatString) {\n let matrix = matrices[0],\n x,\n y,\n idx = 0,\n length = formatString.length;\n\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n\n idx = 0;\n\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n}\n\nexport function encodeVersionInformation(version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n}\n\nexport function addVersionInformation(matrices, dataString) {\n let matrix = matrices[0],\n modules = matrix.length,\n x1 = 0,\n y1 = modules - 11,\n x2 = modules - 11,\n y2 = 0,\n quotient,\n mod,\n value;\n\n for (let idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n}\n\nexport function addCentricPattern(matrices, pattern, x, y) {\n let size = pattern.length + 2,\n length = pattern.length + 1,\n value;\n\n for (let i = 0; i < pattern.length; i++) {\n for (let j = i; j < size - i; j++) {\n value = pattern[i];\n\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n}\n\nexport function addFinderSeparator(matrices, direction, x, y) {\n let nextX = x,\n nextY = y,\n matrix = matrices[0];\n\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n }\n while (nextX >= 0 && nextX < matrix.length);\n}\n\nexport function addFinderPatterns(matrices) {\n let modules = matrices[0].length;\n\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [-1, -1], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [1, -1], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [-1, 1], 7, modules - 8);\n}\n\nexport function addAlignmentPatterns(matrices, version) {\n if (version < 2) {\n return;\n }\n\n let matrix = matrices[0],\n modules = matrix.length,\n pointsCount = Math.floor(version / 7),\n points = [6],\n startDistance,\n distance,\n idx = 0;\n\n if ((startDistance = irregularAlignmentPatternsStartDistance[version])) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n\n points.push(points[idx++] + startDistance);\n\n while ((points[idx] + distance) < modules) {\n points.push(points[idx++] + distance);\n }\n\n for (let i = 0; i < points.length; i++) {\n for (let j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n}\n\nexport function addTimingFunctions(matrices) {\n let row = 6,\n column = 6,\n value = 1,\n modules = matrices[0].length;\n\n for (let i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n}\n\nexport function scoreMaskMatrixes(matrices) {\n let scores = [],\n previousBits = [],\n darkModules = [],\n patterns = [],\n adjacentSameBits = [],\n matrix,\n i,\n row = 0,\n column = 1,\n modulesLength = matrices[0].length;\n\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [0, 0];\n patterns[i] = [0, 0];\n previousBits[i] = [];\n }\n\n for (let rowIndex = 0; rowIndex < modulesLength; rowIndex++) {\n for (let columnIndex = 0; columnIndex < modulesLength; columnIndex++) {\n for (let matrixIndex = 0; matrixIndex < matrices.length; matrixIndex++) {\n matrix = matrices[matrixIndex];\n darkModules[matrixIndex] += parseInt(matrix[rowIndex][columnIndex], 10);\n\n if (previousBits[matrixIndex][row] === matrix[rowIndex][columnIndex] &&\n rowIndex + 1 < modulesLength &&\n columnIndex - 1 >= 0 &&\n matrix[rowIndex + 1][columnIndex] === previousBits[matrixIndex][row] &&\n matrix[rowIndex + 1][columnIndex - 1] === previousBits[matrixIndex][row]) {\n scores[matrixIndex] += 3;\n }\n\n scoreFinderPatternOccurance(matrixIndex, patterns, scores, row, matrix[rowIndex][columnIndex]);\n scoreFinderPatternOccurance(matrixIndex, patterns, scores, column, matrix[columnIndex][rowIndex]);\n scoreAdjacentSameBits(matrixIndex, scores, previousBits, matrix[rowIndex][columnIndex], adjacentSameBits, row);\n scoreAdjacentSameBits(matrixIndex, scores, previousBits, matrix[columnIndex][rowIndex], adjacentSameBits, column);\n }\n }\n }\n\n let total = modulesLength * modulesLength,\n minIdx,\n min = Number.MAX_VALUE;\n\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n\n return minIdx;\n}\n\nexport function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = ((patterns[idx][rowColumn] << 1) ^ bit) % 128;\n\n if (patterns[idx][rowColumn] === finderPatternValue) {\n scores[idx] += 40;\n }\n}\n\nexport function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] === bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n\n adjacentBits[idx][rowColumn] = 1;\n }\n}\n\nexport function calculateDarkModulesRatioScore(darkModules, total) {\n let percent = Math.floor((darkModules / total) * 100),\n mod5 = percent % 5,\n previous = Math.abs(percent - mod5 - 50),\n next = Math.abs(percent + 5 - mod5 - 50),\n score = 10 * Math.min(previous / 5, next / 5);\n\n return score;\n}\n\nexport function createQRCodeDataEncoder(encoding) {\n if (encoding && encoding.toLowerCase().indexOf(\"utf_8\") >= 0) {\n return new Utf8Encoder();\n }\n\n return new IsoEncoder();\n}\n\nexport function encodeData(inputString, errorCorrectionLevel, encoding) {\n let encoder = createQRCodeDataEncoder(encoding),\n encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel),\n version = encodingResult.version,\n versionInformation = VersionsCodewordsInformation[version - 1][errorCorrectionLevel],\n dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords),\n blocks = getBlocks(dataString, versionInformation),\n matrices = initMatrices(version);\n\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n\n let minIdx = scoreMaskMatrixes(matrices),\n optimalMatrix = matrices[minIdx];\n\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n\n let formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n\n return optimalMatrix;\n}\n","import { Class } from '../../../common';\nimport { extend } from '../../utils';\nimport {\n toBitsString\n} from '../../utils';\n\nexport class QRDataMode extends Class {\n constructor() {\n super();\n\n this.initProperties();\n }\n\n initProperties() {\n extend(this, {\n modeIndicator: \"\",\n bitsInCharacterCount: []\n });\n }\n\n getVersionIndex(version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n\n return 1;\n }\n\n getBitsCharacterCount(version) {\n return this.bitsInCharacterCount[this.getVersionIndex(version || 40)];\n }\n\n getModeCountString(length, version) {\n return this.modeIndicator + toBitsString(length, this.getBitsCharacterCount(version));\n }\n\n encode() { }\n\n getStringBitsLength() { }\n\n getValue() { }\n}\n","import { NumericQRDataMode } from './numeric-data-mode';\nimport { AlphaNumericQRDataMode } from './alpha-numeric-data-mode';\nimport { ByteQRDataMode } from './byte-data-mode';\n\nconst NUMERIC = \"numeric\";\nconst ALPHA_NUMERIC = \"alphanumeric\";\nconst BYTE = \"byte\";\n\nexport let DataModeInstances = {\n [NUMERIC]: new NumericQRDataMode(),\n [ALPHA_NUMERIC]: new AlphaNumericQRDataMode(),\n [BYTE]: new ByteQRDataMode()\n};\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n toBitsString,\n splitInto\n} from '../../utils';\n\nexport class NumericQRDataMode extends QRDataMode {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n bitsInCharacterCount: [10, 12, 14],\n modeIndicator: \"0001\"\n });\n }\n\n getValue(character) {\n return parseInt(character, 10);\n }\n\n encode(str, version) {\n let mode = this,\n parts = splitInto(str, 3),\n result = mode.getModeCountString(str.length, version);\n let i;\n\n for (i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n }\n\n getStringBitsLength(inputLength, version) {\n let mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n}\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n toBitsString,\n splitInto\n} from '../../utils';\n\nexport class AlphaNumericQRDataMode extends QRDataMode {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n characters: {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n \"A\": 10,\n \"B\": 11,\n \"C\": 12,\n \"D\": 13,\n \"E\": 14,\n \"F\": 15,\n \"G\": 16,\n \"H\": 17,\n \"I\": 18,\n \"J\": 19,\n \"K\": 20,\n \"L\": 21,\n \"M\": 22,\n \"N\": 23,\n \"O\": 24,\n \"P\": 25,\n \"Q\": 26,\n \"R\": 27,\n \"S\": 28,\n \"T\": 29,\n \"U\": 30,\n \"V\": 31,\n \"W\": 32,\n \"X\": 33,\n \"Y\": 34,\n \"Z\": 35,\n \" \": 36,\n \"$\": 37,\n \"%\": 38,\n \"*\": 39,\n \"+\": 40,\n \"-\": 41,\n \".\": 42,\n \"/\": 43,\n \":\": 44\n },\n bitsInCharacterCount: [9, 11, 13],\n modeIndicator: \"0010\"\n });\n }\n\n getValue(character) {\n return this.characters[character];\n }\n\n encode(str, version) {\n let\n parts = splitInto(str, 2),\n result = this.getModeCountString(str.length, version),\n value;\n let i;\n\n for (i = 0; i < parts.length - 1; i++) {\n value = 45 * this.getValue(parts[i].charAt(0)) + this.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n\n value = parts[i].length === 2 ?\n 45 * this.getValue(parts[i].charAt(0)) + this.getValue(parts[i].charAt(1)) :\n this.getValue(parts[i].charAt(0));\n\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n }\n\n getStringBitsLength(inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n}\n","import { QRDataMode } from './qr-data-mode';\nimport { extend } from '../../utils';\nimport {\n toBitsString\n} from '../../utils';\n\nexport class ByteQRDataMode extends QRDataMode {\n initProperties() {\n super.initProperties();\n\n extend(this, {\n bitsInCharacterCount: [8, 16, 16],\n modeIndicator: \"0100\"\n });\n }\n\n getValue(character) {\n let code = character.charCodeAt(0);\n\n if (code <= 127 || (160 <= code && code <= 255)) {\n return code;\n }\n\n throw new Error(`Unsupported character in QR Code: \"${character}\".`);\n }\n\n encode(str, version) {\n let mode = this,\n result = mode.getModeCountString(str.length, version);\n\n for (let i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n\n return result;\n }\n\n getStringBitsLength(inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n}\n","import { Class } from '../../../common';\nimport { EncodingResult } from '../encoding-result';\nimport { DataModeInstances } from '../data-modes/data-mode-instances';\nimport { extend } from '../../utils';\nimport { toBitsString } from '../../utils';\nimport { getVersion } from '../encoding';\n\nconst BYTE = \"byte\";\n\nexport class Utf8Encoder extends Class {\n constructor() {\n super();\n\n this.initProperties();\n\n this.mode = DataModeInstances[this.encodingMode];\n }\n\n initProperties() {\n extend(this, {\n encodingMode: BYTE,\n utfBOM: \"111011111011101110111111\",\n initialModeCountStringLength: 20,\n ranges: [128, 2048, 65536, 2097152, 67108864]\n });\n }\n\n getEncodingResult(inputString, errorCorrectionLevel) {\n let data = this.encode(inputString),\n dataCodewordsCount = this.getDataCodewordsCount(data),\n version = getVersion(dataCodewordsCount, errorCorrectionLevel),\n dataString = this.mode.getModeCountString(data.length / 8, version) + data;\n\n return new EncodingResult(dataString, version);\n }\n\n getDataCodewordsCount(data) {\n let dataLength = data.length,\n dataCodewordsCount = Math.ceil((this.initialModeCountStringLength + dataLength) / 8);\n\n return dataCodewordsCount;\n }\n\n encode(str) {\n let result = this.utfBOM;\n\n for (let i = 0; i < str.length; i++) {\n result += this.encodeCharacter(str.charCodeAt(i));\n }\n\n return result;\n }\n\n encodeCharacter(code) {\n let bytesCount = this.getBytesCount(code),\n bc = bytesCount - 1,\n result = \"\";\n\n if (bytesCount === 1) {\n result = toBitsString(code, 8);\n } else {\n let significantOnes = 8 - bytesCount;\n\n for (let i = 0; i < bc; i++) {\n result = toBitsString(code >> (i * 6) & 63 | 128, 8) + result;\n }\n\n result = ((code >> bc * 6) | ((255 >> significantOnes) << significantOnes)).toString(2) + result;\n }\n\n return result;\n }\n\n getBytesCount(code) {\n let ranges = this.ranges;\n\n for (let i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n }\n}\n","export const VersionsCodewordsInformation = [{\n L: {\n groups: [\n [1, 19]\n ],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [\n [1, 16]\n ],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [\n [1, 13]\n ],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [\n [1, 9]\n ],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n}, {\n L: {\n groups: [\n [1, 34]\n ],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [\n [1, 28]\n ],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [\n [1, 22]\n ],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [1, 16]\n ],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [1, 55]\n ],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [\n [1, 44]\n ],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [2, 17]\n ],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [2, 13]\n ],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n}, {\n L: {\n groups: [\n [1, 80]\n ],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [2, 32]\n ],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [2, 24]\n ],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [4, 9]\n ],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n}, {\n L: {\n groups: [\n [1, 108]\n ],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [2, 43]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [2, 15],\n [2, 16]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [2, 11],\n [2, 12]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n}, {\n L: {\n groups: [\n [2, 68]\n ],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [4, 27]\n ],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [\n [4, 19]\n ],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [4, 15]\n ],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [2, 78]\n ],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [4, 31]\n ],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [2, 14],\n [4, 15]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [4, 13],\n [1, 14]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n}, {\n L: {\n groups: [\n [2, 97]\n ],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [2, 38],\n [2, 39]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [4, 18],\n [2, 19]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [4, 14],\n [2, 15]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n}, {\n L: {\n groups: [\n [2, 116]\n ],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [3, 36],\n [2, 37]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [4, 16],\n [4, 17]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [4, 12],\n [4, 13]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [2, 68],\n [2, 69]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [4, 43],\n [1, 44]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [6, 19],\n [2, 20]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [6, 15],\n [2, 16]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [4, 81]\n ],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [1, 50],\n [4, 51]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [4, 22],\n [4, 23]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [3, 12],\n [8, 13]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [2, 92],\n [2, 93]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [6, 36],\n [2, 37]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [4, 20],\n [6, 21]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [7, 14],\n [4, 15]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [4, 107]\n ],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [8, 37],\n [1, 38]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [8, 20],\n [4, 21]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [12, 11],\n [4, 12]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n}, {\n L: {\n groups: [\n [3, 115],\n [1, 116]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [4, 40],\n [5, 41]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [11, 16],\n [5, 17]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [11, 12],\n [5, 13]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [5, 87],\n [1, 88]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [5, 41],\n [5, 42]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [5, 24],\n [7, 25]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [11, 12],\n [7, 13]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [5, 98],\n [1, 99]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [7, 45],\n [3, 46]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [15, 19],\n [2, 20]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [3, 15],\n [13, 16]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [1, 107],\n [5, 108]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [10, 46],\n [1, 47]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [1, 22],\n [15, 23]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [2, 14],\n [17, 15]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [5, 120],\n [1, 121]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [9, 43],\n [4, 44]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [17, 22],\n [1, 23]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [2, 14],\n [19, 15]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [3, 113],\n [4, 114]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [3, 44],\n [11, 45]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [17, 21],\n [4, 22]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [9, 13],\n [16, 14]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n}, {\n L: {\n groups: [\n [3, 107],\n [5, 108]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [3, 41],\n [13, 42]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [15, 24],\n [5, 25]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [15, 15],\n [10, 16]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n}, {\n L: {\n groups: [\n [4, 116],\n [4, 117]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [17, 42]\n ],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [17, 22],\n [6, 23]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [19, 16],\n [6, 17]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [2, 111],\n [7, 112]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [17, 46]\n ],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [7, 24],\n [16, 25]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [34, 13]\n ],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n}, {\n L: {\n groups: [\n [4, 121],\n [5, 122]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [4, 47],\n [14, 48]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [11, 24],\n [14, 25]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [16, 15],\n [14, 16]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [6, 117],\n [4, 118]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [6, 45],\n [14, 46]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [11, 24],\n [16, 25]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [30, 16],\n [2, 17]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [8, 106],\n [4, 107]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [8, 47],\n [13, 48]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [7, 24],\n [22, 25]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [22, 15],\n [13, 16]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [10, 114],\n [2, 115]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [19, 46],\n [4, 47]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [28, 22],\n [6, 23]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [33, 16],\n [4, 17]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [8, 122],\n [4, 123]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [22, 45],\n [3, 46]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [8, 23],\n [26, 24]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [12, 15],\n [28, 16]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [3, 117],\n [10, 118]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [3, 45],\n [23, 46]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [4, 24],\n [31, 25]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [11, 15],\n [31, 16]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [7, 116],\n [7, 117]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [21, 45],\n [7, 46]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [1, 23],\n [37, 24]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [19, 15],\n [26, 16]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [5, 115],\n [10, 116]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [19, 47],\n [10, 48]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [15, 24],\n [25, 25]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [23, 15],\n [25, 16]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [13, 115],\n [3, 116]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [2, 46],\n [29, 47]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [42, 24],\n [1, 25]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [23, 15],\n [28, 16]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [17, 115]\n ],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [10, 46],\n [23, 47]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [10, 24],\n [35, 25]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [19, 15],\n [35, 16]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [17, 115],\n [1, 116]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [14, 46],\n [21, 47]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [29, 24],\n [19, 25]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [11, 15],\n [46, 16]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [13, 115],\n [6, 116]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [14, 46],\n [23, 47]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [44, 24],\n [7, 25]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [59, 16],\n [1, 17]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [12, 121],\n [7, 122]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [12, 47],\n [26, 48]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [39, 24],\n [14, 25]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [22, 15],\n [41, 16]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [6, 121],\n [14, 122]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [6, 47],\n [34, 48]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [46, 24],\n [10, 25]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [2, 15],\n [64, 16]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [17, 122],\n [4, 123]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [29, 46],\n [14, 47]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [49, 24],\n [10, 25]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [24, 15],\n [46, 16]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [4, 122],\n [18, 123]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [13, 46],\n [32, 47]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [48, 24],\n [14, 25]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [42, 15],\n [32, 16]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [20, 117],\n [4, 118]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [40, 47],\n [7, 48]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [43, 24],\n [22, 25]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [10, 15],\n [67, 16]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n}, {\n L: {\n groups: [\n [19, 118],\n [6, 119]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [18, 47],\n [31, 48]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [34, 24],\n [34, 25]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [20, 15],\n [61, 16]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n}];\n","import {\n geometry as geom,\n drawing as draw\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n addClass,\n setDefaultOptions,\n deepExtend,\n defaultErrorHandler\n} from '../common';\n\nimport { Box } from '../core';\nimport { encodeData } from './encodings/encoding';\nimport { extend } from './utils';\n\nimport { surfaceSize } from '../barcode/surface-size';\n\nconst round = Math.round;\nconst crossPattern = [[0, 1], [1, 1], [1, 2], [2, 2], [2, 1], [3, 1], [3, 0], [2, 0], [2, -1], [1, -1], [1, 0]];\nconst squarePattern = [[0, 1], [1, 1], [1, 0]];\n\nconst QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: \"L\",\n DEFAULT_BACKGROUND: \"#fff\",\n DEFAULT_DARK_MODULE_COLOR: \"#000\",\n MIN_BASE_UNIT_SIZE: 1,\n DEFAULT_LOGO_SIZE: 7\n};\n\nclass QRCode extends Class {\n constructor(element, options, errorHandler = defaultErrorHandler) {\n super();\n\n this.options = deepExtend({}, this.options, options);\n this.element = element;\n this.wrapper = this.element;\n this.onError = errorHandler;\n\n this._initElement();\n this._initSurface();\n\n this.setOptions(options);\n }\n\n destroy() {\n this._destroySurface();\n }\n\n _initElement() {\n addClass(this.element, \"k-qrcode\");\n }\n\n _initSurface() {\n const { options, surface } = this;\n\n if (!surface || surface.options.type !== options.renderAs) {\n this._destroySurface();\n this._initSurfaceElement();\n this.surface = this._createSurface();\n }\n }\n\n _createSurface() {\n return draw.Surface.create(this.surfaceElement, {\n type: this.options.renderAs\n });\n }\n\n _destroySurface() {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n this._destroySurfaceElement();\n }\n }\n\n _initSurfaceElement() {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.surfaceElement.style.position = \"relative\";\n this.element.appendChild(this.surfaceElement);\n }\n }\n\n _destroySurfaceElement() {\n if (this.surfaceElement && this.surfaceElement.parentNode) {\n this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n this.surfaceElement = null;\n }\n }\n\n redraw() {\n let size = this._getSize();\n\n this.surface.clear();\n\n this.surface.setSize({\n width: size,\n height: size\n });\n\n this.createVisual();\n\n this.surface.draw(this.visual);\n }\n\n getSize() {\n const element = this.element;\n const elementWidth = element.clientWidth;\n const elementHeight = element.clientHeight;\n const size = { width: 0, height: 0 };\n\n if (elementWidth > 0) {\n size.width = elementWidth;\n }\n\n if (elementHeight) {\n size.height = elementHeight;\n }\n\n return size;\n }\n\n _resize() {\n this.redraw();\n }\n\n createVisual() {\n this.visual = this._render();\n }\n\n exportVisual() {\n return this._render();\n }\n\n _render() {\n let value = this._value,\n baseUnit,\n border = this.options.border || {},\n padding = this.options.padding || 0,\n borderWidth = border.width || 0,\n quietZoneSize,\n matrix,\n size,\n dataSize,\n contentSize;\n\n border.width = borderWidth;\n\n let visual = new draw.Group();\n\n try {\n if (value) {\n matrix = encodeData(value, this.options.errorCorrection, this.options.encoding);\n size = this._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = this._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n\n visual.append(this._renderBackground(size, border));\n visual.append(this._renderMatrix(matrix, baseUnit, quietZoneSize));\n\n if (this._hasCustomLogo()) {\n visual.append(this._renderLogo(size, baseUnit));\n } else if (this._isSwiss()) {\n visual.append(this._renderSwissCode(size, baseUnit));\n }\n }\n } catch (error) {\n this.onError(error);\n }\n\n return visual;\n }\n\n _renderLogo(qrSize, baseUnit) {\n let image;\n let imageRect;\n let center = round(qrSize / 2);\n let logoSize = this._getLogoSize(baseUnit * QRCodeDefaults.DEFAULT_LOGO_SIZE);\n let logoUrl = this.options.overlay.imageUrl;\n let position = {\n x: center - logoSize.width / 2,\n y: center - logoSize.height / 2\n };\n\n imageRect = new geom.Rect(\n new geom.Point(position.x, position.y),\n new geom.Size(logoSize.width, logoSize.height)\n );\n\n image = new draw.Image(logoUrl, imageRect);\n\n return image;\n }\n\n _renderSwissCode(qrSize, baseUnit) {\n let logoSize = this._getLogoSize(baseUnit * QRCodeDefaults.DEFAULT_LOGO_SIZE);\n logoSize = Math.max(logoSize.width, logoSize.height);\n let crossSize = logoSize / 4;\n let crossOffset = crossSize / 2;\n let center = qrSize / 2;\n let start = {};\n let visual = new draw.Group();\n\n start.x = start.y = Math.ceil(center - baseUnit - logoSize / 2);\n visual.append(this._renderShape(start, Math.ceil(logoSize + baseUnit * 2), squarePattern, \"#fff\"));\n\n start.x = start.y = center - logoSize / 2;\n visual.append(this._renderShape(start, logoSize, squarePattern, this.options.color));\n\n start.x = center + crossOffset - logoSize / 2;\n start.y = center + crossOffset + crossSize - logoSize / 2;\n visual.append(this._renderShape(start, crossSize, crossPattern, \"#fff\"));\n\n return visual;\n }\n\n _renderShape(start, step, pattern, color) {\n let path = new draw.MultiPath({\n fill: {\n color: color\n },\n stroke: null\n });\n\n path.moveTo(start.x, start.y);\n\n for (let i = 0; i < pattern.length; i++) {\n path.lineTo(start.x + step * pattern[i][0], start.y + step * pattern[i][1]);\n }\n\n path.close();\n\n return path;\n }\n\n _getSize() {\n let size;\n\n if (this.options.size) {\n size = parseInt(this.options.size, 10);\n } else {\n const element = this.element;\n const elementSize = surfaceSize(element, this.options.renderAs);\n const min = Math.min(elementSize.width, elementSize.height);\n\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n\n return size;\n }\n\n _calculateBaseUnit(size, matrixSize) {\n let baseUnit = Math.floor(size / matrixSize);\n\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n const minSize = Math.ceil(matrixSize * QRCodeDefaults.MIN_BASE_UNIT_SIZE);\n this.onError(new Error(\n `Insufficient size for QR Code: the current size is ${size}px and the minimum size is ${minSize}px.`\n ));\n } else if (baseUnit * matrixSize >= size &&\n baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n\n return baseUnit;\n }\n\n _renderMatrix(matrix, baseUnit, quietZoneSize) {\n let path = new draw.MultiPath({\n fill: {\n color: this.options.color\n },\n stroke: null\n });\n\n for (let row = 0; row < matrix.length; row++) {\n let y = quietZoneSize + row * baseUnit;\n let column = 0;\n\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n\n if (column < matrix.length) {\n let x = column;\n while (matrix[row][column] === 1) {\n column++;\n }\n\n let x1 = round(quietZoneSize + x * baseUnit);\n let y1 = round(y);\n let x2 = round(quietZoneSize + column * baseUnit);\n let y2 = round(y + baseUnit);\n\n path.moveTo(x1, y1)\n .lineTo(x1, y2)\n .lineTo(x2, y2)\n .lineTo(x2, y1)\n .close();\n }\n }\n }\n\n return path;\n }\n\n _renderBackground(size, border) {\n const box = new Box(0, 0, size, size).unpad(border.width / 2);\n const background = draw.Path.fromRect(box.toRect(), {\n fill: {\n color: this.options.background\n },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n\n return background;\n }\n\n setOptions(options) {\n let newOptions = options || {};\n this.options = extend(this.options, newOptions);\n\n if (options.value !== undefined) {\n this._value = String(this.options.value);\n }\n\n this._initSurface();\n this.redraw();\n }\n\n value(value) {\n if (value === undefined) {\n return this._value;\n }\n\n this._value = String(value);\n\n this.redraw();\n }\n\n _hasCustomLogo() {\n return Boolean(this.options.overlay.imageUrl);\n }\n\n _isSwiss() {\n return this.options.overlay.type === \"swiss\";\n }\n\n _getLogoSize(defautLogoSize) {\n let width = this.options.overlay.width;\n let height = this.options.overlay.height;\n\n if (!width && !height) {\n width = height = defautLogoSize;\n } else if (width && !height) {\n height = width;\n } else if (!width && height) {\n width = height;\n }\n\n return {\n width: width,\n height: height\n };\n }\n}\n\nsetDefaultOptions(QRCode, {\n name: \"QRCode\",\n renderAs: \"svg\",\n encoding: \"ISO_8859_1\",\n value: \"\",\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: \"\",\n padding: 0,\n border: {\n color: \"\",\n width: 0\n },\n overlay: {\n type: \"image\",\n imageUrl: \"\",\n width: 0,\n height: 0\n }\n});\n\nexport default QRCode;\n","import { encodeData } from './encodings/encoding';\n\nconst ISO = 'ISO_8859_1';\n\nfunction qrcodeValidator(encoding = ISO) {\n return function(value) {\n try {\n encodeData(value, 'L', encoding);\n } catch (error) {\n return {\n valid: false,\n error\n };\n }\n\n return {\n valid: true\n };\n };\n}\n\nexport default qrcodeValidator;\n","// Coordinate reference system\n// World Geodetic System of 1984\nconst WGS84 = {\n a: 6378137, // Semi-major radius\n b: 6356752.314245179, // Semi-minor radius\n f: 0.0033528106647474805, // Flattening\n e: 0.08181919084262149 // Eccentricity\n};\n\n// Geographic coordinate systems use a spheroid to calculate positions on the earth.\n// A datum defines the position of the spheroid relative to the center of the earth\n// it provides a frame of reference for measuring locations on the surface of the earth\n// and defines the origin and orientation of latitude and longitude lines.\nexport const datums = {\n WGS84\n};\n","import {\n Class,\n deepExtend,\n deg,\n rad,\n round,\n defined\n} from '../common';\n\nimport {\n datums\n} from './datums';\n\nfunction toSquare(value) {\n return value * value;\n}\n\n\nlet math = Math,\n abs = math.abs,\n atan = math.atan,\n atan2 = math.atan2,\n cos = math.cos,\n sin = math.sin,\n tan = math.tan;\n\nexport class Location extends Class {\n constructor(lat, lng) {\n super();\n\n this.initProperties();\n\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n }\n\n initProperties() {\n deepExtend(this, {\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6}{1:N6}'\n });\n }\n\n toArray() {\n return [\n this.lat,\n this.lng\n ];\n }\n\n equals(loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n }\n\n clone() {\n return new Location(this.lat, this.lng);\n }\n\n round(precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n }\n\n wrap() {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n }\n\n distanceTo(dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n }\n\n destination(distance, initialBearing, initialDatum) {\n let bearing = rad(initialBearing);\n let datum = initialDatum || datums.WGS84;\n let fromLat = rad(this.lat);\n let fromLng = rad(this.lng);\n let dToR = distance / datum.a;\n let lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n let lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n\n return new Location(deg(lat), deg(lng));\n }\n\n greatCircleTo(initialDest, initialDatum) {\n let dest = Location.create(dest);\n let datum = initialDatum || datums.WGS84;\n\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n\n // See http://en.wikipedia.org/wiki/Vincenty's_formulae#Notation\n // o == sigma\n // A == alpha\n\n let a = datum.a;\n let b = datum.b;\n let f = datum.f;\n let L = rad(dest.lng - this.lng);\n let U1 = atan((1 - f) * tan(rad(this.lat)));\n let sinU1 = sin(U1);\n let cosU1 = cos(U1);\n let U2 = atan((1 - f) * tan(rad(dest.lat)));\n let sinU2 = sin(U2);\n let cosU2 = cos(U2);\n let lambda = L;\n let prevLambda;\n let i = this.DISTANCE_ITERATIONS;\n let converged = false;\n let sinLambda;\n let cosLambda;\n let sino;\n let cosA2;\n let coso;\n let cos2om;\n let sigma;\n\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(toSquare(cosU2 * sinLambda) + toSquare(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n\n let sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - toSquare(sinA);\n cos2om = 0;\n\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n\n prevLambda = lambda;\n let C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * toSquare(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n\n let u2 = cosA2 * (toSquare(a) - toSquare(b)) / toSquare(b);\n let A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n let B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n let deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * toSquare(cos2om)) - B / 6 * cos2om * (-3 + 4 * toSquare(sino)) * (-3 + 4 * toSquare(cos2om))));\n\n let azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n let azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n\n // IE < 9 doesn't allow to override toString on definition\n toString() {\n // return kendo.format(this.FORMAT, this.lat, this.lng);\n return String(this.lat) + \",\" + String(this.lng);\n }\n\n static fromLngLat(lngAndLat) {\n return new Location(lngAndLat[1], lngAndLat[0]);\n }\n\n static fromLatLng(lngAndLat) {\n return new Location(lngAndLat[0], lngAndLat[1]);\n }\n\n static create(a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n }\n\n return new Location(a, b);\n }\n }\n}\n","import {\n geometry as g\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n setDefaultOptions,\n limitValue,\n rad,\n deg,\n deepExtend\n} from '../common';\n\nimport {\n Location\n} from './location';\n\nimport {\n datums\n} from './datums';\n\n\nlet math = Math,\n atan = math.atan,\n exp = math.exp,\n pow = math.pow,\n sin = math.sin,\n log = math.log,\n tan = math.tan,\n Point = g.Point;\n\nlet PI = math.PI,\n PI_DIV_2 = PI / 2,\n PI_DIV_4 = PI / 4,\n DEG_TO_RAD = PI / 180;\n\nlet WGS84 = datums.WGS84;\n\n// WGS 84 / World Mercator\nexport class Mercator extends Class {\n constructor(options) {\n super();\n this.initProperties();\n this._initOptions(options);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n initProperties() {\n // super.initProperties();\n\n deepExtend(this, {\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12\n });\n }\n\n forward(loc, clamp) {\n let proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lat = limitValue(loc.lat, -proj.MAX_LAT, proj.MAX_LAT),\n lng = clamp ? limitValue(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng,\n x = rad(lng - lng0) * r,\n y = proj._projectLat(lat);\n return new Point(x, y);\n }\n _projectLat(lat) {\n let datum = this.options.datum,\n ecc = datum.e,\n r = datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2),\n con = ecc * sin(y),\n p = pow((1 - con) / (1 + con), ecc / 2);\n\n // See: http://en.wikipedia.org/wiki/Mercator_projection#Generalization_to_the_ellipsoid\n return r * log(ts * p);\n }\n inverse(point, clamp) {\n let proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lng = point.x / (DEG_TO_RAD * r) + lng0,\n lat = limitValue(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limitValue(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n }\n _inverseY(y) {\n let proj = this,\n datum = proj.options.datum,\n r = datum.a,\n ecc = datum.e,\n ecch = ecc / 2,\n ts = exp(-y / r),\n phi = PI_DIV_2 - 2 * atan(ts),\n i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n let con = ecc * sin(phi),\n p = pow((1 - con) / (1 + con), ecch),\n dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n}\n\nsetDefaultOptions(Mercator, {\n centralMeridian: 0,\n datum: WGS84\n});\n\n\n// WGS 84 / Pseudo-Mercator\n// Used by Google Maps, Bing, OSM, etc.\n// Spherical projection of ellipsoidal coordinates.\nexport class SphericalMercator extends Mercator {\n initProperties() {\n super.initProperties();\n\n deepExtend(this, {\n MAX_LAT: 85.0511287798\n });\n }\n\n _projectLat(lat) {\n let r = this.options.datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n }\n\n _inverseY(y) {\n let r = this.options.datum.a,\n ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n}\n\nexport class Equirectangular extends Class {\n forward(loc) {\n return new Point(loc.lng, loc.lat);\n }\n inverse(point) {\n return new Location(point.y, point.x);\n }\n}\n\n// This is the projected coordinate system used for rendering maps in Google Maps, OpenStreetMap, etc\n// Unit: metre\n// Geodetic CRS: WGS 84\n// Scope: Certain Web mapping and visualisation applications. It is not a recognised geodetic system: for that see ellipsoidal Mercator CRS code 3395 (WGS 84 / World Mercator).\n// Remarks: Uses spherical development of ellipsoidal coordinates. Relative to WGS 84 / World Mercator (CRS code 3395) errors of 0.7 percent in scale and differences in northing of up to 43km in the map (equivalent to 21km on the ground) may arise.\n// Area of use: World between 85.06°S and 85.06°N.\n// Coordinate system: Cartesian 2D CS. Axes: easting, northing (X,Y). Orientations: east, north. UoM: m.\n// https://epsg.io/3857\nexport class EPSG3857 extends Class {\n constructor() {\n super();\n let crs = this,\n proj = crs._proj = new SphericalMercator();\n let c = this.c = 2 * PI * proj.options.datum.a;\n\n // transfrom matrix\n // Scale circumference to 1, mirror Y and shift origin to top left\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n\n // Inverse transform matrix\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n }\n\n // Location <-> Point (screen coordinates for a given scale)\n toPoint(loc, scale, clamp) {\n let point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n }\n toLocation(point, scale, clamp) {\n let newPoint = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(newPoint, clamp);\n }\n}\n\n// Unit: metre\n// Geodetic CRS: WGS 84\n// Scope: Very small scale mapping.\n// Remarks: Euro-centric view of world excluding polar areas.\n// Area of use: World between 80°S and 84°N.\n// Coordinate system: Cartesian 2D CS. Axes: easting, northing (E,N). Orientations: east, north. UoM: m.\n// https://epsg.io/3395\nexport class EPSG3395 extends Class {\n constructor() {\n super();\n this._proj = new Mercator();\n }\n toPoint(loc) {\n return this._proj.forward(loc);\n }\n toLocation(point) {\n return this._proj.inverse(point);\n }\n}\n\n// Unit: degree\n// Geodetic CRS: WGS 84\n// Scope: Horizontal component of 3D system. Used by the GPS satellite navigation system and for NATO military geodetic surveying.\n// Area of use: World.\n// Coordinate system: Ellipsoidal 2D CS. Axes: latitude, longitude. Orientations: north, east. UoM: degree\n// https://epsg.io/4326\nexport class EPSG4326 extends Class {\n constructor() {\n super();\n this._proj = new Equirectangular();\n }\n toPoint(loc) {\n return this._proj.forward(loc);\n }\n toLocation(point) {\n return this._proj.inverse(point);\n }\n}\n","import {\n isFunction,\n isArray\n} from '../common';\n\n/* eslint-disable arrow-body-style */\n\nconst defineProperty = Object.defineProperty;\n\nexport const extend = Object.assign;\n\nexport let convertToHtml = (html) => {\n const div = document.createElement(\"div\");\n div.innerHTML = html;\n return div.firstChild;\n};\n\nexport let appendHtml = (html, element) => {\n const div = document.createElement('div');\n div.innerHTML = html;\n\n // use childNodes instead of children\n // to cover text nodes as well\n while (div.childNodes.length > 0) {\n element.appendChild(div.childNodes[0]);\n }\n};\n\nexport let removeChildren = (element) => {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n};\n\nexport let prepend = (element, originElement) => {\n originElement.insertBefore(element, originElement.firstChild);\n};\n\nexport let wrapInner = (parent, wrapper) => {\n parent.appendChild(wrapper);\n\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n};\n\nexport let toHyphens = (str) => {\n const result = str.replace(/([a-z][A-Z])/g, function(g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n\n return result;\n};\n\nexport let toPixels = (value) => {\n let result;\n\n if (value && String(value).endsWith(\"px\")) {\n result = value;\n } else {\n result = String(value) + \"px\";\n }\n\n return result;\n};\n\nconst detectOS = (ua) => {\n let os = false, minorVersion, match = [],\n // notAndroidPhone = !/mobile safari/i.test(ua),\n agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n },\n osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n },\n formFactorRxs = {\n tablet: /playbook|ipad|fire/i\n },\n browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n\n for (let agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent === \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\n\n os = {};\n os.device = agent;\n os.tablet = testRegex(agent, formFactorRxs, false);\n os.browser = testRegex(ua, browserRxs, \"default\");\n os.name = testRegex(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = (match[3] || \"0\").replace(\"_\", \".\");\n minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\n\n\n break;\n }\n }\n }\n\n return os;\n};\n\nfunction testRegex(agent, regexes, dflt) {\n for (let regex in regexes) {\n if (regexes.hasOwnProperty(regex) && regexes[regex].test(agent)) {\n return regex;\n }\n }\n return dflt !== undefined ? dflt : agent;\n}\n\nexport let hasNativeScrolling = (userAgent) => {\n const os = detectOS(userAgent);\n return os.ios || os.android;\n};\n\nconst detectBrowser = (userAgent) => {\n let browser = false,\n match = [],\n browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome|crios)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n\n for (let agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = userAgent.match(browserRxs[agent]);\n\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n\n break;\n }\n }\n }\n\n return browser;\n};\n\nexport let getEventMap = () => {\n let eventMap = {\n down: \"touchstart mousedown\",\n move: \"mousemove touchmove\",\n up: \"mouseup touchend touchcancel\",\n cancel: \"mouseleave touchcancel\"\n };\n\n const support = getSupportedFeatures();\n\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: \"touchstart\",\n move: \"touchmove\",\n up: \"touchend touchcancel\",\n cancel: \"touchcancel\"\n };\n } else if (support.pointers) {\n eventMap = {\n down: \"pointerdown\",\n move: \"pointermove\",\n up: \"pointerup\",\n cancel: \"pointercancel pointerleave\"\n };\n } else if (support.msPointers) {\n eventMap = {\n down: \"MSPointerDown\",\n move: \"MSPointerMove\",\n up: \"MSPointerUp\",\n cancel: \"MSPointerCancel MSPointerLeave\"\n };\n }\n\n return eventMap;\n};\n\nexport const getSupportedFeatures = () => {\n const os = detectOS(navigator.userAgent);\n const browser = detectBrowser(navigator.userAgent);\n\n let chrome = browser.chrome,\n mobileChrome = browser.crios,\n mozilla = browser.mozilla,\n safari = browser.safari;\n\n const support = {};\n\n support.mobileOS = os;\n support.touch = \"ontouchstart\" in window;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.eventCapture = document.documentElement.addEventListener;\n\n let table = document.createElement(\"table\");\n\n let transitions = support.transitions = false,\n transforms = support.transforms = false;\n\n const STRING = \"string\";\n\n [\"Moz\", \"webkit\", \"O\", \"ms\"].forEach(function(prefix) {\n let hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\n\n if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\n let lowPrefix = prefix.toLowerCase();\n\n transforms = {\n css: (lowPrefix !== \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\n prefix: prefix,\n event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\n };\n\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\n }\n\n return false;\n }\n });\n\n table = null;\n\n support.transforms = transforms;\n support.transitions = transitions;\n\n support.delayedClick = function() {\n // only the mobile devices with touch events do this.\n if (support.touch) {\n // All iOS devices so far (by the time I am writing this, iOS 9.0.2 is the latest),\n // delay their click events.\n if (support.mobileOS.ios) {\n return true;\n }\n\n if (support.mobileOS.android) {\n\n if (!support.browser.chrome) { // older webkits and webviews delay the click\n return true;\n }\n\n // from here on, we deal with Chrome on Android.\n if (support.browser.version < 32) {\n return false;\n }\n\n // Chrome 32+ does conditional fast clicks if the view port is not user scalable.\n const meta = document.querySelector(\"meta[name=viewport]\");\n const contentAttr = meta ? meta.getAttribute(\"content\") : \"\";\n return !contentAttr.match(/user-scalable=no/i);\n }\n }\n\n return false;\n };\n\n return support;\n};\n\nexport const ownsElement = (parent, element) => {\n if (!element) {\n return false;\n }\n\n let node = element.parentNode;\n\n while (node !== null) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n};\n\nexport const contains = (parent, element) => {\n return parent === element || ownsElement(parent, element);\n};\n\nexport const proxy = (method, context) => {\n return method.bind(context);\n};\n\nfunction isString(value) {\n return typeof(value) === \"string\";\n}\n\nexport const on = (element, events, filter, handler, useCapture) => {\n addEventListeners(element, events, filter, handler, useCapture);\n};\n\nexport const addEventListeners = (element, events, filter, handler, useCapture) => {\n const eventNames = isArray(events) ? events : (events || \"\").split(\" \");\n\n eventNames.forEach(function(eventName) {\n addEventListener(element, eventName, filter, handler, useCapture);\n });\n};\n\nexport const addEventListener = (element, event, filter, handler, useCapture) => {\n let eventHandler = handler;\n let eventFilter;\n\n if (filter && isFunction(filter) && !handler) {\n eventHandler = filter;\n } else if (filter && isString(filter) && isFunction(eventHandler)) {\n eventFilter = filter;\n }\n\n element.addEventListener(event, function(e) {\n const closestMatchingTarget = e.target ? e.target.closest(eventFilter) : null;\n\n if (!eventFilter ||\n (eventFilter && e.target && closestMatchingTarget)) {\n const currentTarget = eventFilter ? closestMatchingTarget : e.currentTarget;\n\n // reassign the property as it is a getters only\n defineProperty(e, \"currentTarget\", { value: currentTarget });\n // keep a reference to the top-level target\n defineProperty(e, \"delegateTarget\", { value: element });\n\n eventHandler(e);\n }\n }, Boolean(useCapture));\n};\n\nexport const off = (element, events, filter, handler, useCapture) => {\n removeEventListeners(element, events, filter, handler, useCapture);\n};\n\nexport const removeEventListeners = (element, events, handler, useCapture) => {\n const eventNames = isArray(events) ? events : (events || \"\").split(\" \");\n\n eventNames.forEach(function(eventName) {\n removeEventListener(element, eventName, handler, useCapture);\n });\n};\n\nexport const removeEventListener = (element, event, handler, useCapture) => {\n element.removeEventListener(event, handler, Boolean(useCapture));\n};\n\nexport const applyEventMap = (events) => {\n const eventMap = getEventMap(navigator.userAgent);\n function queryEventMap(e) {\n return eventMap[e] || e;\n }\n\n const eventRegEx = /([^ ]+)/g;\n const appliedEvents = events.replace(eventRegEx, queryEventMap);\n\n return appliedEvents;\n};\n\nexport const setDefaultEvents = (type, events) => {\n const proto = type.prototype;\n\n if (proto.events) {\n events.forEach(event => {\n if (proto.events.indexOf(event) < 0) {\n proto.events.push(event);\n }\n });\n } else {\n proto.events = events;\n }\n};\n\nexport const wheelDeltaY = (jQueryEvent) => {\n const e = jQueryEvent.originalEvent || jQueryEvent;\n const deltaY = e.wheelDeltaY;\n let delta;\n\n if (e.wheelDelta) { // Webkit and IE\n if (deltaY === undefined || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n delta = (-e.detail) * 10;\n }\n\n return delta;\n};\n\nexport const guid = () => {\n let id = \"\";\n let i;\n let random;\n\n for (i = 0; i < 32; i++) {\n random = Math.random() * 16 | 0;\n\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n id += \"-\";\n }\n\n id += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16); // eslint-disable-line no-nested-ternary\n }\n\n return id;\n};\n\nexport const now = () => {\n return Number(new Date());\n};\n\nexport const noop = () => {};\n\nexport const renderPos = (pos) => {\n let result = [];\n\n if (pos) {\n let parts = toHyphens(pos).split(\"-\");\n\n for (let i = 0; i < parts.length; i++) {\n result.push(\"k-pos-\" + parts[i]);\n }\n }\n\n return result.join(\" \");\n};\n\n/* eslint-enable arrow-body-style */\n","import {\n Class\n} from '../../common';\n\nconst STRING = \"string\";\nconst FUNCTION = \"function\";\n\nlet preventDefault = function() {\n this._defaultPrevented = true;\n};\n\nlet isDefaultPrevented = function() {\n return this._defaultPrevented === true;\n};\n\nexport class Observable extends Class {\n constructor() {\n super();\n this._events = {};\n }\n\n destroy() {\n this.unbind();\n }\n\n bind(event, handlers, one) {\n let that = this,\n idx,\n eventNames = typeof event === STRING ? [event] : event || [],\n length,\n original,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n if (handlers === undefined) {\n for (idx in event) {\n that.bind(idx, event[idx]);\n }\n\n return that;\n }\n\n /* eslint-disable no-loop-func */\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n let eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n if (one) {\n original = handler;\n handler = function() {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n\n handler.original = original;\n }\n\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n /* eslint-enable no-loop-func */\n\n return that;\n }\n\n one(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n }\n\n first(eventName, handlers) {\n let that = this,\n idx,\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\n length,\n handler,\n handlersIsFunction = typeof handlers === FUNCTION,\n events;\n\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n let eventName = eventNames[idx];\n\n handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return that;\n }\n\n trigger(eventName, eventArgs) {\n let that = this,\n events = that._events[eventName],\n idx,\n length;\n\n if (events) {\n let e = eventArgs || {};\n\n e.sender = that;\n\n e._defaultPrevented = false;\n\n e.preventDefault = preventDefault;\n\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n }\n\n unbind(eventName, handler) {\n let that = this,\n events = that._events[eventName],\n idx;\n\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n\n return that;\n }\n\n _setEvents(options) {\n const length = (this.events || []).length;\n\n for (let idx = 0; idx < length; idx ++) {\n let e = this.events[idx];\n\n if (this.options[e] && options[e]) {\n this.unbind(e, this.options[e]);\n\n if (this._events && this._events[e]) {\n delete this._events[e];\n }\n }\n }\n\n this.bind(this.events, options);\n }\n}\n","import {\n addClass,\n defined,\n valueOrDefault,\n deepExtend,\n setDefaultOptions\n} from '../common';\n\nimport {\n appendHtml,\n removeChildren\n} from './utils';\n\nimport { Observable } from './scroller/observable';\n\nexport class Attribution extends Observable {\n constructor(element, options) {\n super();\n this.element = element;\n\n this._initOptions(options);\n this.items = [];\n\n addClass(this.element, 'k-widget k-attribution');\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n filter(extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n }\n\n add(item) {\n let newItem = item;\n\n if (defined(item)) {\n if (typeof item === 'string') {\n newItem = {\n text: item\n };\n }\n\n this.items.push(newItem);\n this._render();\n }\n }\n\n remove(text) {\n let result = [];\n\n for (let i = 0; i < this.items.length; i++) {\n let item = this.items[i];\n\n if (item.text !== text) {\n result.push(item);\n }\n }\n\n this.items = result;\n this._render();\n }\n\n clear() {\n this.items = [];\n removeChildren(this.element);\n }\n\n _render() {\n let result = [];\n\n for (let i = 0; i < this.items.length; i++) {\n let item = this.items[i];\n let text = this._itemText(item);\n\n if (text !== '') {\n result.push(text);\n }\n }\n\n if (result.length > 0) {\n removeChildren(this.element);\n\n const html = result.join(this.options.separator);\n appendHtml(html, this.element);\n\n this.showElement();\n } else {\n this.hideElement();\n }\n }\n\n hideElement() {\n this.element.style.display = \"none\";\n }\n\n showElement() {\n this.element.style.display = \"\";\n }\n\n _itemText(item) {\n let text = '';\n let inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n let inArea = this._inArea(item.extent);\n\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n\n return text;\n }\n\n _inZoomLevel(min, max) {\n let result = true;\n let newMin = valueOrDefault(min, -Number.MAX_VALUE);\n let newMax = valueOrDefault(max, Number.MAX_VALUE);\n\n result = this._zoom > newMin && this._zoom < newMax;\n return result;\n }\n\n _inArea(area) {\n let result = true;\n\n if (area) {\n result = area.contains(this._extent);\n }\n\n return result;\n }\n}\n\nsetDefaultOptions(Attribution, {\n name: 'Attribution',\n separator: ' | '\n});\n","import {\n deepExtend,\n addClass,\n keys,\n setDefaultOptions,\n renderIcon\n} from '../common';\n\nimport {\n Observable\n} from './scroller/observable';\n\nimport {\n proxy,\n on,\n off,\n setDefaultEvents,\n convertToHtml\n} from './utils';\n\nconst PAN = \"pan\";\n\nconst directionsMap = {\n up: {\n className: \"k-navigator-n\",\n iconClass: \"k-i-caret-alt-up\"\n },\n down: {\n className: \"k-navigator-s\",\n iconClass: \"k-i-caret-alt-down\"\n },\n right: {\n className: \"k-navigator-e\",\n iconClass: \"k-i-caret-alt-right\"\n },\n left: {\n className: \"k-navigator-w\",\n iconClass: \"k-i-caret-alt-left\"\n }\n};\n\nfunction createButton(direction, iconOptions) {\n const html =\n '';\n\n return convertToHtml(html);\n}\n\nexport class Navigator extends Observable {\n constructor(element, options) {\n super();\n\n this.element = element;\n this._initOptions(options);\n\n const navigateUpButton = createButton(\"up\", options.icons);\n const navigateRightlButton = createButton(\"right\", options.icons);\n const navigateDownButton = createButton(\"down\", options.icons);\n const navigateLeftButton = createButton(\"left\", options.icons);\n\n this.element.appendChild(navigateUpButton);\n this.element.appendChild(navigateRightlButton);\n this.element.appendChild(navigateDownButton);\n this.element.appendChild(navigateLeftButton);\n\n addClass(this.element, 'k-widget k-navigator');\n\n on(this.element, \"click\", \".k-button\", proxy(this._click, this));\n\n let parentElement = this.element.parentNode.closest(\"[data-role]\");\n\n this._keyroot = parentElement ? parentElement : this.element;\n this._tabindex(this._keyroot);\n\n this._keydownHandler = proxy(this._keydown, this);\n on(this._keyroot, \"keydown\", this._keydownHandler);\n }\n\n destroy() {\n this.dispose();\n }\n\n // originates from the kendo.jquery version\n dispose() {\n off(this._keyroot, \"keydown\", this._keydownHandler);\n }\n\n _tabindex(target) {\n const targetElement = target || this.wrapper || this.element;\n\n let element = this.element,\n TABINDEX = \"tabindex\",\n tabindex = targetElement.getAttribute(TABINDEX) || element.getAttribute(TABINDEX);\n\n element.removeAttribute(TABINDEX);\n\n targetElement.setAttribute(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _pan(x, y) {\n let panStep = this.options.panStep;\n\n this.trigger(PAN, {\n x: x * panStep,\n y: y * panStep\n });\n }\n\n _click(e) {\n let x = 0;\n let y = 0;\n let button = e.currentTarget;\n\n if (button.matches('.k-navigator-n')) {\n y = 1;\n } else if (button.matches('.k-navigator-s')) {\n y = -1;\n } else if (button.matches('.k-navigator-e')) {\n x = 1;\n } else if (button.matches('.k-navigator-w')) {\n x = -1;\n }\n\n this._pan(x, y);\n\n e.preventDefault();\n }\n\n /* eslint-disable indent */\n _keydown(e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n default:\n break;\n }\n }\n /* eslint-enable indent */\n}\n\nsetDefaultOptions(Navigator, {\n name: 'Navigator',\n panStep: 1\n});\n\n\nsetDefaultEvents(Navigator, [\n PAN\n]);\n","let keys = {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n};\n\nexport default keys;\n","import {\n deepExtend,\n addClass,\n keys,\n hasClasses,\n setDefaultOptions,\n renderIcon\n} from '../common';\n\nimport {\n Observable\n} from './scroller/observable';\n\nimport {\n on,\n off,\n setDefaultEvents,\n convertToHtml\n} from './utils';\n\nfunction createButton(direction, icon, iconOptions) {\n const html =\n '';\n\n return convertToHtml(html);\n}\n\nlet PLUS = 187;\nlet MINUS = 189;\nlet FF_PLUS = 61;\nlet FF_MINUS = 173;\nconst CHANGE = \"change\";\n\nexport class ZoomControl extends Observable {\n constructor(element, options, iconOptions) {\n super();\n this.element = element;\n this._initOptions(options);\n\n const zoomInButton = createButton('in', 'plus', iconOptions);\n const zoomOutButton = createButton('out', 'minus', iconOptions);\n\n this.element.appendChild(zoomInButton);\n this.element.appendChild(zoomOutButton);\n\n addClass(this.element, 'k-widget k-zoom-control k-button-group k-group-horizontal');\n\n this._clickHandler = this._click.bind(this);\n on(this.element, \"click\", \".k-button\", this._clickHandler);\n\n let parentElement = this.element.parentNode.closest(\"[data-role]\");\n\n this._keyroot = parentElement ? parentElement : this.element;\n\n this._tabindex(this._keyroot);\n\n this._keydownHandler = this._keydown.bind(this);\n on(this._keyroot, \"keydown\", this._keydownHandler);\n }\n\n destroy() {\n if (this.element) {\n off(this.element, \"click\", this._clickHandler);\n }\n\n if (this._keyroot) {\n off(this._keyroot, 'keydown', this._keydownHandler);\n }\n }\n\n _tabindex(target) {\n const targetElement = target || this.wrapper || this.element;\n\n let element = this.element,\n TABINDEX = \"tabindex\",\n tabindex = targetElement.getAttribute(TABINDEX) || element.getAttribute(TABINDEX);\n\n element.removeAttribute(TABINDEX);\n\n targetElement.setAttribute(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _change(direction) {\n let zoomStep = this.options.zoomStep;\n this.trigger(CHANGE, { delta: direction * zoomStep });\n }\n\n _click(e) {\n let button = e.currentTarget;\n let direction = 1;\n\n if (hasClasses(button, 'k-zoom-out')) {\n direction = -1;\n }\n\n this._change(direction);\n e.preventDefault();\n }\n\n /* eslint-disable indent */\n _keydown(e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n default:\n break;\n }\n }\n /* eslint-enable indent */\n}\n\nsetDefaultOptions(ZoomControl, {\n name: 'ZoomControl',\n zoomStep: 1\n});\n\nsetDefaultEvents(ZoomControl, [\n CHANGE\n]);\n","import {\n Class,\n valueOrDefault\n} from '../common';\n\nimport { Location } from './location';\n\nlet math = Math,\n max = math.max,\n min = math.min;\n\nexport class Extent extends Class {\n constructor(initialNw, initialSe) {\n super();\n let nw = Location.create(initialNw);\n let se = Location.create(initialSe);\n\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n }\n\n contains(loc) {\n let nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n\n return loc &&\n lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 &&\n lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n }\n\n center() {\n let nw = this.nw;\n let se = this.se;\n let lng = nw.lng + (se.lng - nw.lng) / 2;\n let lat = nw.lat + (se.lat - nw.lat) / 2;\n\n return new Location(lat, lng);\n }\n\n containsAny(locs) {\n let result = false;\n\n for (let i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n\n return result;\n }\n\n include(loc) {\n let nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n }\n\n includeAll(locs) {\n for (let i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n }\n\n edges() {\n let nw = this.nw, se = this.se;\n\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n }\n\n toArray() {\n let nw = this.nw, se = this.se;\n\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n }\n\n overlaps(extent) {\n return this.containsAny(extent.toArray()) ||\n extent.containsAny(this.toArray());\n }\n\n static create(a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n }\n\n static get World() {\n return new Extent([ 90, -180 ], [ -90, 180 ]);\n }\n}\n","export const SHOW_TOOLTIP = 'showTooltip';\nexport const HIDE_TOOLTIP = 'hideTooltip';\nexport const CENTER_CHANGE = 'centerChange';\nexport const ZOOM_CHANGE = 'zoomChange';\nexport const INIT = 'init';\n","import { Class, deepExtend, setDefaultOptions } from '../../common';\nimport { SHOW_TOOLTIP, HIDE_TOOLTIP } from '../constants';\n\nexport class Tooltip extends Class {\n constructor(widgetService, options) {\n super();\n\n this.widgetService = widgetService;\n this.options = deepExtend({}, this.options, options);\n this.offset = { x: 0, y: 0 };\n }\n\n show(anchor, args) {\n if (this.location === args.location) {\n return;\n }\n\n this.anchor = anchor;\n this.location = args.location;\n\n this.widgetService.notify(SHOW_TOOLTIP,\n Object.assign({ anchor: this.anchor }, args)\n );\n\n this.visible = true;\n }\n\n hide() {\n if (this.widgetService) {\n this.widgetService.notify(HIDE_TOOLTIP);\n }\n\n this.visible = false;\n this.location = null;\n }\n\n get anchor() {\n return this._anchor;\n }\n\n set anchor(anchor) {\n const documentPoint = this.widgetService.widget._toDocumentCoordinates({\n x: anchor.left - this.offset.x,\n y: anchor.top - this.offset.y\n });\n\n this._anchor = {\n left: documentPoint.left,\n top: documentPoint.top\n };\n }\n\n destroy() {\n this.widgetService = null;\n }\n}\n\nsetDefaultOptions(Tooltip, {\n border: {\n width: 1\n },\n opacity: 1\n});\n","import {\n Class,\n addClass,\n deepExtend,\n defined\n} from '../../common';\n\nimport {\n Extent\n} from './../extent';\n\nimport {\n getSupportedFeatures\n} from '../utils';\n\nexport class Layer extends Class {\n constructor(map, options) {\n super();\n\n this.support = getSupportedFeatures();\n\n this._initOptions(options);\n this.map = map;\n\n let element = document.createElement(\"div\");\n addClass(element, \"k-layer\");\n element.style.zIndex = this.options.zIndex;\n element.style.opacity = this.options.opacity;\n\n this.element = element;\n\n map.scrollElement.appendChild(this.element);\n\n this._beforeReset = this._beforeReset.bind(this);\n this._reset = this._reset.bind(this);\n this._resize = this._resize.bind(this);\n this._panEnd = this._panEnd.bind(this);\n\n this._activate();\n this._updateAttribution();\n }\n\n destroy() {\n this._deactivate();\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n show() {\n this.reset();\n this._activate();\n this._applyExtent(true);\n }\n\n hide() {\n this._deactivate();\n this._setVisibility(false);\n }\n\n reset() {\n this._beforeReset();\n this._reset();\n }\n\n _reset() {\n this._applyExtent();\n }\n\n _beforeReset() {\n\n }\n\n _resize() {\n\n }\n\n _panEnd() {\n this._applyExtent();\n }\n\n _applyExtent() {\n let options = this.options;\n let zoom = this.map.zoom();\n let matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n let matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n let extent = Extent.create(options.extent);\n let inside = !extent || extent.overlaps(this.map.extent());\n\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n }\n\n _setVisibility(visible) {\n this.element.style.display = visible ? '' : 'none';\n }\n\n _activate() {\n let map = this.map;\n\n this._deactivate();\n\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n }\n\n _deactivate() {\n let map = this.map;\n\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n }\n\n _updateAttribution() {\n const attribution = this.map.attribution;\n\n if (attribution) {\n attribution.add(this.options.attribution);\n }\n }\n\n _readData() {\n const data = this.options.data || [];\n return data;\n }\n\n _hasData() {\n return this._data && this._data.length > 0;\n }\n\n _layerIndex() {\n const layers = this.map.layers || [];\n return layers.indexOf(this);\n }\n}\n","import {\n geometry as g,\n throttle\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n deepExtend,\n round,\n limitValue,\n hashKey,\n setDefaultOptions,\n isFunction\n} from '../../common';\n\nimport { removeChildren } from '../utils';\n\nimport { Layer } from './layer';\n\nimport TemplateService from '../../services/template-service';\n\nlet math = Math,\n Point = g.Point;\n\nfunction compileTemplate(template) {\n if (isFunction(template)) {\n return template;\n }\n\n return TemplateService.compile(template);\n}\n\nfunction roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n}\n\nfunction renderSize(size) {\n let newSize = size;\n\n if (typeof(size) !== \"string\") {\n newSize += \"px\";\n }\n\n return newSize;\n}\n\nexport class TileLayer extends Layer {\n constructor(map, options) {\n super(map, options);\n\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n\n let viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n }\n\n destroy() {\n super.destroy();\n this._view.destroy();\n this._view = null;\n }\n\n _beforeReset() {\n let map = this.map;\n let origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n }\n\n _reset() {\n super._reset();\n this._updateView();\n this._view.reset();\n }\n\n _viewType() {\n return TileView;\n }\n\n _activate() {\n super._activate();\n\n if (!this.support.mobileOS) {\n if (!this._pan) {\n this._pan = throttle(this._render.bind(this), 100);\n }\n\n this.map.bind('pan', this._pan);\n }\n }\n\n _deactivate() {\n super._deactivate();\n\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n }\n\n _updateView() {\n let view = this._view,\n map = this.map,\n extent = map.extent(),\n extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n }\n\n _resize() {\n this._render();\n }\n\n _panEnd(e) {\n super._panEnd(e);\n this._render();\n }\n\n _render() {\n this._updateView();\n this._view.render();\n }\n}\n\nsetDefaultOptions(TileLayer, {\n tileSize: 256,\n subdomains: ['a', 'b', 'c'],\n urlTemplate: '',\n zIndex: 1\n});\n\nexport class TileView extends Class {\n constructor(element, options) {\n super();\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n center(center) {\n this._center = center;\n }\n\n extent(extent) {\n this._extent = extent;\n }\n\n viewOrigin(origin) {\n this._viewOrigin = origin;\n }\n\n zoom(zoom) {\n this._zoom = zoom;\n }\n\n pointToTileIndex(point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n }\n\n tileCount() {\n let size = this.size(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n nw = this._extent.nw,\n point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n }\n\n size() {\n let nw = this._extent.nw,\n se = this._extent.se,\n diff = se.clone().translate(-nw.x, -nw.y);\n\n return {\n width: diff.x,\n height: diff.y\n };\n }\n\n indexToPoint(index) {\n let x = index.x,\n y = index.y;\n\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n }\n\n subdomainText() {\n let subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n }\n\n destroy() {\n removeChildren(this.element);\n this.pool.empty();\n }\n\n reset() {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n }\n\n render() {\n let size = this.tileCount(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n tile, x, y;\n\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n }\n\n createTile(currentIndex) {\n let options = this.tileOptions(currentIndex);\n let tile = this.pool.get(this._center, options);\n\n if (!tile.element.parentNode) {\n this.element.append(tile.element);\n }\n\n return tile;\n }\n\n tileOptions(currentIndex) {\n let index = this.wrapIndex(currentIndex),\n point = this.indexToPoint(currentIndex),\n origin = this._viewOrigin,\n offset = point.clone().translate(-origin.x, -origin.y);\n\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n }\n\n wrapIndex(index) {\n let boundary = math.pow(2, this._zoom);\n\n return {\n x: this.wrapValue(index.x, boundary),\n y: limitValue(index.y, 0, boundary - 1)\n };\n }\n\n wrapValue(value, boundary) {\n let remainder = math.abs(value) % boundary;\n let wrappedValue = value;\n\n if (value >= 0) {\n wrappedValue = remainder;\n } else {\n wrappedValue = boundary - (remainder === 0 ? boundary : remainder);\n }\n\n return wrappedValue;\n }\n}\n\nexport class ImageTile extends Class {\n constructor(id, options) {\n super();\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n }\n\n destroy() {\n const element = this.element;\n const parentNode = element ? element.parentNode : null;\n\n if (element) {\n if (parentNode) {\n parentNode.removeChild(element);\n }\n\n this.element = null;\n }\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n createElement() {\n let el = document.createElement(\"img\");\n const size = this.options.size + \"px\";\n el.style.position = \"absolute\";\n el.style.display = \"block\";\n el.style.width = el.style.maxWidth = size;\n el.style.height = el.style.maxHeight = size;\n\n this.element = el;\n\n // todo\n // add on error handler\n\n // this.element =\n // $('\\'\\'')\n // .css({\n // width: this.options.size,\n // height: this.options.size\n // })\n // .on('error', proxy(function(e) {\n // if (this.errorUrl()) {\n // e.target.setAttribute('src', this.errorUrl());\n // } else {\n // e.target.removeAttribute('src');\n // }\n // }, this));\n }\n\n show() {\n let element = this.element;\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n\n let url = this.url();\n\n if (url) {\n element.setAttribute('src', url);\n }\n\n element.style.visibility = 'visible';\n this.visible = true;\n }\n\n hide() {\n this.element.style.visibility = 'hidden';\n this.visible = false;\n }\n\n url() {\n let urlResult = compileTemplate(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n }\n\n errorUrl() {\n let urlResult = compileTemplate(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n }\n\n urlOptions() {\n let options = this.options;\n\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n }\n}\n\nsetDefaultOptions(ImageTile, {\n urlTemplate: '',\n errorUrlTemplate: ''\n});\n\nexport class TilePool extends Class {\n constructor() {\n super();\n this._items = [];\n }\n\n get(center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n\n return this._create(options);\n }\n\n empty() {\n let items = this._items;\n\n for (let i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n\n this._items = [];\n }\n\n reset() {\n let items = this._items;\n\n for (let i = 0; i < items.length; i++) {\n items[i].hide();\n }\n }\n\n _create(options) {\n let items = this._items;\n let tile;\n let id = hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n\n return tile;\n }\n\n _remove(center) {\n let items = this._items;\n let maxDist = -1;\n let index = -1;\n\n for (let i = 0; i < items.length; i++) {\n let dist = items[i].options.point.distanceTo(center);\n\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n}\n\nsetDefaultOptions(TilePool, {\n maxSize: 100\n});\n","import {\n Class,\n elementOffset\n} from '../../common';\n\nimport {\n Observable\n} from './observable';\n\nimport {\n getEventMap,\n proxy,\n getSupportedFeatures\n} from '../utils';\n\nconst extend = Object.assign;\n\nconst CHANGE = 'change';\n\nexport class TapCapture extends Observable {\n constructor(element, options) {\n super();\n let that = this,\n domElement = element[0] || element;\n\n that.capture = false;\n\n const eventMap = getEventMap(navigator.userAgent);\n\n if (domElement.addEventListener) {\n eventMap.down.split(' ').forEach(function(event) {\n domElement.addEventListener(event, proxy(that._press, that), true);\n });\n eventMap.up.split(' ').forEach(function(event) {\n domElement.addEventListener(event, proxy(that._release, that), true);\n });\n } else {\n eventMap.down.split(' ').forEach(function(event) {\n domElement.attachEvent(event, proxy(that._press, that));\n });\n eventMap.up.split(' ').forEach(function(event) {\n domElement.attachEvent(event, proxy(that._release, that));\n });\n }\n\n that.bind([\n 'press',\n 'release'\n ], options || {});\n }\n\n captureNext() {\n this.capture = true;\n }\n\n cancelCapture() {\n this.capture = false;\n }\n\n _press(e) {\n let that = this;\n\n that.trigger('press');\n\n if (that.capture) {\n e.preventDefault();\n }\n }\n\n _release(e) {\n let that = this;\n\n that.trigger('release');\n\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n}\n\nexport class PaneDimension extends Observable {\n constructor(options) {\n super();\n let that = this;\n that.forcedEnabled = false;\n extend(that, options);\n that.scale = 1;\n\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n }\n\n makeVirtual() {\n extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n }\n\n virtualSize(min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n }\n\n outOfBounds(offset) {\n return offset > this.max || offset < this.min;\n }\n\n forceEnabled() {\n this.forcedEnabled = true;\n }\n\n getSize() {\n return this.container[this.measure];\n }\n\n getTotal() {\n return this.element[this.scrollSize];\n }\n\n rescale(scale) {\n this.scale = scale;\n }\n\n update(silent) {\n let that = this,\n total = that.virtual ? that._virtualMax : that.getTotal(),\n scaledTotal = total * that.scale,\n size = that.getSize();\n\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n}\n\nexport class PaneDimensions extends Observable {\n constructor(options) {\n super();\n let that = this;\n\n that.x = new PaneDimension(extend({\n horizontal: true\n }, options));\n\n that.y = new PaneDimension(extend({\n horizontal: false\n }, options));\n\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n }\n\n rescale(newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n }\n\n centerCoordinates() {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n }\n\n refresh() {\n let that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n}\n\nexport class PaneAxis extends Observable {\n constructor(options) {\n super();\n extend(this, options);\n }\n\n outOfBounds() {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n }\n\n dragMove(delta) {\n let that = this,\n dimension = that.dimension,\n axis = that.axis,\n movable = that.movable,\n position = movable[axis] + delta;\n\n if (!dimension.enabled) {\n return;\n }\n\n let dragDelta = delta;\n\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n dragDelta *= that.resistance;\n }\n\n movable.translateAxis(axis, dragDelta);\n that.trigger(CHANGE, that);\n }\n}\n\nexport class Pane extends Class {\n constructor(options) {\n super();\n\n let that = this,\n x, y,\n resistance,\n movable;\n\n extend(that, {\n elastic: true\n }, options);\n\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart(e) {\n that.gesture = e;\n\n that.offset = elementOffset(that.dimensions.container);\n },\n press(e) {\n const closestAnchor = e.event.target.closest('a');\n\n if (closestAnchor && closestAnchor.matches('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange(e) {\n let previousGesture = that.gesture,\n previousCenter = previousGesture.center,\n center = e.center,\n scaleDelta = e.distance / previousGesture.distance,\n minScale = that.dimensions.minScale,\n maxScale = that.dimensions.maxScale,\n coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n\n let offsetX = movable.x + that.offset.left,\n offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n\n movable.scaleWith(scaleDelta);\n\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n\n e.preventDefault();\n },\n move(e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end(e) {\n e.preventDefault();\n }\n });\n }\n}\n\nlet translate = function(x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n};\n\nexport class Movable extends Observable {\n constructor(element) {\n super();\n\n let that = this;\n\n that.support = getSupportedFeatures();\n this.transformStyle = this.support.transitions.prefix + 'Transform';\n that.element = element;\n that.element.style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n\n const coordinates = translate(that.x, that.y, that.scale);\n that.element.style[this.transformStyle] = coordinates;\n\n that._saveCoordinates(coordinates);\n }\n\n translateAxis(axis, by) {\n this[axis] += by;\n this.refresh();\n }\n\n scaleTo(scale) {\n this.scale = scale;\n this.refresh();\n }\n\n scaleWith(scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n }\n\n translate(coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n }\n\n moveAxis(axis, value) {\n this[axis] = value;\n this.refresh();\n }\n\n moveTo(coordinates) {\n extend(this, coordinates);\n this.refresh();\n }\n\n refresh() {\n let that = this,\n x = that.x,\n y = that.y,\n newCoordinates;\n\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n\n newCoordinates = translate(x, y, that.scale);\n\n if (newCoordinates !== that.coordinates) {\n that.element.style[this.transformStyle] = newCoordinates;\n\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n }\n\n _saveCoordinates(coordinates) {\n this.coordinates = coordinates;\n }\n}\n","import {\n geometry as g,\n drawing as d\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n defined,\n last,\n setDefaultOptions\n} from '../../common';\n\nimport {\n proxy\n} from '../utils';\n\nimport {\n Layer\n} from './layer';\n\nimport {\n Movable\n} from '../scroller/draggable';\n\nimport {\n Location\n} from '../location';\n\nconst Group = d.Group;\n\nexport class ShapeLayer extends Layer {\n constructor(map, options) {\n super(map, options);\n\n this._pan = proxy(this._pan, this);\n\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.clientWidth,\n height: map.scrollElement.clientHeight\n });\n\n this._initRoot();\n this.movable = new Movable(this.surface.element);\n this._markers = [];\n\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this.surface.bind('mouseenter', this._mouseenter.bind(this));\n }\n\n destroy() {\n super.destroy();\n\n this.surface.destroy();\n }\n\n _reset() {\n super._reset();\n\n this._translateSurface();\n\n this._data = this._readData();\n\n if (this._hasData()) {\n this._load(this._data);\n }\n }\n\n _initRoot() {\n this._root = new Group();\n this.surface.draw(this._root);\n }\n\n _beforeReset() {\n this.surface.clear();\n this._initRoot();\n }\n\n _resize() {\n this.surface.size(this.map.size());\n }\n\n _readData() {\n const data = super._readData();\n\n if (data.type === \"FeatureCollection\") {\n return data.features;\n }\n\n if (data.type === \"GeometryCollection\") {\n return data.geometries;\n }\n\n return data;\n }\n\n _load(data) {\n this._data = data;\n this._clearMarkers();\n\n if (!this._loader) {\n this._loader = new GeoJsonLoader(this.map, this.options.style, this);\n }\n\n let container = new Group();\n\n for (let i = 0; i < data.length; i++) {\n let shape = this._loader.parse(data[i]);\n\n if (shape) {\n container.append(shape);\n }\n }\n\n this._root.clear();\n this._root.append(container);\n }\n\n shapeCreated(shape) {\n let cancelled = false;\n\n // the GeoJSON loader builds \"Point\" type as a circle\n // use the circle shape type as and indicator for rendering a marker\n // keep the behavior under a setting as this is supported by kendo jQuery Map\n // but we opted out of this in blazor\n if (shape instanceof d.Circle && this.map.options.renderPointsAsMarkers) {\n cancelled = defined(this._createMarker(shape));\n }\n\n if (!cancelled) {\n let args = {\n layer: this,\n shape: shape\n };\n\n cancelled = this.map.trigger('shapeCreated', args);\n }\n\n return cancelled;\n }\n\n featureCreated(e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n }\n\n _createMarker(shape) {\n let marker = this.map.markers.bind({\n location: shape.location\n }, shape.dataItem);\n\n if (marker) {\n this._markers.push(marker);\n }\n\n return marker;\n }\n\n _clearMarkers() {\n for (let i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n\n this._markers = [];\n }\n\n _pan() {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n }\n\n _panEnd(e) {\n super._panEnd(e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n }\n\n _translateSurface() {\n let map = this.map;\n let nw = map.locationToView(map.extent().nw);\n\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n }\n\n _eventArgs(e) {\n return {\n layer: this,\n layerIndex: this._layerIndex(),\n shape: e.element,\n shapeIndex: (this._data || []).indexOf(e.element.dataItem),\n originalEvent: e.originalEvent\n };\n }\n\n _handler(eventName) {\n return (e) => {\n if (e.element) {\n this.map.trigger(eventName, this._eventArgs(e));\n }\n };\n }\n\n _mouseenter(e) {\n if (!e.element) {\n return;\n }\n\n this.map.trigger('shapeMouseEnter', this._eventArgs(e));\n\n const shape = e.element;\n const anchor = this._tooltipAnchor(e);\n this.map._tooltip.show(anchor, this._tooltipContext(shape));\n }\n\n _tooltipContext(shape) {\n return {\n type: 'shape',\n layerIndex: this._layerIndex(),\n className: 'k-map-shape-tooltip',\n dataItem: shape.dataItem,\n location: shape.location\n };\n }\n\n _tooltipAnchor(e) {\n const cursor = this.map.eventOffset(e.originalEvent);\n return {\n top: cursor.y,\n left: cursor.x\n };\n }\n\n _activate() {\n super._activate();\n this._panHandler = proxy(this._pan, this);\n this.map.bind('pan', this.panHandler);\n }\n\n _deactivate() {\n super._deactivate();\n this.map.unbind('pan', this._panHandler);\n }\n}\n\nsetDefaultOptions(ShapeLayer, {\n autoBind: true,\n zIndex: 100\n});\n\nclass GeoJsonLoader extends Class {\n constructor(locator, defaultStyle, observer) {\n super();\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n }\n\n parse(item) {\n let root = new Group();\n let unwrap = true;\n\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n\n return root;\n }\n\n _shapeCreated(shape) {\n let cancelled = false;\n\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n\n return cancelled;\n }\n\n _featureCreated(group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n }\n\n /* eslint-disable indent */\n _loadGeometryTo(container, geometry, dataItem) {\n let coords = geometry.coordinates;\n let i;\n let path;\n\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n default:\n break;\n }\n }\n /* eslint-disable indent */\n\n _setLineFill(path) {\n let segments = path.segments;\n\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n }\n\n _loadShape(container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n\n return shape;\n }\n\n _loadPolygon(container, rings, dataItem) {\n let shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n shape.location = this.locator.viewToLocation(shape.bbox().center());\n return this._loadShape(container, shape);\n }\n\n _buildPolygon(rings) {\n let type = rings.length > 1 ? d.MultiPath : d.Path;\n let path = new type(this.style);\n\n for (let i = 0; i < rings.length; i++) {\n for (let j = 0; j < rings[i].length; j++) {\n let point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n\n return path;\n }\n\n _loadPoint(container, coords, dataItem) {\n let location = Location.fromLngLat(coords);\n let point = this.locator.locationToView(location);\n let circle = new g.Circle(point, 10);\n let shape = new d.Circle(circle, this.style);\n\n shape.dataItem = dataItem;\n shape.location = location;\n\n return this._loadShape(container, shape);\n }\n}\n","import {\n geometry as g,\n drawing as d\n} from '@progress/kendo-drawing';\n\nimport {\n Class,\n defined,\n isFunction,\n getter,\n setDefaultOptions\n} from '../../common';\n\nimport {\n ShapeLayer\n} from './shape';\n\nimport {\n Location\n} from '../location';\n\nexport class BubbleLayer extends ShapeLayer {\n _readData() {\n const data = this.options.data || [];\n return data;\n }\n\n _load(data) {\n this._data = data;\n this.surface.clear();\n\n if (data.length === 0) {\n return;\n }\n\n let options = this.options;\n let getValue = getter(options.valueField);\n\n let newData = data.slice(0);\n newData.sort(function(a, b) {\n return getValue(b) - getValue(a);\n });\n\n let scaleType = this._scaleType();\n let scale;\n let getLocation = getter(this.options.locationField);\n\n for (let i = 0; i < newData.length; i++) {\n let dataItem = newData[i];\n let location = getLocation(dataItem);\n let value = getValue(dataItem);\n\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n options.minSize,\n options.maxSize\n ]);\n }\n\n location = Location.create(location);\n\n let center = this.map.locationToView(location);\n let size = scale.map(value);\n let symbol = this._createSymbol({\n center: center,\n size: size,\n style: options.style,\n dataItem: dataItem,\n location: location\n });\n\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n\n this._drawSymbol(symbol);\n }\n }\n }\n\n _scaleType() {\n let scale = this.options.scale;\n\n if (isFunction(scale)) {\n return scale;\n }\n\n return Scales[scale];\n }\n\n _createSymbol(args) {\n let symbol = this.options.symbol;\n\n if (!isFunction(symbol)) {\n symbol = Symbols[symbol];\n }\n\n return symbol(args);\n }\n\n _drawSymbol(shape) {\n let args = {\n layer: this,\n shape: shape\n };\n\n let cancelled = this.map.trigger('shapeCreated', args);\n\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n\n _tooltipContext(shape) {\n return {\n type: 'bubble',\n layerIndex: this._layerIndex(),\n className: 'k-map-bubble-tooltip',\n dataItem: shape.dataItem,\n location: shape.location,\n value: shape.value\n };\n }\n\n _tooltipAnchor(e) {\n const shape = e.element;\n const center = shape.bbox().center();\n\n return {\n top: center.y,\n left: center.x\n };\n }\n}\n\nsetDefaultOptions(BubbleLayer, {\n // autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle',\n // ensure bubble layers are displayed over tile and shape layers\n zIndex: 200\n});\n\nclass SqrtScale extends Class {\n constructor(domain, range) {\n super();\n\n this._domain = domain;\n this._range = range;\n\n let domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n let outputRange = range[1] - range[0];\n\n this._ratio = outputRange / domainRange;\n }\n\n map(value) {\n let rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n}\n\nlet Scales = {\n sqrt: SqrtScale\n};\n\nlet Symbols = {\n circle: function(args) {\n let geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n\n square: function(args) {\n let path = new d.Path(args.style);\n let halfSize = args.size / 2;\n let center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n};\n","import {\n Class,\n addClass,\n isArray,\n getter,\n deepExtend,\n setDefaultOptions,\n renderIcon\n} from '../../common';\n\nimport { Layer } from './layer';\nimport { Location } from '../location';\nimport {\n proxy,\n on,\n off,\n toHyphens,\n toPixels,\n convertToHtml\n} from '../utils';\nimport TemplateService from '../../services/template-service';\n\nconst CLICK = \"click\";\nconst MOUSE_ENTER = \"mouseenter\";\nconst MOUSE_LEAVE = \"mouseleave\";\n\nconst extend = Object.assign;\nconst MARKER_CLASS_NAME = \"k-marker\";\nconst MARKER_CLASS = \".\" + MARKER_CLASS_NAME;\n\nexport class MarkerLayer extends Layer {\n constructor(map, options) {\n super(map, options);\n\n this._markerClickHandler = proxy(this._markerClick, this);\n on(this.element, CLICK, MARKER_CLASS, this._markerClickHandler);\n\n this.items = [];\n\n this._load(this._readData());\n }\n\n destroy() {\n super.destroy();\n off(this.element, CLICK, this._markerClickHandler);\n this.clear();\n }\n\n add(args) {\n if (isArray(args)) {\n for (let i = 0; i < args.length; i++) {\n this._addOne(args[i]);\n }\n } else {\n return this._addOne(args);\n }\n }\n\n remove(marker) {\n marker.destroy();\n let index = (this.items || []).indexOf(marker);\n\n if (index > -1) {\n this.items.splice(index, 1);\n }\n }\n\n clear() {\n for (let i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n\n this.items = [];\n }\n\n update(marker) {\n let location = marker.location();\n\n if (location) {\n marker.showAt(this.map.locationToView(location));\n\n let args = {\n marker: marker,\n layer: this\n };\n\n this.map.trigger('markerActivate', args);\n }\n }\n\n _reset() {\n super._reset();\n\n let items = this.items;\n\n for (let i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n }\n\n bind(options, dataItem) {\n let marker = Marker.create(options, this.options);\n marker.dataItem = dataItem;\n\n let args = {\n marker: marker,\n layer: this\n };\n\n let cancelled = this.map.trigger('markerCreated', args);\n\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n }\n\n _addOne(arg) {\n let marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n }\n\n _readData() {\n const data = this.options.data || [];\n return data;\n }\n\n _load(data) {\n this._data = data;\n this.clear();\n\n let getLocation = getter(this.options.locationField);\n let getTitle = getter(this.options.titleField);\n\n for (let i = 0; i < data.length; i++) {\n let dataItem = data[i];\n\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n }\n\n _markerClick(e) {\n const marker = e.currentTarget._kendoNode;\n\n let args = {\n layer: this,\n layerIndex: this._layerIndex(),\n marker: marker,\n markerIndex: (this.items || []).indexOf(marker),\n originalEvent: e\n };\n\n this.map.trigger('markerClick', args);\n }\n\n _markerMouseEnter(e) {\n const args = this._createMarkerEventArgs(e);\n this.map.trigger(\"markerMouseEnter\", args);\n }\n\n _markerMouseLeave(e) {\n const args = this._createMarkerEventArgs(e);\n this.map.trigger(\"markerMouseLeave\", args);\n }\n\n _createMarkerEventArgs(e) {\n const marker = e.marker;\n\n let args = extend({}, {\n layer: this,\n layerIndex: this._layerIndex(),\n marker: marker,\n markerIndex: (this.items || []).indexOf(marker)\n }, e);\n\n return args;\n }\n}\n\nsetDefaultOptions(MarkerLayer, {\n zIndex: 1000,\n autoBind: true,\n locationField: 'location',\n titleField: 'title',\n template: \"\"\n});\n\nexport class Marker extends Class {\n constructor(options) {\n super();\n this.options = options || {};\n }\n\n destroy() {\n this.layer = null;\n this.unbindEvents();\n this.hide();\n }\n\n addTo(parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n }\n\n location(value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n\n if (this.layer) {\n this.layer.update(this);\n }\n\n return this;\n }\n\n return Location.create(this.options.location);\n }\n\n showAt(point) {\n this.render();\n\n this._anchor = { left: Math.round(point.x), top: Math.round(point.y) };\n this.element.style.left = toPixels(this._anchor.left);\n this.element.style.top = toPixels(this._anchor.top);\n }\n\n hide() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n\n bindEvents() {\n if (!this.element) {\n return;\n }\n\n this._mouseEnterHandler = proxy(this._mouseEnter, this);\n on(this.element, MOUSE_ENTER, MARKER_CLASS, this._mouseEnterHandler);\n this._mouseLeaveHandler = proxy(this._mouseLeave, this);\n on(this.element, MOUSE_LEAVE, MARKER_CLASS, this._mouseLeaveHandler);\n }\n\n unbindEvents() {\n if (!this.element) {\n return;\n }\n\n off(this.element, MOUSE_ENTER, this._mouseEnterHandler);\n off(this.element, MOUSE_LEAVE, this._mouseLeaveHandler);\n }\n\n render() {\n if (!this.element) {\n let options = this.options;\n let layer = this.layer;\n let element = document.createElement('span');\n addClass(element, MARKER_CLASS_NAME);\n\n if (this.options.template) {\n const templateFn = this._compileTemplate(this.options.template);\n const templateHtml = templateFn(this.dataItem);\n const templateElement = convertToHtml(templateHtml);\n element.appendChild(templateElement);\n } else if (options.svgIcon) {\n renderIcon(element, { icon: options.svgIcon, iconClass: \"k-icon-xxl\", svgIcons: this.options.icons.svgIcons, type: \"svg\" });\n } else {\n let iconOptions = { icon: \"map-marker\", iconClass: \"k-icon-xxl\", svgIcons: this.options.icons.svgIcons, type: this.options.icons.type };\n\n if (options.shape) {\n if (options.shape === \"pinTarget\") {\n iconOptions.icon = \"map-marker-target\";\n renderIcon(element, iconOptions);\n } else if (options.shape === \"pin\") {\n renderIcon(element, iconOptions);\n } else {\n addClass(element, 'k-icon k-icon-xxl k-i-marker-' + toHyphens(options.shape || 'pin'));\n }\n } else {\n renderIcon(element, iconOptions);\n }\n }\n\n if (options.title) {\n element.setAttribute(\"title\", options.title);\n }\n\n const attributes = options.attributes || {};\n Object.keys(attributes).forEach(function(key) {\n element.setAttribute(key, attributes[key]);\n });\n\n element._kendoNode = this;\n element.style.zIndex = options.zIndex;\n\n this.element = element;\n\n if (layer) {\n layer.element.appendChild(this.element);\n }\n\n this.bindEvents();\n }\n }\n\n _mouseEnter(e) {\n const args = this._createEventArgs(e);\n this.layer._markerMouseEnter(args);\n\n this.layer.map._tooltip.show({\n top: this._anchor.top - this.element.offsetHeight,\n left: this._anchor.left\n }, this._tooltipContext());\n }\n\n _tooltipContext() {\n return {\n type: 'marker',\n layerIndex: this.layer._layerIndex(),\n className: 'k-map-marker-tooltip',\n dataItem: this.dataItem,\n title: this.options.title,\n location: this.location()\n };\n }\n\n _mouseLeave(e) {\n const args = this._createEventArgs(e);\n this.layer._markerMouseLeave(args);\n }\n\n _createEventArgs(e) {\n let args = {\n marker: this,\n originalEvent: e\n };\n\n return args;\n }\n\n _compileTemplate(template) {\n return TemplateService.compile(template, {\n paramName: \"dataItem\",\n useWithBlock: false\n });\n }\n\n static create(arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n\n return new Marker(deepExtend({}, defaults, arg));\n }\n}\n","import {\n Class\n} from '../../common';\n\nimport {\n proxy,\n now\n} from '../utils';\n\nconst extend = Object.assign;\n\nfunction animationFrame(callback) {\n window.requestAnimationFrame(callback);\n}\n\nexport class Animation extends Class {\n constructor() {\n super();\n let that = this;\n\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n }\n\n tick() { }\n done() { }\n onEnd() { }\n onCancel() { }\n\n start() {\n if (!this.enabled()) {\n return;\n }\n\n if (!this.done()) {\n this._started = true;\n animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n }\n\n enabled() {\n return true;\n }\n\n cancel() {\n this._started = false;\n this.onCancel();\n }\n\n _tick() {\n let that = this;\n\n if (!that._started) {\n return;\n }\n\n that.tick();\n\n if (!that.done()) {\n animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n}\n\nexport class Transition extends Animation {\n constructor(options) {\n super();\n extend(this, options);\n }\n\n done() {\n return this.timePassed() >= this.duration;\n }\n\n timePassed() {\n return Math.min(this.duration, now() - this.startDate);\n }\n\n moveTo(options) {\n let that = this,\n movable = that.movable;\n\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration === 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = now();\n that.start();\n }\n\n _easeProxy(ease) {\n let that = this;\n\n return function() {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n\n static easeOutExpo(t, b, c, d) {\n return t === d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n\n // static easeOutBack(t, b, c, d) {\n // let s = 1.70158;\n // return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n // }\n}\n","import {\n Class,\n grep\n} from '../../common';\n\nimport {\n proxy,\n noop,\n applyEventMap,\n getEventMap,\n on,\n off,\n now,\n getSupportedFeatures\n} from '../utils';\n\nimport {\n Observable\n} from './observable';\n\nconst extend = Object.assign;\n\nconst preventDefault = (e) => {\n e.preventDefault();\n};\n\nlet\n DEFAULT_MIN_HOLD = 800,\n CLICK_DELAY = 300,\n // DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0,\n DEFAULT_THRESHOLD = 0,\n PRESS = 'press',\n HOLD = 'hold',\n SELECT = 'select',\n START = 'start',\n MOVE = 'move',\n END = 'end',\n CANCEL = 'cancel',\n TAP = 'tap',\n DOUBLETAP = 'doubleTap',\n RELEASE = 'release',\n GESTURESTART = 'gesturestart',\n GESTURECHANGE = 'gesturechange',\n GESTUREEND = 'gestureend',\n GESTURETAP = 'gesturetap';\n\nlet THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n};\n\nfunction touchDelta(touch1, touch2) {\n let x1 = touch1.x.location,\n y1 = touch1.y.location,\n x2 = touch2.x.location,\n y2 = touch2.y.location,\n dx = x1 - x2,\n dy = y1 - y2;\n\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n}\n\nfunction getTouches(e) {\n const support = getSupportedFeatures();\n let touches = [],\n originalEvent = e.originalEvent || e,\n currentTarget = e.currentTarget,\n idx = 0,\n length, changedTouches, touch;\n\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n\n return touches;\n}\nexport class TouchAxis extends Class {\n constructor(axis, location) {\n super();\n let that = this;\n\n that.support = getSupportedFeatures();\n that.invalidZeroEvents = this.support.mobileOS && this.support.mobileOS.android;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n }\n\n move(location) {\n let that = this,\n offset = location['page' + that.axis],\n timeStamp = now(),\n timeDelta = timeStamp - that.timeStamp || 1;\n\n if (!offset && this.invalidZeroEvents) {\n return;\n }\n\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n }\n\n _updateLocationData(location) {\n let that = this,\n axis = that.axis;\n\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n}\n\nexport class Touch extends Class {\n constructor(userEvents, target, touchInfo) {\n super();\n\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n }\n\n press() {\n // this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._holdTimeout = setTimeout(proxy(this._hold, this), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n }\n\n _tap(touchInfo) {\n let that = this;\n\n that.userEvents._clicks++;\n\n if (that.userEvents._clicks === 1) {\n that._clickTimeout = setTimeout(function() {\n if (that.userEvents._clicks === 1) {\n that._trigger(TAP, touchInfo);\n } else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n }\n\n _hold() {\n this._trigger(HOLD, this.pressEvent);\n }\n\n /* eslint-disable consistent-return */\n move(touchInfo) {\n let that = this;\n let preventMove = touchInfo.type !== 'api' && that.userEvents._shouldNotMove;\n\n if (that._finished || preventMove) {\n return;\n }\n\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n }\n /* eslint-enable consistent-return */\n\n end(touchInfo) {\n this.endTime = now();\n\n if (this._finished) {\n return;\n }\n\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n\n clearTimeout(this._holdTimeout);\n this.dispose();\n }\n\n dispose() {\n let userEvents = this.userEvents,\n activeTouches = userEvents.touches || [];\n\n this._finished = true;\n this.pressEvent = null;\n\n clearTimeout(this._holdTimeout);\n // activeTouches.splice($.inArray(this, activeTouches), 1);\n const activeTouchIndex = activeTouches.indexOf(this);\n activeTouches.splice(activeTouchIndex, 1);\n }\n\n skip() {\n this.dispose();\n }\n\n cancel() {\n this.dispose();\n }\n\n isMoved() {\n return this._moved;\n }\n\n _start(touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n }\n\n _trigger(name, touchInfo) {\n let that = this,\n jQueryEvent = touchInfo.event,\n data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n }\n\n _withinIgnoreThreshold() {\n let xDelta = this.x.initialDelta,\n yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n}\n\nfunction withEachUpEvent(callback) {\n const eventMap = getEventMap(navigator.userAgent);\n let downEvents = eventMap.up.split(' '),\n idx = 0,\n length = downEvents.length;\n\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n}\n\nexport class UserEvents extends Observable {\n constructor(element, options) {\n super();\n let that = this;\n let filter;\n\n const support = getSupportedFeatures();\n this.support = support;\n\n /* eslint-disable no-param-reassign */\n options = options || {};\n /* eslint-enable no-param-reassign */\n this.options = options;\n\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n\n const enableGlobalSurface = !support.touch || support.mouseAndTouchPresent;\n\n extend(that, {\n element: element,\n surface: options.global && enableGlobalSurface ?\n element.ownerDocument.documentElement :\n options.surface || element,\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n\n this._surfaceMoveHandler = proxy(this._move, this);\n on(that.surface, applyEventMap('move'), this._surfaceMoveHandler);\n\n this._surfaceEndHandler = proxy(this._end, this);\n on(that.surface, applyEventMap('up cancel'), this._surfaceEndHandler);\n\n this._elementStartHandler = proxy(this._start, this);\n on(element, applyEventMap('down'), filter, this._elementStartHandler);\n\n if (that.useClickAsTap) {\n this._elementClickHandler = proxy(this._click, this);\n on(element, applyEventMap('click'), filter, this._elementClickHandler);\n }\n\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n let defaultAction = 'pinch-zoom double-tap-zoom';\n\n element.style['-ms-touch-action'] =\n options.touchAction && options.touchAction !== 'none' ?\n defaultAction + ' ' + options.touchAction :\n defaultAction;\n\n } else {\n element.style['touch-action'] = options.touchAction || 'none';\n }\n }\n if (options.preventDragEvent) {\n this._elementDragStartHandler = preventDefault;\n on(element, applyEventMap('dragstart'), this._elementDragStartHandler);\n }\n\n // element.on(kendo.applyEventMap('mousedown'), filter, {\n // root: element\n // } '_select');\n\n // todo: use root\n this._elementSelectHandler = proxy(this._select, this);\n on(element, applyEventMap('mousedown'), filter, this._elementSelectHandler);\n\n if (that.captureUpIfMoved && support.eventCapture) {\n let surfaceElement = that.surface,\n preventIfMovingProxy = proxy(that.preventIfMoving, that);\n\n withEachUpEvent(function(eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n }\n\n preventIfMoving(e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n }\n\n destroy() {\n let that = this;\n const options = this.options;\n const element = this.element;\n\n if (that._destroyed) {\n return;\n }\n\n that._destroyed = true;\n\n if (that.captureUpIfMoved && this.support.eventCapture) {\n let surfaceElement = that.surface;\n withEachUpEvent(function(eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n\n off(that.surface, applyEventMap('move'), this._surfaceMoveHandler);\n off(that.surface, applyEventMap('up cancel'), this._surfaceEndHandler);\n\n off(element, applyEventMap('down'), this._elementStartHandler);\n\n if (that.useClickAsTap) {\n off(element, applyEventMap('click'), this._elementClickHandler);\n }\n\n if (options.preventDragEvent) {\n off(element, applyEventMap('dragstart'), this._elementDragStartHandler);\n }\n\n off(element, applyEventMap('mousedown'), this._elementSelectHandler);\n\n that._disposeAll();\n that.unbind();\n\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n }\n\n capture() {\n UserEvents.current = this;\n }\n\n cancel() {\n this._disposeAll();\n this.trigger(CANCEL);\n }\n\n /* eslint-disable indent */\n notify(event, data) {\n let that = this,\n touches = that.touches;\n let eventName = event;\n\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n default:\n break;\n }\n\n extend(data, {\n touches: touches\n }, touchDelta(touches[0], touches[1]));\n }\n\n return this.trigger(eventName, extend(data, {\n type: eventName\n }));\n }\n /* eslint-enable indent */\n\n press(x, y, target) {\n this._apiCall('_start', x, y, target);\n }\n\n move(x, y) {\n this._apiCall('_move', x, y);\n }\n\n end(x, y) {\n this._apiCall('_end', x, y);\n }\n\n _isMultiTouch() {\n return this.touches.length > 1;\n }\n\n _maxTouchesReached() {\n return this.touches.length >= this._maxTouches;\n }\n\n _disposeAll() {\n let touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n }\n\n _isMoved() {\n return grep(this.touches, function(touch) {\n return touch.isMoved();\n }).length;\n }\n\n _select(e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n }\n\n _start(e) {\n let that = this,\n idx = 0,\n filter = that.filter,\n target,\n touches = getTouches(e),\n length = touches.length,\n touch,\n which = e.which;\n\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n\n touch = touches[idx];\n\n if (filter) {\n target = touch.currentTarget;\n } else {\n target = that.element;\n }\n\n if (target && target.length === 0) {\n continue;\n }\n\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n }\n\n _move(e) {\n this._eachTouch('move', e);\n }\n\n _end(e) {\n this._eachTouch('end', e);\n }\n\n _click(e) {\n let data = {\n touch: {\n initialTouch: e.target,\n target: e.currentTarget,\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: e.currentTarget,\n event: e,\n type: 'tap'\n };\n\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n }\n\n _eachTouch(methodName, e) {\n let that = this,\n dict = {},\n touches = getTouches(e),\n activeTouches = that.touches,\n idx,\n touch,\n touchInfo,\n matchingTouch;\n\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n }\n\n _apiCall(type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: target || this.element,\n stopPropagation: noop,\n preventDefault: noop\n });\n }\n\n static defaultThreshold(value) {\n DEFAULT_THRESHOLD = value;\n }\n\n static minHold(value) {\n DEFAULT_MIN_HOLD = value;\n }\n}\n","// todo: extract to a separate place\n\nimport {\n Class,\n deepExtend,\n addClass,\n isFunction,\n setDefaultOptions\n} from '../../common';\n\nimport {\n convertToHtml,\n prepend,\n wrapInner,\n contains,\n hasNativeScrolling,\n on,\n off,\n proxy,\n wheelDeltaY,\n setDefaultEvents\n} from '../utils';\n\nimport {\n Transition,\n Animation\n} from './fx';\n\nimport {\n Pane,\n PaneDimensions,\n Movable,\n TapCapture\n} from './draggable';\n\nimport {\n UserEvents\n} from './user-events';\n\nimport {\n Observable\n} from './observable';\n\nlet\n extend = Object.assign,\n abs = Math.abs,\n SNAPBACK_DURATION = 500,\n SCROLLBAR_OPACITY = 0.7,\n FRICTION = 0.96,\n VELOCITY_MULTIPLIER = 10,\n MAX_VELOCITY = 55,\n OUT_OF_BOUNDS_FRICTION = 0.5,\n ANIMATED_SCROLLER_PRECISION = 5,\n // SCROLLER_RELEASE_CLASS = 'km-scroller-release',\n // SCROLLER_REFRESH_CLASS = 'km-scroller-refresh',\n PULL = 'pull',\n CHANGE = 'change',\n RESIZE = 'resize',\n SCROLL = 'scroll',\n MOUSE_WHEEL_ID = 2;\n\nclass ZoomSnapBack extends Animation {\n constructor(options) {\n super(options);\n let that = this;\n extend(that, options);\n that.userEvents.bind('gestureend', that.start.bind(this));\n that.tapCapture.bind('press', that.cancel.bind(this));\n }\n\n enabled() {\n return this.movable.scale < this.dimensions.minScale;\n }\n\n done() {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n }\n\n tick() {\n let movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n }\n\n onEnd() {\n let movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n}\n\nclass DragInertia extends Animation {\n constructor(options) {\n super();\n let that = this;\n\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd() {\n that._end();\n }\n })\n });\n\n that.tapCapture.bind('press', function() {\n that.cancel();\n });\n\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n }\n\n onCancel() {\n this.transition.cancel();\n }\n\n freeze(location) {\n let that = this;\n that.cancel();\n that._moveTo(location);\n }\n\n onEnd() {\n let that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n }\n\n done() {\n return abs(this.velocity) < 1;\n }\n\n start(e) {\n let that = this,\n velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n super.start();\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n super.start();\n }\n }\n\n tick() {\n let that = this,\n dimension = that.dimension,\n friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n delta = that.velocity *= friction,\n location = that.movable[that.axis] + delta;\n\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n\n that.movable.moveAxis(that.axis, location);\n }\n\n _end() {\n this.tapCapture.cancelCapture();\n this.end();\n }\n\n _snapBack() {\n let that = this,\n dimension = that.dimension,\n snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n\n that._moveTo(snapBack);\n }\n\n _moveTo(location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n}\n\nclass AnimatedScroller extends Animation {\n constructor(options) {\n super(options);\n let that = this;\n\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n }\n\n tick() {\n this._updateCoordinates();\n this.moveTo(this.origin);\n }\n\n done() {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n }\n\n onEnd() {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n }\n\n setCoordinates(from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n }\n\n /* eslint-disable no-param-reassign */\n setCallback(callback) {\n if (callback && isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n }\n /* eslint-enable no-param-reassign */\n\n _updateCoordinates() {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n}\n\nclass ScrollBar extends Class {\n constructor(options) {\n super();\n let that = this,\n horizontal = options.axis === 'x';\n\n const orientation = (horizontal ? 'horizontal' : 'vertical');\n const element = convertToHtml('
    ');\n\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n\n that.scrollMovable.bind(CHANGE, that.refresh.bind(that));\n\n that.container.appendChild(element);\n\n if (options.alwaysVisible) {\n that.show();\n }\n }\n\n refresh() {\n let that = this,\n axis = that.axis,\n dimension = that.dimension,\n paneSize = dimension.size,\n scrollMovable = that.scrollMovable,\n sizeRatio = paneSize / dimension.total,\n position = Math.round(-scrollMovable[axis] * sizeRatio),\n size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.style.display = \"none\";\n } else {\n this.element.style.display = \"\";\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize !== size) {\n that.element.style[that.size] = size + 'px';\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n }\n\n show() {\n this.element.style.opacity = SCROLLBAR_OPACITY;\n this.element.style.visibility = \"visible\";\n }\n\n hide() {\n if (!this.alwaysVisible) {\n this.element.style.opacity = 0;\n }\n }\n}\n\n// export class Scroller extends Class {\nexport class Scroller extends Observable {\n constructor(element, options) {\n super();\n let that = this;\n this.element = element;\n\n this._initOptions(options);\n\n const hasScrolling = hasNativeScrolling(navigator.userAgent);\n that._native = that.options.useNative && hasScrolling;\n const scrollHeader = convertToHtml('
    ');\n\n if (that._native) {\n addClass(element, 'km-native-scroller');\n prepend(scrollHeader, element);\n\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children[0]\n });\n\n return;\n }\n\n element.style.overflow = \"hidden\";\n addClass(element, 'km-scroll-wrapper');\n\n const scrollContainer = convertToHtml('
    ');\n wrapInner(element, scrollContainer);\n prepend(scrollHeader, element);\n\n let inner = element.children[1],\n tapCapture = new TapCapture(element),\n movable = new Movable(inner),\n\n dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }),\n avoidScrolling = this.options.avoidScrolling,\n\n userEvents = new UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n supportDoubleTap: that.options.supportDoubleTap,\n start(e) {\n dimensions.refresh();\n let velocityX = abs(e.x.velocity),\n velocityY = abs(e.y.velocity),\n horizontalSwipe = velocityX * 2 >= velocityY,\n originatedFromFixedContainer = contains(that.fixedContainer, e.event.target),\n verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }),\n\n pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }),\n\n zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }),\n\n animatedScroller = new AnimatedScroller({\n moveTo(coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n\n movable.bind(CHANGE, function() {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n\n if (that.options.mousewheelScrolling) {\n this._wheelScrollHandler = this._wheelScroll.bind(this);\n on(element, 'wheel', this._wheelScrollHandler);\n }\n\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children[0]\n });\n\n that._initAxis('x');\n that._initAxis('y');\n\n that._wheelEnd = function() {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n\n dimensions.refresh();\n\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _wheelScroll(e) {\n if (e.ctrlKey) {\n return;\n }\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n let delta = wheelDeltaY(e);\n\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n\n e.preventDefault();\n }\n\n makeVirtual() {\n this.dimensions.y.makeVirtual();\n }\n\n virtualSize(min, max) {\n this.dimensions.y.virtualSize(min, max);\n }\n\n height() {\n return this.dimensions.y.size;\n }\n\n scrollHeight() {\n return this.scrollElement.scrollHeight;\n }\n\n scrollWidth() {\n return this.scrollElement.scrollWidth;\n }\n\n _resize() {\n if (!this._native) {\n this.contentResized();\n }\n }\n\n setOptions(options) {\n let that = this;\n\n this._initOptions(options);\n\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n }\n\n reset() {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n }\n\n contentResized() {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n }\n\n zoomOut() {\n let dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n }\n\n enable() {\n this.enabled = true;\n }\n\n disable() {\n this.enabled = false;\n }\n\n scrollTo(x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n }\n\n animatedScrollTo(x, y, callback) {\n let from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n }\n\n // kept for API compatibility, not used\n pullHandled() {\n // let that = this;\n\n // removeClass(that.refreshHint, SCROLLER_REFRESH_CLASS);\n // that.hintContainer.innerHTML = that.pullTemplate({}));\n\n // that.yinertia.onEnd();\n // that.xinertia.onEnd();\n // that.userEvents.cancel();\n }\n\n destroy() {\n const element = this.element;\n\n off(element, 'wheel', this._wheelScrollHandler);\n\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n }\n\n _scale(scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n }\n\n _initPullToRefresh() {\n }\n\n // kept for API compatibility, not used\n _dragEnd() {\n // let that = this;\n\n // if (!that.pulled) {\n // return;\n // }\n\n // that.pulled = false;\n\n // removeClass(that.refreshHint, SCROLLER_RELEASE_CLASS);\n // addClass(that.refreshHint, SCROLLER_REFRESH_CLASS);\n\n // that.hintContainer.innerHTML = that.refreshTemplate({});\n\n // that.yinertia.freeze(that.options.pullOffset / 2);\n // that.trigger('pull');\n }\n\n // kept for API compatibility, not used\n _paneChange() {\n // let that = this;\n // if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n // if (!that.pulled) {\n // that.pulled = true;\n // that.refreshHint.removeClass(SCROLLER_REFRESH_CLASS).addClass(SCROLLER_RELEASE_CLASS);\n // that.hintContainer.html(that.releaseTemplate({}));\n // that.hintContainer.html(that.releaseTemplate({}));\n // }\n // } else if (that.pulled) {\n // that.pulled = false;\n // that.refreshHint.removeClass(SCROLLER_RELEASE_CLASS);\n // that.hintContainer.html(that.pullTemplate({}));\n // }\n }\n\n _initAxis(axis) {\n let that = this,\n movable = that.movable,\n dimension = that.dimensions[axis],\n tapCapture = that.tapCapture,\n paneAxis = that.pane[axis],\n scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n\n dimension.bind(CHANGE, function() {\n scrollBar.refresh();\n });\n\n paneAxis.bind(CHANGE, function() {\n scrollBar.show();\n });\n\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end() {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n}\n\nsetDefaultOptions(Scroller, {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling() {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n});\n\nsetDefaultEvents(Scroller, [\n PULL,\n SCROLL,\n RESIZE\n]);\n\n","import {\n geometry as g,\n throttle\n} from '@progress/kendo-drawing';\n\nimport {\n addClass,\n setDefaultOptions,\n valueOrDefault,\n defined,\n mousewheelDelta,\n limitValue,\n deepExtend,\n elementOffset,\n isArray,\n round\n} from '../common';\n\nimport {\n EPSG3857\n} from './crs';\n\nimport {\n Attribution\n} from './attribution';\n\nimport {\n Navigator\n} from './navigator';\n\nimport {\n ZoomControl\n} from './zoom';\n\nimport {\n Location\n} from './location';\n\nimport {\n Extent\n} from './extent';\n\nimport { Tooltip } from './tooltip/tooltip';\n\nimport {\n TileLayer\n} from './layers/tile';\n\nimport {\n BubbleLayer\n} from './layers/bubble';\n\nimport {\n ShapeLayer\n} from './layers/shape';\n\nimport {\n MarkerLayer\n} from './layers/marker';\n\nimport {\n removeChildren,\n setDefaultEvents,\n proxy,\n now,\n on,\n off,\n getSupportedFeatures,\n convertToHtml,\n renderPos\n} from './utils';\n\nimport {\n Scroller\n} from './scroller/scroller';\n\nimport {\n Observable\n} from './scroller/observable';\n\nimport MapService from './../services/map-service';\n\nimport { CENTER_CHANGE, INIT, ZOOM_CHANGE } from './constants';\n\nlet math = Math,\n min = math.min,\n pow = math.pow,\n Point = g.Point,\n MARKER = \"marker\",\n LOCATION = \"location\",\n FRICTION = 0.9,\n FRICTION_MOBILE = 0.93,\n MOUSEWHEEL = 'wheel',\n MOUSEWHEEL_THROTTLE = 50,\n VELOCITY_MULTIPLIER = 5,\n DEFAULT_ZOOM_RATE = 1;\n\nconst layersMap = {\n bubble: BubbleLayer,\n shape: ShapeLayer,\n tile: TileLayer,\n [MARKER]: MarkerLayer\n};\n\nclass Map extends Observable {\n constructor(element, options = {}, themeOptions = {}, context = {}) {\n super();\n\n this._init(element, options, themeOptions, context);\n }\n\n destroy() {\n this.scroller.destroy();\n\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n\n if (isArray(this.markers)) {\n this.markers.forEach(markerLayer => {\n markerLayer.destroy();\n });\n } else {\n this.markers.destroy();\n }\n\n for (let i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n\n off(this.element, MOUSEWHEEL, this._mousewheelHandler);\n\n super.destroy();\n }\n\n _init(element, options = {}, themeOptions = {}, context = {}) {\n this.support = getSupportedFeatures();\n this.context = context;\n\n this.initObserver(context);\n this.initServices(context);\n this._notifyObserver(INIT);\n\n this._initOptions(options);\n this._setEvents(options);\n this.crs = new EPSG3857();\n\n this._initElement(element);\n\n this._viewOrigin = this._getOrigin();\n\n this._tooltip = this._createTooltip();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n\n const mousewheelThrottled = throttle(this._mousewheel.bind(this), MOUSEWHEEL_THROTTLE);\n this._mousewheelHandler = (e) => {\n e.preventDefault();\n mousewheelThrottled(e);\n };\n on(this.element, MOUSEWHEEL, this._mousewheelHandler);\n }\n\n _initOptions(options) {\n this.options = deepExtend({}, this.options, options);\n }\n\n _initElement(element) {\n this.element = element;\n\n addClass(element, \"k-map\");\n element.style.position = \"relative\";\n element.setAttribute(\"data-role\", \"map\");\n removeChildren(element);\n\n const div = convertToHtml(\"
    \");\n this.element.appendChild(div);\n }\n\n initServices(context = {}) {\n this.widgetService = new MapService(this, context);\n }\n\n initObserver(context = {}) {\n this.observers = [];\n this.addObserver(context.observer);\n }\n\n addObserver(observer) {\n if (observer) {\n this.observers.push(observer);\n }\n }\n\n removeObserver(observer) {\n const index = this.observers.indexOf(observer);\n\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n }\n\n requiresHandlers(eventNames) {\n const observers = this.observers;\n\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].requiresHandlers(eventNames)) {\n return true;\n }\n }\n }\n\n trigger(name, args = {}) {\n args.sender = this;\n\n const observers = this.observers;\n let isDefaultPrevented = false;\n\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n\n if (!isDefaultPrevented) {\n super.trigger(name, args);\n }\n\n return isDefaultPrevented;\n }\n\n _notifyObserver(name, args = {}) {\n args.sender = this;\n\n const observers = this.observers;\n let isDefaultPrevented = false;\n\n for (let idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n\n return isDefaultPrevented;\n }\n\n zoom(level) {\n let options = this.options;\n let result;\n\n if (defined(level)) {\n const zoomLevel = math.round(limitValue(level, options.minZoom, options.maxZoom));\n\n if (options.zoom !== zoomLevel) {\n options.zoom = zoomLevel;\n this.widgetService.notify(ZOOM_CHANGE, { zoom: options.zoom });\n\n this._reset();\n }\n result = this;\n } else {\n result = options.zoom;\n }\n\n return result;\n }\n\n center(center) {\n let result;\n\n if (center) {\n const current = Location.create(center);\n const previous = Location.create(this.options.center);\n if (!current.equals(previous)) {\n this.options.center = current.toArray();\n this.widgetService.notify(CENTER_CHANGE, { center: this.options.center });\n this._reset();\n }\n\n result = this;\n } else {\n result = Location.create(this.options.center);\n }\n\n return result;\n }\n\n extent(extent) {\n let result;\n\n if (extent) {\n this._setExtent(extent);\n result = this;\n } else {\n result = this._getExtent();\n }\n\n return result;\n }\n\n setOptions(options = {}) {\n const element = this.element;\n\n this.destroy();\n removeChildren(element);\n this._init(element, options, {}, this.context);\n\n this._reset();\n }\n\n locationToLayer(location, zoom) {\n let clamp = !this.options.wraparound;\n const locationObject = Location.create(location);\n\n return this.crs.toPoint(locationObject, this._layerSize(zoom), clamp);\n }\n\n layerToLocation(point, zoom) {\n let clamp = !this.options.wraparound;\n const pointObject = Point.create(point);\n\n return this.crs.toLocation(pointObject, this._layerSize(zoom), clamp);\n }\n\n locationToView(location) {\n const locationObject = Location.create(location);\n let origin = this.locationToLayer(this._viewOrigin);\n let point = this.locationToLayer(locationObject);\n\n return point.translateWith(origin.scale(-1));\n }\n\n viewToLocation(point, zoom) {\n const origin = this.locationToLayer(this._getOrigin(), zoom);\n const pointObject = Point.create(point);\n const pointResult = pointObject.clone().translateWith(origin);\n\n return this.layerToLocation(pointResult, zoom);\n }\n\n eventOffset(e) {\n let x;\n let y;\n let offset = elementOffset(this.element);\n\n if ((e.x && e.x[LOCATION]) || (e.y && e.y[LOCATION])) {\n x = e.x[LOCATION] - offset.left;\n y = e.y[LOCATION] - offset.top;\n } else {\n let event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n }\n\n const point = new g.Point(x, y);\n\n return point;\n }\n\n eventToView(e) {\n let cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n }\n\n eventToLayer(e) {\n return this.locationToLayer(this.eventToLocation(e));\n }\n\n eventToLocation(e) {\n let cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n }\n\n viewSize() {\n let element = this.element;\n let scale = this._layerSize();\n let width = element.clientWidth;\n\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n\n return {\n width: width,\n height: min(scale, element.clientHeight)\n };\n }\n\n exportVisual() {\n this._reset();\n return false;\n }\n\n hideTooltip() {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n }\n\n _setOrigin(origin, zoom) {\n let size = this.viewSize(),\n topLeft;\n\n const originLocation = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(originLocation, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n this.widgetService.notify(CENTER_CHANGE, { center: this.options.center });\n\n return this;\n }\n\n _getOrigin(invalidate) {\n let size = this.viewSize(),\n topLeft;\n\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n\n return this._origin;\n }\n\n _setExtent(newExtent) {\n let raw = Extent.create(newExtent);\n let se = raw.se.clone();\n\n if (this.options.wraparound && se.lng < 0 && newExtent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n\n const extent = new Extent(raw.nw, se);\n this.center(extent.center());\n let width = this.element.clientWidth;\n let height = this.element.clientHeight;\n let zoom;\n\n for (zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n let topLeft = this.locationToLayer(extent.nw, zoom);\n let bottomRight = this.locationToLayer(extent.se, zoom);\n let layerWidth = math.abs(bottomRight.x - topLeft.x);\n let layerHeight = math.abs(bottomRight.y - topLeft.y);\n\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n\n this.zoom(zoom);\n }\n\n _getExtent() {\n let nw = this._getOrigin();\n let bottomRight = this.locationToLayer(nw);\n let size = this.viewSize();\n\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n\n let se = this.layerToLocation(bottomRight);\n\n return new Extent(nw, se);\n }\n\n _zoomAround(pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n }\n\n _initControls() {\n let controls = this.options.controls;\n if (controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n\n if (!this.support.mobileOS) {\n if (controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n\n if (controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n }\n\n _createControlElement(options, defaultPosition) {\n let pos = options.position || defaultPosition;\n let posSelector = '.' + renderPos(pos).replace(' ', '.');\n let wrap = this.element.querySelector('.k-map-controls' + posSelector) || [];\n\n if (wrap.length === 0) {\n let div = document.createElement(\"div\");\n addClass(div, 'k-map-controls ' + renderPos(pos));\n wrap = div;\n this.element.appendChild(wrap);\n }\n\n let div = document.createElement(\"div\");\n\n wrap.appendChild(div);\n\n return div;\n }\n\n _createAttribution(options) {\n let element = this._createControlElement(options, 'bottomRight');\n this.attribution = new Attribution(element, options);\n }\n\n _createNavigator(options) {\n let element = this._createControlElement(options, 'topLeft');\n let navigator = this.navigator = new Navigator(element, deepExtend({}, options, { icons: this.options.icons }));\n\n this._navigatorPan = this._navigatorPan.bind(this);\n navigator.bind('pan', this._navigatorPan);\n\n this._navigatorCenter = this._navigatorCenter.bind(this);\n navigator.bind('center', this._navigatorCenter);\n }\n\n _navigatorPan(e) {\n let scroller = this.scroller;\n let x = scroller.scrollLeft + e.x;\n let y = scroller.scrollTop - e.y;\n let bounds = this._virtualSize;\n let width = this.element.clientWidth;\n let height = this.element.clientHeight;\n\n // TODO: Move limits to scroller\n x = limitValue(x, bounds.x.min, bounds.x.max - width);\n y = limitValue(y, bounds.y.min, bounds.y.max - height);\n\n this.scroller.one('scroll', proxy(this._scrollEnd, this));\n\n this.scroller.scrollTo(-x, -y);\n }\n\n _navigatorCenter() {\n this.center(this.options.center);\n }\n\n _createZoomControl(options) {\n let element = this._createControlElement(options, 'topLeft');\n let zoomControl = this.zoomControl = new ZoomControl(element, options, this.options.icons);\n\n this._zoomControlChange = this._zoomControlChange.bind(this);\n zoomControl.bind('change', this._zoomControlChange);\n }\n\n _zoomControlChange(e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n }\n\n _initScroller() {\n let friction = this.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n let zoomable = this.options.zoomable !== false;\n let scroller = this.scroller = new Scroller(this.element.children[0], {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false,\n supportDoubleTap: true\n });\n\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n scroller.userEvents.bind('doubleTap', proxy(this._doubleTap, this));\n scroller.userEvents.bind('tap', proxy(this._tap, this));\n\n this.scrollElement = scroller.scrollElement;\n }\n\n _initLayers() {\n let defs = this.options.layers,\n layers = this.layers = [];\n\n for (let i = 0; i < defs.length; i++) {\n let options = defs[i];\n\n const layer = this._createLayer(options);\n layers.push(layer);\n }\n }\n\n _createLayer(options) {\n let type = options.type || 'shape';\n let layerDefaults = this.options.layerDefaults[type];\n let layerOptions = type === MARKER ?\n deepExtend({}, this.options.markerDefaults, options, { icons: this.options.icons }) :\n deepExtend({}, layerDefaults, options);\n\n let layerConstructor = layersMap[type];\n let layer = new layerConstructor(this, layerOptions);\n\n if (type === MARKER) {\n this.markers = layer;\n }\n\n return layer;\n }\n\n _createTooltip() {\n return new Tooltip(this.widgetService, this.options.tooltip);\n }\n\n /* eslint-disable arrow-body-style */\n _initMarkers() {\n const markerLayers = (this.options.layers || []).filter(x => {\n return x && x.type === MARKER;\n });\n\n if (markerLayers.length > 0) {\n // render the markers from options.layers\n // instead of options.markers\n return;\n }\n\n this.markers = new MarkerLayer(this, deepExtend({}, this.options.markerDefaults, { icons: this.options.icons }));\n this.markers.add(this.options.markers);\n }\n /* eslint-enable arrow-body-style */\n\n _scroll(e) {\n let origin = this.locationToLayer(this._viewOrigin).round();\n let movable = e.sender.movable;\n let offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n\n this._tooltip.offset = offset;\n this.hideTooltip();\n\n this._setOrigin(this.layerToLocation(origin));\n\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n }\n\n _scrollEnd(e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n\n this._scrollOffset = null;\n this._panEndTimestamp = now();\n\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n }\n\n _panComplete() {\n return now() - (this._panEndTimestamp || 0) > 50;\n }\n\n _scaleStart(e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n let touch = e.touches[1];\n\n if (touch) {\n touch.cancel();\n }\n }\n }\n\n _scale(e) {\n let scale = this.scroller.movable.scale;\n let zoom = this._scaleToZoom(scale);\n let gestureCenter = new g.Point(e.center.x, e.center.y);\n let centerLocation = this.viewToLocation(gestureCenter, zoom);\n let centerPoint = this.locationToLayer(centerLocation, zoom);\n let originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n\n this._zoomAround(originPoint, zoom);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n\n _scaleToZoom(scaleDelta) {\n let scale = this._layerSize() * scaleDelta;\n let tiles = scale / this.options.minSize;\n let zoom = math.log(tiles) / math.log(2);\n\n return math.round(zoom);\n }\n\n _reset() {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n\n this._viewOrigin = this._getOrigin(true);\n\n this._resetScroller();\n this.hideTooltip();\n\n this.trigger('beforeReset');\n this.trigger('reset');\n }\n\n _resetScroller() {\n let scroller = this.scroller;\n let x = scroller.dimensions.x;\n let y = scroller.dimensions.y;\n let scale = this._layerSize();\n let nw = this.extent().nw;\n let topLeft = this.locationToLayer(nw).round();\n\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n\n let zoom = this.zoom();\n\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n\n let xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n\n let yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n\n if (this.options.pannable === false) {\n let viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n\n x.makeVirtual();\n y.makeVirtual();\n\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n }\n\n // kept for API compatibility, not used\n _renderLayers() {\n }\n\n _layerSize(zoom) {\n const newZoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, newZoom);\n }\n\n _tap(e) {\n if (!this._panComplete()) {\n return;\n }\n\n let cursor = this.eventOffset(e);\n this.hideTooltip();\n\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n }\n\n _doubleTap(e) {\n let options = this.options;\n\n if (options.zoomable !== false) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n let toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\n let cursor = this.eventOffset(e);\n let location = this.viewToLocation(cursor);\n let postZoom = this.locationToLayer(location, toZoom);\n let origin = postZoom.translate(-cursor.x, -cursor.y);\n\n this._zoomAround(origin, toZoom);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n }\n }\n\n _mousewheel(e) {\n let delta = mousewheelDelta(e) > 0 ? -1 : 1;\n let options = this.options;\n let fromZoom = this.zoom();\n let toZoom = limitValue(fromZoom + delta, options.minZoom, options.maxZoom);\n\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n let cursor = this.eventOffset(e);\n let location = this.viewToLocation(cursor);\n let postZoom = this.locationToLayer(location, toZoom);\n let origin = postZoom.translate(-cursor.x, -cursor.y);\n\n this._zoomAround(origin, toZoom);\n\n this.trigger('zoomEnd', {\n originalEvent: e\n });\n }\n }\n }\n\n _toDocumentCoordinates(point) {\n const offset = elementOffset(this.element);\n\n return {\n left: round(point.x + offset.left),\n top: round(point.y + offset.top)\n };\n }\n}\n\nsetDefaultOptions(Map, {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: {\n panStep: 100\n },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: {\n color: '#fff'\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: {\n position: 'top'\n }\n }\n },\n center: [\n 0,\n 0\n ],\n icons: {\n type: \"font\",\n svgIcons: {}\n },\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: {\n position: 'top'\n }\n },\n wraparound: true,\n // If set to true, GeoJSON layer \"Point\" features will be rendered as markers.\n // Otherwise, the points will be rendered as circles.\n // Defaults to `true` for KUI/jQuery, `false` everywhere else.\n renderPointsAsMarkers: false\n});\n\nsetDefaultEvents(Map, [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n\n // Events for implementing custom tooltips.\n 'markerMouseEnter',\n 'markerMouseLeave',\n\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n]);\n\nexport default Map;\n","class MapService {\n constructor(widget, context = {}) {\n this.sender = context.sender || widget;\n this.widget = widget;\n this.rtl = Boolean(context.rtl);\n }\n\n notify(name, args) {\n if (this.widget) {\n this.widget.trigger(name, args);\n }\n }\n}\n\nexport default MapService;\n","import { TRENDLINE_SERIES } from './constants';\nimport { INHERIT } from '../common/constants';\n\nconst BAR_GAP = 1.5;\nconst BAR_SPACING = 0.4;\nconst BLACK = '#000';\nconst SANS = 'Arial, Helvetica, sans-serif';\nconst SANS11 = \"11px \" + SANS;\nconst SANS12 = '12px ' + SANS;\nconst SANS16 = '16px ' + SANS;\nconst TRANSPARENT = 'transparent';\nconst WHITE = '#fff';\n\nconst notes = () => ({\n icon: {\n border: {\n width: 1\n }\n },\n label: {\n font: SANS12,\n padding: 3\n },\n line: {\n length: 10,\n width: 2\n },\n visible: true\n});\n\nconst axisDefaults = () => ({\n labels: {\n font: SANS12\n },\n notes: notes(),\n title: {\n font: SANS16,\n margin: 5\n }\n});\n\nconst areaSeries = () => ({\n highlight: {\n markers: {\n border: {}\n }\n },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n});\n\nconst rangeAreaSeries = () => ({\n highlight: {\n markers: {\n border: {}\n }\n },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n});\n\nconst barSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst boxPlotSeries = () => ({\n outliersField: \"\",\n meanField: \"\",\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n whiskers: {\n width: 3\n },\n mean: {\n width: 2\n },\n median: {\n width: 2\n }\n },\n mean: {\n width: 2\n },\n median: {\n width: 2\n },\n spacing: 0.3,\n whiskers: {\n width: 2\n }\n});\n\nconst bubbleSeries = () => ({\n border: {\n width: 0\n },\n labels: {\n background: TRANSPARENT\n },\n opacity: 0.6\n});\n\nconst bulletSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING,\n target: {\n color: \"#ff0000\"\n }\n});\n\nconst candlestickSeries = () => ({\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n line: {\n width: 2\n }\n },\n line: {\n color: BLACK,\n width: 1\n },\n spacing: 0.3\n});\n\nconst columnSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst donutSeries = () => ({\n margin: 1\n});\n\nconst lineSeries = () => ({\n width: 2\n});\n\nconst ohlcSeries = () => ({\n gap: 1,\n highlight: {\n line: {\n opacity: 1,\n width: 3\n }\n },\n line: {\n width: 1\n },\n spacing: 0.3\n});\n\nconst radarAreaSeries = () => ({\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.5\n});\n\nconst radarLineSeries = () => ({\n markers: {\n visible: false\n },\n width: 2\n});\n\nconst rangeBarSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst rangeColumnSeries = () => ({\n gap: BAR_GAP,\n spacing: BAR_SPACING\n});\n\nconst scatterLineSeries = () => ({\n width: 1\n});\n\nconst waterfallSeries = () => ({\n gap: 0.5,\n line: {\n color: BLACK,\n width: 1\n },\n spacing: BAR_SPACING\n});\n\nconst pieSeries = () => ({\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n});\n\nconst funnelSeries = () => ({\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n});\n\nconst pyramidSeries = funnelSeries;\n\nconst heatmapSeries = () => ({\n labels: {\n color: '',\n background: TRANSPARENT,\n visible: true\n },\n highlight: {\n border: {\n width: 0\n }\n }\n});\n\nconst trendlineSeriesDefaults = () => TRENDLINE_SERIES.reduce(\n (options, type) => {\n options[type] = {\n color: INHERIT,\n trendline: {},\n markers: {\n visible: false\n },\n width: 1,\n dashType: 'longDash'\n };\n\n return options;\n }, {});\n\nconst seriesDefaults = (options) => (Object.assign({\n visible: true,\n labels: {\n font: SANS11\n },\n overlay: options.gradients ? {} : {\n gradient: \"none\"\n },\n area: areaSeries(),\n rangeArea: rangeAreaSeries(),\n verticalRangeArea: rangeAreaSeries(),\n bar: barSeries(),\n boxPlot: boxPlotSeries(),\n bubble: bubbleSeries(),\n bullet: bulletSeries(),\n candlestick: candlestickSeries(),\n column: columnSeries(),\n heatmap: heatmapSeries(),\n pie: pieSeries(),\n donut: donutSeries(),\n funnel: funnelSeries(),\n pyramid: pyramidSeries(),\n horizontalWaterfall: waterfallSeries(),\n line: lineSeries(),\n notes: notes(),\n ohlc: ohlcSeries(),\n radarArea: radarAreaSeries(),\n radarLine: radarLineSeries(),\n polarArea: radarAreaSeries(),\n polarLine: radarLineSeries(),\n rangeBar: rangeBarSeries(),\n rangeColumn: rangeColumnSeries(),\n scatterLine: scatterLineSeries(),\n verticalArea: areaSeries(),\n verticalBoxPlot: boxPlotSeries(),\n verticalBullet: bulletSeries(),\n verticalLine: lineSeries(),\n waterfall: waterfallSeries()\n},\n trendlineSeriesDefaults()\n));\n\nconst title = () => ({\n font: SANS16\n});\n\nconst subtitle = () => ({\n font: SANS12\n});\n\nconst legend = () => ({\n labels: {\n font: SANS12\n }\n});\n\nexport const baseTheme = (options = {}) => ({\n axisDefaults: axisDefaults(),\n categoryAxis: {\n majorGridLines: {\n visible: true\n }\n },\n navigator: {\n pane: {\n height: 90,\n margin: {\n top: 10\n }\n }\n },\n seriesDefaults: seriesDefaults(options),\n title: title(),\n subtitle: subtitle(),\n legend: legend()\n});\n\n","/**\n * @hidden\n */\nexport const isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n","/* tslint:disable:object-literal-sort-keys max-line-length */\nimport { isWindowAvailable } from './util';\nconst agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)(\\.(\\d+(\\.\\d+)?))?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n};\nconst osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n};\nconst desktopBrowserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\nconst mobileBrowserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n};\nconst testRx = (agent, rxs, dflt) => {\n for (let rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n};\n/**\n * A function that detects the mobile browser based on the given UserAgent.\n *\n * @param ua - The user agent string.\n * @returns - A browser info object containing the browser type and version.\n *\n * @example\n * ```ts-no-run\n * const userAgent = 'Mozilla/5.0 (Linux; Android 8.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.3 Chrome/61.0.3163.81 Mobile Safari/537.36';\n * detectMobileOS(userAgent); // { android: true };\n * ```\n */\nexport const detectMobileOS = (ua) => {\n let minorVersion;\n let match = [];\n for (let agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (!match) {\n continue;\n }\n if (agent === 'windows' && 'plugins' in window.navigator) {\n return null;\n } // Break if not Metro/Mobile Windows\n const os = {};\n os.device = agent;\n os.browser = testRx(ua, mobileBrowserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3] ? match[3].replace('_', '.') : '.0';\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion +\n (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0'));\n os.cordova = typeof window.PhoneGap !== undefined\n || typeof window.cordova !== undefined; // Use file protocol to detect appModes.\n os.appMode = window.navigator.standalone\n || (/file|local|wmapp/).test(window.location.protocol)\n || os.cordova; // Use file protocol to detect appModes.\n return os;\n }\n }\n return null;\n};\n/**\n * A function that detects the desktop browser based on the given UserAgent.\n *\n * @param ua - The user agent string.\n * @returns - A browser info object containing the browser type and version.\n *\n * @example\n * ```ts-no-run\n * const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19';\n * detectDesktopBrowser(userAgent); // { chrome: true, webkit: true };\n * ```\n */\nexport const detectDesktopBrowser = (ua) => {\n let browserInfo = null;\n let match = [];\n for (let agent in desktopBrowserRxs) {\n if (desktopBrowserRxs.hasOwnProperty(agent)) {\n match = ua.match(desktopBrowserRxs[agent]);\n if (match) {\n browserInfo = {};\n browserInfo[agent] = true;\n browserInfo[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browserInfo.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browserInfo;\n};\nconst userAgent = isWindowAvailable() && window.navigator ? window.navigator.userAgent : null;\n/**\n * A constant holding the desktop browser info. The variable persists the result of the detectDesktopBrowser(window.navigator.userAgent) call.\n * If no desktop browser is detected, the constant will be `null`.\n */\nexport const browser = userAgent ? detectDesktopBrowser(userAgent) : null;\n/**\n * A constant holding the mobile OS info. The variable persists the result of the detectMobileOS(window.navigator.userAgent) call.\n * If no mobile OS is detected, the constant will be `null`.\n */\nexport const mobileOS = userAgent ? detectMobileOS(userAgent) : null;\n/**\n * A constant reporting the browser `touch` events support.\n */\nexport const touch = isWindowAvailable() && 'ontouchstart' in window;\n/**\n * @hidden\n * A constant reporting the browser `msPointers` events support.\n */\nexport const msPointers = browser && !browser.chrome && window.MSPointerEvent;\n/**\n * A constant reporting the browser `pointers` events support.\n */\nexport const pointers = browser && !browser.chrome && window.PointerEvent;\n/**\n * A constant reporting whether the browser is touch enabled.\n */\nexport const touchEnabled = mobileOS && (touch || msPointers || pointers);\n","const FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\n/**\n * @hidden\n */\nexport function fieldList(field) {\n const fields = [];\n field.replace(FIELD_REGEX, function (_match, index, indexAccessor, fieldName) {\n fields.push(index !== undefined ? index : (indexAccessor || fieldName));\n });\n return fields;\n}\n","import { fieldList } from './field-list';\nconst getterCache = {};\n// tslint:disable-next-line:no-string-literal\ngetterCache['undefined'] = obj => obj;\n/**\n * @hidden\n */\nexport function getter(field) {\n if (getterCache[field]) {\n return getterCache[field];\n }\n const fields = fieldList(field);\n getterCache[field] = function (obj) {\n let result = obj;\n for (let idx = 0; idx < fields.length && result; idx++) {\n result = result[fields[idx]];\n }\n return result;\n };\n return getterCache[field];\n}\n","import { fieldList } from './field-list';\nconst setterCache = {};\n// tslint:disable-next-line:no-string-literal\nsetterCache['undefined'] = obj => obj;\nconst defaultValue = (nextField, options) => options && options.arrays && !isNaN(Number(nextField)) ? [] : {};\n/**\n * @hidden\n */\nexport function setter(field) {\n if (setterCache[field]) {\n return setterCache[field];\n }\n const fields = fieldList(field);\n setterCache[field] = (obj, value, options) => {\n let root = obj;\n const depth = fields.length - 1;\n for (let idx = 0; idx < depth && root; idx++) {\n root = root[fields[idx]] = root[fields[idx]] || defaultValue(fields[idx + 1], options);\n }\n root[fields[depth]] = value;\n };\n return setterCache[field];\n}\n","/**\n * @hidden\n */\nexport const isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nexport const isBlank = (value) => value === null || value === undefined;\n/**\n * @hidden\n */\nexport const isArray = (value) => Array.isArray(value);\n/**\n * @hidden\n */\nexport const isFunction = (value) => typeof value === 'function';\n/**\n * @hidden\n */\nexport const isString = (value) => typeof value === 'string';\n/**\n * @hidden\n */\nexport const isTruthy = (value) => !!value;\n/**\n * @hidden\n */\nexport const isNullOrEmptyString = (value) => isBlank(value) || value.trim().length === 0;\n/**\n * @hidden\n */\nexport const isNotNullOrEmptyString = (value) => !isNullOrEmptyString(value);\n/**\n * @hidden\n */\nexport const isNumeric = (value) => !isNaN(value - parseFloat(value));\n/**\n * @hidden\n */\nexport const isDate = (value) => value && value.getTime;\n","import { isPresent } from '../utils';\n// tslint:enable:max-line-length\n/**\n * @hidden\n * Type guard for `CompositeFilterDescriptor`.\n */\nexport const isCompositeFilterDescriptor = (source) => {\n return isPresent(source.filters);\n};\n","/**\n * @hidden\n */\nexport const ifElse = (predicate, right, left) => value => predicate(value) ? right(value) : left(value);\n/**\n * @hidden\n * Performs the right-to-left function composition. Functions should have a unary.\n */\nexport const compose = (...args) => (data) => args.reduceRight((acc, curr) => curr(acc), data);\n/**\n * @hidden\n */\nexport const constant = x => () => x;\n/**\n * @hidden\n */\nexport const identity = x => x;\n","import { isPresent } from './utils';\nconst getterCache = {};\nconst FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\n// tslint:disable-next-line:no-string-literal\ngetterCache['undefined'] = obj => obj;\n/**\n * @hidden\n */\nexport const getter = (field, safe) => {\n const key = field + safe;\n if (getterCache[key]) {\n return getterCache[key];\n }\n const fields = [];\n field.replace(FIELD_REGEX, (_, index, indexAccessor, field) => {\n fields.push(isPresent(index) ? index : (indexAccessor || field));\n return undefined;\n });\n getterCache[key] = obj => {\n let result = obj;\n for (let idx = 0; idx < fields.length; idx++) {\n result = result[fields[idx]];\n if (!isPresent(result) && safe) {\n return result;\n }\n }\n return result;\n };\n return getterCache[key];\n};\n","import { isPresent, isNotNullOrEmptyString } from './utils';\nimport { serializeFilter } from './odata-filtering.operators';\nimport { ifElse, constant } from './funcs';\nconst serializeSort = (orderby) => {\n const str = orderby\n .filter(sort => isPresent(sort.dir))\n .map(sort => {\n const order = sort.field.replace(/\\./g, \"/\");\n return sort.dir === \"desc\" ? order + \" desc\" : order;\n }).join(\",\");\n return str ? `$orderby=${str}` : str;\n};\nconst emptyString = constant('');\nconst concat = a => b => a + b;\nconst serializeKey = (strings, val) => ifElse(isPresent, concat(strings[0]), emptyString)(val);\nconst rules = (settings, state) => (key) => ({\n \"filter\": serializeFilter(state.filter || {}, settings),\n \"skip\": serializeKey `$skip=${state.skip}`,\n \"sort\": serializeSort(state.sort || []),\n \"take\": serializeKey `$top=${state.take}`\n}[key]);\n// tslint:enable:max-line-length\n/**\n * Converts a [State]({% slug api_kendo-data-query_state %}) into an OData v4 compatible string.\n *\n * @param {State} state - The state that will be serialized.\n * @param {ODataSettings} settings - The settings that are used during the serialization.\n * @returns {string} - The serialized state.\n */\nexport const toODataString = (state, settings = {}) => (Object.keys(state)\n .map(rules(settings, state))\n .filter(isNotNullOrEmptyString)\n .join('&'));\n","import { isCompositeFilterDescriptor } from '../filtering/filter-descriptor.interface';\nimport { isPresent, isNotNullOrEmptyString, isArray } from '../utils';\nimport { getter } from '../accessor';\nimport { compose, ifElse, identity } from '../funcs';\nimport { isStringValue, isDateValue, quote, serializeFilters, toUTC, encodeValue } from '../filter-serialization.common';\nconst toQueryString = values => values.reduce((acc, [key, value]) => [...acc, `${key}=${value}`], []);\nconst toObject = values => values.reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), { [key]: value })), {});\nconst pairwise = key => value => [key, value];\nconst empty = () => null;\nconst isNotEmptyArray = value => isPresent(value) && isArray(value) && value.length > 0;\nconst has = accessor => value => isPresent(accessor(value));\nconst isNotEmpty = accessor => value => isNotEmptyArray(accessor(value));\nconst runOrEmpty = (predicate, fn) => ifElse(predicate, fn, empty);\nconst calcPage = ({ skip, take }) => Math.floor((skip || 0) / take) + 1;\nconst formatDescriptors = (accessor, formatter) => state => (accessor(state).map(formatter).join(\"~\"));\nconst removeAfter = (what) => (str) => str.slice(0, str.indexOf(what));\nconst replace = (patterns) => compose(...patterns.map(([left, right]) => (s) => s.replace(new RegExp(left, \"g\"), right)));\nconst sanitizeDateLiterals = replace([[\"\\\"\", \"\"], [\":\", \"-\"]]);\nconst removeAfterDot = removeAfter(\".\");\nconst directionFormatter = ({ field, dir = \"asc\" }) => `${field}-${dir}`;\nconst aggregateFormatter = ({ field, aggregate }) => `${field}-${aggregate}`;\nconst take = getter(\"take\");\nconst aggregates = getter(\"aggregates\");\nconst skip = getter(\"skip\");\nconst group = getter(\"group\");\nconst sort = getter(\"sort\", true);\nconst formatSort = formatDescriptors(sort, directionFormatter);\nconst formatGroup = formatDescriptors(group, directionFormatter);\nconst formatAggregates = formatDescriptors(aggregates, aggregateFormatter);\nconst prefixDateValue = value => `datetime'${value}'`;\nconst formatDateValue = compose(prefixDateValue, removeAfterDot, sanitizeDateLiterals, JSON.stringify, toUTC);\nconst formatDate = ({ field, value, ignoreCase, operator }) => ({\n value: formatDateValue(value),\n field,\n ignoreCase,\n operator\n});\nconst normalizeSort = (state) => Object.assign({}, state, {\n sort: (sort(state) || []).filter(({ dir }) => isNotNullOrEmptyString(dir))\n});\nconst transformSkip = compose(pairwise('page'), calcPage);\nconst transformTake = compose(pairwise('pageSize'), take);\nconst transformGroup = compose(pairwise('group'), formatGroup);\nconst transformSort = compose(pairwise('sort'), formatSort);\nconst transformAggregates = compose(pairwise('aggregate'), formatAggregates);\nconst serializePage = runOrEmpty(has(skip), transformSkip);\nconst serializePageSize = runOrEmpty(has(take), transformTake);\nconst serializeGroup = runOrEmpty(isNotEmpty(group), transformGroup);\nconst serializeAggregates = runOrEmpty(has(aggregates), transformAggregates);\nconst serializeSort = compose(runOrEmpty(isNotEmpty(sort), transformSort), normalizeSort);\nconst hasField = ({ field }) => isNotNullOrEmptyString(field);\nconst filterFormatter = ({ field, operator, value }) => `${field}~${operator}~${value}`;\nconst dateFormatter = ifElse(isDateValue, compose(filterFormatter, formatDate), filterFormatter);\nconst typedFormatter = encode => runOrEmpty(hasField, ifElse(isStringValue, compose(filterFormatter, quote, encode ? encodeValue : identity), dateFormatter));\nconst join = ({ logic }) => `~${logic}~`;\nconst serialize = encode => serializeFilters(filter => ifElse(isCompositeFilterDescriptor, serialize(encode), typedFormatter(encode))(filter), join);\nconst serializeFilter = ({ filter }, encode) => {\n if (filter && filter.filters) {\n const filters = serialize(encode)(filter);\n if (filters.length) {\n return ['filter', filters];\n }\n }\n return null;\n};\nconst rules = (state, encode = true) => key => ({\n \"aggregates\": serializeAggregates(state),\n \"filter\": serializeFilter(state, encode),\n \"group\": serializeGroup(state),\n \"skip\": serializePage(state),\n \"sort\": serializeSort(state),\n \"take\": serializePageSize(state)\n}[key]);\n/**\n * Converts a [DataSourceRequestState]({% slug api_kendo-data-query_datasourcerequeststate %}) into a string\n * that is comparable with the `DataSourceRequest` format in UI for ASP.NET MVC.\n *\n * @param {DataRequestState} state - The state that will be serialized.\n * @returns {string} - The serialized state.\n *\n * @example\n * {% platform_content angular %}\n * ```ts\n * import {\n * toDataSourceRequestString,\n * translateDataSourceResultGroups,\n * translateAggregateResults\n * } from '@progress/kendo-data-query';\n *\n * export class Service {\n * private BASE_URL: string = '...';\n *\n * constructor(private http: Http) { }\n *\n * // Omitted for brevity...\n *\n * private fetch(state: DataSourceRequestState): Observable {\n * const queryStr = `${toDataSourceRequestString(state)}`; //serialize the state\n * const hasGroups = state.group && state.group.length;\n *\n * return this.http\n * .get(`${this.BASE_URL}?${queryStr}`) //send the state to the server\n * .map(response => response.json())\n * .map(({Data, Total, AggregateResults}) => // process the response\n * ({\n * //if there are groups convert them to compatible format\n * data: hasGroups ? translateDataSourceResultGroups(Data) : Data,\n * total: Total,\n * // convert the aggregates if such exists\n * aggregateResult: translateAggregateResults(AggregateResults)\n * })\n * );\n * }\n * }\n * ```\n * {% endplatform_content %}\n *\n * {% platform_content react %}\n * ```jsx\n * import React from 'react';\n * import { toDataSourceRequestString, translateDataSourceResultGroups } from '@progress/kendo-data-query';\n *\n * export function withState(WrappedGrid) {\n * return class StatefullGrid extends React.Component {\n * constructor(props) {\n * super(props);\n * this.state = { dataState: { skip: 0, take: 20 } };\n * }\n *\n * render() {\n * return (\n * \n * );\n * }\n *\n * componentDidMount() {\n * this.fetchData(this.state.dataState);\n * }\n *\n * dataStateChange = (changeEvent) => {\n * this.setState({ dataState: changeEvent.data });\n * this.fetchData(changeEvent.data);\n * }\n *\n * fetchData(dataState) {\n * const queryStr = `${toDataSourceRequestString(dataState)}`; // Serialize the state\n * const hasGroups = dataState.group && dataState.group.length;\n *\n * const base_url = 'api/Products';\n * const init = { method: 'GET', accept: 'application/json', headers: {} };\n *\n * fetch(`${base_url}?${queryStr}`, init)\n * .then(response => response.json())\n * .then(({ data, total }) => {\n * this.setState({\n * data: hasGroups ? translateDataSourceResultGroups(data) : data,\n * total,\n * dataState\n * });\n * });\n * }\n * }\n * }\n * ```\n * {% endplatform_content %}\n */\nexport const toDataSourceRequestString = (state) => (toQueryString(Object.keys(state)\n .map(rules(state))\n .filter(isPresent)).join('&'));\n/**\n * Converts a [DataSourceRequestState]({% slug api_kendo-data-query_datasourcerequeststate %}) into an object\n * that is compatible with the `DataSourceRequest` format in UI for ASP.NET MVC.\n *\n * @param {DataRequestState} state - The state that will be serialized.\n * @returns {any} - The serialized state.\n */\nexport const toDataSourceRequest = (state) => (toObject(Object.keys(state)\n .map(rules(state, false))\n .filter(isPresent)));\n","import { isString, isDate } from './utils';\n/**\n * @hidden\n * Creates a single arity function which wraps the value based on the provided predicate.\n * @example\n * ```\n * wrapIf(() => ignoreCase) `tolower(${field})`\n * //ignoreCase=true -> tolower(${field})`\n * //ignoreCase=false -> ${field}`\n * ```\n */\nexport const wrapIf = predicate => (str, ...args) => predicate() ? `${str[0]}${args[0]}${str[1]}` : args[0];\n/**\n * @hidden\n */\nexport const toUTC = (date) => new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n/**\n * @hidden\n */\nexport const quote = ({ field, value, ignoreCase, operator }) => ({\n value: `'${value.replace(/'/g, \"''\")}'`,\n field,\n ignoreCase,\n operator\n});\n/**\n * @hidden\n */\nexport const encodeValue = ({ field, value, ignoreCase, operator }) => ({\n value: `${encodeURIComponent(value)}`,\n field,\n ignoreCase,\n operator\n});\n/**\n * @hidden\n */\nexport const toLower = ({ field, value, ignoreCase, operator }) => ({\n field: wrapIf(() => ignoreCase) `tolower(${field})`,\n value,\n ignoreCase,\n operator\n});\n/**\n * @hidden\n */\nexport const normalizeField = ({ field, value, ignoreCase, operator }) => ({\n value,\n field: field.replace(/\\./g, \"/\"),\n ignoreCase,\n operator\n});\n/**\n * @hidden\n */\nexport const isStringValue = x => isString(x.value);\n/**\n * @hidden\n */\nexport const isDateValue = x => isDate(x.value);\n/**\n * @hidden\n */\nexport const serializeFilters = (map, join) => (filter) => {\n const brackets = wrapIf(() => filter.filters.length > 1);\n return brackets `(${filter.filters\n .map(map)\n .join(join(filter))})`;\n};\n","import { isPresent } from '../utils';\nimport { compose } from '../funcs';\n// tslint:enable:max-line-length\nconst set = (field, target, value) => {\n target[field] = value;\n return target;\n};\nconst toCamelCase = str => str.replace(/(^[A-Z])/g, (_, g1) => g1.toLowerCase());\nconst prop = (fieldName) => (obj) => {\n const value = obj[fieldName];\n if (isPresent(value)) {\n return value;\n }\n return obj[toCamelCase(fieldName)];\n};\nconst member = prop(\"Member\");\nconst aggregateMethodName = prop(\"AggregateMethodName\");\nconst value = prop(\"Value\");\nconst convert = mapper => values => Object.keys(values).reduce(mapper.bind(null, values), {});\nconst translateAggregate = convert((source, acc, field) => set(field.toLowerCase(), acc, source[field]));\nconst translateAggregates = convert((source, acc, field) => set(field, acc, translateAggregate(source[field])));\nconst valueOrDefault = (value, defaultValue) => isPresent(value) ? value : defaultValue;\nconst normalizeGroup = group => ({\n aggregates: group.Aggregates || group.aggregates,\n field: group.Member || group.member || group.field,\n hasSubgroups: group.HasSubgroups || group.hasSubgroups || false,\n items: group.Items || group.items,\n value: valueOrDefault(group.Key, valueOrDefault(group.key, group.value))\n});\nconst translateGroup = compose(({ field, hasSubgroups, value, aggregates, items }) => ({\n aggregates: translateAggregates(aggregates),\n field,\n items: hasSubgroups ? items.map(translateGroup) : items,\n value\n}), normalizeGroup);\n// tslint:disable:max-line-length\n/**\n * Converts the grouped result, which is returned into the `Data` field of the UI for ASP.NET MVC `ToDataSourceResult` method, to a comparable format.\n * @param data - The value of the `Data` field of the response.\n * @returns {GroupResult[]} - The converted result.\n */\nexport const translateDataSourceResultGroups = (data) => data.map(translateGroup);\n/**\n * Converts the `AggregateResults` field content, which is returned by the UI for ASP.NET MVC `ToDataSourceResult` method, to a comparable format.\n * @param data - The value of the `AggregateResults` field of the response.\n * @returns {AggregateResult} - The converted result.\n */\n// tslint:enable:max-line-length\nexport const translateAggregateResults = (data) => ((data || []).reduce((acc, x) => set(member(x), acc, set(aggregateMethodName(x).toLowerCase(), acc[member(x)] || {}, value(x))), {}));\n","import { isPresent, isBlank } from '../utils';\nimport { getter } from '../accessor';\nconst compare = (a, b) => {\n if (isBlank(a)) {\n return a === b ? 0 : -1;\n }\n if (isBlank(b)) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : (a < b ? -1 : 0);\n};\nconst compareDesc = (a, b) => compare(b, a);\nconst descriptorAsFunc = (descriptor) => {\n if (typeof descriptor.compare === 'function') {\n return descriptor.compare;\n }\n const prop = getter(descriptor.field, true);\n return (a, b) => (descriptor.dir === 'asc' ? compare : compareDesc)(prop(a), prop(b));\n};\nconst initial = (_a, _b) => 0;\n// tslint:disable:max-line-length\n/**\n * Converts the `SortDescriptors` into a [Comparer]({% slug api_kendo-data-query_comparer %}) function that can be used through `Array.sort`. If multiple descriptors are provided, sorting is applied in a right-to-left order.\n * @param {SortDescriptor[]} descriptors - The descriptors which will be converted.\n * @returns {Comparer} - The produced function.\n *\n * @example\n * ```ts\n * import { composeSortDescriptors } from '@progress/kendo-data-query';\n *\n * const data = [{ name: \"Pork\" }, { name: \"Pepper\" }, { name: \"Beef\" } ];\n * const comparer = composeSortDescriptors([{ field: \"name\", dir: \"asc\" }]);\n * const result = data.sort(comparer);\n * // output: [{ name: \"Beef\" }, { name: \"Pepper\" }, { name: \"Pork\" }];\n * ```\n */\n// tslint:enable:max-line-length\nexport const composeSortDescriptors = (descriptors) => (descriptors\n .filter(x => isPresent(x.dir) || isPresent(x.compare))\n .map((descriptor) => descriptorAsFunc(descriptor))\n .reduce((acc, curr) => (a, b) => acc(a, b) || curr(a, b), initial));\n","import { isPresent, isNumeric, isDate } from './utils';\nimport { getter } from './accessor';\nconst valueToString = (value) => {\n value = isPresent(value) && value.getTime ? value.getTime() : value;\n return value + \"\";\n};\n/**\n * @hidden\n */\nexport const groupCombinator = (field) => {\n const prop = getter(field, true);\n let position = 0;\n return (agg, value) => {\n agg[field] = agg[field] || {};\n const groupValue = prop(value);\n const key = valueToString(groupValue);\n const values = agg[field][key] || { __position: position++, aggregates: {}, items: [], value: groupValue };\n values.items.push(value);\n agg[field][key] = values;\n return agg;\n };\n};\n/**\n * @hidden\n */\nexport const expandAggregates = (result = {}) => {\n Object.keys(result).forEach(field => {\n const aggregates = result[field];\n Object.keys(aggregates).forEach(aggregate => {\n aggregates[aggregate] = aggregates[aggregate].result();\n });\n });\n return result;\n};\nconst aggregatesFuncs = (name) => ({\n average: () => {\n let value = 0;\n let count = 0;\n return {\n calc: (curr) => {\n if (isNumeric(curr)) {\n value += curr;\n count++;\n }\n else {\n value = curr;\n }\n },\n result: () => isNumeric(value) ? value / count : value\n };\n },\n count: () => {\n let state = 0;\n return {\n calc: () => state++,\n result: () => state\n };\n },\n max: () => {\n let state = Number.NEGATIVE_INFINITY;\n return {\n calc: (value) => {\n state = isNumeric(state) || isDate(state) ? state : value;\n if (state < value && (isNumeric(value) || isDate(value))) {\n state = value;\n }\n },\n result: () => state\n };\n },\n min: () => {\n let state = Number.POSITIVE_INFINITY;\n return {\n calc: (value) => {\n state = isNumeric(state) || isDate(state) ? state : value;\n if (state > value && (isNumeric(value) || isDate(value))) {\n state = value;\n }\n },\n result: () => state\n };\n },\n sum: () => {\n let state = 0;\n return {\n calc: (value) => {\n value = isPresent(value) ? value : 0;\n state += value;\n },\n result: () => state\n };\n }\n}[name]());\n/**\n * @hidden\n */\nexport const aggregatesCombinator = (descriptors) => {\n const functions = descriptors.map(descriptor => {\n const fieldAccessor = getter(descriptor.field, true);\n const aggregateName = (descriptor.aggregate || \"\").toLowerCase();\n const aggregateAccessor = getter(aggregateName, true);\n return (state, value) => {\n const fieldAggregates = state[descriptor.field] || {};\n const aggregateFunction = aggregateAccessor(fieldAggregates)\n || aggregatesFuncs(aggregateName);\n aggregateFunction.calc(fieldAccessor(value));\n fieldAggregates[descriptor.aggregate] = aggregateFunction;\n state[descriptor.field] = fieldAggregates;\n return state;\n };\n });\n return (state, value) => functions.reduce((agg, calc) => calc(agg, value), state);\n};\n/**\n * @hidden\n * Adds the value to the `arr` and produces a new array.\n *\n * > The original array will be modified.\n */\nexport const concat = (arr, value) => {\n arr.push(value);\n return arr;\n};\n/**\n * @hidden\n * Returns a reducer that will apply the specified transformation to the value.\n */\nexport const map = (transform) => ((reduce) => ((acc, curr, index) => reduce(acc, transform(curr, index))));\n/**\n * @hidden\n * Returns a reducer that will filter out items which do not match the `Predicate`.\n */\nexport const filter = (predicate) => ((reduce) => ((acc, curr) => predicate(curr) ? reduce(acc, curr) : acc));\n/**\n * @hidden\n */\nexport const isTransformerResult = (source) => {\n return isPresent(source.__value);\n};\nconst reduced = (x) => {\n if (isTransformerResult(x)) {\n return x;\n }\n return {\n __value: x,\n reduced: true\n };\n};\n/**\n * @hidden\n * Returns a reducer that will take the specified number of items.\n */\nexport const take = (count) => ((reduce) => ((acc, curr) => count-- > 0 ? reduce(acc, curr) : reduced(acc)));\n/**\n * @hidden\n * Returns a reducer that will take the specified number of items.\n */\nexport const takeWhile = (predicate) => ((reduce) => ((acc, curr) => predicate(curr) ? reduce(acc, curr) : reduced(acc)));\n/**\n * @hidden\n * Returns a reducer that will skip the specified number of items.\n */\nexport const skip = (count) => ((reduce) => ((acc, curr) => count-- <= 0 ? reduce(acc, curr) : acc));\n/**\n * @hidden\n * Transforms the data by applying the supplied transformer.\n */\nexport const exec = (transform, initialValue, data) => {\n let result = initialValue;\n for (let idx = 0, length = data.length; idx < length; idx++) {\n result = transform(result, data[idx], idx);\n if (isTransformerResult(result)) {\n result = result.__value;\n break;\n }\n }\n return result;\n};\n","import { exec, map, aggregatesCombinator, expandAggregates } from '../transducers';\nconst identity = map(x => x);\n// tslint:disable:max-line-length\n/**\n * Applies the specified [AggregateDescriptors]({% slug api_kendo-data-query_aggregatedescriptor %}) to the data. Returns an [AggregateResult]({% slug api_kendo-data-query_aggregateresult %}) instance.\n *\n * @example\n * ```ts\n * const data = [\n * { unitPrice: 23, unitsInStock: 21 },\n * { unitPrice: 10, unitsInStock: 12 },\n * { unitPrice: 20, unitsInStock: 33 }\n * ];\n *\n * const result = aggregateBy(data, [\n * { aggregate: \"sum\", field: \"unitPrice\" },\n * { aggregate: \"sum\", field: \"unitsInStock\" }\n * ]);\n *\n * //output:\n * // {\n * // \"unitPrice\": { \"sum\": 53 },\n * // \"unitsInStock\": { \"sum\": 66 }\n * // }\n * ```\n * @param {T[]} data - The data on which the calculation will be executed.\n * @param {AggregateDescriptor[]} descriptors - The aggregate operations that will be executed.\n * @param {any} transformers - For internal use.\n * @returns {AggregateResult} - The aggregated result.\n * For more information, refer to the [aggregateresult](slug:api_kendo-data-query_aggregateresult) configuration.\n */\n// tslint:enable:max-line-length\nexport const aggregateBy = (data, descriptors = [], transformers = identity) => {\n const initialValue = {};\n if (!descriptors.length) {\n return initialValue;\n }\n const result = exec(transformers(aggregatesCombinator(descriptors)), initialValue, data);\n return expandAggregates(result);\n};\n","import { isPresent, isString, isArray } from '../utils';\nimport { isCompositeFilterDescriptor } from './filter-descriptor.interface';\nconst operatorMap = (key) => ({\n \"!=\": \"neq\",\n \"<\": \"lt\",\n \"<=\": \"lte\",\n \"==\": \"eq\",\n \">\": \"gt\",\n \">=\": \"gte\",\n equal: \"eq\",\n equals: \"eq\",\n equalto: \"eq\",\n ge: \"gte\",\n greater: \"gt\",\n greaterthan: \"gt\",\n greaterthanequal: \"gte\",\n isempty: \"isempty\",\n isequalto: \"eq\",\n isgreaterthan: \"gt\",\n isgreaterthanorequalto: \"gte\",\n islessthan: \"lt\",\n islessthanorequalto: \"lte\",\n isnotempty: \"isnotempty\",\n isnotequalto: \"neq\",\n isnull: \"isnull\",\n le: \"lte\",\n less: \"lt\",\n lessthan: \"lt\",\n lessthanequal: \"lte\",\n ne: \"neq\",\n notequal: \"neq\",\n notequals: \"neq\",\n notequalto: \"neq\",\n notsubstringof: \"doesnotcontain\"\n}[key.toLowerCase()] || key);\nconst normalizeOperator = (descriptor) => {\n if (descriptor.filters) {\n descriptor.filters = descriptor.filters.map(filter => {\n const result = Object.assign({}, filter);\n if (!isCompositeFilterDescriptor(filter) && isString(filter.operator)) {\n result.operator = operatorMap(filter.operator);\n }\n if (isCompositeFilterDescriptor(filter)) {\n normalizeOperator(result);\n }\n return result;\n });\n }\n};\nconst normalizeDescriptor = (descriptor) => {\n if (!isCompositeFilterDescriptor(descriptor)) {\n return {\n filters: isArray(descriptor) ? descriptor : [descriptor],\n logic: \"and\"\n };\n }\n return Object.assign({}, descriptor);\n};\n// tslint:disable:max-line-length\n/**\n * Converts a [FilterDescriptor]({% slug api_kendo-data-query_filterdescriptor %}) into a [CompositeFilterDescriptor]({% slug api_kendo-data-query_compositefilterdescriptor %}). If a `CompositeFilterDescriptor` is passed, no modifications will be made.\n *\n * @param {CompositeFilterDescriptor | FilterDescriptor} descriptor - The descriptor that will be normalized.\n * @returns {CompositeFilterDescriptor} - The normalized descriptor.\n */\n// tslint:enable:max-line-length\nexport const normalizeFilters = (descriptor) => {\n if (isPresent(descriptor)) {\n descriptor = normalizeDescriptor(descriptor);\n normalizeOperator(descriptor);\n }\n return descriptor;\n};\n","import { isCompositeFilterDescriptor } from \"./filter-descriptor.interface\";\nimport { getter } from \"../accessor\";\nimport { isFunction, isPresent, isDate, isString, isBlank, isNumeric } from \"../utils\";\nconst logic = {\n \"or\": {\n concat: (acc, fn) => a => acc(a) || fn(a),\n identity: () => false\n },\n \"and\": {\n concat: (acc, fn) => a => acc(a) && fn(a),\n identity: () => true\n }\n};\nconst operatorsMap = {\n contains: (a, b) => (a || \"\").indexOf(b) >= 0,\n doesnotcontain: (a, b) => (a || \"\").indexOf(b) === -1,\n doesnotendwith: (a, b) => (a || \"\").indexOf(b, (a || \"\").length - (b || \"\").length) < 0,\n doesnotstartwith: (a, b) => (a || \"\").lastIndexOf(b, 0) === -1,\n endswith: (a, b) => (a || \"\").indexOf(b, (a || \"\").length - (b || \"\").length) >= 0,\n eq: (a, b) => a === b,\n gt: (a, b) => a > b,\n gte: (a, b) => a >= b,\n isempty: (a) => a === '',\n isnotempty: (a) => a !== '',\n isnotnull: (a) => isPresent(a),\n isnull: (a) => isBlank(a),\n lt: (a, b) => a < b,\n lte: (a, b) => a <= b,\n neq: (a, b) => a != b,\n startswith: (a, b) => (a || \"\").lastIndexOf(b, 0) === 0\n};\nconst dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\nconst convertValue = (value, ignoreCase) => {\n if (value != null && isString(value)) {\n const date = dateRegExp.exec(value);\n if (date) {\n return new Date(+date[1]).getTime();\n }\n else if (ignoreCase) {\n return value.toLowerCase();\n }\n }\n else if (value != null && isDate(value)) {\n return value.getTime();\n }\n return value;\n};\nconst typedGetter = (prop, value, ignoreCase) => {\n if (!isPresent(value)) {\n return prop;\n }\n let acc = prop;\n if (isString(value)) {\n const date = dateRegExp.exec(value);\n if (date) {\n value = new Date(+date[1]);\n }\n else {\n acc = a => {\n const x = prop(a);\n if (typeof x === 'string' && ignoreCase) {\n return x.toLowerCase();\n }\n else {\n return isNumeric(x) ? x + \"\" : x;\n }\n };\n }\n }\n if (isDate(value)) {\n return a => {\n const x = acc(a);\n return isDate(x) ? x.getTime() : x;\n };\n }\n return acc;\n};\nconst transformFilter = ({ field, ignoreCase, value, operator }) => {\n field = !isPresent(field) ? a => a : field;\n ignoreCase = isPresent(ignoreCase) ? ignoreCase : true;\n const itemProp = typedGetter(isFunction(field) ? field : getter(field, true), value, ignoreCase);\n value = convertValue(value, ignoreCase);\n const op = isFunction(operator) ? operator : operatorsMap[operator];\n return a => op(itemProp(a), value, ignoreCase);\n};\n/**\n * @hidden\n */\nexport const transformCompositeFilter = (filter) => {\n const combiner = logic[filter.logic];\n return filter.filters\n .filter(isPresent)\n .map(x => isCompositeFilterDescriptor(x) ? transformCompositeFilter(x) : transformFilter(x))\n .reduce(combiner.concat, combiner.identity);\n};\n","import { isPresent } from '../utils';\nimport { isCompositeFilterDescriptor } from './filter-descriptor.interface';\nimport { normalizeFilters } from './filter.operators';\nimport { transformCompositeFilter } from \"./filter-no-eval\";\n// tslint:disable:max-line-length\n/**\n * Creates a [Predicate]({% slug api_kendo-data-query_predicate %}) function for the specified [CompositeFilterDescriptor]({% slug api_kendo-data-query_compositefilterdescriptor %}).\n *\n * @param {CompositeFilterDescriptor} descriptor - The descriptor for which the predicate is created.\n * @returns {Predicate} - The created function instance.\n *\n * @example\n * ```ts\n * import { compileFilter } from '@progress/kendo-data-query';\n *\n * const data = [{ name: \"Pork\" }, { name: \"Pepper\" }, { name: \"Beef\" } ];\n * const predicate = compileFilter({ logic: \"and\", filters: [{ field: \"name\", operator: \"startswith\", value: \"P\" }] });\n * const result = data.filter(predicate);\n *\n * ```\n */\n// tslint:enable:max-line-length\nexport const compileFilter = (descriptor) => {\n if (!descriptor || descriptor.filters.length === 0) {\n return () => true;\n }\n return transformCompositeFilter(descriptor);\n};\n// tslint:disable:max-line-length\n/**\n * Filters the provided array according to the specified [CompositeFilterDescriptor]({% slug api_kendo-data-query_compositefilterdescriptor %}).\n *\n * @param {T[]} data - The data that will be filtered.\n * @param {(CompositeFilterDescriptor | FilterDescriptor)} descriptor - The filter criteria that will be applied.\n * @returns {T[]} - The filtered data.\n *\n * @example\n * ```ts\n * import { filterBy } from '@progress/kendo-data-query';\n *\n * const data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n *\n * const result = filterBy(data, {\n * logic: 'and',\n * filters: [\n * { field: \"name\", operator: \"startswith\", value: \"p\", ignoreCase: true },\n * { field: \"subcategory\", operator: \"eq\", value: \"Meat\" },\n * ]\n * });\n *\n * // output:\n * // [{ \"name\": \"Pork\", \"category\": \"Food\", \"subcategory\": \"Meat\" }]\n * ```\n */\n// tslint:enable:max-line-length\nexport const filterBy = (data, descriptor) => {\n if (!isPresent(descriptor) || (isCompositeFilterDescriptor(descriptor) && descriptor.filters.length === 0)) {\n return data;\n }\n return data.filter(compileFilter(normalizeFilters(descriptor)));\n};\n","import { exec, map, groupCombinator } from '../transducers';\nimport { isArray, isPresent } from '../utils';\nimport { aggregateBy } from './aggregate.operators';\nimport { filterBy } from '../filtering/filter-expression.factory';\n/**\n * @hidden\n */\nexport const normalizeGroups = (descriptors) => {\n descriptors = isArray(descriptors) ? descriptors : [descriptors];\n return descriptors.map(x => Object.assign({ dir: \"asc\" }, x));\n};\nconst identity = map(x => x);\n/**\n * Groups the provided data according to the specified descriptors.\n *\n * @param {Array} data - The data that will be grouped.\n * @param {GroupDescriptor[]} descriptors - The descriptors.\n * @param {any} transformers - For internal use.\n * @param {Array} originalData - For internal use.\n * @returns {(Array> | T[])} - The grouped data.\n *\n * @example\n * ```ts\n *\n * import { groupBy } from '@progress/kendo-data-query';\n *\n * const data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n *\n * const result = groupBy(data, [{ field: \"subcategory\" }]);\n * ```\n */\nexport const groupBy = (data, descriptors = [], transformers = identity, originalData = data) => {\n descriptors = normalizeGroups(descriptors);\n if (!descriptors.length) {\n return data;\n }\n const descriptor = descriptors[0];\n const initialValue = {};\n const view = exec(transformers(groupCombinator(descriptor.field)), initialValue, data);\n const result = [];\n Object.keys(view).forEach(field => {\n Object.keys(view[field]).forEach(value => {\n const group = view[field][value];\n let aggregateResult = {};\n let filteredData = originalData;\n if (isPresent(descriptor.aggregates)) {\n filteredData = filterBy(originalData, {\n field: descriptor.field,\n ignoreCase: false,\n operator: 'eq',\n value: group.value\n });\n aggregateResult = aggregateBy(filteredData, descriptor.aggregates);\n }\n result[group.__position] = {\n aggregates: aggregateResult,\n field: field,\n items: descriptors.length > 1 ?\n groupBy(group.items, descriptors.slice(1), identity, filteredData)\n : group.items,\n value: group.value\n };\n });\n });\n return result;\n};\n","import { isPresent, isString } from './utils';\nimport { composeSortDescriptors } from './sorting/sort-array.operator';\nimport { groupBy, normalizeGroups } from './grouping/group.operators';\nimport { normalizeFilters } from './filtering/filter.operators';\nimport { compileFilter } from './filtering/filter-expression.factory';\nimport { exec, skip, take, filter, concat } from './transducers';\nimport { getter } from './accessor';\nimport { compose } from './funcs';\n/**\n * Orders the specified array according to the provided sort descriptors.\n *\n * @param {T[]} data - The data to be sorted.\n * @param {SortDescriptor[]} descriptors - The descriptors by which the data will be sorted.\n * @returns {T[]} - The sorted data.\n *\n * @example\n * ```ts\n * import { orderBy } from '@progress/kendo-data-query';\n *\n * const data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n *\n * const result = orderBy(data, [{ field: \"name\", dir: \"asc\" }]);\n * ```\n */\nexport const orderBy = (data, descriptors) => {\n if (descriptors.some(x => isPresent(x.dir) || isPresent(x.compare))) {\n data = data.slice(0);\n const comparer = composeSortDescriptors(descriptors);\n data.sort(comparer);\n }\n return data;\n};\nconst defaultComparer = (a, b) => a === b;\nconst normalizeComparer = (comparer) => {\n if (isString(comparer)) {\n const accessor = getter(comparer);\n comparer = (a, b) => accessor(a) === accessor(b);\n }\n return comparer;\n};\nconst _distinct = (data, comparer) => data.filter((x, idx, xs) => xs.findIndex(comparer.bind(null, x)) === idx);\n/**\n * Reduces the provided array so it contains only unique values.\n *\n * @param {T[]} data - The array that will be reduced.\n * @param {(Comparer | string)} comparer - An optional custom comparer function or the field name that will be used for comparison.\n * @returns {T[]} - The reduced data.\n *\n * @example\n * ```ts\n * import { distinct } from '@progress/kendo-data-query';\n *\n * const data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n *\n * const result = distinct(data, \"subcategory\");\n *\n * // output:\n * // result => [\n * // { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * // { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" }\n * // ];\n * ```\n */\nexport const distinct = (data, comparer = defaultComparer) => _distinct(data, normalizeComparer(comparer));\n/**\n * @hidden\n */\nexport const count = (data, predicate) => {\n let counter = 0;\n for (let idx = 0, length = data.length; idx < length; idx++) {\n if (predicate(data[idx])) {\n counter++;\n }\n }\n return counter;\n};\n/**\n * @hidden\n */\nexport const limit = (data, predicate) => {\n if (predicate) {\n return data.filter(predicate);\n }\n return data;\n};\n/**\n * Applies the specified operation descriptors to the data.\n *\n * @param {T[]} data - The data to be processed.\n * @param {State} state - The operation descriptors that will be applied to the data.\n * @returns {DataResult} - The processed data.\n *\n * @example\n * ```ts\n *\n * const result = process(data, {\n * skip: 10,\n * take: 20,\n * group: [{\n * field: 'category.categoryName',\n * aggregates: [\n * { aggregate: \"sum\", field: \"unitPrice\" },\n * { aggregate: \"sum\", field: \"unitsInStock\" }\n * ]\n * }],\n * sort: [{ field: 'productName', dir: 'desc' }],\n * filter: {\n * logic: \"or\",\n * filters: [\n * { field: \"discontinued\", operator: \"eq\", value: true },\n * { field: \"unitPrice\", operator: \"lt\", value: 22 }\n * ]\n * }\n * });\n *\n * ```\n */\nexport const process = (data, state) => {\n const { skip: skipCount, take: takeCount, filter: filterDescriptor, sort, group } = state;\n const sortDescriptors = [...normalizeGroups(group || []), ...sort || []];\n if (sortDescriptors.length) {\n data = orderBy(data, sortDescriptors);\n }\n const hasFilters = isPresent(filterDescriptor) && filter.length;\n const hasGroups = isPresent(group) && group.length;\n if (!hasFilters && !hasGroups) {\n return {\n data: takeCount ? data.slice(skipCount, skipCount + takeCount) : data,\n total: data.length\n };\n }\n let total;\n const transformers = [];\n let predicate;\n if (hasFilters) {\n predicate = compileFilter(normalizeFilters(filterDescriptor));\n total = count(data, predicate);\n transformers.push(filter(predicate));\n }\n else {\n total = data.length;\n }\n if (isPresent(skipCount) && isPresent(takeCount)) {\n transformers.push(skip(skipCount));\n transformers.push(take(takeCount));\n }\n if (transformers.length) {\n const transform = compose(...transformers);\n const result = hasGroups ?\n groupBy(data, group, transform, limit(data, predicate)) :\n exec(transform(concat), [], data);\n return { data: result, total: total };\n }\n return {\n data: hasGroups ? groupBy(data, group) : data,\n total: total\n };\n};\n","const proxy = (a, b) => (e) => b(a(e));\n\nconst bind = (el, event, callback) =>\n el.addEventListener && el.addEventListener(event, callback);\n\nconst unbind = (el, event, callback) =>\n el && el.removeEventListener && el.removeEventListener(event, callback);\n\nconst noop = () => { /* empty */ };\n\nconst preventDefault = e => e.preventDefault();\n\nconst touchRegExp = /touch/;\n\n// 300ms is the usual mouse interval;\n// // However, an underpowered mobile device under a heavy load may queue mouse events for a longer period.\nconst IGNORE_MOUSE_TIMEOUT = 2000;\n\nfunction normalizeEvent(e) {\n if (e.type.match(touchRegExp)) {\n return {\n pageX: e.changedTouches[0].pageX,\n pageY: e.changedTouches[0].pageY,\n clientX: e.changedTouches[0].clientX,\n clientY: e.changedTouches[0].clientY,\n type: e.type,\n originalEvent: e,\n isTouch: true\n };\n }\n\n return {\n pageX: e.pageX,\n pageY: e.pageY,\n clientX: e.clientX,\n clientY: e.clientY,\n offsetX: e.offsetX,\n offsetY: e.offsetY,\n type: e.type,\n ctrlKey: e.ctrlKey,\n shiftKey: e.shiftKey,\n altKey: e.altKey,\n originalEvent: e\n };\n}\n\nexport class Draggable {\n static supportPointerEvent() {\n return (typeof window !== 'undefined') && window.PointerEvent;\n }\n\n get document() {\n return this._element\n ? this._element.ownerDocument\n : document;\n }\n\n constructor({ press = noop, drag = noop, release = noop, mouseOnly = false }) {\n this._pressHandler = proxy(normalizeEvent, press);\n this._dragHandler = proxy(normalizeEvent, drag);\n this._releaseHandler = proxy(normalizeEvent, release);\n this._ignoreMouse = false;\n this._mouseOnly = mouseOnly;\n\n this._touchstart = (e) => {\n if (e.touches.length === 1) {\n this._pressHandler(e);\n }\n };\n\n this._touchmove = (e) => {\n if (e.touches.length === 1) {\n this._dragHandler(e);\n }\n };\n\n this._touchend = (e) => {\n // the last finger has been lifted, and the user is not doing gesture.\n // there might be a better way to handle this.\n if (e.touches.length === 0 && e.changedTouches.length === 1) {\n this._releaseHandler(e);\n this._ignoreMouse = true;\n setTimeout(this._restoreMouse, IGNORE_MOUSE_TIMEOUT);\n }\n };\n\n this._restoreMouse = () => {\n this._ignoreMouse = false;\n };\n\n this._mousedown = (e) => {\n const { which } = e;\n\n if ((which && which > 1) || this._ignoreMouse) {\n return;\n }\n\n bind(this.document, \"mousemove\", this._mousemove);\n bind(this.document, \"mouseup\", this._mouseup);\n this._pressHandler(e);\n };\n\n this._mousemove = (e) => {\n this._dragHandler(e);\n };\n\n this._mouseup = (e) => {\n unbind(this.document, \"mousemove\", this._mousemove);\n unbind(this.document, \"mouseup\", this._mouseup);\n this._releaseHandler(e);\n };\n\n this._pointerdown = (e) => {\n if (e.isPrimary && e.button === 0) {\n bind(this.document, \"pointermove\", this._pointermove);\n bind(this.document, \"pointerup\", this._pointerup);\n bind(this.document, \"pointercancel\", this._pointerup);\n bind(this.document, \"contextmenu\", preventDefault);\n\n this._pressHandler(e);\n }\n };\n\n this._pointermove = (e) => {\n if (e.isPrimary) {\n this._dragHandler(e);\n }\n };\n\n this._pointerup = (e) => {\n if (e.isPrimary) {\n unbind(this.document, \"pointermove\", this._pointermove);\n unbind(this.document, \"pointerup\", this._pointerup);\n unbind(this.document, \"pointercancel\", this._pointerup);\n unbind(this.document, \"contextmenu\", preventDefault);\n\n this._releaseHandler(e);\n }\n };\n }\n\n bindTo(element) {\n if (element === this._element) {\n return;\n }\n\n if (this._element) {\n this._unbindFromCurrent();\n }\n\n this._element = element;\n this._bindToCurrent();\n }\n\n _bindToCurrent() {\n const element = this._element;\n\n if (this._usePointers()) {\n bind(element, \"pointerdown\", this._pointerdown);\n return;\n }\n\n bind(element, \"mousedown\", this._mousedown);\n\n if (!this._mouseOnly) {\n bind(element, \"touchstart\", this._touchstart);\n bind(element, \"touchmove\", this._touchmove);\n bind(element, \"touchend\", this._touchend);\n }\n }\n\n _unbindFromCurrent() {\n const element = this._element;\n\n if (this._usePointers()) {\n unbind(element, \"pointerdown\", this._pointerdown);\n unbind(this.document, \"pointermove\", this._pointermove);\n unbind(this.document, \"pointerup\", this._pointerup);\n unbind(this.document, \"contextmenu\", preventDefault);\n unbind(this.document, \"pointercancel\", this._pointerup);\n return;\n }\n\n unbind(element, \"mousedown\", this._mousedown);\n\n if (!this._mouseOnly) {\n unbind(element, \"touchstart\", this._touchstart);\n unbind(element, \"touchmove\", this._touchmove);\n unbind(element, \"touchend\", this._touchend);\n }\n }\n\n _usePointers() {\n return !this._mouseOnly && Draggable.supportPointerEvent();\n }\n\n update({ press = noop, drag = noop, release = noop, mouseOnly = false }) {\n this._pressHandler = proxy(normalizeEvent, press);\n this._dragHandler = proxy(normalizeEvent, drag);\n this._releaseHandler = proxy(normalizeEvent, release);\n this._mouseOnly = mouseOnly;\n }\n\n destroy() {\n this._unbindFromCurrent();\n this._element = null;\n }\n}\n\n// Re-export as \"default\" field to address a bug\n// where the ES Module is imported by CommonJS code.\n//\n// See https://github.com/telerik/kendo-angular/issues/1314\nDraggable.default = Draggable;\n\n// Rollup won't output exports['default'] otherwise\nexport default Draggable;\n\n","import PathNode from './path-node';\nimport renderPath from './utils/render-path';\n\nclass ArcNode extends PathNode {\n renderPoints(ctx) {\n const path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n}\n\nexport default ArcNode;\n","import PathNode from './path-node';\n\nclass CircleNode extends PathNode {\n renderPoints(ctx) {\n const { center, radius } = this.srcElement.geometry();\n\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n}\n\nexport default CircleNode;\n","import Surface from './surface';\nimport { transform } from '../geometry';\nimport Group from '../shapes/group';\n\nexport default function exportImage(group, options) {\n const defaults = {\n width: \"800px\", height: \"600px\",\n cors: \"Anonymous\"\n };\n\n let exportRoot = group;\n const bbox = group.clippedBBox();\n\n\n if (bbox) {\n const origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n\n const size = bbox.getSize();\n defaults.width = size.width + \"px\";\n defaults.height = size.height + \"px\";\n }\n\n const surfaceOptions = Object.assign(defaults, options);\n\n const container = document.createElement(\"div\");\n const style = container.style;\n\n style.display = \"none\";\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n\n const surface = new Surface(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n\n const promise = surface.image();\n const destroy = () => {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n\n return promise;\n}","import Node from './node';\nimport traversable from '../mixins/traversable';\n\n\nclass GroupNode extends traversable(Node, \"childNodes\") {\n renderTo(ctx) {\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n const childNodes = this.childNodes;\n for (let i = 0; i < childNodes.length; i++) {\n let child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n\n ctx.restore();\n }\n}\n\nexport default GroupNode;\n","import PathNode from './path-node';\nimport { createPromise } from '../util';\n\nclass ImageNode extends PathNode {\n constructor(srcElement, cors) {\n super(srcElement);\n\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n\n this.loading = createPromise();\n\n const img = this.img = new Image();\n const src = srcElement.src();\n\n if (cors && !(/^data:/i.test(src))) {\n img.crossOrigin = cors;\n }\n\n if (src) {\n img.src = src;\n }\n\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n }\n\n renderTo(ctx) {\n if (this.loading.state() === \"resolved\") {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n\n this.drawImage(ctx);\n\n ctx.restore();\n }\n }\n\n optionsChange(e) {\n if (e.field === \"src\") {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n super.optionsChange(e);\n }\n }\n\n onLoad() {\n this.loading.resolve();\n this.invalidate();\n }\n\n onError() {\n this.loading.reject(new Error(\n \"Unable to load image '\" + this.img.src +\n \"'. Check for connectivity and verify CORS headers.\"\n ));\n }\n\n drawImage(ctx) {\n const rect = this.srcElement.rect();\n const topLeft = rect.topLeft();\n\n ctx.drawImage(\n this.img, topLeft.x, topLeft.y, rect.width(), rect.height()\n );\n }\n}\n\nexport default ImageNode;\n","import PathNode from './path-node';\nimport renderPath from './utils/render-path';\n\nclass MultiPathNode extends PathNode {\n renderPoints(ctx) {\n const paths = this.srcElement.paths;\n for (let i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n}\n\nexport default MultiPathNode;\n","const NODE_MAP = {};\n\nexport default NODE_MAP;","import BaseNode from '../core/base-node';\nimport NODE_MAP from './node-map';\nimport renderPath from './utils/render-path';\nimport { defined } from '../util';\n\nclass Node extends BaseNode {\n constructor(srcElement) {\n super(srcElement);\n if (srcElement) {\n this.initClip();\n }\n }\n\n initClip() {\n const clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n }\n\n clear() {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n this.clearClip();\n\n super.clear();\n }\n\n clearClip() {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n }\n\n setClip(ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n }\n\n optionsChange(e) {\n if (e.field === \"clip\") {\n this.clearClip();\n this.initClip();\n }\n\n super.optionsChange(e);\n }\n\n setTransform(ctx) {\n if (this.srcElement) {\n const transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n }\n\n loadElements(elements, pos, cors) {\n for (let i = 0; i < elements.length; i++) {\n let srcElement = elements[i];\n let children = srcElement.children;\n\n let childNode = new NODE_MAP[srcElement.nodeType](srcElement, cors);\n\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n\n if (defined(pos)) {\n this.insertAt(childNode, pos);\n } else {\n this.append(childNode);\n }\n }\n }\n\n load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n\n this.invalidate();\n }\n\n setOpacity(ctx) {\n if (this.srcElement) {\n const opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n }\n\n globalAlpha(ctx, value) {\n let opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n }\n\n visible() {\n const src = this.srcElement;\n return !src || (src && src.options.visible !== false);\n }\n}\n\nexport default Node;","import Node from './node';\nimport { parseColor } from '../common';\nimport { isTransparent, valueOrDefault } from '../util';\nimport LinearGradient from '../gradients/linear-gradient';\nimport RadialGradient from '../gradients/radial-gradient';\nimport { DASH_ARRAYS, SOLID, BUTT } from '../core/constants';\nimport renderPath from './utils/render-path';\n\nfunction addGradientStops(gradient, stops) {\n for (let idx = 0; idx < stops.length; idx++) {\n let stop = stops[idx];\n let color = parseColor(stop.color());\n\n color.a *= stop.opacity();\n\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n}\n\nclass PathNode extends Node {\n\n renderTo(ctx) {\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n this.renderPoints(ctx, this.srcElement);\n\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n\n this.setFill(ctx);\n this.setStroke(ctx);\n\n ctx.restore();\n }\n\n setFill(ctx) {\n const fill = this.srcElement.options.fill;\n let hasFill = false;\n\n if (fill) {\n if (fill.nodeType === \"Gradient\") {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n\n hasFill = true;\n }\n }\n\n return hasFill;\n }\n\n setGradientFill(ctx, fill) {\n const bbox = this.srcElement.rawBBox();\n let gradient;\n\n if (fill instanceof LinearGradient) {\n let start = fill.start();\n let end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n let center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n\n addGradientStops(gradient, fill.stops);\n\n ctx.save();\n\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n\n ctx.restore();\n }\n\n setStroke(ctx) {\n const stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n\n return true;\n }\n }\n\n dashType() {\n const stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n }\n\n setLineDash(ctx) {\n const dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n const dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n }\n\n setLineCap(ctx) {\n const dashType = this.dashType();\n const stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n }\n\n setLineJoin(ctx) {\n const stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n }\n\n renderPoints(ctx, path) {\n renderPath(ctx, path);\n }\n}\n\nexport default PathNode;\n","import { Path } from '../shapes/path';\nimport PathNode from './path-node';\n\nclass RectNode extends PathNode {\n renderPoints(ctx) {\n const geometry = this.srcElement.geometry();\n const [ rx, ry ] = geometry.cornerRadius;\n\n if (rx === 0 && ry === 0) {\n const { origin, size } = geometry;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n } else {\n super.renderPoints(ctx, Path.fromRect(geometry));\n }\n }\n}\n\nexport default RectNode;\n","import GroupNode from './group-node';\nimport traversable from '../mixins/traversable';\nimport { animationFrame, throttle } from '../common';\n\n\nconst FRAME_DELAY = 1000 / 60;\n\nclass RootNode extends traversable(GroupNode, \"childNodes\") {\n constructor(canvas, size) {\n super();\n\n this.canvas = canvas;\n this.size = size;\n this.ctx = canvas.getContext(\"2d\");\n\n const invalidateHandler = this._invalidate.bind(this);\n this.invalidate = throttle(() => {\n animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n }\n\n destroy() {\n super.destroy();\n this.canvas = null;\n this.ctx = null;\n }\n\n load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n }\n\n _rescale(scale) {\n const { canvas, size } = this;\n canvas.width = size.width * scale;\n canvas.height = size.height * scale;\n this.ctx.scale(scale, scale);\n }\n\n _devicePixelRatio() {\n if (typeof window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n\n return 1;\n }\n\n _invalidate(options) {\n if (!this.ctx) {\n return;\n }\n\n const fixedScale = options && options.fixedScale;\n const scale = fixedScale ? 1 : this._devicePixelRatio();\n this._rescale(scale);\n\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n}\n\nexport default RootNode;\n","import BaseSurface from '../core/surface';\nimport { createPromise, promiseAll, bindEvents, elementSize, unbindEvents } from '../util';\nimport RootNode from './root-node';\nimport ShapesQuadTree from '../search/shapes-quad-tree';\nimport SurfaceCursor from './surface-cursor';\n\nimport ArcNode from './arc-node';\nimport CircleNode from './circle-node';\nimport GroupNode from './group-node';\nimport ImageNode from './image-node';\nimport MultiPathNode from './multi-path-node';\nimport PathNode from './path-node';\nimport RectNode from './rect-node';\nimport TextNode from './text-node';\nimport NODE_MAP from './node-map';\n\nNODE_MAP.Arc = ArcNode;\nNODE_MAP.Circle = CircleNode;\nNODE_MAP.Group = GroupNode;\nNODE_MAP.Image = ImageNode;\nNODE_MAP.MultiPath = MultiPathNode;\nNODE_MAP.Path = PathNode;\nNODE_MAP.Rect = RectNode;\nNODE_MAP.Text = TextNode;\n\n\nclass Surface extends BaseSurface {\n get type() {\n return \"canvas\";\n }\n\n constructor(element, options) {\n super(element, options);\n\n this.element.innerHTML = this._template(this);\n\n const canvas = this.element.firstElementChild;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n\n const size = elementSize(element);\n\n canvas.width = size.width;\n canvas.height = size.height;\n\n this._rootElement = canvas;\n\n this._root = new RootNode(canvas, size);\n\n this._mouseTrackHandler = this._trackMouse.bind(this);\n\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n\n destroy() {\n super.destroy();\n\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n\n draw(element) {\n super.draw(element);\n this._root.load([ element ], undefined, this.options.cors);\n\n if (this._searchTree) {\n this._searchTree.add([ element ]);\n }\n }\n\n clear() {\n super.clear();\n this._root.clear();\n\n if (this._searchTree) {\n this._searchTree.clear();\n }\n\n if (this._cursor) {\n this._cursor.clear();\n }\n }\n\n eventTarget(e) {\n if (this._searchTree) {\n const point = this._surfacePoint(e);\n const shape = this._searchTree.pointShape(point);\n return shape;\n }\n }\n\n image() {\n const { _root: root, _rootElement: rootElement } = this;\n const loadingStates = [];\n\n root.traverse((childNode) => {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n\n const promise = createPromise();\n const resolveDataURL = () => {\n root._invalidate({ fixedScale: true });\n\n try {\n const data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n\n return promise;\n }\n\n suspendTracking() {\n super.suspendTracking();\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n }\n\n resumeTracking() {\n super.resumeTracking();\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n\n const childNodes = this._root.childNodes;\n const rootElements = [];\n for (let idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n }\n\n _resize() {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n\n this._root.size = this._size;\n this._root.invalidate();\n }\n\n _template() {\n return \"\";\n }\n\n _enableTracking() {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n\n super._enableTracking();\n }\n\n _trackMouse(e) {\n if (this._suspendedTracking) {\n return;\n }\n\n const shape = this.eventTarget(e);\n\n if (e.type !== \"click\") {\n const currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger(\"mouseleave\", {\n element: currentShape,\n originalEvent: e,\n type: \"mouseleave\"\n });\n }\n\n if (shape && currentShape !== shape) {\n this.trigger(\"mouseenter\", {\n element: shape,\n originalEvent: e,\n type: \"mouseenter\"\n });\n }\n\n this.trigger(\"mousemove\", {\n element: shape,\n originalEvent: e,\n type: \"mousemove\"\n });\n\n this._currentShape = shape;\n } else if (shape) {\n this.trigger(\"click\", {\n element: shape,\n originalEvent: e,\n type: \"click\"\n });\n }\n }\n}\n\nexport default Surface;\n","import { defined } from '../util';\n\nclass SurfaceCursor {\n\n constructor(surface) {\n surface.bind(\"mouseenter\", this._mouseenter.bind(this));\n surface.bind(\"mouseleave\", this._mouseleave.bind(this));\n\n this.element = surface.element;\n }\n\n clear() {\n this._resetCursor();\n }\n\n destroy() {\n this._resetCursor();\n delete this.element;\n }\n\n _mouseenter(e) {\n const cursor = this._shapeCursor(e);\n\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n\n this._setCursor(cursor);\n }\n }\n\n _mouseleave() {\n this._resetCursor();\n }\n\n _shapeCursor(e) {\n let shape = e.element;\n\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n\n if (shape) {\n return shape.options.cursor;\n }\n }\n\n _getCursor() {\n if (this.element) {\n return this.element.style.cursor;\n }\n }\n\n _setCursor(cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n }\n\n _resetCursor() {\n if (this._current) {\n this._setCursor(this._defaultCursor || \"\");\n delete this._current;\n }\n }\n}\n\nexport default SurfaceCursor;\n\n","import PathNode from './path-node';\n\nclass TextNode extends PathNode {\n renderTo(ctx) {\n const text = this.srcElement;\n const pos = text.position();\n const size = text.measure();\n\n ctx.save();\n\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n\n ctx.beginPath();\n\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n\n ctx.restore();\n }\n}\n\n\nexport default TextNode;\n","\nexport default function renderPath(ctx, path) {\n const segments = path.segments;\n\n if (segments.length === 0) {\n return;\n }\n\n let segment = segments[0];\n let anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n\n for (let i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n\n let prevSeg = segments[i - 1];\n let prevOut = prevSeg.controlOut();\n let controlIn = segment.controlIn();\n\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y,\n controlIn.x, controlIn.y,\n anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n\n if (path.options.closed) {\n ctx.closePath();\n }\n}\n","let animationFrameProxy = (callback) => {\n const wnd = typeof window !== \"undefined\" ? window : {};\n const animationFrame = wnd.requestAnimationFrame ||\n wnd.webkitRequestAnimationFrame ||\n wnd.mozRequestAnimationFrame ||\n wnd.oRequestAnimationFrame ||\n wnd.msRequestAnimationFrame ||\n function(callback) { setTimeout(callback, 1000 / 60); };\n\n animationFrameProxy = callback => animationFrame.call(wnd, callback);\n animationFrameProxy(callback);\n};\n\nexport default animationFrameProxy;\n","export default class Class {\n // Empty base class needed for compatibility with Kendo UI for jQuery\n}\n","import Class from '../class';\nimport namedColors from './named-colors';\nimport { Bytes, RGB, HSV, HSL } from './parse-color';\n\nconst DARK_TRESHOLD = 180;\n\nclass Color extends Class {\n constructor(value) {\n super();\n\n if (arguments.length === 1) {\n const formats = Color.formats;\n const resolvedColor = this.resolveColor(value);\n\n for (let idx = 0; idx < formats.length; idx++) {\n const formatRegex = formats[idx].re;\n const processor = formats[idx].process;\n const parts = formatRegex.exec(resolvedColor);\n\n if (parts) {\n const channels = processor(parts);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n }\n\n toHex() {\n const pad = this.padDigit;\n const r = this.r.toString(16);\n const g = this.g.toString(16);\n const b = this.b.toString(16);\n\n return \"#\" + pad(r) + pad(g) + pad(b);\n }\n\n resolveColor(value) {\n let color = value || \"black\";\n\n if (color.charAt(0) === \"#\") {\n color = color.substr(1, 6);\n }\n\n color = color.replace(/ /g, \"\");\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n\n return color;\n }\n\n normalizeByte(value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n\n return value > 255 ? 255 : value;\n }\n\n padDigit(value) {\n return (value.length === 1) ? \"0\" + value : value;\n }\n\n brightness(value) {\n const round = Math.round;\n\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n\n return this;\n }\n\n percBrightness() {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n\n isDark() {\n return this.percBrightness() < DARK_TRESHOLD;\n }\n\n static fromBytes(r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n }\n\n static fromRGB(r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n }\n\n static fromHSV(h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n }\n\n static fromHSL(h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n }\n}\n\nColor.formats = [ {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function(parts) {\n return [\n parseInt(parts[1], 10), parseInt(parts[2], 10), parseInt(parts[3], 10)\n ];\n }\n}, {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function(parts) {\n return [\n parseInt(parts[1], 16), parseInt(parts[2], 16), parseInt(parts[3], 16)\n ];\n }\n}, {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function(parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n} ];\n\nColor.namedColors = namedColors;\n\nexport default Color;","const namedColors = {\n aliceblue: \"f0f8ff\", antiquewhite: \"faebd7\", aqua: \"00ffff\",\n aquamarine: \"7fffd4\", azure: \"f0ffff\", beige: \"f5f5dc\",\n bisque: \"ffe4c4\", black: \"000000\", blanchedalmond: \"ffebcd\",\n blue: \"0000ff\", blueviolet: \"8a2be2\", brown: \"a52a2a\",\n burlywood: \"deb887\", cadetblue: \"5f9ea0\", chartreuse: \"7fff00\",\n chocolate: \"d2691e\", coral: \"ff7f50\", cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\", crimson: \"dc143c\", cyan: \"00ffff\",\n darkblue: \"00008b\", darkcyan: \"008b8b\", darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\", darkgrey: \"a9a9a9\", darkgreen: \"006400\",\n darkkhaki: \"bdb76b\", darkmagenta: \"8b008b\", darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\", darkorchid: \"9932cc\", darkred: \"8b0000\",\n darksalmon: \"e9967a\", darkseagreen: \"8fbc8f\", darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\", darkslategrey: \"2f4f4f\", darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\", deeppink: \"ff1493\", deepskyblue: \"00bfff\",\n dimgray: \"696969\", dimgrey: \"696969\", dodgerblue: \"1e90ff\",\n firebrick: \"b22222\", floralwhite: \"fffaf0\", forestgreen: \"228b22\",\n fuchsia: \"ff00ff\", gainsboro: \"dcdcdc\", ghostwhite: \"f8f8ff\",\n gold: \"ffd700\", goldenrod: \"daa520\", gray: \"808080\",\n grey: \"808080\", green: \"008000\", greenyellow: \"adff2f\",\n honeydew: \"f0fff0\", hotpink: \"ff69b4\", indianred: \"cd5c5c\",\n indigo: \"4b0082\", ivory: \"fffff0\", khaki: \"f0e68c\",\n lavender: \"e6e6fa\", lavenderblush: \"fff0f5\", lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\", lightblue: \"add8e6\", lightcoral: \"f08080\",\n lightcyan: \"e0ffff\", lightgoldenrodyellow: \"fafad2\", lightgray: \"d3d3d3\",\n lightgrey: \"d3d3d3\", lightgreen: \"90ee90\", lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\", lightseagreen: \"20b2aa\", lightskyblue: \"87cefa\",\n lightslategray: \"778899\", lightslategrey: \"778899\", lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\", lime: \"00ff00\", limegreen: \"32cd32\",\n linen: \"faf0e6\", magenta: \"ff00ff\", maroon: \"800000\",\n mediumaquamarine: \"66cdaa\", mediumblue: \"0000cd\", mediumorchid: \"ba55d3\",\n mediumpurple: \"9370d8\", mediumseagreen: \"3cb371\", mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\", mediumturquoise: \"48d1cc\", mediumvioletred: \"c71585\",\n midnightblue: \"191970\", mintcream: \"f5fffa\", mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\", navajowhite: \"ffdead\", navy: \"000080\",\n oldlace: \"fdf5e6\", olive: \"808000\", olivedrab: \"6b8e23\",\n orange: \"ffa500\", orangered: \"ff4500\", orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\", palegreen: \"98fb98\", paleturquoise: \"afeeee\",\n palevioletred: \"d87093\", papayawhip: \"ffefd5\", peachpuff: \"ffdab9\",\n peru: \"cd853f\", pink: \"ffc0cb\", plum: \"dda0dd\",\n powderblue: \"b0e0e6\", purple: \"800080\", red: \"ff0000\",\n rosybrown: \"bc8f8f\", royalblue: \"4169e1\", saddlebrown: \"8b4513\",\n salmon: \"fa8072\", sandybrown: \"f4a460\", seagreen: \"2e8b57\",\n seashell: \"fff5ee\", sienna: \"a0522d\", silver: \"c0c0c0\",\n skyblue: \"87ceeb\", slateblue: \"6a5acd\", slategray: \"708090\",\n slategrey: \"708090\", snow: \"fffafa\", springgreen: \"00ff7f\",\n steelblue: \"4682b4\", tan: \"d2b48c\", teal: \"008080\",\n thistle: \"d8bfd8\", tomato: \"ff6347\", turquoise: \"40e0d0\",\n violet: \"ee82ee\", wheat: \"f5deb3\", white: \"ffffff\",\n whitesmoke: \"f5f5f5\", yellow: \"ffff00\", yellowgreen: \"9acd32\"\n};\n\nexport default namedColors;","import Class from '../class';\nimport support from '../support';\nimport namedColors from './named-colors';\n\nconst browser = support.browser;\n\nlet matchNamedColor = (color) => {\n const colorNames = Object.keys(namedColors);\n colorNames.push(\"transparent\");\n\n const regexp = new RegExp(\"^(\" + colorNames.join(\"|\") + \")(\\\\W|$)\", \"i\");\n matchNamedColor = (color) => regexp.exec(color);\n\n return regexp.exec(color);\n};\n\nclass BaseColor extends Class {\n constructor() { super(); }\n toHSV() { return this; }\n\n toRGB() { return this; }\n\n toHex(options) { return this.toBytes().toHex(options); }\n\n toBytes() { return this; }\n\n toCss(options) { return \"#\" + this.toHex(options); }\n\n toCssRgba() {\n const rgb = this.toBytes();\n return `rgba(${ rgb.r }, ${ rgb.g }, ${ rgb.b }, ${ parseFloat((Number(this.a)).toFixed(3)) })`;\n }\n\n toDisplay() {\n if (browser.msie && browser.version < 9) {\n return this.toCss(); // no RGBA support; does it support any opacity in colors?\n }\n return this.toCssRgba();\n }\n\n equals(c) {\n return c === this || ((c !== null && c !== undefined) && this.toCssRgba() === parseColor(c).toCssRgba());\n }\n\n diff(other) {\n if (other === null) {\n return NaN;\n }\n\n const c1 = this.toBytes();\n const c2 = other.toBytes();\n\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.30, 2) +\n Math.pow((c1.g - c2.g) * 0.59, 2) +\n Math.pow((c1.b - c2.b) * 0.11, 2));\n }\n\n clone() {\n let c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n\n return c;\n }\n}\n\nclass RGB extends BaseColor {\n constructor(r, g, b, a) {\n super();\n\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n\n toHSV() {\n const { r, g, b } = this;\n const min = Math.min(r, g, b);\n const max = Math.max(r, g, b);\n const delta = max - min;\n const v = max;\n let h, s;\n\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n\n return new HSV(h, s, v, this.a);\n }\n\n toHSL() {\n const { r, g, b } = this;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n }\n\n return new HSL(h * 60, s * 100, l * 100, this.a);\n }\n\n toBytes() {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n}\n\nclass Bytes extends RGB {\n constructor(r, g, b, a) {\n super(Math.round(r), Math.round(g), Math.round(b), a);\n }\n\n toRGB() {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n }\n\n toHSV() {\n return this.toRGB().toHSV();\n }\n\n toHSL() {\n return this.toRGB().toHSL();\n }\n\n toHex(options) {\n let value = hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n\n if (options && options.alpha) {\n value += hex(Math.round(this.a * 255), 2);\n }\n\n return value;\n }\n\n toBytes() {\n return this;\n }\n}\n\nfunction hex(n, width, pad = \"0\") {\n let result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n\n return result;\n}\n\nclass HSV extends BaseColor {\n constructor(h, s, v, a) {\n super();\n\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n }\n\n toRGB() {\n let { h, s, v } = this;\n let r, g, b;\n\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n\n const i = Math.floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n default: r = v; g = p; b = q; break;\n }\n }\n\n return new RGB(r, g, b, this.a);\n }\n\n toHSL() {\n return this.toRGB().toHSL();\n }\n\n toBytes() {\n return this.toRGB().toBytes();\n }\n}\n\nclass HSL extends BaseColor {\n constructor(h, s, l, a) {\n super();\n\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n }\n\n toRGB() {\n let h = this.h / 360;\n let s = this.s / 100;\n let l = this.l / 100;\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return new RGB(r, g, b, this.a);\n }\n\n toHSV() {\n return this.toRGB().toHSV();\n }\n\n toBytes() {\n return this.toRGB().toBytes();\n }\n}\n\nfunction hue2rgb(p, q, s) {\n let t = s;\n\n if (t < 0) {\n t += 1;\n }\n\n if (t > 1) {\n t -= 1;\n }\n\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n\n if (t < 1 / 2) {\n return q;\n }\n\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n\n return p;\n}\n\nfunction alphaFromHex(a) {\n return parseFloat(parseFloat(parseInt(a, 16) / 255 ).toFixed(3));\n}\n\nexport { RGB, Bytes, HSV, HSL };\n\nexport default function parseColor(value, safe) {\n let m, ret;\n\n if (value == null || value === \"none\") {\n return null;\n }\n\n if (value instanceof BaseColor) {\n return value;\n }\n\n let color = value.toLowerCase();\n if ((m = matchNamedColor(color))) {\n if (m[1] === \"transparent\") {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [ m[1] ];\n return color;\n }\n if ((m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color))) {\n ret = new Bytes(parseInt(m[1], 16),\n parseInt(m[2], 16),\n parseInt(m[3], 16), 1);\n } else if ((m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color))) {\n ret = new Bytes(parseInt(m[1] + m[1], 16),\n parseInt(m[2] + m[2], 16),\n parseInt(m[3] + m[3], 16), 1);\n } else if ((m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color))) { // Parse 4 digit hex color\n ret = new Bytes(parseInt(m[1] + m[1], 16),\n parseInt(m[2] + m[2], 16),\n parseInt(m[3] + m[3], 16),\n alphaFromHex(m[4] + m[4]));\n } else if ((m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color))) { // Parse 8 digit hex color\n ret = new Bytes(parseInt(m[1], 16),\n parseInt(m[2], 16),\n parseInt(m[3], 16),\n alphaFromHex(m[4]));\n } else if ((m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color))) {\n ret = new Bytes(parseInt(m[1], 10),\n parseInt(m[2], 10),\n parseInt(m[3], 10), 1);\n } else if ((m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\n ret = new Bytes(parseInt(m[1], 10),\n parseInt(m[2], 10),\n parseInt(m[3], 10), parseFloat(m[4]));\n } else if ((m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color))) {\n ret = new RGB(parseFloat(m[1]) / 100,\n parseFloat(m[2]) / 100,\n parseFloat(m[3]) / 100, 1);\n } else if ((m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\n ret = new RGB(parseFloat(m[1]) / 100,\n parseFloat(m[2]) / 100,\n parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error(\"Cannot parse color: \" + color);\n }\n\n return ret;\n}\n","function matchUserAgent(userAgent) {\n const browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+))/i\n };\n\n let browser = {};\n\n for (let agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n const match = userAgent.match(browserRxs[agent]);\n if (match) {\n browser[agent] = true;\n browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n\n break;\n }\n }\n }\n\n return browser;\n}\n\nlet browser = null;\n\nconst support = {\n get browser() {\n if (typeof window === 'undefined' || browser) {\n return browser;\n }\n\n browser = matchUserAgent(window.navigator.userAgent);\n return browser;\n }\n};\n\nexport default support;\n","import now from '../util/now';\n\nexport default function throttle(fn, delay) {\n let lastExecTime = 0;\n let timeout;\n\n if (!delay || delay <= 0) {\n return fn;\n }\n\n const throttled = function() {\n const elapsed = now() - lastExecTime;\n const args = arguments;\n\n const exec = function() {\n fn.apply(null, args);\n lastExecTime = now();\n };\n\n // first execution\n if (!lastExecTime) {\n return exec();\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n };\n\n return throttled;\n}\n","import { Class } from '../common';\n\nclass BaseNode extends Class {\n constructor(srcElement) {\n super();\n\n this.childNodes = [];\n this.parent = null;\n\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n }\n\n destroy() {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n\n const children = this.childNodes;\n for (let i = 0; i < children.length; i++) {\n this.childNodes[i].destroy();\n }\n\n this.parent = null;\n }\n\n load() {}\n\n observe() {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n }\n\n append(node) {\n this.childNodes.push(node);\n node.parent = this;\n }\n\n insertAt(node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n }\n\n remove(index, count) {\n const end = index + count;\n for (let i = index; i < end; i++) {\n this.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n }\n\n removeSelf() {\n this.clear();\n this.destroy();\n }\n\n clear() {\n this.remove(0, this.childNodes.length);\n }\n\n invalidate() {\n if (this.parent) {\n this.parent.invalidate();\n }\n }\n\n geometryChange() {\n this.invalidate();\n }\n\n optionsChange() {\n this.invalidate();\n }\n\n childrenChange(e) {\n if (e.action === \"add\") {\n this.load(e.items, e.index);\n } else if (e.action === \"remove\") {\n this.remove(e.index, e.items.length);\n }\n\n this.invalidate();\n }\n}\n\nexport default BaseNode;","const DASH_ARRAYS = {\n dot: [ 1.5, 3.5 ],\n dash: [ 4, 3.5 ],\n longdash: [ 8, 3.5 ],\n dashdot: [ 3.5, 3.5, 1.5, 3.5 ],\n longdashdot: [ 8, 3.5, 1.5, 3.5 ],\n longdashdotdot: [ 8, 3.5, 1.5, 3.5, 1.5, 3.5 ]\n};\n\nconst SOLID = \"solid\";\nconst BUTT = \"butt\";\n\nexport { DASH_ARRAYS, SOLID, BUTT };","import { Class } from '../common';\n\nclass HasObservers extends Class {\n observers() {\n this._observers = this._observers || [];\n return this._observers;\n }\n\n addObserver(element) {\n if (!this._observers) {\n this._observers = [ element ];\n } else {\n this._observers.push(element);\n }\n return this;\n }\n\n removeObserver(element) {\n const observers = this.observers();\n const index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n }\n\n trigger(methodName, event) {\n const observers = this._observers;\n\n if (observers && !this._suspended) {\n for (let idx = 0; idx < observers.length; idx++) {\n let observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n }\n\n optionsChange(e = {}) {\n e.element = this;\n this.trigger(\"optionsChange\", e);\n }\n\n geometryChange() {\n this.trigger(\"geometryChange\", {\n element: this\n });\n }\n\n suspend() {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n }\n\n resume() {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n }\n\n _observerField(field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n}\n\nexport default HasObservers;\n\n","import { Class } from '../common';\nimport HasObservers from './has-observers';\nimport { defined } from '../util';\n\n\nconst toString = {}.toString;\n\nclass OptionsStore extends HasObservers {\n constructor(options, prefix = \"\") {\n super();\n\n this.prefix = prefix;\n\n for (let field in options) {\n let member = options[field];\n member = this._wrap(member, field);\n this[field] = member;\n }\n }\n\n get(field) {\n const parts = field.split(\".\");\n let result = this;\n\n while (parts.length && result) {\n let part = parts.shift();\n result = result[part];\n }\n\n return result;\n }\n\n set(field, value) {\n const current = this.get(field);\n\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n }\n\n _set(field, value) {\n const composite = field.indexOf(\".\") >= 0;\n let parentObj = this;\n let fieldName = field;\n\n if (composite) {\n const parts = fieldName.split(\".\");\n let prefix = this.prefix;\n\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + \".\";\n\n let obj = parentObj[fieldName];\n\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n }\n\n _clear(field) {\n const current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n }\n\n _wrap(object, field) {\n const type = toString.call(object);\n let wrapped = object;\n\n if (wrapped !== null && defined(wrapped) && type === \"[object Object]\") {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + \".\");\n }\n\n wrapped.addObserver(this);\n }\n\n return wrapped;\n }\n}\n\nexport default OptionsStore;\n","import Class from './class';\n\nclass Observable extends Class {\n constructor() {\n super();\n\n this._events = {};\n }\n\n bind(eventName, handlers, one) {\n const eventNames = getArray(eventName);\n const handlersIsFunction = isFunction(handlers);\n const length = eventNames.length;\n\n if (handlers === undefined) {\n for (let field in eventName) {\n this.bind(field, eventName[field]);\n }\n return this;\n }\n\n for (let idx = 0; idx < length; idx++) {\n const eventName = eventNames[idx];\n\n let handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n if (one) {\n const original = handler;\n handler = () => { // eslint-disable-line no-loop-func\n this.unbind(eventName, handler);\n original.apply(this, arguments);\n };\n handler.original = original;\n }\n let events = this._events[eventName] = this._events[eventName] || [];\n events.push(handler);\n }\n }\n\n return this;\n }\n\n one(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n }\n\n first(eventName, handlers) {\n const eventNames = getArray(eventName);\n const handlersIsFunction = isFunction(handlers);\n\n for (let idx = 0, length = eventNames.length; idx < length; idx++) {\n const eventName = eventNames[idx];\n\n const handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n const events = this._events[eventName] = this._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return this;\n }\n\n trigger(eventName, e = {}) {\n let events = this._events[eventName];\n\n if (events) {\n const length = events.length;\n\n e.sender = this;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (let idx = 0; idx < length; idx++) {\n events[idx].call(this, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n }\n\n unbind(eventName, handler) {\n const events = this._events[eventName];\n\n if (eventName === undefined) {\n this._events = {};\n } else if (events) {\n if (handler) {\n for (let idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n this._events[eventName] = [];\n }\n }\n\n return this;\n }\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction getArray(value) {\n return typeof value === \"string\" ? [ value ] : value;\n}\n\nfunction preventDefault() {\n this._defaultPrevented = true;\n}\n\nfunction isDefaultPrevented() {\n return this._defaultPrevented === true;\n}\n\nexport default Observable;","import Group from '../shapes/group';\nimport Point from '../geometry/point';\nimport { Observable } from '../common';\nimport { eventElement, eventCoordinates, elementPadding, elementScale, elementSize, elementOffset } from '../util';\n\nconst events = [\n \"click\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"resize\"\n];\n\nclass Surface extends Observable {\n constructor(element, options) {\n super();\n\n this.options = Object.assign({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n\n this._click = this._handler(\"click\");\n this._mouseenter = this._handler(\"mouseenter\");\n this._mouseleave = this._handler(\"mouseleave\");\n this._mousemove = this._handler(\"mousemove\");\n\n this._visual = new Group();\n\n elementSize(element, this.options);\n\n this.bind(events, this.options);\n\n this._enableTracking();\n }\n\n draw(element) {\n this._visual.children.push(element);\n }\n\n clear() {\n this._visual.children = [];\n }\n\n destroy() {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n }\n\n eventTarget(e) {\n let domNode = eventElement(e);\n let node;\n\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this.element) {\n break;\n }\n\n domNode = domNode.parentElement;\n }\n\n if (node) {\n return node.srcElement;\n }\n }\n\n exportVisual() {\n return this._visual;\n }\n\n getSize() {\n return elementSize(this.element);\n }\n\n currentSize(size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n }\n\n setSize(size) {\n elementSize(this.element, size);\n\n this.currentSize(size);\n this._resize();\n }\n\n resize(force) {\n const size = this.getSize();\n const currentSize = this.currentSize();\n\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger(\"resize\", size);\n }\n }\n\n size(value) {\n if (!value) {\n return this.getSize();\n }\n\n this.setSize(value);\n }\n\n suspendTracking() {\n this._suspendedTracking = true;\n }\n\n resumeTracking() {\n this._suspendedTracking = false;\n }\n\n _enableTracking() {}\n\n _resize() {}\n\n _handler(eventName) {\n return (e) => {\n const node = this.eventTarget(e);\n if (node && !this._suspendedTracking) {\n this.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n }\n\n _elementOffset() {\n const element = this.element;\n const padding = elementPadding(element);\n const { left, top } = elementOffset(element);\n\n return {\n left: left + padding.left,\n top: top + padding.top\n };\n }\n\n _surfacePoint(e) {\n const offset = this._elementOffset();\n const coord = eventCoordinates(e);\n const x = coord.x - offset.left;\n const y = coord.y - offset.top;\n\n const inverseTransform = elementScale(this.element).invert();\n const point = new Point(\n x,\n y\n ).transform(inverseTransform);\n\n return point;\n }\n}\n\nexport default Surface;\n","import close from './close';\n\nexport default function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n}","import HasObservers from '../core/has-observers';\nimport { deg, rad, round } from '../util';\nimport withAccessors from '../mixins/with-accessors';\n\nimport closeOrLess from './math/close-or-less';\nimport lineIntersection from './math/line-intersection';\nimport ellipseExtremeAngles from './math/ellipse-extreme-angles';\n\nimport { PRECISION } from './constants';\nimport Point from './point';\nimport Rect from './rect';\nimport transform from './transform';\n\n\nconst MAX_INTERVAL = 45;\nconst pow = Math.pow;\nconst accessors = [ \"radiusX\", \"radiusY\", \"startAngle\", \"endAngle\", \"anticlockwise\" ];\n\nclass Arc extends withAccessors(HasObservers, accessors) {\n constructor(center = new Point(), options = {}) {\n super();\n\n this.setCenter(center);\n\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n }\n\n clone() {\n return new Arc(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n }\n\n setCenter(value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n }\n\n getCenter() {\n return this.center;\n }\n\n pointAt(angle) {\n const center = this.center;\n const radian = rad(angle);\n\n return new Point(\n center.x + this.radiusX * Math.cos(radian),\n center.y + this.radiusY * Math.sin(radian)\n );\n }\n\n curvePoints() {\n const startAngle = this.startAngle;\n const dir = this.anticlockwise ? -1 : 1;\n const curvePoints = [ this.pointAt(startAngle) ];\n const interval = this._arcInterval();\n const intervalAngle = interval.endAngle - interval.startAngle;\n const subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n const subIntervalAngle = intervalAngle / subIntervalsCount;\n let currentAngle = startAngle;\n let transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n\n for (let i = 1; i <= subIntervalsCount; i++) {\n const nextAngle = currentAngle + dir * subIntervalAngle;\n const points = this._intervalCurvePoints(currentAngle, nextAngle, transformation);\n\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n\n return curvePoints;\n }\n\n bbox(matrix) {\n const interval = this._arcInterval();\n const startAngle = interval.startAngle;\n const endAngle = interval.endAngle;\n const extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n const extremeX = deg(extremeAngles.x);\n const extremeY = deg(extremeAngles.y);\n const endPoint = this.pointAt(endAngle).transformCopy(matrix);\n let currentAngleX = bboxStartAngle(extremeX, startAngle);\n let currentAngleY = bboxStartAngle(extremeY, startAngle);\n let currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n let minPoint = Point.min(currentPoint, endPoint);\n let maxPoint = Point.max(currentPoint, endPoint);\n\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n let currentPointX;\n if (currentAngleX < endAngle) {\n currentPointX = this.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n\n let currentPointY;\n if (currentAngleY < endAngle) {\n currentPointY = this.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n }\n\n _arcInterval() {\n let { startAngle, endAngle, anticlockwise } = this;\n\n if (anticlockwise) {\n let oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n\n if (startAngle > endAngle || (anticlockwise && startAngle === endAngle)) {\n endAngle += 360;\n }\n\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n\n _intervalCurvePoints(startAngle, endAngle, transformation) {\n const p1 = this.pointAt(startAngle);\n const p2 = this.pointAt(endAngle);\n const p1Derivative = this._derivativeAt(startAngle);\n const p2Derivative = this._derivativeAt(endAngle);\n const t = (rad(endAngle) - rad(startAngle)) / 3;\n const cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n const cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n }\n\n _derivativeAt(angle) {\n const radian = rad(angle);\n\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n }\n\n containsPoint(point) {\n const interval = this._arcInterval();\n const intervalAngle = interval.endAngle - interval.startAngle;\n const { center, radiusX, radiusY } = this;\n const distance = center.distanceTo(point);\n const angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n const pointRadius = (radiusX * radiusY) /\n Math.sqrt(pow(radiusX, 2) * pow(Math.sin(angleRad), 2) + pow(radiusY, 2) * pow(Math.cos(angleRad), 2));\n const startPoint = this.pointAt(this.startAngle).round(PRECISION);\n const endPoint = this.pointAt(this.endAngle).round(PRECISION);\n const intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n let containsPoint;\n\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n let angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n\n let inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = (inAngleRange && closeOrLess(distance, pointRadius)) || (!inAngleRange && (!intersection || intersection.equals(point)));\n }\n return containsPoint;\n }\n\n _isOnPath(point, width) {\n const interval = this._arcInterval();\n const center = this.center;\n let angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n\n const inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n\n static fromPoints(start, end, rx, ry, largeArc, swipe, rotation) {// eslint-disable-line max-params\n const arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n\n return new Arc(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n }\n}\n\nfunction calculateAngle(cx, cy, rx, ry, x, y) {\n const cos = round((x - cx) / rx, 3);\n const sin = round((y - cy) / ry, 3);\n\n return round(deg(Math.atan2(sin, cos)));\n}\n\nfunction normalizeArcParameters(parameters) {\n let { x1, y1, x2, y2, rx, ry, largeArc, swipe, rotation = 0 } = parameters;\n\n const radians = rad(rotation);\n const cosine = Math.cos(radians);\n const sine = Math.sin(radians);\n\n const xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n const yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n\n const sign = largeArc !== swipe ? 1 : -1;\n\n const xt2 = Math.pow(xT, 2);\n const yt2 = Math.pow(yT, 2);\n let rx2 = Math.pow(rx, 2);\n let ry2 = Math.pow(ry, 2);\n\n let delta = xt2 / rx2 + yt2 / ry2;\n\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n\n let constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n // due to rounding errors the value could become NaN even after radii correction\n if (isNaN(constT)) {\n constT = 0;\n }\n\n const cxT = constT * (rx * yT) / ry;\n const cyT = - constT * (ry * xT) / rx;\n\n const cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n const cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n\n\n const uX = (xT - cxT) / rx;\n const uY = (yT - cyT) / ry;\n const vX = -(xT + cxT) / rx;\n const vY = -(yT + cyT) / ry;\n\n const startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n\n const angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n let angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n\n if (swipe && angle < 0) {\n angle += 360;\n }\n let endAngle = startAngle + angle;\n const signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = (Math.abs(endAngle) % 360) * signEndAngle;\n\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n}\n\nfunction bboxStartAngle(angle, start) {\n let startAngle = angle;\n\n while (startAngle < start) {\n startAngle += 90;\n }\n\n return startAngle;\n}\n\nexport default Arc;\n","import Point from '../point';\n\nexport default function lineIntersection(p0, p1, p2, p3) {\n const s1x = p1.x - p0.x;\n const s2x = p3.x - p2.x;\n const s1y = p1.y - p0.y;\n const s2y = p3.y - p2.y;\n const nx = p0.x - p2.x;\n const ny = p0.y - p2.y;\n const d = s1x * s2y - s2x * s1y;\n const s = (s1x * ny - s1y * nx) / d;\n const t = (s2x * ny - s2y * nx) / d;\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n}","import withAccessors from '../mixins/with-accessors';\nimport Point from './point';\nimport Rect from './rect';\nimport ellipseExtremeAngles from './math/ellipse-extreme-angles';\nimport HasObservers from '../core/has-observers';\nimport { rad } from '../util';\n\n\nconst PI_DIV_2 = Math.PI / 2;\n\nclass Circle extends withAccessors(HasObservers, [ \"radius\" ]) {\n constructor(center = new Point(), radius = 0) {\n super();\n\n this.setCenter(center);\n this.setRadius(radius);\n }\n\n setCenter(value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n }\n\n getCenter() {\n return this.center;\n }\n\n equals(other) {\n return other &&\n other.center.equals(this.center) &&\n other.radius === this.radius;\n }\n\n clone() {\n return new Circle(this.center.clone(), this.radius);\n }\n\n pointAt(angle) {\n return this._pointAt(rad(angle));\n }\n\n bbox(matrix) {\n const extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n let minPoint = Point.maxPoint();\n let maxPoint = Point.minPoint();\n\n for (let i = 0; i < 4; i++) {\n let currentPointX = this._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n let currentPointY = this._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n let currentPoint = new Point(currentPointX.x, currentPointY.y);\n\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n }\n\n _pointAt(angle) {\n const { center, radius } = this;\n\n return new Point(\n center.x + radius * Math.cos(angle),\n center.y + radius * Math.sin(angle)\n );\n }\n\n containsPoint(point) {\n const { center, radius } = this;\n const inCircle = Math.pow(point.x - center.x, 2) +\n Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n }\n\n _isOnPath(point, width) {\n const { center, radius } = this;\n const pointDistance = center.distanceTo(point);\n\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n}\n\nexport default Circle;\n","const PRECISION = 10;\n\nexport { PRECISION };","import { PRECISION } from '../constants';\n\nimport { round } from '../../util';\n\nexport default function close(a, b, tolerance = PRECISION) {\n return round(Math.abs(a - b), tolerance) === 0;\n}","export default function ellipseExtremeAngles(center, rx, ry, matrix) {\n let extremeX = 0;\n let extremeY = 0;\n\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n\n return {\n x: extremeX,\n y: extremeY\n };\n}","export default function lineIntersectionsCount(a, b, point) {\n let intersects;\n if (a.x !== b.x) {\n const minX = Math.min(a.x, b.x);\n const maxX = Math.max(a.x, b.x);\n const minY = Math.min(a.y, b.y);\n const maxY = Math.max(a.y, b.y);\n const inRange = minX <= point.x && point.x < maxX;\n\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (((maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x)) / (maxX - minX) + minY - point.y) >= 0;\n }\n }\n\n return intersects ? 1 : 0;\n}","import { Class } from '../common';\nimport defined from '../util/defined';\nimport rad from '../util/rad';\nimport round from '../util/round';\n\nclass Matrix extends Class {\n\n constructor(a = 0, b = 0, c = 0, d = 0, e = 0, f = 0) {\n super();\n\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n multiplyCopy(matrix) {\n return new Matrix(\n this.a * matrix.a + this.c * matrix.b,\n this.b * matrix.a + this.d * matrix.b,\n this.a * matrix.c + this.c * matrix.d,\n this.b * matrix.c + this.d * matrix.d,\n this.a * matrix.e + this.c * matrix.f + this.e,\n this.b * matrix.e + this.d * matrix.f + this.f\n );\n }\n\n invert() {\n const { a, b, c: d, d: e, e: g, f: h } = this;\n const det = a * e - b * d;\n\n if (det === 0) {\n return null;\n }\n\n return new Matrix(e / det, -b / det, -d / det, a / det,\n (d * h - e * g) / det, (b * g - a * h) / det);\n }\n\n clone() {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n }\n\n equals(other) {\n if (!other) {\n return false;\n }\n\n return this.a === other.a && this.b === other.b &&\n this.c === other.c && this.d === other.d &&\n this.e === other.e && this.f === other.f;\n }\n\n round(precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n\n return this;\n }\n\n toArray(precision) {\n const result = [ this.a, this.b, this.c, this.d, this.e, this.f ];\n\n if (defined(precision)) {\n for (let i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n\n return result;\n }\n\n toString(precision, separator = \",\") {\n return this.toArray(precision).join(separator);\n }\n\n static translate(x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n }\n\n static unit() {\n return new Matrix(1, 0, 0, 1, 0, 0);\n }\n\n static rotate(angle, x, y) {\n const matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = (x - x * matrix.a + y * matrix.b) || 0;\n matrix.f = (y - y * matrix.a - x * matrix.b) || 0;\n\n return matrix;\n }\n\n static scale(scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n }\n}\n\nMatrix.IDENTITY = Matrix.unit();\n\nexport default Matrix;\n","import withAccessors from '../mixins/with-accessors';\nimport HasObservers from '../core/has-observers';\nimport { defined, MIN_NUM, MAX_NUM, round } from '../util';\nimport Matrix from './matrix';\nimport toMatrix from './to-matrix';\n\n\nclass Point extends withAccessors(HasObservers, [ \"x\", \"y\" ]) {\n constructor(x, y) {\n super();\n\n this.x = x || 0;\n this.y = y || 0;\n }\n\n equals(other) {\n return other && other.x === this.x && other.y === this.y;\n }\n\n clone() {\n return new Point(this.x, this.y);\n }\n\n rotate(angle, origin) {\n const originPoint = Point.create(origin) || Point.ZERO;\n\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n }\n\n translate(x, y) {\n this.x += x;\n this.y += y;\n\n this.geometryChange();\n\n return this;\n }\n\n translateWith(point) {\n return this.translate(point.x, point.y);\n }\n\n move(x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n }\n\n scale(scaleX, scaleY = scaleX) {\n this.x *= scaleX;\n this.y *= scaleY;\n\n this.geometryChange();\n\n return this;\n }\n\n scaleCopy(scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n }\n\n transform(transformation) {\n const matrix = toMatrix(transformation);\n const { x, y } = this;\n\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n\n this.geometryChange();\n\n return this;\n }\n\n transformCopy(transformation) {\n const point = this.clone();\n\n if (transformation) {\n point.transform(transformation);\n }\n\n return point;\n }\n\n distanceTo(point) {\n const dx = this.x - point.x;\n const dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n round(digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n\n this.geometryChange();\n\n return this;\n }\n\n toArray(digits) {\n const doRound = defined(digits);\n const x = doRound ? round(this.x, digits) : this.x;\n const y = doRound ? round(this.y, digits) : this.y;\n\n return [ x, y ];\n }\n\n toString(digits, separator = \" \") {\n let { x, y } = this;\n\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n\n return x + separator + y;\n }\n\n static create(arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n\n return new Point(arg0, arg1);\n }\n }\n\n static min() {\n let minX = MAX_NUM;\n let minY = MAX_NUM;\n\n for (let i = 0; i < arguments.length; i++) {\n let point = arguments[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n\n return new Point(minX, minY);\n }\n\n static max() {\n let maxX = MIN_NUM;\n let maxY = MIN_NUM;\n\n for (let i = 0; i < arguments.length; i++) {\n const point = arguments[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n\n return new Point(maxX, maxY);\n }\n\n static minPoint() {\n return new Point(MIN_NUM, MIN_NUM);\n }\n\n static maxPoint() {\n return new Point(MAX_NUM, MAX_NUM);\n }\n\n static get ZERO() {\n return new Point(0, 0);\n }\n}\n\nexport default Point;\n","import HasObservers from '../core/has-observers';\nimport Point from './point';\nimport Size from './size';\n\nclass Rect extends HasObservers {\n constructor(origin = new Point(), size = new Size(), cornerRadius = 0) {\n super();\n\n this.setOrigin(origin);\n this.setSize(size);\n this.setCornerRadius(cornerRadius);\n }\n\n clone() {\n return new Rect(\n this.origin.clone(),\n this.size.clone()\n );\n }\n\n equals(other) {\n return other &&\n other.origin.equals(this.origin) &&\n other.size.equals(this.size);\n }\n\n setOrigin(value) {\n this._observerField(\"origin\", Point.create(value));\n this.geometryChange();\n return this;\n }\n\n getOrigin() {\n return this.origin;\n }\n\n setCornerRadius(radius) {\n this.cornerRadius = Array.isArray(radius) ? radius : [ radius, radius ];\n\n this.geometryChange();\n return this;\n }\n\n getCornerRadius() {\n return this.cornerRadius;\n }\n\n setSize(value) {\n this._observerField(\"size\", Size.create(value));\n this.geometryChange();\n return this;\n }\n\n getSize() {\n return this.size;\n }\n\n width() {\n return this.size.width;\n }\n\n height() {\n return this.size.height;\n }\n\n topLeft() {\n return this.origin.clone();\n }\n\n bottomRight() {\n return this.origin.clone().translate(this.width(), this.height());\n }\n\n topRight() {\n return this.origin.clone().translate(this.width(), 0);\n }\n\n bottomLeft() {\n return this.origin.clone().translate(0, this.height());\n }\n\n center() {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n }\n\n bbox(matrix) {\n const tl = this.topLeft().transformCopy(matrix);\n const tr = this.topRight().transformCopy(matrix);\n const br = this.bottomRight().transformCopy(matrix);\n const bl = this.bottomLeft().transformCopy(matrix);\n\n return Rect.fromPoints(tl, tr, br, bl);\n }\n\n transformCopy(m) {\n return Rect.fromPoints(\n this.topLeft().transform(m),\n this.bottomRight().transform(m)\n );\n }\n\n expand(x, y = x) {\n\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n\n this.origin.translate(-x, -y);\n\n return this;\n }\n\n expandCopy(x, y) {\n return this.clone().expand(x, y);\n }\n\n containsPoint(point) {\n const origin = this.origin;\n const bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n }\n\n _isOnPath(point, width) {\n const rectOuter = this.expandCopy(width, width);\n const rectInner = this.expandCopy(-width, -width);\n\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n\n static fromPoints() {\n const topLeft = Point.min.apply(null, arguments);\n const bottomRight = Point.max.apply(null, arguments);\n const size = new Size(\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y\n );\n\n return new Rect(topLeft, size);\n }\n\n static union(a, b) {\n return Rect.fromPoints(\n Point.min(a.topLeft(), b.topLeft()),\n Point.max(a.bottomRight(), b.bottomRight())\n );\n }\n\n static intersect(a, b) {\n const rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n\n const rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n\n if (rect1.left <= rect2.right &&\n rect2.left <= rect1.right &&\n rect1.top <= rect2.bottom &&\n rect2.top <= rect1.bottom) {\n return Rect.fromPoints(\n new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)),\n new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom))\n );\n }\n }\n}\n\nexport default Rect;\n","import { deg } from '../../util';\nimport transform from '../transform';\n\nexport default function isOutOfEndPoint(endPoint, controlPoint, point) {\n const angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n const rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n\n return rotatedPoint.x < endPoint.x;\n}","export default function calculateCurveAt(t, field, points) {\n const t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] +\n 3 * Math.pow(t1, 2) * t * points[1][field] +\n 3 * Math.pow(t, 2) * t1 * points[2][field] +\n Math.pow(t, 3) * points[3][field];\n}","export default function toCubicPolynomial(points, field) {\n return [ -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n}","import { PRECISION } from '../constants';\nimport { Class } from '../../common';\nimport { round } from '../../util';\n\nclass ComplexNumber extends Class {\n\n constructor(real = 0, img = 0) {\n super();\n\n this.real = real;\n this.img = img;\n }\n\n add(cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n }\n\n addConstant(value) {\n return new ComplexNumber(this.real + value, this.img);\n }\n\n negate() {\n return new ComplexNumber(-this.real, -this.img);\n }\n\n multiply(cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img,\n this.real * cNumber.img + this.img * cNumber.real);\n }\n\n multiplyConstant(value) {\n return new ComplexNumber(this.real * value, this.img * value);\n }\n\n nthRoot(n) {\n const rad = Math.atan2(this.img, this.real);\n const r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n const nthR = Math.pow(r, 1 / n);\n\n return new ComplexNumber(nthR * Math.cos(rad / n), nthR * Math.sin(rad / n)); //Moivre's formula\n }\n\n equals(cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n }\n\n isReal() {\n return this.img === 0;\n }\n}\n\nexport default ComplexNumber;","import ComplexNumber from './complex-number';\nimport { PRECISION } from '../constants';\nimport { round } from '../../util';\n\nfunction numberSign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction solveQuadraticEquation(a, b, c) {\n const squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n}\n\n//Cardano's formula\nexport default function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n\n const p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n const q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n const Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n const i = new ComplexNumber(0,1);\n const b3a = -b / (3 * a);\n let x1, x2, y1, y2, y3, z1, z2;\n\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, - Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n\n y1 = x1.add(x2);\n\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n\n const result = [];\n\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n\n return result;\n}","import toCubicPolynomial from './to-cubic-polynomial';\nimport solveCubicEquation from './solve-cubic-equation';\nimport calculateCurveAt from './calculate-curve-at';\n\nexport default function hasRootsInRange(points, point, field, rootField, range) {\n const polynomial = toCubicPolynomial(points, rootField);\n const roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n let intersection;\n\n for (let idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n}","import HasObservers from '../core/has-observers';\nimport Rect from './rect';\nimport Point from './point';\nimport transform from './transform';\nimport { deg, MIN_NUM, MAX_NUM } from '../util';\nimport isOutOfEndPoint from './math/is-out-of-end-point';\nimport calculateCurveAt from './math/calculate-curve-at';\nimport hasRootsInRange from './math/has-roots-in-range';\nimport curveIntersectionsCount from './math/curve-intersections-count';\nimport lineIntersectionsCount from './math/line-intersections-count';\nimport withPoints from '../mixins/with-points';\n\n\nconst points = [ \"anchor\", \"controlIn\", \"controlOut\" ];\n\nclass Segment extends withPoints(HasObservers, points) {\n constructor(anchor, controlIn, controlOut) {\n super();\n\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n }\n\n bboxTo(toSegment, matrix) {\n const segmentAnchor = this.anchor().transformCopy(matrix);\n const toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n let rect;\n\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(\n segmentAnchor, this.controlOut().transformCopy(matrix),\n toSegment.controlIn().transformCopy(matrix), toSegmentAnchor\n );\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n\n return rect;\n }\n\n _lineBoundingBox(p1, p2) {\n return Rect.fromPoints(p1, p2);\n }\n\n _curveBoundingBox(p1, cp1, cp2, p2) {\n const points = [ p1, cp1, cp2, p2 ];\n const extremesX = this._curveExtremesFor(points, \"x\");\n const extremesY = this._curveExtremesFor(points, \"y\");\n const xLimits = arrayLimits([ extremesX.min, extremesX.max, p1.x, p2.x ]);\n const yLimits = arrayLimits([ extremesY.min, extremesY.max, p1.y, p2.y ]);\n\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n }\n\n _curveExtremesFor(points, field) {\n const extremes = this._curveExtremes(\n points[0][field], points[1][field],\n points[2][field], points[3][field]\n );\n\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n }\n\n _curveExtremes(x1, x2, x3, x4) {\n const a = x1 - 3 * x2 + 3 * x3 - x4;\n const b = - 2 * (x1 - 2 * x2 + x3);\n const c = x1 - x2;\n const sqrt = Math.sqrt(b * b - 4 * a * c);\n let t1 = 0;\n let t2 = 1;\n\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (- b + sqrt) / (2 * a);\n t2 = (- b - sqrt) / (2 * a);\n }\n\n let min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n\n let max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n _intersectionsTo(segment, point) {\n let intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([ this.anchor(), this.controlOut(), segment.controlIn(), segment.anchor() ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n }\n\n _isOnCurveTo(segment, point, width, endSegment) {\n const bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n const p1 = this.anchor();\n const p2 = this.controlOut();\n const p3 = segment.controlIn();\n const p4 = segment.anchor();\n\n if (endSegment === \"start\" && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === \"end\" && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n\n //the approach is not entirely correct but is close and the alternatives are solving a 6th degree polynomial or testing the segment points\n const points = [ p1, p2, p3, p4 ];\n if (hasRootsInRange(points, point, \"x\", \"y\", width) || hasRootsInRange(points, point, \"y\", \"x\", width)) {\n return true;\n }\n const rotation = transform().rotate(45, point);\n const rotatedPoints = [ p1.transformCopy(rotation), p2.transformCopy(rotation), p3.transformCopy(rotation), p4.transformCopy(rotation) ];\n return hasRootsInRange(rotatedPoints, point, \"x\", \"y\", width) || hasRootsInRange(rotatedPoints, point, \"y\", \"x\", width);\n }\n }\n\n _isOnLineTo(segment, point, width) {\n const p1 = this.anchor();\n const p2 = segment.anchor();\n const angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n const rect = new Rect([ p1.x, p1.y - width / 2 ], [ p1.distanceTo(p2), width ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n }\n\n _isOnPathTo(segment, point, width, endSegment) {\n let isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n}\n\nfunction arrayLimits(arr) {\n let length = arr.length;\n let min = MAX_NUM;\n let max = MIN_NUM;\n\n for (let i = 0; i < length; i ++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nexport default Segment;\n","import toCubicPolynomial from './to-cubic-polynomial';\nimport solveCubicEquation from './solve-cubic-equation';\nimport calculateCurveAt from './calculate-curve-at';\nimport close from './close';\n\nexport default function curveIntersectionsCount(points, point, bbox) {\n const polynomial = toCubicPolynomial(points, \"x\");\n const roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n let rayIntersection, intersectsRay;\n let count = 0;\n for (let i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], \"y\", points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && (((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x) || (0 < roots[i] && roots[i] < 1))) {\n count++;\n }\n }\n\n return count;\n}","import HasObservers from '../core/has-observers';\nimport withAccessors from '../mixins/with-accessors';\nimport { defined, round } from '../util';\n\n\nclass Size extends withAccessors(HasObservers, [ \"width\", \"height\" ]) {\n constructor(width, height) {\n super();\n\n this.width = width || 0;\n this.height = height || 0;\n }\n\n equals(other) {\n return other && other.width === this.width && other.height === this.height;\n }\n\n clone() {\n return new Size(this.width, this.height);\n }\n\n toArray(digits) {\n const doRound = defined(digits);\n const width = doRound ? round(this.width, digits) : this.width;\n const height = doRound ? round(this.height, digits) : this.height;\n\n return [ width, height ];\n }\n\n static create(arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n\n return new Size(arg0, arg1);\n }\n }\n\n static get ZERO() {\n return new Size(0, 0);\n }\n}\n\nexport default Size;\n","export default function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === \"function\") {\n return transformation.matrix();\n }\n\n return transformation;\n}","import HasObservers from '../core/has-observers';\nimport toMatrix from './to-matrix';\nimport Matrix from './matrix';\nimport Point from './point';\n\nclass Transformation extends HasObservers {\n constructor(matrix = Matrix.unit()) {\n super();\n\n this._matrix = matrix;\n }\n\n clone() {\n return new Transformation(\n this._matrix.clone()\n );\n }\n\n equals(other) {\n return other &&\n other._matrix.equals(this._matrix);\n }\n\n translate(x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n\n this._optionsChange();\n return this;\n }\n\n scale(scaleX, scaleY = scaleX, origin = null) {\n let originPoint = origin;\n\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n\n this._optionsChange();\n return this;\n }\n\n rotate(angle, origin) {\n const originPoint = Point.create(origin) || Point.ZERO;\n\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n\n this._optionsChange();\n return this;\n }\n\n multiply(transformation) {\n const matrix = toMatrix(transformation);\n\n this._matrix = this._matrix.multiplyCopy(matrix);\n\n this._optionsChange();\n return this;\n }\n\n matrix(value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n\n return this._matrix;\n }\n\n _optionsChange() {\n this.optionsChange({\n field: \"transform\",\n value: this\n });\n }\n}\n\nexport default Transformation;\n","import Transformation from './transformation';\n\nexport default function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n\n if (matrix instanceof Transformation) {\n return matrix;\n }\n\n return new Transformation(matrix);\n}","import { defined } from '../util';\n\nfunction optionsAccessor(name) {\n return function(value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n\n return this.options.get(name);\n };\n}\n\nfunction defineOptionsAccessors(fn, names) {\n for (let i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n}\n\nconst withOptions = (TBase, names) => {\n const result = class extends TBase {};\n defineOptionsAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withOptions;\n","import OptionsStore from '../core/options-store';\nimport withOptions from '../mixins/with-options';\nimport HasObservers from '../core/has-observers';\nimport { defined } from '../util';\n\n\nconst options = [ \"offset\", \"color\", \"opacity\" ];\n\nclass GradientStop extends withOptions(HasObservers, options) {\n constructor(offset, color, opacity) {\n super();\n\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n\n this.options.addObserver(this);\n }\n\n static create(arg) {\n if (defined(arg)) {\n let stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n\n return stop;\n }\n }\n}\n\nexport default GradientStop;\n","import ElementsArray from '../shapes/elements-array';\n\nclass StopsArray extends ElementsArray {\n _change() {\n this.optionsChange({\n field: \"stops\"\n });\n }\n}\n\nexport default StopsArray;","import StopsArray from './stops-array';\nimport GradientStop from './gradient-stop';\nimport HasObservers from '../core/has-observers';\nimport { defined, definitionId } from '../util';\n\nclass Gradient extends HasObservers {\n get nodeType() {\n return \"Gradient\";\n }\n\n constructor(options = {}) {\n super();\n\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n }\n\n userSpace(value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n\n return this._userSpace;\n }\n\n _createStops(stops = []) {\n const result = [];\n for (let idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n\n return result;\n }\n\n addStop(offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n }\n\n removeStop(stop) {\n const index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n\n optionsChange(e) {\n this.trigger(\"optionsChange\", {\n field: \"gradient\" + (e ? \".\" + e.field : \"\"),\n value: this\n });\n }\n\n geometryChange() {\n this.optionsChange();\n }\n}\n\nexport default Gradient;\n","import withPoints from '../mixins/with-points';\nimport Point from '../geometry/point';\nimport Gradient from './gradient';\n\n\nconst points = [ \"start\", \"end\" ];\n\nclass LinearGradient extends withPoints(Gradient, points) {\n constructor(options = {}) {\n super(options);\n\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n}\n\nexport default LinearGradient;\n","import withPoints from '../mixins/with-points';\nimport Point from '../geometry/point';\nimport Gradient from './gradient';\nimport { defined } from '../util';\n\n\nclass RadialGradient extends withPoints(Gradient, [ \"center\" ]) {\n constructor(options = {}) {\n super(options);\n\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n }\n\n radius(value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n\n return this._radius;\n }\n\n fallbackFill(value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n\n return this._fallbackFill;\n }\n}\n\nexport default RadialGradient;\n","import Matrix from '../geometry/matrix';\nimport toMatrix from '../geometry/to-matrix';\n\nconst IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n\nconst measurable = TBase => (\n class extends TBase {\n bbox(transformation) {\n const combinedMatrix = toMatrix(this.currentTransform(transformation));\n const matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n let bbox;\n\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n\n const strokeWidth = this.options.get(\"stroke.width\");\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n\n return bbox;\n }\n\n geometryChange() {\n delete this._bboxCache;\n this.trigger(\"geometryChange\", {\n element: this\n });\n }\n }\n);\n\nexport default measurable;","import { defined } from '../util';\n\nconst GRADIENT = \"Gradient\";\n\nconst paintable = TBase => (\n class extends TBase {\n fill(color, opacity) {\n const options = this.options;\n\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n const newFill = {\n color: color\n };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set(\"fill\", newFill);\n } else {\n options.set(\"fill\", color);\n }\n\n return this;\n }\n\n return options.get(\"fill\");\n }\n\n stroke(color, width, opacity) {\n if (defined(color)) {\n this.options.set(\"stroke.color\", color);\n\n if (defined(width)) {\n this.options.set(\"stroke.width\", width);\n }\n\n if (defined(opacity)) {\n this.options.set(\"stroke.opacity\", opacity);\n }\n\n return this;\n }\n\n return this.options.get(\"stroke\");\n }\n }\n);\n\nexport default paintable;\n","const traversable = (TBase, childrenField) => (\n class extends TBase {\n traverse(callback) {\n const children = this[childrenField];\n\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n\n return this;\n }\n }\n);\n\nexport default traversable;\n","function setAccessor(field) {\n return function(value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n\n return this;\n };\n}\n\nfunction getAccessor(field) {\n return function() {\n return this[field];\n };\n}\n\nfunction defineAccessors(fn, fields) {\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i];\n let capitalized = name.charAt(0).toUpperCase() +\n name.substring(1, name.length);\n\n fn[\"set\" + capitalized] = setAccessor(name);\n fn[\"get\" + capitalized] = getAccessor(name);\n }\n}\n\nconst withAccessors = (TBase, names) => {\n const result = class extends TBase {};\n defineAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withAccessors;\n","import { defined } from '../util';\n\nfunction geometryAccessor(name) {\n const fieldName = \"_\" + name;\n return function(value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n\n return this[fieldName];\n };\n}\n\nfunction defineGeometryAccessors(fn, names) {\n for (let i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n}\n\nconst withGeometry = (TBase, names = [ \"geometry\" ]) => {\n const result = class extends TBase {};\n defineGeometryAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withGeometry;\n","import { defined } from '../util';\nimport Point from '../geometry/point';\n\nfunction pointAccessor(name) {\n const fieldName = \"_\" + name;\n return function(value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n\n return this[fieldName];\n };\n}\n\nfunction definePointAccessors(fn, names) {\n for (let i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n}\n\nconst withPoints = (TBase, names) => {\n const result = class extends TBase {};\n definePointAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withPoints;\n","import Point from '../geometry/point';\nimport { last } from '../util';\n\nconst ShapeMap = {\n l: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 2) {\n let point = new Point(parameters[i], parameters[i + 1]);\n\n if (options.isRelative) {\n point.translateWith(position);\n }\n\n path.lineTo(point.x, point.y);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n c: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 6) {\n let controlOut = new Point(parameters[i], parameters[i + 1]);\n let controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n let point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n\n path.curveTo(controlOut, controlIn, point);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n v: function(path, options) {\n const value = options.isRelative ? 0 : options.position.x;\n\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n\n h: function(path, options) {\n const value = options.isRelative ? 0 : options.position.y;\n\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n\n a: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 7) {\n const radiusX = parameters[i];\n const radiusY = parameters[i + 1];\n const rotation = parameters[i + 2];\n const largeArc = parameters[i + 3];\n const swipe = parameters[i + 4];\n const endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n\n s: function(path, options) {\n const { parameters, position, previousCommand } = options;\n let lastControlIn;\n\n if (previousCommand === \"s\" || previousCommand === \"c\") {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n\n for (let i = 0; i < parameters.length; i += 4) {\n let controlIn = new Point(parameters[i], parameters[i + 1]);\n let endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n let controlOut;\n\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n\n lastControlIn = controlIn;\n\n path.curveTo(controlOut, controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n\n q: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 4) {\n let controlPoint = new Point(parameters[i], parameters[i + 1]);\n let endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n\n let cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n\n t: function(path, options) {\n const { parameters, position, previousCommand } = options;\n let controlPoint;\n\n if (previousCommand === \"q\" || previousCommand === \"t\") {\n let lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone()\n .translateWith(position.scaleCopy(-1 / 3))\n .scale(3 / 2);\n }\n\n for (let i = 0; i < parameters.length; i += 2) {\n let endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n\n let cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n};\n\nfunction toLineParamaters(parameters, isVertical, value) {\n const insertPosition = isVertical ? 0 : 1;\n\n for (let i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n}\n\nfunction reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n}\n\nconst third = 1 / 3;\n\nfunction quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n const scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n}\n\nexport default ShapeMap;","import Point from '../geometry/point';\nimport ShapeMap from './shape-map';\n\nconst SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\nconst SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\nconst MOVE = \"m\";\nconst CLOSE = \"z\";\n\nfunction parseParameters(str) {\n const parameters = [];\n str.replace(SPLIT_REGEX, function(match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n}\n\nfunction parsePath(pathInstance, str) {\n const position = new Point();\n let previousCommand;\n\n str.replace(SEGMENT_REGEX, (match, element, params, closePath) => {\n let command = element.toLowerCase();\n const isRelative = command === element;\n const parameters = parseParameters(params.trim());\n\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n\n pathInstance.moveTo(position.x, position.y);\n\n if (parameters.length > 2) {\n command = \"l\";\n parameters.splice(0, 2);\n }\n }\n\n if (ShapeMap[command]) {\n ShapeMap[command](\n pathInstance, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n }\n );\n\n if (closePath && closePath.toLowerCase() === CLOSE) {\n pathInstance.close();\n }\n } else if (command !== MOVE) {\n throw new Error(\"Error while parsing SVG path. Unsupported command: \" + command);\n }\n\n previousCommand = command;\n });\n\n return pathInstance;\n}\n\nexport default parsePath;\n\n","import QuadRoot from './quad-root';\nimport { Rect } from '../geometry';\nimport { append } from '../util';\n\nclass QuadNode extends QuadRoot {\n constructor(rect) {\n super();\n this.children = [];\n this.rect = rect;\n }\n\n inBounds(rect) {\n const nodeRect = this.rect;\n const nodeBottomRight = nodeRect.bottomRight();\n const bottomRight = rect.bottomRight();\n const inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x &&\n bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n }\n\n pointShapes(point) {\n const children = this.children;\n const length = children.length;\n const result = super.pointShapes(point);\n for (let idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n }\n\n insert(shape, bbox) {\n const children = this.children;\n let inserted = false;\n\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n\n for (let idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n\n return inserted;\n }\n\n _initChildren() {\n const { rect, children } = this;\n const center = rect.center();\n const halfWidth = rect.width() / 2;\n const halfHeight = rect.height() / 2;\n\n children.push(\n new QuadNode(new Rect([ rect.origin.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, rect.origin.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ rect.origin.x, center.y ], [ halfWidth, halfHeight ])),\n new QuadNode(new Rect([ center.x, center.y ], [ halfWidth, halfHeight ]))\n );\n }\n}\n\nexport default QuadNode;","import { Class } from '../common';\n\nclass QuadRoot extends Class {\n constructor() {\n super();\n\n this.shapes = [];\n }\n\n _add(shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n }\n\n pointShapes(point) {\n const shapes = this.shapes;\n const length = shapes.length;\n const result = [];\n for (let idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n }\n\n insert(shape, bbox) {\n this._add(shape, bbox);\n }\n\n remove(shape) {\n const shapes = this.shapes;\n const length = shapes.length;\n\n for (let idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n}\n\nexport default QuadRoot;","import QuadRoot from './quad-root';\nimport QuadNode from './quad-node';\nimport { Rect } from '../geometry';\nimport { Class } from '../common';\nimport { append } from '../util';\n\nconst ROOT_SIZE = 3000;\nconst LEVEL_STEP = 10000;\nconst MAX_LEVEL = 75;\n\nclass ShapesQuadTree extends Class {\n\n constructor() {\n super();\n\n this.initRoots();\n }\n\n initRoots() {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n }\n\n clear() {\n const rootElements = this.rootElements;\n for (let idx = 0; idx < rootElements.length; idx++) {\n this.remove(rootElements[idx]);\n }\n this.initRoots();\n }\n\n pointShape(point) {\n const sectorRoot = ( this.rootMap[ Math.floor( point.x / ROOT_SIZE ) ] || {} )[ Math.floor( point.y / ROOT_SIZE ) ];\n let result = this.root.pointShapes(point);\n\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n\n this.assignZindex(result);\n\n result.sort(zIndexComparer);\n for (let idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n }\n\n assignZindex(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n let element = elements[idx];\n let zIndex = 0;\n let levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n let parents = [];\n\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n\n elements[idx]._zIndex = zIndex;\n }\n }\n\n optionsChange(e) {\n if (e.field === \"transform\" || e.field === \"stroke.width\") {\n this.bboxChange(e.element);\n }\n }\n\n geometryChange(e) {\n this.bboxChange(e.element);\n }\n\n bboxChange(element) {\n if (element.nodeType === \"Group\") {\n for (let idx = 0; idx < element.children.length; idx++) {\n this.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n }\n\n add(elements) {\n const elementsArray = Array.isArray(elements) ? elements.slice(0) : [ elements ];\n\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n }\n\n childrenChange(e) {\n if (e.action === \"remove\") {\n for (let idx = 0; idx < e.items.length; idx++) {\n this.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n }\n\n _insert(elements) {\n let element;\n\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this);\n if (element.nodeType === \"Group\") {\n append(elements, element.children);\n } else {\n this._insertShape(element);\n }\n }\n }\n\n _insertShape(shape) {\n const bbox = shape.bbox();\n if (bbox) {\n const sectors = this.getSectors(bbox);\n const x = sectors[0][0];\n const y = sectors[1][0];\n\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n const rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(\n new Rect([ x * ROOT_SIZE, y * ROOT_SIZE ], [ ROOT_SIZE, ROOT_SIZE ])\n );\n }\n\n rootMap[x][y].insert(shape, bbox);\n }\n }\n }\n\n remove(element) {\n element.removeObserver(this);\n\n if (element.nodeType === \"Group\") {\n const children = element.children;\n for (let idx = 0; idx < children.length; idx++) {\n this.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n }\n\n inRoot(sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n }\n\n getSectors(rect) {\n const bottomRight = rect.bottomRight();\n const bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n const bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n const sectors = [ [], [] ];\n for (let x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (let y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n}\n\nfunction zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n\n return 0;\n}\n\nexport default ShapesQuadTree;","import GeometryCircle from '../geometry/circle';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport withGeometry from '../mixins/with-geometry';\nimport Element from './element';\nimport { defined } from '../util';\n\nconst DEFAULT_STROKE = \"#000\";\n\nclass Circle extends paintable(measurable(withGeometry(Element))) {\n get nodeType() {\n return \"Circle\";\n }\n\n constructor(geometry = new GeometryCircle(), options = {}) {\n super(options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n\n rawBBox() {\n return this._geometry.bbox();\n }\n\n _bbox(matrix) {\n return this._geometry.bbox(matrix);\n }\n\n _containsPoint(point) {\n return this.geometry().containsPoint(point);\n }\n\n _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n}\n\nexport default Circle;\n","import OptionsStore from '../core/options-store';\nimport Rect from '../geometry/rect';\nimport Matrix from '../geometry/matrix';\nimport createTransform from '../geometry/transform';\nimport toMatrix from '../geometry/to-matrix';\nimport HasObservers from '../core/has-observers';\nimport { defined, definitionId, isTransparent, valueOrDefault } from '../util';\n\nclass Element extends HasObservers {\n get nodeType() {\n return \"Rect\";\n }\n\n constructor(options) {\n super();\n\n this._initOptions(options);\n }\n\n _initOptions(options = {}) {\n const { clip, transform } = options;\n\n if (transform) {\n options.transform = createTransform(transform);\n }\n\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n }\n\n transform(value) {\n if (defined(value)) {\n this.options.set(\"transform\", createTransform(value));\n } else {\n return this.options.get(\"transform\");\n }\n }\n\n parentTransform() {\n let element = this;\n let parentMatrix;\n\n while (element.parent) {\n element = element.parent;\n let transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n\n if (parentMatrix) {\n return createTransform(parentMatrix);\n }\n }\n\n currentTransform(parentTransform = this.parentTransform()) {\n const elementTransform = this.transform();\n const elementMatrix = toMatrix(elementTransform);\n\n let parentMatrix = toMatrix(parentTransform);\n let combinedMatrix;\n\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n\n if (combinedMatrix) {\n return createTransform(combinedMatrix);\n }\n }\n\n visible(value) {\n if (defined(value)) {\n this.options.set(\"visible\", value);\n return this;\n }\n\n return this.options.get(\"visible\") !== false;\n }\n\n clip(value) {\n const options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set(\"clip\", value);\n return this;\n }\n\n return options.get(\"clip\");\n }\n\n opacity(value) {\n if (defined(value)) {\n this.options.set(\"opacity\", value);\n return this;\n }\n\n return valueOrDefault(this.options.get(\"opacity\"), 1);\n }\n\n className(value) {\n if (defined(value)) {\n this.options.set(\"className\", value);\n return this;\n }\n\n return this.options.get(\"className\");\n }\n\n clippedBBox(transformation) {\n const bbox = this._clippedBBox(transformation);\n if (bbox) {\n const clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n }\n\n containsPoint(point, parentTransform) {\n if (this.visible()) {\n const transform = this.currentTransform(parentTransform);\n let transformedPoint = point;\n if (transform) {\n transformedPoint = point.transformCopy(transform.matrix().invert());\n }\n return (this._hasFill() && this._containsPoint(transformedPoint)) || (this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint));\n }\n return false;\n }\n\n _hasFill() {\n const fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n }\n\n _hasStroke() {\n const stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n }\n\n _clippedBBox(transformation) {\n return this.bbox(transformation);\n }\n}\n\nexport default Element;\n","import HasObservers from '../core/has-observers';\n\nconst push = [].push;\nconst pop = [].pop;\nconst splice = [].splice;\nconst shift = [].shift;\nconst slice = [].slice;\nconst unshift = [].unshift;\n\nclass ElementsArray extends HasObservers {\n constructor(array = []) {\n super();\n\n this.length = 0;\n this._splice(0, array.length, array);\n }\n\n elements(value) {\n if (value) {\n this._splice(0, this.length, value);\n\n this._change();\n return this;\n }\n\n return this.slice(0);\n }\n\n push() {\n const elements = arguments;\n const result = push.apply(this, elements);\n\n this._add(elements);\n\n return result;\n }\n\n slice() {\n return slice.call(this);\n }\n\n pop() {\n const length = this.length;\n const result = pop.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n }\n\n splice(index, howMany) {\n const elements = slice.call(arguments, 2);\n const result = this._splice(index, howMany, elements);\n\n this._change();\n\n return result;\n }\n\n shift() {\n const length = this.length;\n const result = shift.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n }\n\n unshift() {\n const elements = arguments;\n const result = unshift.apply(this, elements);\n\n this._add(elements);\n\n return result;\n }\n\n indexOf(element) {\n const length = this.length;\n\n for (let idx = 0; idx < length; idx++) {\n if (this[idx] === element) {\n return idx;\n }\n }\n return -1;\n }\n\n _splice(index, howMany, elements) {\n const result = splice.apply(this, [ index, howMany ].concat(elements));\n\n this._clearObserver(result);\n this._setObserver(elements);\n\n return result;\n }\n\n _add(elements) {\n this._setObserver(elements);\n this._change();\n }\n\n _remove(elements) {\n this._clearObserver(elements);\n this._change();\n }\n\n _setObserver(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this);\n }\n }\n\n _clearObserver(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this);\n }\n }\n\n _change() {}\n}\n\nexport default ElementsArray;\n","import Element from './element';\nimport traversable from '../mixins/traversable';\nimport { append } from '../util';\nimport elementsBoundingBox from './utils/elements-bounding-box';\nimport elementsClippedBoundingBox from './utils/elements-clippend-bounding-box';\n\n\nclass Group extends traversable(Element, \"children\") {\n get nodeType() {\n return \"Group\";\n }\n\n constructor(options) {\n super(options);\n this.children = [];\n }\n\n childrenChange(action, items, index) {\n this.trigger(\"childrenChange\",{\n action: action,\n items: items,\n index: index\n });\n }\n\n append() {\n append(this.children, arguments);\n this._reparent(arguments, this);\n\n this.childrenChange(\"add\", arguments);\n\n return this;\n }\n\n insert(index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n\n this.childrenChange(\"add\", [ element ], index);\n\n return this;\n }\n\n insertAt(element, index) {\n return this.insert(index, element);\n }\n\n remove(element) {\n const index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange(\"remove\", [ element ], index);\n }\n\n return this;\n }\n\n removeAt(index) {\n if (0 <= index && index < this.children.length) {\n let element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange(\"remove\", [ element ], index);\n }\n\n return this;\n }\n\n clear() {\n const items = this.children;\n this.children = [];\n this._reparent(items, null);\n\n this.childrenChange(\"remove\", items, 0);\n\n return this;\n }\n\n bbox(transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n }\n\n rawBBox() {\n return elementsBoundingBox(this.children, false);\n }\n\n _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n }\n\n currentTransform(transformation) {\n return Element.prototype.currentTransform.call(this, transformation) || null;\n }\n\n containsPoint(point, parentTransform) {\n if (this.visible()) {\n const children = this.children;\n const transform = this.currentTransform(parentTransform);\n for (let idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n }\n\n _reparent(elements, newParent) {\n for (let i = 0; i < elements.length; i++) {\n const child = elements[i];\n const parent = child.parent;\n if (parent && parent !== this && parent.remove) {\n parent.remove(child);\n }\n\n child.parent = newParent;\n }\n }\n}\n\nexport default Group;","import withGeometry from '../mixins/with-geometry';\nimport Element from './element';\nimport Rect from '../geometry/rect';\nimport toMatrix from '../geometry/to-matrix';\nimport { defined } from '../util';\n\n\nclass Image extends withGeometry(Element, [ \"rect\" ]) {\n get nodeType() {\n return \"Image\";\n }\n\n constructor(src, rect = new Rect(), options = {}) {\n super(options);\n\n this.src(src);\n this.rect(rect);\n }\n\n src(value) {\n if (defined(value)) {\n this.options.set(\"src\", value);\n return this;\n }\n\n return this.options.get(\"src\");\n }\n\n bbox(transformation) {\n const combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n }\n\n rawBBox() {\n return this._rect.bbox();\n }\n\n _containsPoint(point) {\n return this._rect.containsPoint(point);\n }\n\n _hasFill() {\n return this.src();\n }\n}\n\nexport default Image;","import ElementsArray from './elements-array';\n\nclass GeometryElementsArray extends ElementsArray {\n _change() {\n this.geometryChange();\n }\n}\n\nexport default GeometryElementsArray;","import { Point, Segment } from '../../geometry';\nimport { last, round } from '../../util';\n\nconst WEIGHT = 0.333;\nconst EXTREMUM_ALLOWED_DEVIATION = 0.01;\nconst X = \"x\";\nconst Y = \"y\";\n\nexport function pointsToCurve(pointsIn, closed) {\n const points = pointsIn.slice(0);\n const segments = [];\n let length = points.length;\n\n if (length > 2) {\n removeDuplicates(0, points);\n length = points.length;\n }\n\n if (length < 2 || (length === 2 && points[0].equals(points[1]))) {\n return segments;\n }\n\n let p0 = points[0];\n let p1 = points[1];\n let p2 = points[2];\n\n segments.push(new Segment(p0));\n\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n\n if (length === 2) {\n const tangent = getTangent(p0,p1, X, Y);\n\n last(segments).controlOut(\n firstControlPoint(tangent, p0, p1, X, Y)\n );\n\n segments.push(new Segment(\n p1,\n secondControlPoint(tangent, p0, p1, X, Y)\n ));\n\n return segments;\n }\n\n let initialControlPoint, lastControlPoint;\n\n if (closed) {\n p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n const controlPoints = getControlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n const tangent = getTangent(p0, p1, X,Y);\n initialControlPoint = firstControlPoint(tangent, p0, p1, X, Y);\n }\n\n let cp0 = initialControlPoint;\n for (let idx = 0; idx <= length - 3; idx++) {\n removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n const controlPoints = getControlPoints(p0,p1,p2);\n\n last(segments).controlOut(cp0);\n cp0 = controlPoints[1];\n\n const cp1 = controlPoints[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n\n if (closed) {\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n const controlPoints = getControlPoints(p0, p1, p2);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p1,\n controlPoints[0]\n ));\n\n last(segments).controlOut(controlPoints[1]);\n segments.push(new Segment(\n p2,\n lastControlPoint\n ));\n } else {\n const tangent = getTangent(p1, p2, X, Y);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p2,\n secondControlPoint(tangent, p1, p2, X, Y)\n ));\n }\n\n return segments;\n}\n\nexport function pointsToClosedCurve(pointsIn) {\n return pointsToCurve(pointsIn, true);\n}\n\nexport function removeDuplicates(idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n}\n\nexport function invertAxis(p0, p1, p2) {\n let invertAxis = false;\n\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if ((p1.y < p2.y && p0.y <= p1.y) || (p2.y < p1.y && p1.y <= p0.y)) {\n invertAxis = true;\n }\n } else {\n const fn = lineFunction(p0,p1);\n const y2 = calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) &&\n !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n\n return invertAxis;\n}\n\nexport function isLine(p0, p1, p2) {\n const fn = lineFunction(p0, p1);\n const y2 = calculateFunction(fn, p2.x);\n\n return (p0.x === p1.x && p1.x === p2.x) || round(y2, 1) === round(p2.y, 1);\n}\n\nexport function lineFunction(p1, p2) {\n const a = (p2.y - p1.y) / (p2.x - p1.x);\n const b = p1.y - a * p1.x;\n\n return [ b, a ];\n}\n\nexport function getControlPoints(p0, p1, p2) {\n let xField = X;\n let yField = Y;\n let restrict = false;\n let switchOrientation = false;\n let tangent;\n\n if (isLine(p0, p1, p2)) {\n tangent = getTangent(p0, p1, X, Y);\n } else {\n const monotonic = {\n x: isMonotonicByField(p0, p1, p2, X),\n y: isMonotonicByField(p0, p1, p2, Y)\n };\n\n if (monotonic.x && monotonic.y) {\n tangent = getTangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n let sign;\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n (p0[yField] < p2[yField] && p1[yField] <= p0[yField])) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n\n const secondCP = secondControlPoint(tangent, p0, p1, xField, yField);\n\n if (switchOrientation) {\n const oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n\n const firstCP = firstControlPoint(tangent, p1, p2, xField, yField);\n\n if (restrict) {\n restrictControlPoint(p0, p1, secondCP, tangent);\n restrictControlPoint(p1, p2, firstCP, tangent);\n }\n\n return [ secondCP, firstCP ];\n}\n\nexport function restrictControlPoint(p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n}\n\nexport function getTangent(p0, p1, xField, yField) {\n const x = p1[xField] - p0[xField];\n const y = p1[yField] - p0[yField];\n let tangent;\n\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n\n return tangent;\n}\n\nexport function isMonotonicByField(p0, p1, p2, field) {\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n (p2[field] < p1[field] && p1[field] < p0[field]);\n}\n\nexport function firstControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n}\n\nexport function secondControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n}\n\nexport function point(xValue, yValue, xField, yField) {\n const controlPoint = new Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n\n return controlPoint;\n}\n\nexport function calculateFunction(fn, x) {\n const length = fn.length;\n let result = 0;\n\n for (let i = 0; i < length; i++) {\n result += Math.pow(x,i) * fn[i];\n }\n return result;\n}\n\nexport function numberSign(value) {\n return value <= 0 ? -1 : 1;\n}\n","import GeometryElementsArray from './geometry-elements-array';\nimport Element from './element';\nimport { pointsToCurve } from './utils/points-to-curve';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport Arc from '../geometry/arc';\nimport Rect from '../geometry/rect';\nimport Segment from '../geometry/segment';\nimport Point from '../geometry/point';\nimport Size from '../geometry/size';\nimport lineIntersectionsCount from '../geometry/math/line-intersections-count';\nimport { defined, last, rad } from '../util';\nimport parsePath from '../parsing/parse-path';\nimport elementsBoundingBox from './utils/elements-bounding-box';\nimport elementsClippedBoundingBox from './utils/elements-clippend-bounding-box';\nimport limitValue from '../util/limit-value';\n\nconst SPACE = ' ';\nconst printPoints = (precision) => (...points) => points.map(p => p.toString(precision)).join(SPACE);\nconst segmentType = (segmentStart, segmentEnd) => segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n\nexport class Path extends paintable(measurable(Element)) {\n get nodeType() {\n return 'Path';\n }\n\n constructor(options) {\n super(options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n }\n\n moveTo(x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n\n this.lineTo(x, y);\n\n return this;\n }\n\n lineTo(x, y) {\n const point = defined(y) ? new Point(x, y) : x;\n const segment = new Segment(point);\n\n this.segments.push(segment);\n\n return this;\n }\n\n curveTo(controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n const lastSegment = last(this.segments);\n const segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n\n this.segments.push(segment);\n }\n\n return this;\n }\n\n arc(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n const lastSegment = last(this.segments);\n const anchor = lastSegment.anchor();\n const start = rad(startAngle);\n const center = new Point(anchor.x - radiusX * Math.cos(start),\n anchor.y - radiusY * Math.sin(start));\n const arc = new Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n\n this._addArcSegments(arc);\n }\n\n return this;\n }\n\n arcTo(end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n const lastSegment = last(this.segments);\n const anchor = lastSegment.anchor();\n const arc = Arc.fromPoints(anchor, Point.create(end), rx, ry, largeArc, swipe, rotation);\n\n this._addArcSegments(arc);\n }\n return this;\n }\n\n _addArcSegments(arc) {\n this.suspend();\n\n const curvePoints = arc.curvePoints();\n\n for (let i = 1; i < curvePoints.length; i += 3) {\n this.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n\n this.resume();\n this.geometryChange();\n }\n\n close() {\n this.options.closed = true;\n this.geometryChange();\n\n return this;\n }\n\n rawBBox() {\n return this._bbox();\n }\n\n toString(digits) {\n let output = '';\n\n const segments = this.segments;\n const length = segments.length;\n if (length > 0) {\n const parts = [];\n const print = printPoints(digits);\n let currentType;\n\n for (let i = 1; i < length; i++) {\n let type = segmentType(segments[i - 1], segments[i]);\n if (type !== currentType) {\n currentType = type;\n parts.push(type);\n }\n\n if (type === 'L') {\n parts.push(print(segments[i].anchor()));\n } else {\n parts.push(print(\n segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()\n ));\n }\n }\n\n output = 'M' + print(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (this.options.closed) {\n output += 'Z';\n }\n }\n\n return output;\n }\n\n _containsPoint(point) {\n const segments = this.segments;\n const length = segments.length;\n let intersectionsCount = 0;\n let previous, current;\n\n for (let idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n\n return intersectionsCount % 2 !== 0;\n }\n\n _isOnPath(point, width) {\n const segments = this.segments;\n const length = segments.length;\n const pathWidth = width || this.options.stroke.width;\n\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n\n for (let idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n }\n\n _bbox(matrix) {\n const segments = this.segments;\n const length = segments.length;\n let boundingBox;\n\n if (length === 1) {\n let anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (let i = 1; i < length; i++) {\n let segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n\n return boundingBox;\n }\n\n static parse(str, options) {\n return MultiPath.parse(str, options);\n }\n\n static fromRect(rect, options) {\n const path = new Path(options);\n let [ rx, ry ] = rect.cornerRadius;\n\n if (rx === 0 && ry === 0) {\n path.moveTo(rect.topLeft())\n .lineTo(rect.topRight())\n .lineTo(rect.bottomRight())\n .lineTo(rect.bottomLeft())\n .close();\n } else {\n const origin = rect.origin;\n const { x, y } = origin;\n const width = rect.width();\n const height = rect.height();\n rx = limitValue(rx, 0, width / 2);\n ry = limitValue(ry, 0, height / 2);\n\n path.moveTo(x + rx, y)\n .lineTo(x + width - rx, y)\n .arcTo([ x + width, y + ry ], rx, ry, false)\n .lineTo(x + width, y + height - ry)\n .arcTo([ x + width - rx, y + height ], rx, ry, false)\n .lineTo(x + rx, y + height)\n .arcTo([ x, y + height - ry ], rx, ry, false)\n .lineTo(x, y + ry)\n .arcTo([ x + rx, y ], rx, ry, false);\n }\n\n return path;\n }\n\n static fromPoints(points, options) {\n if (points) {\n const path = new Path(options);\n\n for (let i = 0; i < points.length; i++) {\n let point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n\n return path;\n }\n }\n\n static curveFromPoints(points, options) {\n if (points) {\n const segments = pointsToCurve(points);\n const path = new Path(options);\n path.segments.push.apply(path.segments, segments);\n\n return path;\n }\n }\n\n static fromArc(arc, options) {\n const path = new Path(options);\n const startAngle = arc.startAngle;\n const start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n }\n}\n\nexport class MultiPath extends paintable(measurable(Element)) {\n static parse(str, options) {\n const instance = new MultiPath(options);\n return parsePath(instance, str);\n }\n\n toString(digits) {\n const paths = this.paths;\n let output = '';\n\n if (paths.length > 0) {\n const result = [];\n\n for (let i = 0; i < paths.length; i++) {\n result.push(paths[i].toString(digits));\n }\n\n output = result.join(SPACE);\n }\n\n return output;\n }\n\n get nodeType() {\n return 'MultiPath';\n }\n\n constructor(options) {\n super(options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n }\n\n moveTo(x, y) {\n const path = new Path();\n path.moveTo(x, y);\n\n this.paths.push(path);\n\n return this;\n }\n\n lineTo(x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n\n return this;\n }\n\n curveTo(controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n\n return this;\n }\n\n arc(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n\n return this;\n }\n\n arcTo(end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n\n return this;\n }\n\n close() {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n\n return this;\n }\n\n _bbox(matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n }\n\n rawBBox() {\n return elementsBoundingBox(this.paths, false);\n }\n\n _containsPoint(point) {\n const paths = this.paths;\n\n for (let idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n }\n\n _isOnPath(point) {\n const paths = this.paths;\n const width = this.options.stroke.width;\n\n for (let idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n }\n\n _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n}\n\n","import Element from './element';\nimport Point from '../geometry/point';\nimport Rect from '../geometry/rect';\nimport toMatrix from '../geometry/to-matrix';\nimport paintable from '../mixins/paintable';\nimport withPoints from '../mixins/with-points';\nimport { defined, measureText } from '../util';\n\n\nconst DEFAULT_FONT = \"12px sans-serif\";\nconst DEFAULT_FILL = \"#000\";\n\nclass Text extends paintable(withPoints(Element, [ \"position\" ])) {\n get nodeType() {\n return \"Text\";\n }\n\n constructor(content, position = new Point(), options = {}) {\n super(options);\n\n this.content(content);\n this.position(position);\n\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n }\n\n content(value) {\n if (defined(value)) {\n this.options.set(\"content\", value);\n return this;\n }\n\n return this.options.get(\"content\");\n }\n\n measure() {\n const metrics = measureText(this.content(), {\n font: this.options.get(\"font\")\n });\n\n return metrics;\n }\n\n rect() {\n const size = this.measure();\n const pos = this.position().clone();\n return new Rect(pos, [ size.width, size.height ]);\n }\n\n bbox(transformation) {\n const combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n }\n\n rawBBox() {\n return this.rect().bbox();\n }\n\n _containsPoint(point) {\n return this.rect().containsPoint(point);\n }\n}\n\nexport default Text;\n","import Rect from '../../geometry/rect';\n\nexport default function elementsBoundingBox(elements, applyTransform, transformation) {\n let boundingBox;\n\n for (let i = 0; i < elements.length; i++) {\n let element = elements[i];\n if (element.visible()) {\n let elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n\n return boundingBox;\n}\n\n","import Rect from '../../geometry/rect';\n\nexport default function elementsClippedBoundingBox(elements, transformation) {\n let boundingBox;\n\n for (let i = 0; i < elements.length; i++) {\n let element = elements[i];\n if (element.visible()) {\n let elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n\n return boundingBox;\n}","import Node from './node';\n\nclass ClipNode extends Node {\n constructor(srcElement) {\n super();\n\n this.srcElement = srcElement;\n this.id = srcElement.id;\n\n this.load([ srcElement ]);\n }\n\n template() {\n return `${ this.renderChildren() }`;\n }\n}\n\nexport default ClipNode;","const SVG_NS = \"http://www.w3.org/2000/svg\";\nconst NONE = \"none\";\nconst POINT_DIGITS = 3;\n\nexport { SVG_NS, NONE, POINT_DIGITS };","import LinearGradient from '../gradients/linear-gradient';\nimport RadialGradient from '../gradients/radial-gradient';\nimport LinearGradientNode from './linear-gradient-node';\nimport RadialGradientNode from './radial-gradient-node';\nimport Node from './node';\nimport ClipNode from './clip-node';\n\nclass DefinitionNode extends Node {\n constructor() {\n super();\n this.definitionMap = {};\n }\n\n attachTo(domElement) {\n this.element = domElement;\n }\n\n template() {\n return `${ this.renderChildren() }`;\n }\n\n definitionChange(e) {\n const { definitions, action } = e;\n\n if (action === \"add\") {\n this.addDefinitions(definitions);\n } else if (action === \"remove\") {\n this.removeDefinitions(definitions);\n }\n }\n\n createDefinition(type, item) {\n let nodeType;\n if (type === \"clip\") {\n nodeType = ClipNode;\n } else if (type === \"fill\") {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n }\n\n addDefinitions(definitions) {\n for (let field in definitions) {\n this.addDefinition(field, definitions[field]);\n }\n }\n\n addDefinition(type, srcElement) {\n const { element, definitionMap } = this;\n const id = srcElement.id;\n const mapItem = definitionMap[id];\n if (!mapItem) {\n const node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n }\n\n removeDefinitions(definitions) {\n for (let field in definitions) {\n this.removeDefinition(definitions[field]);\n }\n }\n\n removeDefinition(srcElement) {\n const definitionMap = this.definitionMap;\n const id = srcElement.id;\n const mapItem = definitionMap[id];\n\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n}\n\nexport default DefinitionNode;","import RootNode from './root-node';\nimport { Group } from '../shapes';\nimport { transform } from '../geometry';\nimport { SVG_NS } from './constants';\n\nexport default function exportGroup(group) {\n const root = new RootNode({\n skipBaseHref: true\n });\n const bbox = group.clippedBBox();\n let rootGroup = group;\n\n if (bbox) {\n const origin = bbox.getOrigin();\n const exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n\n root.load([ rootGroup ]);\n\n const svg = `${ root.render() }`;\n\n root.destroy();\n\n return svg;\n}","import { createPromise, encodeBase64 } from '../util';\nimport exportGroup from './export-group';\n\nexport default function exportSVG(group, options) {\n let svg = exportGroup(group);\n\n if (!options || !options.raw) {\n svg = \"data:image/svg+xml;base64,\" + encodeBase64(svg);\n }\n\n return createPromise().resolve(svg);\n}\n","import GradientStopNode from './gradient-stop-node';\nimport BaseNode from '../core/base-node';\nimport Node from './node';\nimport renderAllAttr from './utils/render-all-attributes';\n\nclass GradientNode extends Node {\n constructor(srcElement) {\n super(srcElement);\n\n this.id = srcElement.id;\n\n this.loadStops();\n }\n\n loadStops() {\n const stops = this.srcElement.stops;\n const element = this.element;\n\n for (let idx = 0; idx < stops.length; idx++) {\n let stopNode = new GradientStopNode(stops[idx]);\n this.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n }\n\n optionsChange(e) {\n if (e.field === \"gradient.stops\") {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === \"gradient\") {\n this.allAttr(this.mapCoordinates());\n }\n }\n\n renderCoordinates() {\n return renderAllAttr(this.mapCoordinates());\n }\n\n mapSpace() {\n return [ \"gradientUnits\", this.srcElement.userSpace() ? \"userSpaceOnUse\" : \"objectBoundingBox\" ];\n }\n}\n\nexport default GradientNode;","import Node from './node';\nimport renderAttr from './utils/render-attribute';\n\nclass GradientStopNode extends Node {\n template() {\n return ``;\n }\n\n renderOffset() {\n return renderAttr(\"offset\", this.srcElement.offset());\n }\n\n mapStyle() {\n const srcElement = this.srcElement;\n return [\n [ \"stop-color\", srcElement.color() ],\n [ \"stop-opacity\", srcElement.opacity() ]\n ];\n }\n\n optionsChange(e) {\n if (e.field === \"offset\") {\n this.attr(e.field, e.value);\n } else if (e.field === \"color\" || e.field === \"opacity\") {\n this.css(\"stop-\" + e.field, e.value);\n }\n }\n}\n\nexport default GradientStopNode;","import GradientNode from './gradient-node';\n\nclass LinearGradientNode extends GradientNode {\n template() {\n return `${ this.renderChildren() }`;\n }\n\n mapCoordinates() {\n const srcElement = this.srcElement;\n const start = srcElement.start();\n const end = srcElement.end();\n const attrs = [\n [ \"x1\", start.x ],\n [ \"y1\", start.y ],\n [ \"x2\", end.x ],\n [ \"y2\", end.y ],\n this.mapSpace()\n ];\n\n return attrs;\n }\n}\n\nexport default LinearGradientNode;","const NODE_MAP = {};\n\nexport default NODE_MAP;","import BaseNode from '../core/base-node';\nimport renderAllAttr from './utils/render-all-attributes';\nimport renderAttr from './utils/render-attribute';\nimport renderStyle from './utils/render-style';\nimport NODE_MAP from './node-map';\nimport renderSVG from './utils/render-svg';\nimport { SVG_NS, NONE } from './constants';\nimport { support } from '../common';\nimport { defined } from '../util';\n\nconst TRANSFORM = \"transform\";\nconst DefinitionMap = {\n clip: \"clip-path\",\n fill: \"fill\"\n};\n\nfunction isDefinition(type, value) {\n return type === \"clip\" || (type === \"fill\" && (!value || value.nodeType === \"Gradient\"));\n}\n\nfunction baseUrl() {\n const base = document.getElementsByTagName(\"base\")[0];\n let href = document.location.href;\n let url = \"\";\n\n if (base && !(support.browser || {}).msie) {\n const hashIndex = href.indexOf(\"#\");\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n\n url = href;\n }\n\n return url;\n}\n\nclass Node extends BaseNode {\n\n constructor(srcElement, options) {\n super(srcElement);\n this.definitions = {};\n\n this.options = options;\n }\n\n destroy() {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n\n this.clearDefinitions();\n super.destroy();\n }\n\n load(elements, pos) {\n for (let i = 0; i < elements.length; i++) {\n const srcElement = elements[i];\n const children = srcElement.children;\n\n const childNode = new NODE_MAP[srcElement.nodeType](srcElement, this.options);\n\n if (defined(pos)) {\n this.insertAt(childNode, pos);\n } else {\n this.append(childNode);\n }\n\n childNode.createDefinitions();\n\n if (children && children.length > 0) {\n childNode.load(children);\n }\n\n const element = this.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n }\n\n root() {\n let root = this;\n\n while (root.parent) {\n root = root.parent;\n }\n\n return root;\n }\n\n attachTo(domElement, pos) {\n const container = document.createElement(\"div\");\n renderSVG(container,\n \"\" +\n this.render() +\n \"\"\n );\n\n const element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n }\n\n setElement(element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n\n this.element = element;\n this.element._kendoNode = this;\n\n const nodes = this.childNodes;\n for (let i = 0; i < nodes.length; i++) {\n let childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n }\n\n clear() {\n this.clearDefinitions();\n\n if (this.element) {\n this.element.innerHTML = \"\";\n }\n\n const children = this.childNodes;\n for (let i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n\n this.childNodes = [];\n }\n\n removeSelf() {\n if (this.element) {\n const parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n\n super.removeSelf();\n }\n\n template() {\n return this.renderChildren();\n }\n\n render() {\n return this.template();\n }\n\n renderChildren() {\n const nodes = this.childNodes;\n let output = \"\";\n\n for (let i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n\n return output;\n }\n\n optionsChange(e) {\n const { field, value } = e;\n\n if (field === \"visible\") {\n this.css(\"display\", value ? \"\" : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === \"opacity\") {\n this.attr(\"opacity\", value);\n } else if (field === \"cursor\") {\n this.css(\"cursor\", value);\n } else if (field === \"id\") {\n if (value) {\n this.attr(\"id\", value);\n } else {\n this.removeAttr(\"id\");\n }\n }\n\n super.optionsChange(e);\n }\n\n accessibilityOptionsChange(e) {\n const { field, value } = e;\n \n if (field === \"role\") {\n if (value) {\n this.attr(\"role\", value);\n } else {\n this.removeAttr(\"role\");\n }\n } else if (field === \"ariaLabel\") {\n if (value) {\n this.attr(\"aria-label\", value);\n } else {\n this.removeAttr(\"aria-label\");\n }\n } else if (field === \"ariaRoleDescription\") {\n if (value) {\n this.attr(\"aria-roledescription\", value);\n } else {\n this.removeAttr(\"aria-roledescription\");\n }\n } else if (field === \"className\") {\n this.className(value);\n }\n }\n\n attr(name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n }\n\n allAttr(attrs) {\n for (let i = 0; i < attrs.length; i++) {\n this.attr(attrs[i][0], attrs[i][1]);\n }\n }\n\n css(name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n }\n\n allCss(styles) {\n for (let i = 0; i < styles.length; i++) {\n this.css(styles[i][0], styles[i][1]);\n }\n }\n\n className(value) {\n if (this.element) {\n this.element.classList.remove(...this.element.classList);\n value.split(\" \").forEach((item) => {\n this.element.classList.add(item);\n }); \n }\n }\n\n removeAttr(name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n }\n\n mapTransform(transform) {\n const attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n \"matrix(\" + transform.matrix().toString(6) + \")\"\n ]);\n }\n\n return attrs;\n }\n\n renderTransform() {\n return renderAllAttr(\n this.mapTransform(this.srcElement.transform())\n );\n }\n\n transformChange(value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n }\n\n mapStyle() {\n const options = this.srcElement.options;\n const style = [ [ \"cursor\", options.cursor ] ];\n\n if (options.visible === false) {\n style.push([ \"display\", NONE ]);\n }\n\n return style;\n }\n\n renderStyle() {\n return renderAttr(\"style\", renderStyle(this.mapStyle(true)));\n }\n\n renderOpacity() {\n return renderAttr(\"opacity\", this.srcElement.options.opacity);\n }\n\n renderId() {\n return renderAttr(\"id\", this.srcElement.options.id);\n }\n\n renderClassName() {\n return renderAttr(\"class\", this.srcElement.options.className);\n }\n\n renderRole() {\n return renderAttr(\"role\", this.srcElement.options.role);\n }\n\n renderAriaLabel() {\n return renderAttr(\"aria-label\", this.srcElement.options.ariaLabel);\n }\n\n renderAriaRoleDescription() {\n return renderAttr(\"aria-roledescription\", this.srcElement.options.ariaRoleDescription);\n }\n\n createDefinitions() {\n const srcElement = this.srcElement;\n const definitions = this.definitions;\n if (srcElement) {\n const options = srcElement.options;\n let hasDefinitions;\n\n for (let field in DefinitionMap) {\n let definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: \"add\",\n definitions: definitions\n });\n }\n }\n }\n\n definitionChange(e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n }\n\n updateDefinition(type, value) {\n const definitions = this.definitions;\n const current = definitions[type];\n const attr = DefinitionMap[type];\n const definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: \"remove\",\n definitions: definition\n });\n delete definitions[type];\n }\n\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: \"add\",\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n }\n\n clearDefinitions() {\n const definitions = this.definitions;\n\n this.definitionChange({\n action: \"remove\",\n definitions: definitions\n });\n this.definitions = {};\n }\n\n renderDefinitions() {\n return renderAllAttr(this.mapDefinitions());\n }\n\n mapDefinitions() {\n const definitions = this.definitions;\n const attrs = [];\n\n for (let field in definitions) {\n attrs.push([ DefinitionMap[field], this.refUrl(definitions[field].id) ]);\n }\n\n return attrs;\n }\n\n refUrl(id) {\n const skipBaseHref = (this.options || {}).skipBaseHref;\n const baseHref = this.baseUrl().replace(/'/g, \"\\\\'\");\n const base = skipBaseHref ? '' : baseHref;\n return `url(${ base }#${ id })`;\n }\n\n baseUrl() {\n return baseUrl();\n }\n}\n\nexport default Node;\n","import GradientNode from './gradient-node';\n\nclass RadialGradientNode extends GradientNode {\n template() {\n return `${ this.renderChildren() }`;\n }\n\n mapCoordinates() {\n const srcElement = this.srcElement;\n const center = srcElement.center();\n const radius = srcElement.radius();\n const attrs = [\n [ \"cx\", center.x ],\n [ \"cy\", center.y ],\n [ \"r\", radius ],\n this.mapSpace()\n ];\n return attrs;\n }\n}\n\nexport default RadialGradientNode;","import BaseNode from '../core/base-node';\nimport Node from './node';\nimport DefinitionNode from './definition-node';\n\nclass RootNode extends Node {\n constructor(options) {\n super();\n this.options = options;\n this.defs = new DefinitionNode();\n }\n\n attachTo(domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n }\n\n clear() {\n BaseNode.prototype.clear.call(this);\n }\n\n template() {\n return this.defs.render() + this.renderChildren();\n }\n\n definitionChange(e) {\n this.defs.definitionChange(e);\n }\n}\n\nexport default RootNode;","import renderAttr from './render-attribute';\n\nexport default function renderAllAttr(attrs) {\n let output = \"\";\n for (let i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n\n return output;\n}","import { defined } from '../../util';\n\nexport default function renderAttr(name, value) {\n return (defined(value) && value !== null) ? ` ${ name }=\"${ value }\" ` : \"\";\n}","import { defined } from '../../util';\n\nexport default function renderStyle(attrs) {\n let output = \"\";\n for (let i = 0; i < attrs.length; i++) {\n let value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + \":\" + value + \";\";\n }\n }\n\n if (output !== \"\") {\n return output;\n }\n}","import { SVG_NS } from '../constants';\n\nconst applyStyle = (styleString, element) =>\n styleString.split(';').filter(s => s !== '').forEach(s => {\n const parts = s.split(':');\n element.style[parts[0].trim()] = parts[1].trim();\n });\n\nconst styleAttr = 'data-style';\nconst replaceStyleAttr = (html) => html.replace(/\\sstyle=/g, ' ' + styleAttr + '=');\nconst restoreStyleAttr = (container) => {\n Array.from(container.querySelectorAll('[' + styleAttr +']')).forEach((element) => {\n const styleString = element.getAttribute(styleAttr);\n element.removeAttribute(styleAttr);\n applyStyle(styleString, element);\n });\n};\n\nlet renderSVG = function(container, svg) {\n container.innerHTML = replaceStyleAttr(svg);\n restoreStyleAttr(container);\n};\n\nif (typeof document !== \"undefined\") {\n const testFragment = \"\";\n const testContainer = document.createElement(\"div\");\n const hasParser = typeof DOMParser !== \"undefined\";\n\n testContainer.innerHTML = testFragment;\n\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function(container, svg) {\n const parser = new DOMParser();\n const chartDoc = parser.parseFromString(replaceStyleAttr(svg), \"text/xml\");\n restoreStyleAttr(chartDoc);\n const importedDoc = document.adoptNode(chartDoc.documentElement);\n\n container.innerHTML = \"\";\n container.appendChild(importedDoc);\n };\n }\n}\n\nexport default renderSVG;\n","import { Class } from '../common';\n\nclass LRUCache extends Class {\n constructor(size) {\n super();\n\n this._size = size;\n this._length = 0;\n this._map = {};\n }\n\n put(key, value) {\n const map = this._map;\n const entry = { key: key, value: value };\n\n map[key] = entry;\n\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n }\n\n get(key) {\n const entry = this._map[key];\n\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n\n entry.older = this._tail;\n entry.newer = null;\n\n this._tail.newer = entry;\n this._tail = entry;\n }\n\n return entry.value;\n }\n }\n}\n\nexport default LRUCache;","import TextMetrics from './text-metrics';\n\nexport default function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n}\n","import LRUCache from './lru-cache';\nimport { Class } from '../common';\nimport { objectKey, hashKey, normalizeText } from './util';\n\nfunction zeroSize() {\n return { width: 0, height: 0, baseline: 0 };\n}\n\nconst DEFAULT_OPTIONS = {\n baselineMarkerSize: 1\n};\n\nlet defaultMeasureBox;\n\nif (typeof document !== \"undefined\") {\n defaultMeasureBox = document.createElement(\"div\");\n defaultMeasureBox.style.cssText = \"position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;\" +\n \"padding: 0 !important; margin: 0 !important; border: 0 !important;\" +\n \"line-height: normal !important; visibility: hidden !important; white-space: pre!important;\";\n}\n\nclass TextMetrics extends Class {\n constructor(options) {\n super();\n\n this._cache = new LRUCache(1000);\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n }\n\n measure(text, style, options = {}) {\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n\n const styleKey = objectKey(style);\n const cacheKey = hashKey(text + styleKey);\n const cachedResult = this._cache.get(cacheKey);\n\n if (cachedResult) {\n return cachedResult;\n }\n\n const size = zeroSize();\n const measureBox = options.box || defaultMeasureBox;\n const baselineMarker = this._baselineMarker().cloneNode(false);\n\n for (let key in style) {\n let value = style[key];\n if (typeof value !== \"undefined\") {\n measureBox.style[key] = value;\n }\n }\n\n const textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n\n measureBox.parentNode.removeChild(measureBox);\n\n return size;\n }\n\n _baselineMarker() {\n const marker = document.createElement(\"div\");\n marker.style.cssText = \"display: inline-block; vertical-align: baseline;width: \" +\n this.options.baselineMarkerSize + \"px; height: \" + this.options.baselineMarkerSize + \"px;overflow: hidden;\";\n\n return marker;\n }\n}\n\nTextMetrics.current = new TextMetrics();\n\nexport default TextMetrics;\n","const REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\nconst SPACE = ' ';\n\nfunction normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n}\n\nfunction objectKey(object) {\n const parts = [];\n for (let key in object) {\n parts.push(key + object[key]);\n }\n\n return parts.sort().join(\"\");\n}\n\n// Computes FNV-1 hash\n// See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function\nfunction hashKey(str) {\n // 32-bit FNV-1 offset basis\n // See http://isthe.com/chongo/tech/comp/fnv/#FNV-param\n let hash = 0x811C9DC5;\n\n for (let i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n\n return hash >>> 0;\n}\n\nexport { objectKey, hashKey, normalizeText };","export default function append(first, second) {\n first.push.apply(first, second);\n return first;\n}","/* eslint-disable key-spacing,no-multi-spaces,no-param-reassign */\n\nconst literals = {\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\n 1000 : \"m\"\n};\n\nexport default function arabicToRoman(n) {\n const values = [ 1000,\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\n\n let roman = \"\";\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n}\n","export default function bindEvents(element, events) {\n for (let eventName in events) {\n const eventNames = eventName.trim().split(\" \");\n for (let idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n}","const DEG_TO_RAD = Math.PI / 180;\nconst MAX_NUM = Number.MAX_VALUE;\nconst MIN_NUM = -Number.MAX_VALUE;\n\nexport { DEG_TO_RAD, MAX_NUM, MIN_NUM };","export default function createPromise() {\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = (data) => {\n promise._state = \"resolved\";\n resolve(data);\n return promise;\n };\n rejectFn = (data) => {\n promise._state = \"rejected\";\n reject(data);\n\n return promise;\n };\n });\n promise._state = \"pending\";\n promise.resolve = resolveFn;\n promise.reject = rejectFn;\n promise.state = () => promise._state;\n\n return promise;\n}\n","const UNDEFINED = \"undefined\";\n\nexport default function defined(value) {\n return typeof value !== UNDEFINED;\n}","let defId = 1;\n\nexport default function definitionId() {\n return \"kdef\" + defId++;\n}","import { DEG_TO_RAD } from './constants';\n\nexport default function deg(radians) {\n return radians / DEG_TO_RAD;\n}","export default function elementOffset(element) {\n const box = element.getBoundingClientRect();\n\n const documentElement = document.documentElement;\n\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n}","import { default as elementStyles } from './element-styles';\n\nexport default function elementPadding(element) {\n const { paddingLeft, paddingTop } = elementStyles(element, [ \"paddingLeft\", \"paddingTop\" ]);\n return {\n top: parseFloat(paddingTop),\n left: parseFloat(paddingLeft)\n };\n}\n","import Matrix from '../geometry/matrix';\n\nconst matrixRegexp = /matrix\\((.*)\\)/;\n\nfunction parseMatrix(matrixString) {\n const match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n\n const members = match[1].split(',').map(x => parseFloat(x));\n return new Matrix(...members);\n}\n\nfunction transformMatrix(element) {\n const transform = getComputedStyle(element).transform;\n\n if (transform === 'none') {\n return Matrix.unit();\n }\n\n return parseMatrix(transform);\n}\n\nexport default function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n\n let matrix = transformMatrix(element);\n let parent = element.parentElement;\n while (parent) {\n const parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n}\n","import elementStyles from './element-styles';\nimport defined from './defined';\n\nfunction getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + \"px\";\n}\n\nexport default function elementSize(element, size) {\n if (size) {\n const { width, height } = size;\n\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n\n } else {\n const size = elementStyles(element, [ 'width', 'height' ]);\n\n return {\n width: parseInt(size.width, 10),\n height: parseInt(size.height, 10)\n };\n }\n}","export default function elementStyles(element, styles) {\n const result = {};\n const style = window.getComputedStyle(element) || {};\n const stylesArray = Array.isArray(styles) ? styles : [ styles ];\n\n for (let idx = 0; idx < stylesArray.length; idx++) {\n let field = stylesArray[idx];\n result[field] = style[field];\n }\n\n return result;\n}","import { encodeUTF8 } from './encode-utf';\n\nconst KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nexport default function encodeBase64(input) {\n let output = \"\";\n let i = 0;\n\n const utfInput = encodeUTF8(input);\n\n while (i < utfInput.length) {\n let chr1 = utfInput.charCodeAt(i++);\n let chr2 = utfInput.charCodeAt(i++);\n let chr3 = utfInput.charCodeAt(i++);\n\n let enc1 = chr1 >> 2;\n let enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n let enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n let enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\n KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n\n return output;\n}","const fromCharCode = String.fromCharCode;\n\nexport const BOM = '\\xfe\\xff';\n\n// Encodes a string as UTF-8\nexport function encodeUTF8(input) {\n let output = \"\";\n\n for (let i = 0; i < input.length; i++) {\n let code = input.charCodeAt(i);\n\n if (0xD800 <= code && code <= 0xDBFF) {\n const hi = code;\n const low = input.charCodeAt(++i);\n\n if (!isNaN(low)) {\n // Combine high and low surrogate\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n code = (hi - 0xD800) * 0x400 +\n (low - 0xDC00) + 0x10000;\n }\n }\n\n if (code < 0x80) {\n // One byte\n output += fromCharCode(code);\n } else if (code < 0x800) {\n // Two bytes\n output += fromCharCode(0xC0 | (code >>> 6));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n // Three bytes\n output += fromCharCode(0xE0 | (code >>> 12));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10FFFF) {\n // Four bytes\n output += fromCharCode(0xF0 | (code >>> 18));\n output += fromCharCode(0x80 | (code >>> 12 & 0x3f));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n }\n }\n\n return output;\n}\n\nfunction encodeUnit(codeUnit) {\n return fromCharCode(codeUnit >> 8) + fromCharCode(codeUnit & 0x00ff);\n}\n\n// Encodes a string as UTF-16 big-endian\nexport function encodeUTF16BE(input) {\n let output = '';\n\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n\n if (c < 0xFFFF) {\n output += encodeUnit(c);\n } else {\n const lead = ((c - 0x10000) >> 10) + 0xD800;\n const trail = ((c - 0x10000) & 0x3FF) + 0xDC00;\n output += encodeUnit(lead);\n output += encodeUnit(trail);\n }\n }\n\n return output;\n}\n","import defined from './defined';\n\nexport default function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n}","export default function eventElement(e = {}) {\n return e.touch ? e.touch.initialTouch : e.target;\n}","import defined from './defined';\n\nexport default function isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n}","export default function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n}","export default function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n}","/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n// mergeSort is stable.\nexport default function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return (function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n })(a);\n}","const now = Date.now || function() {\n return new Date().getTime();\n};\n\nexport default now;\n","export default function promiseAll(promises) {\n return Promise.all(promises);\n}","import { DEG_TO_RAD } from './constants';\n\nexport default function rad(degrees) {\n return degrees * DEG_TO_RAD;\n}\n","function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n\n return 1;\n}\n\nexport default function round(value, precision) {\n const power = pow(precision);\n return Math.round(value * power) / power;\n}","export default function unbindEvents(element, events = {}) {\n for (let name in events) {\n const eventNames = name.trim().split(\" \");\n for (let idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n}","import defined from './defined';\n\nexport default function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n}","export default function isString(value) {\n return typeof value === \"string\";\n}","//The error is represented by unique name and corresponding message\n//The message can contain placeholders with index, e.g. {0}, {1}\n\nexport default {\n \"NoLocale\": \"Missing locale info for '{0}'\",\n \"NoCurrency\": \"Cannot determine currency information. Please load the locale currencies data.\",\n \"NoSupplementalCurrency\": \"Cannot determine currency. Please load the supplemental currencyData.\",\n \"NoCurrencyRegion\": \"No currency data for region '{0}'\",\n \"NoCurrencyDisplay\": \"Cannot determine currency display information. Please load the locale currencies data. The default culture does not include the all currencies data.\",\n \"NoGMTInfo\": \"Cannot determine locale GMT format. Please load the locale timeZoneNames data.\",\n \"NoWeekData\": \"Cannot determine locale first day of week. Please load the supplemental weekData.\",\n \"NoFirstDay\": \"Cannot determine locale first day of week. Please load the supplemental weekData. The default culture includes only the 'en-US' first day info.\",\n \"NoValidCurrency\": \"Cannot determine a default currency for the {0} locale. Please specify explicitly the currency with the format options.\",\n \"NoDateFieldNames\": \"Cannot determine the locale date field names. Please load the locale dateFields data.\"\n};\n","import errorDetails from './error-details';\n\nconst formatRegExp = /\\{(\\d+)}?\\}/g;\n\nclass IntlError {\n constructor({ name, message }) {\n if (!name || !message) {\n throw new Error(\"{ name: string, message: string } object is required!\");\n }\n\n this.name = name;\n this.message = message;\n }\n\n formatMessage(...values) {\n const flattenValues = flatten(values);\n\n const formattedMessage = this.message.replace(formatRegExp, function(match, index) {\n return flattenValues[parseInt(index, 10)];\n });\n\n return `${this.name}: ${formattedMessage}`;\n }\n\n error(...values) {\n return new Error(this.formatMessage(values));\n }\n}\n\nconst flatten = function(arr) {\n return arr.reduce((a, b) => a.concat(b), []);\n};\n\nconst toIntlErrors = function(errors) {\n const predicate = function(prev, name) {\n prev[name] = new IntlError({ name, message: errors[name] });\n return prev;\n };\n\n return Object.keys(errors).reduce(predicate, {});\n};\n\nconst errors = toIntlErrors(errorDetails);\n\nexport {\n errors,\n IntlError,\n toIntlErrors\n};\n","import defaultData from './default-data';\nimport isString from '../common/is-string';\nimport { errors } from '../errors';\n\nfunction availableLocaleInfo(fullName, suffixes) {\n const parts = fullName.split(\"-\");\n const language = parts[0];\n const script = parts[1];\n const territory = parts[2];\n\n return cldr[fullName] || (suffixes.indexOf(territory) !== -1 && cldr[language + \"-\" + territory]) || (suffixes.indexOf(script) !== -1 && cldr[language + \"-\" + script]) || cldr[language];\n}\n\nfunction localeFullName(language, suffixes) {\n const likelySubtags = cldr.supplemental.likelySubtags;\n\n for (let idx = 0; idx < suffixes.length; idx++) {\n let name = likelySubtags[language + \"-\" + suffixes[idx ]];\n if (name) {\n return name;\n }\n }\n\n if (likelySubtags[language]) {\n return likelySubtags[language];\n }\n}\n\nexport const cldr = defaultData;\n\nexport function getLocaleInfo(locale) {\n let info;\n if (isString(locale)) {\n info = localeInfo(locale);\n } else {\n info = locale;\n }\n return info;\n}\n\nexport function localeInfo(locale) {\n if (cldr[locale]) {\n return cldr[locale];\n }\n\n const likelySubtags = cldr.supplemental.likelySubtags;\n if (likelySubtags) {\n const parts = locale.split(\"-\");\n const language = parts[0];\n const suffixes = parts.slice(1);\n const fullName = localeFullName(language, suffixes);\n const info = fullName ? availableLocaleInfo(fullName, suffixes) : null;\n if (info) {\n return info;\n }\n }\n\n throw errors.NoLocale.error(locale);\n}\n","const defaultData = {\n en: {\n name: \"en\",\n identity: {\n version: {\n _unicodeVersion: \"14.0.0\",\n _cldrVersion: \"41\"\n },\n language: \"en\"\n },\n territory: \"US\",\n numbers: {\n symbols: {\n decimal: \".\",\n group: \",\",\n list: \";\",\n percentSign: \"%\",\n plusSign: \"+\",\n minusSign: \"-\",\n exponential: \"E\",\n superscriptingExponent: \"×\",\n perMille: \"‰\",\n infinity: \"∞\",\n nan: \"NaN\",\n timeSeparator: \":\",\n approximatelySign: \"~\"\n },\n decimal: {\n patterns: [\n \"n\"\n ],\n groupSize: [\n 3\n ]\n },\n scientific: {\n patterns: [\n \"nEn\"\n ],\n groupSize: []\n },\n percent: {\n patterns: [\n \"n%\"\n ],\n groupSize: [\n 3\n ]\n },\n currency: {\n patterns: [\n \"$n\"\n ],\n groupSize: [\n 3\n ],\n \"unitPattern-count-one\": \"n $\",\n \"unitPattern-count-other\": \"n $\"\n },\n currencies: {\n BGN: {\n displayName: \"Bulgarian Lev\",\n \"displayName-count-one\": \"Bulgarian lev\",\n \"displayName-count-other\": \"Bulgarian leva\",\n symbol: \"BGN\"\n },\n EUR: {\n displayName: \"Euro\",\n \"displayName-count-one\": \"euro\",\n \"displayName-count-other\": \"euros\",\n symbol: \"€\",\n \"symbol-alt-narrow\": \"€\"\n },\n USD: {\n displayName: \"US Dollar\",\n \"displayName-count-one\": \"US dollar\",\n \"displayName-count-other\": \"US dollars\",\n symbol: \"$\",\n \"symbol-alt-narrow\": \"$\"\n }\n },\n localeCurrency: \"USD\",\n accounting: {\n patterns: [\n \"$n\",\n \"($n)\"\n ],\n groupSize: [\n 3\n ]\n }\n },\n calendar: {\n gmtFormat: \"GMT{0}\",\n gmtZeroFormat: \"GMT\",\n patterns: {\n d: \"M/d/y\",\n D: \"EEEE, MMMM d, y\",\n m: \"MMM d\",\n M: \"MMMM d\",\n y: \"MMM y\",\n Y: \"MMMM y\",\n F: \"EEEE, MMMM d, y h:mm:ss a\",\n g: \"M/d/y h:mm a\",\n G: \"M/d/y h:mm:ss a\",\n t: \"h:mm a\",\n T: \"h:mm:ss a\",\n s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\"\n },\n dateTimeFormats: {\n full: \"{1} 'at' {0}\",\n long: \"{1} 'at' {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\",\n availableFormats: {\n Bh: \"h B\",\n Bhm: \"h:mm B\",\n Bhms: \"h:mm:ss B\",\n d: \"d\",\n E: \"ccc\",\n EBhm: \"E h:mm B\",\n EBhms: \"E h:mm:ss B\",\n Ed: \"d E\",\n Ehm: \"E h:mm a\",\n EHm: \"E HH:mm\",\n Ehms: \"E h:mm:ss a\",\n EHms: \"E HH:mm:ss\",\n Gy: \"y G\",\n GyMd: \"M/d/y GGGGG\",\n GyMMM: \"MMM y G\",\n GyMMMd: \"MMM d, y G\",\n GyMMMEd: \"E, MMM d, y G\",\n h: \"h a\",\n H: \"HH\",\n hm: \"h:mm a\",\n Hm: \"HH:mm\",\n hms: \"h:mm:ss a\",\n Hms: \"HH:mm:ss\",\n hmsv: \"h:mm:ss a v\",\n Hmsv: \"HH:mm:ss v\",\n hmv: \"h:mm a v\",\n Hmv: \"HH:mm v\",\n M: \"L\",\n Md: \"M/d\",\n MEd: \"E, M/d\",\n MMM: \"LLL\",\n MMMd: \"MMM d\",\n MMMEd: \"E, MMM d\",\n MMMMd: \"MMMM d\",\n \"MMMMW-count-one\": \"'week' W 'of' MMMM\",\n \"MMMMW-count-other\": \"'week' W 'of' MMMM\",\n ms: \"mm:ss\",\n y: \"y\",\n yM: \"M/y\",\n yMd: \"M/d/y\",\n yMEd: \"E, M/d/y\",\n yMMM: \"MMM y\",\n yMMMd: \"MMM d, y\",\n yMMMEd: \"E, MMM d, y\",\n yMMMM: \"MMMM y\",\n yQQQ: \"QQQ y\",\n yQQQQ: \"QQQQ y\",\n \"yw-count-one\": \"'week' w 'of' Y\",\n \"yw-count-other\": \"'week' w 'of' Y\"\n }\n },\n timeFormats: {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n },\n dateFormats: {\n full: \"EEEE, MMMM d, y\",\n long: \"MMMM d, y\",\n medium: \"MMM d, y\",\n short: \"M/d/yy\"\n },\n days: {\n format: {\n abbreviated: [\n \"Sun\",\n \"Mon\",\n \"Tue\",\n \"Wed\",\n \"Thu\",\n \"Fri\",\n \"Sat\"\n ],\n narrow: [\n \"S\",\n \"M\",\n \"T\",\n \"W\",\n \"T\",\n \"F\",\n \"S\"\n ],\n short: [\n \"Su\",\n \"Mo\",\n \"Tu\",\n \"We\",\n \"Th\",\n \"Fr\",\n \"Sa\"\n ],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n ]\n },\n \"stand-alone\": {\n abbreviated: [\n \"Sun\",\n \"Mon\",\n \"Tue\",\n \"Wed\",\n \"Thu\",\n \"Fri\",\n \"Sat\"\n ],\n narrow: [\n \"S\",\n \"M\",\n \"T\",\n \"W\",\n \"T\",\n \"F\",\n \"S\"\n ],\n short: [\n \"Su\",\n \"Mo\",\n \"Tu\",\n \"We\",\n \"Th\",\n \"Fr\",\n \"Sa\"\n ],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n ]\n }\n },\n months: {\n format: {\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ],\n narrow: [\n \"J\",\n \"F\",\n \"M\",\n \"A\",\n \"M\",\n \"J\",\n \"J\",\n \"A\",\n \"S\",\n \"O\",\n \"N\",\n \"D\"\n ],\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ]\n },\n \"stand-alone\": {\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ],\n narrow: [\n \"J\",\n \"F\",\n \"M\",\n \"A\",\n \"M\",\n \"J\",\n \"J\",\n \"A\",\n \"S\",\n \"O\",\n \"N\",\n \"D\"\n ],\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ]\n }\n },\n quarters: {\n format: {\n abbreviated: [\n \"Q1\",\n \"Q2\",\n \"Q3\",\n \"Q4\"\n ],\n narrow: [\n \"1\",\n \"2\",\n \"3\",\n \"4\"\n ],\n wide: [\n \"1st quarter\",\n \"2nd quarter\",\n \"3rd quarter\",\n \"4th quarter\"\n ]\n },\n \"stand-alone\": {\n abbreviated: [\n \"Q1\",\n \"Q2\",\n \"Q3\",\n \"Q4\"\n ],\n narrow: [\n \"1\",\n \"2\",\n \"3\",\n \"4\"\n ],\n wide: [\n \"1st quarter\",\n \"2nd quarter\",\n \"3rd quarter\",\n \"4th quarter\"\n ]\n }\n },\n dayPeriods: {\n format: {\n abbreviated: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n },\n narrow: {\n midnight: \"mi\",\n am: \"a\",\n \"am-alt-variant\": \"am\",\n noon: \"n\",\n pm: \"p\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n },\n wide: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n }\n },\n \"stand-alone\": {\n abbreviated: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n },\n narrow: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n },\n wide: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n }\n }\n },\n eras: {\n format: {\n wide: {\n \"0\": \"Before Christ\",\n \"1\": \"Anno Domini\",\n \"0-alt-variant\": \"Before Common Era\",\n \"1-alt-variant\": \"Common Era\"\n },\n abbreviated: {\n \"0\": \"BC\",\n \"1\": \"AD\",\n \"0-alt-variant\": \"BCE\",\n \"1-alt-variant\": \"CE\"\n },\n narrow: {\n \"0\": \"B\",\n \"1\": \"A\",\n \"0-alt-variant\": \"BCE\",\n \"1-alt-variant\": \"CE\"\n }\n }\n },\n dateFields: {\n era: {\n wide: \"era\",\n short: \"era\",\n narrow: \"era\"\n },\n year: {\n wide: \"year\",\n short: \"yr.\",\n narrow: \"yr.\"\n },\n quarter: {\n wide: \"quarter\",\n short: \"qtr.\",\n narrow: \"qtr.\"\n },\n month: {\n wide: \"month\",\n short: \"mo.\",\n narrow: \"mo.\"\n },\n week: {\n wide: \"week\",\n short: \"wk.\",\n narrow: \"wk.\"\n },\n weekOfMonth: {\n wide: \"week of month\",\n short: \"wk. of mo.\",\n narrow: \"wk. of mo.\"\n },\n day: {\n wide: \"day\",\n short: \"day\",\n narrow: \"day\"\n },\n dayOfYear: {\n wide: \"day of year\",\n short: \"day of yr.\",\n narrow: \"day of yr.\"\n },\n weekday: {\n wide: \"day of the week\",\n short: \"day of wk.\",\n narrow: \"day of wk.\"\n },\n weekdayOfMonth: {\n wide: \"weekday of the month\",\n short: \"wkday. of mo.\",\n narrow: \"wkday. of mo.\"\n },\n dayperiod: {\n short: \"AM/PM\",\n wide: \"AM/PM\",\n narrow: \"AM/PM\"\n },\n hour: {\n wide: \"hour\",\n short: \"hr.\",\n narrow: \"hr.\"\n },\n minute: {\n wide: \"minute\",\n short: \"min.\",\n narrow: \"min.\"\n },\n second: {\n wide: \"second\",\n short: \"sec.\",\n narrow: \"sec.\"\n },\n zone: {\n wide: \"time zone\",\n short: \"zone\",\n narrow: \"zone\"\n },\n millisecond: {\n narrow: \"ms\",\n short: \"ms\",\n wide: \"millisecond\"\n }\n }\n }\n },\n supplemental: {\n likelySubtags: {\n en: \"en-Latn-US\"\n },\n currencyData: {\n region: {\n US: [\n {\n USD: {\n _from: \"1792-01-01\"\n }\n }\n ]\n }\n },\n weekData: {\n firstDay: {\n US: \"sun\"\n },\n weekendStart: {\n \"001\": \"sat\"\n },\n weekendEnd: {\n \"001\": \"sun\"\n }\n }\n }\n};\nexport default defaultData;","export const DECIMAL = \"decimal\";\nexport const CURRENCY = \"currency\";\nexport const ACCOUNTING = \"accounting\";\nexport const PERCENT = \"percent\";\nexport const SCIENTIFIC = \"scientific\";\n\nexport const CURRENCY_PLACEHOLDER = \"$\";\nexport const PERCENT_PLACEHOLDER = \"%\";\nexport const NUMBER_PLACEHOLDER = \"n\";\n\nexport const LIST_SEPARATOR = \";\";\nexport const GROUP_SEPARATOR = \",\";\n\nexport const POINT = \".\";\nexport const EMPTY = \"\";\n\nexport const DEFAULT_LOCALE = \"en\";\n\n","import { cldr } from './info';\nimport { CURRENCY, ACCOUNTING, DECIMAL, CURRENCY_PLACEHOLDER, NUMBER_PLACEHOLDER, LIST_SEPARATOR, GROUP_SEPARATOR, POINT } from '../common/constants';\n\nconst LATIN_NUMBER_FORMATS = \"Formats-numberSystem-latn\";\nconst LATIN_NUMBER_SYMBOLS = \"symbols-numberSystem-latn\";\n\nconst patternRegExp = /([#,0.]+)/g;\nconst cldrCurrencyRegExp = /¤/g;\n\nfunction getPatterns(pattern) {\n patternRegExp.lastIndex = 0;\n\n return pattern.replace(cldrCurrencyRegExp, CURRENCY_PLACEHOLDER).replace(patternRegExp, NUMBER_PLACEHOLDER).split(LIST_SEPARATOR);\n}\n\nfunction getGroupSize(pattern) {\n patternRegExp.lastIndex = 0;\n\n const numberPatterns = patternRegExp.exec(pattern.split(LIST_SEPARATOR)[0])[0].split(POINT);\n const integer = numberPatterns[0];\n\n const groupSize = integer.split(GROUP_SEPARATOR).slice(1).map(function(group) {\n return group.length;\n }).reverse();\n\n return groupSize;\n}\n\nfunction loadCurrencyUnitPatterns(currencyInfo, currencyFormats) {\n for (let field in currencyFormats) {\n if (field.startsWith(\"unitPattern\")) {\n currencyInfo[field] = currencyFormats[field].replace(\"{0}\", NUMBER_PLACEHOLDER).replace(\"{1}\", CURRENCY_PLACEHOLDER);\n }\n }\n}\n\nexport default function loadNumbersInfo(locale, info) {\n const localeInfo = cldr[locale];\n const numbers = localeInfo.numbers = localeInfo.numbers || {};\n numbers.symbols = numbers.symbols || {};\n for (let field in info) {\n if (field === LATIN_NUMBER_SYMBOLS) {\n Object.assign(numbers.symbols, info[field]);\n } else if (field.includes(LATIN_NUMBER_FORMATS)) {\n const style = field.substr(0, field.indexOf(LATIN_NUMBER_FORMATS));\n const pattern = info[field].standard;\n numbers[style] = {\n patterns: getPatterns(pattern)\n };\n if (style === CURRENCY) {\n numbers[style].groupSize = getGroupSize((info[DECIMAL + LATIN_NUMBER_FORMATS] || info[field]).standard);\n loadCurrencyUnitPatterns(numbers[style], info[field]);\n numbers[ACCOUNTING] = {\n patterns: getPatterns(info[field][ACCOUNTING]),\n groupSize: numbers[style].groupSize\n };\n } else {\n numbers[style].groupSize = getGroupSize(pattern);\n }\n } else if (field === \"currencies\") {\n numbers.currencies = info[field];\n }\n }\n}","import { cldr } from './info';\n\nconst predefinedDatePatterns = {\n s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\"\n};\n\nconst YEAR_REGEX = /y+/g;\nconst SHORT_DATE = [ [ \"dateFormats\", \"short\" ] ];\n\nconst datePatterns = {\n D: [ [ \"dateFormats\", \"full\" ] ],\n m: [ [ \"dateTimeFormats\", \"availableFormats\", \"MMMd\" ] ],\n M: [ [ \"dateTimeFormats\", \"availableFormats\", \"MMMMd\" ] ],\n y: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMMM\" ] ],\n Y: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMMMM\" ] ],\n F: [ [ \"dateFormats\", \"full\" ], [ \"timeFormats\", \"medium\" ] ],\n g: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMd\" ], [ \"timeFormats\", \"short\" ] ],\n G: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMd\" ], [ \"timeFormats\", \"medium\" ] ],\n t: [ [ \"timeFormats\", \"short\" ] ],\n T: [ [ \"timeFormats\", \"medium\" ] ]\n};\n\nfunction toArray(obj) {\n let result = [];\n let names = Object.getOwnPropertyNames(obj);\n for (let idx = 0; idx < names.length; idx++) {\n let value = obj[names[idx]];\n result.push(value);\n }\n return result;\n}\n\nfunction getCalendarNames(info, isObj) {\n const result = {};\n for (let formatType in info) {\n let names = result[formatType] = {};\n for (let format in info[formatType]) {\n let formats = info[formatType][format];\n names[format] = isObj ? formats : toArray(formats);\n }\n }\n return result;\n}\n\nfunction getEraNames(eras) {\n const result = {};\n const format = result.format = {};\n const eraNameMap = {\n eraAbbr: \"abbreviated\",\n eraNames: \"wide\",\n eraNarrow: \"narrow\"\n };\n\n for (let eraFormatName in eras) {\n let formatName = eraNameMap[eraFormatName];\n format[formatName] = eras[eraFormatName];\n }\n\n return result;\n}\n\nfunction loadCalendarNames(locale, calendar) {\n const localeCalendar = cldr[locale].calendar;\n localeCalendar.days = getCalendarNames(calendar.days);\n localeCalendar.months = getCalendarNames(calendar.months);\n localeCalendar.quarters = getCalendarNames(calendar.quarters);\n localeCalendar.dayPeriods = getCalendarNames(calendar.dayPeriods, true);\n\n localeCalendar.eras = getEraNames(calendar.eras);\n}\n\nfunction loadCalendarDateFields(locale, fields) {\n const localeCalendar = cldr[locale].calendar;\n const dateFields = {};\n\n for (let field in fields) {\n const [ fieldName, formatType = 'wide' ] = field.split('-');\n const fieldInfo = dateFields[fieldName] || {};\n const displayName = fields[field].displayName;\n\n if (!displayName) { continue; }\n\n fieldInfo[formatType] = displayName;\n dateFields[fieldName] = fieldInfo;\n }\n\n localeCalendar.dateFields = dateFields;\n}\n\nfunction getPredefinedFormat(paths, calendar) {\n const result = [];\n\n for (let pathIdx = 0; pathIdx < paths.length; pathIdx++) {\n let fields = paths[ pathIdx ];\n let pattern = calendar;\n for (let idx = 0; idx < fields.length; idx++) {\n pattern = pattern[fields[idx]];\n }\n result.push(pattern);\n }\n\n return result.join(\" \");\n}\n\nfunction loadCalendarPatterns(locale, calendar) {\n const cldrCalendar = cldr[locale].calendar;\n const patterns = cldrCalendar.patterns = {};\n\n patterns.d = getPredefinedFormat(SHORT_DATE, calendar).replace(YEAR_REGEX, 'y');\n\n for (let pattern in datePatterns) {\n patterns[pattern] = getPredefinedFormat(datePatterns[pattern], calendar);\n }\n\n for (let pattern in predefinedDatePatterns) {\n patterns[pattern] = predefinedDatePatterns[pattern];\n }\n\n const dateTimeFormats = calendar.dateTimeFormats;\n cldrCalendar.dateTimeFormats = {\n full: dateTimeFormats.full,\n long: dateTimeFormats.long,\n medium: dateTimeFormats.medium,\n short: dateTimeFormats.short,\n availableFormats: dateTimeFormats.availableFormats\n };\n cldrCalendar.timeFormats = calendar.timeFormats;\n cldrCalendar.dateFormats = calendar.dateFormats;\n}\n\n\nexport default function loadCalendarInfo(locale, info) {\n const calendar = cldr[locale].calendar = cldr[locale].calendar || {};\n for (let field in info) {\n if (field === \"timeZoneNames\") {\n calendar.gmtFormat = info[field].gmtFormat;\n calendar.gmtZeroFormat = info[field].gmtZeroFormat;\n } else if (field === \"calendars\" && info[field].gregorian) {\n loadCalendarPatterns(locale, info[field].gregorian);\n loadCalendarNames(locale, info[field].gregorian);\n } else if (field === \"fields\") {\n loadCalendarDateFields(locale, info.fields);\n }\n }\n}\n","import { cldr } from './info';\n\nfunction territoryFromName(name, identity) {\n const likelySubtags = cldr.supplemental.likelySubtags;\n let parts = name.split(\"-\");\n if (likelySubtags) {\n const likelyName = likelySubtags[name] || likelySubtags[parts[0]];\n if (likelyName) {\n parts = likelyName.split(\"-\");\n }\n }\n\n if (identity) {\n for (let idx = parts.length - 1; idx >= 1; idx--) {\n const part = parts[idx];\n if (part === identity.variant || part === identity.script) {\n parts.splice(idx, 1);\n }\n }\n }\n\n const length = parts.length;\n\n if (length > 1) {\n const territory = parts[length - 1];\n return territory.toUpperCase();\n }\n}\n\nexport default function localeTerritory(info) {\n if (info.territory) {\n return info.territory;\n }\n\n const name = info.name;\n const identity = info.identity;\n let territory;\n\n if (identity && identity.territory) {\n territory = identity.territory;\n } else {\n territory = territoryFromName(name, identity);\n }\n\n info.territory = territory;\n\n return territory;\n}\n","const MILLISECOND = 'duration-millisecond';\nconst UNIT_PATTERN_ONE = 'unitPattern-count-one';\nconst UNIT_PATTERN_OTHER = 'unitPattern-count-other';\nconst placeholderPattern = /\\{0\\}\\s?/;\n\nfunction extractUnit(unit) {\n const value = unit[UNIT_PATTERN_ONE] || unit[UNIT_PATTERN_OTHER];\n return value.replace(placeholderPattern, '');\n}\n\nexport default function loadUnits(localeInfo, units) {\n localeInfo.calendar.dateFields.millisecond = {\n narrow: extractUnit(units.narrow[MILLISECOND]),\n short: extractUnit(units.short[MILLISECOND]),\n wide: extractUnit(units.long[MILLISECOND])\n };\n}\n","import { cldr } from './info';\nimport loadNumbersInfo from './load-numbers';\nimport loadCalendarInfo from './load-dates';\nimport localeTerritory from './territory';\nimport loadUnits from './load-units';\n\nfunction loadLocale(locale, info) {\n for (let field in info) {\n if (field === \"numbers\") {\n loadNumbersInfo(locale, info[field]);\n } else if (field === \"dates\") {\n loadCalendarInfo(locale, info[field]);\n }\n }\n}\n\nexport default function load() {\n const length = arguments.length;\n for (let idx = 0; idx < length; idx++) {\n let entry = arguments[idx];\n if (entry.main) {\n let locale = Object.keys(entry.main)[0];\n let info = entry.main[locale];\n let localeInfo = cldr[locale] = cldr[locale] || {};\n\n if (info.units) {\n loadUnits(localeInfo, info.units);\n } else {\n localeInfo.name = localeInfo.name || locale;\n localeInfo.identity = localeInfo.identity || info.identity;\n\n localeTerritory(localeInfo);\n loadLocale(locale, info);\n }\n } else if (entry.supplemental) {\n if (entry.supplemental.weekData) {\n cldr.supplemental.weekData = {\n firstDay: entry.supplemental.weekData.firstDay,\n weekendStart: entry.supplemental.weekData.weekendStart,\n weekendEnd: entry.supplemental.weekData.weekendEnd\n };\n } else if (entry.supplemental.likelySubtags) {\n cldr.supplemental.likelySubtags = Object.assign(cldr.supplemental.likelySubtags, entry.supplemental.likelySubtags);\n } else if (entry.supplemental.currencyData) {\n const currencyData = cldr.supplemental.currencyData;\n currencyData.region = Object.assign(currencyData.region || {}, entry.supplemental.currencyData.region);\n currencyData.fractions = Object.assign(currencyData.fractions || {}, entry.supplemental.currencyData.fractions);\n }\n }\n }\n}\n","import { localeInfo } from './info';\nimport { errors } from '../errors';\nimport { DEFAULT_LOCALE } from '../common/constants';\n\nexport default function dateFieldName(options, locale = DEFAULT_LOCALE) {\n const info = localeInfo(locale);\n const dateFields = info.calendar.dateFields;\n if (!dateFields) {\n throw errors.NoDateFieldNames.error();\n }\n\n const fieldNameInfo = dateFields[options.type] || {};\n\n return fieldNameInfo[options.nameType] || fieldNameInfo['wide'];\n}\n","import { getLocaleInfo } from './info';\nimport { EMPTY } from '../common/constants';\n\nfunction lowerArray(arr) {\n const result = [];\n for (let idx = 0; idx < arr.length; idx++) {\n result.push(arr[idx].toLowerCase());\n }\n return result;\n}\n\nfunction lowerObject(obj) {\n const result = {};\n for (let field in obj) {\n result[field] = obj[field].toLowerCase();\n }\n return result;\n}\n\nfunction cloneLower(obj) {\n let result = Array.isArray(obj) ? lowerArray(obj) : lowerObject(obj);\n return result;\n}\n\nexport default function dateFormatNames(locale, options) {\n const { type, nameType, standAlone, lower } = options;\n const info = getLocaleInfo(locale);\n const formatType = standAlone ? \"stand-alone\" : \"format\";\n const lowerNameType = (lower ? \"lower-\" : EMPTY) + nameType;\n const formatNames = info.calendar[type][formatType];\n let result = formatNames[lowerNameType];\n if (!result && lower) {\n result = formatNames[lowerNameType] = cloneLower(formatNames[nameType]);\n }\n return result;\n}","export default function parseRangeDate(value) {\n const parts = value.split('-');\n const year = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const day = parseInt(parts[2], 10);\n\n return new Date(year, month, day);\n}\n","import { cldr, getLocaleInfo } from './info';\nimport { errors } from '../errors';\nimport localeTerritory from './territory';\nimport parseRangeDate from './parse-range-date';\n\n/* eslint-disable consistent-return */\n\nconst {\n NoCurrency,\n NoCurrencyDisplay,\n NoSupplementalCurrency,\n NoCurrencyRegion,\n NoValidCurrency\n} = errors;\n\nconst DEFAULT_CURRENCY_FRACTIONS = 2;\nconst SYMBOL = \"symbol\";\nconst INVALID_CURRENCY_CODE = 'XXX';\n\nconst GLOBAL_CURRENCIES = {\n '001': 'USD', // 001 refers to world. not sure if it is correct to assume USD but seems better than throw an error\n '150': 'EUR' // 150 territory for Europe\n\n};\n\nfunction getCurrencyInfo(locale, currency, throwIfNoValid) {\n const info = getLocaleInfo(locale);\n const currencies = info.numbers.currencies;\n if (!currencies) {\n if (throwIfNoValid) {\n throw NoCurrency.error();\n }\n\n return;\n }\n\n const currencyDisplayInfo = currencies[currency];\n\n if (!currencyDisplayInfo) {\n if (throwIfNoValid) {\n throw NoCurrencyDisplay.error();\n }\n\n return;\n }\n\n return currencyDisplayInfo;\n}\n\nfunction lengthComparer(a, b) {\n return b.length - a.length;\n}\n\nfunction regionCurrency(regionCurrencies) {\n let latestValidUntil, latestValidUntilRange;\n let latestStillValid, latestStillValidDate;\n\n for (let idx = 0; idx < regionCurrencies.length; idx++) {\n const currency = regionCurrencies[idx];\n const code = Object.keys(currency)[0];\n const info = currency[code];\n if (code !== INVALID_CURRENCY_CODE && info._tender !== 'false' && info._from) {\n if (!info._to) {\n const stillValidDate = parseRangeDate(info._from);\n if (!latestStillValidDate || latestStillValidDate < stillValidDate) {\n latestStillValid = code;\n latestStillValidDate = stillValidDate;\n }\n } else if (!latestStillValid) {\n const validFrom = parseRangeDate(info._from);\n const validTo = parseRangeDate(info._to);\n if (!latestValidUntilRange || latestValidUntilRange.to < validTo || latestValidUntilRange.from < validFrom) {\n latestValidUntil = code;\n latestValidUntilRange = {\n from: validFrom,\n to: validTo\n };\n }\n }\n }\n }\n\n return latestStillValid || latestValidUntil;\n}\n\nexport function currencyDisplays(locale, currency, throwIfNoValid = true) {\n const currencyInfo = getCurrencyInfo(locale, currency, throwIfNoValid);\n if (!currencyInfo) {\n return;\n }\n\n if (!currencyInfo.displays) {\n const displays = [ currency ];\n for (let field in currencyInfo) {\n displays.push(currencyInfo[field]);\n }\n displays.sort(lengthComparer);\n currencyInfo.displays = displays;\n }\n\n return currencyInfo.displays;\n}\n\nexport function currencyDisplay(locale, options) {\n const { value, currency, currencyDisplay = SYMBOL } = options;\n\n if (currencyDisplay === \"code\") {\n return currency;\n }\n\n const currencyInfo = getCurrencyInfo(locale, currency, true);\n let result;\n\n if (currencyDisplay === SYMBOL) {\n result = currencyInfo[\"symbol-alt-narrow\"] || currencyInfo[SYMBOL];\n } else {\n if (typeof value === \"undefined\" || value !== 1) {\n result = currencyInfo[\"displayName-count-other\"];\n } else {\n result = currencyInfo[\"displayName-count-one\"];\n }\n }\n\n return result;\n}\n\nexport function currencyFractionOptions(code) {\n let minimumFractionDigits = DEFAULT_CURRENCY_FRACTIONS;\n let maximumFractionDigits = DEFAULT_CURRENCY_FRACTIONS;\n\n const fractions = ((cldr.supplemental.currencyData || {}).fractions || {})[code];\n\n if (fractions && fractions._digits) {\n maximumFractionDigits = minimumFractionDigits = parseInt(fractions._digits, 10);\n }\n\n return {\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits\n };\n}\n\nexport function territoryCurrencyCode(territory, throwIfNoValid = true) {\n if (GLOBAL_CURRENCIES[territory]) {\n return GLOBAL_CURRENCIES[territory];\n }\n\n const currencyData = cldr.supplemental.currencyData;\n if (!currencyData) {\n if (throwIfNoValid) {\n throw NoSupplementalCurrency.error();\n }\n\n return;\n }\n\n const regionCurrencies = currencyData.region[territory];\n\n if (!regionCurrencies) {\n if (throwIfNoValid) {\n throw NoCurrencyRegion.error(territory);\n }\n\n return;\n }\n\n const currencyCode = regionCurrency(regionCurrencies);\n\n return currencyCode;\n}\n\nexport function localeCurrency(locale, throwIfNoValid) {\n const info = getLocaleInfo(locale);\n const numbers = info.numbers;\n\n if (!numbers.localeCurrency) {\n const currency = territoryCurrencyCode(localeTerritory(info), throwIfNoValid);\n\n if (!currency && throwIfNoValid) {\n throw NoValidCurrency.error(info.name);\n }\n\n numbers.localeCurrency = currency;\n }\n\n return numbers.localeCurrency;\n}\n","\nexport const DAYS_OF_WEEK = [ \"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\" ];\n\nexport const DEFAULT_TERRITORY = '001';\n","import { cldr, getLocaleInfo } from './info';\nimport localeTerritory from './territory';\n\nimport { DAYS_OF_WEEK, DEFAULT_TERRITORY } from './constants';\nimport { errors } from '../errors';\n\nconst { NoWeekData, NoFirstDay } = errors;\n\nexport default function firstDay(locale) {\n const info = getLocaleInfo(locale);\n\n if (!isNaN(info.firstDay)) {\n return info.firstDay;\n }\n\n const weekData = cldr.supplemental.weekData;\n if (!weekData) {\n throw NoWeekData.error();\n }\n\n const firstDay = weekData.firstDay[localeTerritory(info)] || weekData.firstDay[DEFAULT_TERRITORY];\n\n if (!firstDay) {\n throw NoFirstDay.error();\n }\n\n info.firstDay = DAYS_OF_WEEK.indexOf(firstDay);\n\n return info.firstDay;\n}\n","import { cldr, getLocaleInfo } from './info';\nimport localeTerritory from './territory';\n\nimport { DAYS_OF_WEEK, DEFAULT_TERRITORY } from './constants';\nimport { errors } from '../errors';\n\nconst { NoWeekData } = errors;\n\nexport default function weekendRange(locale) {\n const info = getLocaleInfo(locale);\n\n if (info.weekendRange) {\n return info.weekendRange;\n }\n\n const weekData = cldr.supplemental.weekData;\n if (!weekData) {\n throw NoWeekData.error();\n }\n\n const territory = localeTerritory(info);\n const start = weekData.weekendStart[territory] || weekData.weekendStart[DEFAULT_TERRITORY];\n const end = weekData.weekendEnd[territory] || weekData.weekendEnd[DEFAULT_TERRITORY];\n\n info.weekendRange = {\n start: DAYS_OF_WEEK.indexOf(start),\n end: DAYS_OF_WEEK.indexOf(end)\n };\n\n return info.weekendRange;\n}\n","import { getLocaleInfo } from './info';\n\nexport default function numberSymbols(locale) {\n const info = getLocaleInfo(locale);\n\n return info.numbers.symbols;\n}","export default function isNegativeZero(value) {\n return (1 / value === -Infinity);\n}\n","import { currencyDisplay, localeCurrency } from '../cldr';\n\nexport default function formatCurrencySymbol(info, options = {}) {\n if (!options.currency) {\n options.currency = localeCurrency(info, true);\n }\n\n const display = currencyDisplay(info, options);\n\n return display;\n}\n","export default function groupInteger(number, start, end, options, info) {\n const symbols = info.numbers.symbols;\n const decimalIndex = number.indexOf(symbols.decimal);\n const groupSizes = options.groupSize.slice();\n let groupSize = groupSizes.shift();\n\n let integerEnd = decimalIndex !== -1 ? decimalIndex : end + 1;\n\n let integer = number.substring(start, integerEnd);\n let result = number;\n const integerLength = integer.length;\n\n if (integerLength >= groupSize) {\n let idx = integerLength;\n let parts = [];\n\n while (idx > -1) {\n let value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n let newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n\n if (groupSize === 0) {\n value = integer.substring(0, idx);\n if (value) {\n parts.push(value);\n }\n break;\n }\n }\n\n integer = parts.reverse().join(symbols.group);\n result = number.substring(0, start) + integer + number.substring(integerEnd);\n }\n\n return result;\n}","import { CURRENCY, ACCOUNTING } from '../common/constants';\n\nexport default function isCurrencyStyle(style) {\n return style === CURRENCY || style === ACCOUNTING;\n}","export default function pad(number, digits = 2, right = false) {\n const count = digits - String(number).length;\n let result = number;\n\n if (count > 0) {\n const padString = new Array(count + 1).join(\"0\");\n result = right ? number + padString : padString + number;\n }\n\n return result;\n}","const MAX_PRECISION = 20;\n\nexport default function round(value, precision) {\n let result = value;\n let decimals = precision || 0;\n\n result = result.toString().split('e');\n result = Math.round(Number(result[0] + 'e' + (result[1] ? (Number(result[1]) + decimals) : decimals)));\n\n result = result.toString().split('e');\n result = Number(result[0] + 'e' + (result[1] ? (Number(result[1]) - decimals) : -decimals));\n\n return result.toFixed(Math.min(decimals, MAX_PRECISION));\n}","import { PERCENT, SCIENTIFIC, NUMBER_PLACEHOLDER, CURRENCY_PLACEHOLDER, PERCENT_PLACEHOLDER, EMPTY, POINT } from '../common/constants';\nimport isNegativeZero from '../common/is-negative-zero';\nimport formatCurrencySymbol from './format-currency-symbol';\nimport groupInteger from './group-integer';\nimport isCurrencyStyle from './is-currency-style';\nimport pad from '../common/pad';\nimport round from '../common/round';\nimport { currencyFractionOptions } from '../cldr';\n\nconst DEFAULT_DECIMAL_ROUNDING = 3;\nconst DEFAULT_PERCENT_ROUNDING = 0;\n\nconst trailingZeroRegex = /0+$/;\n\nfunction fractionOptions(options) {\n let { minimumFractionDigits, maximumFractionDigits, style } = options;\n const isCurrency = isCurrencyStyle(style);\n let currencyFractions;\n if (isCurrency) {\n currencyFractions = currencyFractionOptions(options.currency);\n }\n\n if (minimumFractionDigits === undefined) {\n minimumFractionDigits = isCurrency ? currencyFractions.minimumFractionDigits : 0;\n }\n\n if (maximumFractionDigits === undefined) {\n if (style === PERCENT) {\n maximumFractionDigits = Math.max(minimumFractionDigits, DEFAULT_PERCENT_ROUNDING);\n } else if (isCurrency) {\n maximumFractionDigits = Math.max(minimumFractionDigits, currencyFractions.maximumFractionDigits);\n } else {\n maximumFractionDigits = Math.max(minimumFractionDigits, DEFAULT_DECIMAL_ROUNDING);\n }\n }\n\n return {\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits\n };\n}\n\nfunction applyPattern(value, pattern, symbol) {\n let result = EMPTY;\n for (let idx = 0, length = pattern.length; idx < length; idx++) {\n let ch = pattern.charAt(idx);\n\n if (ch === NUMBER_PLACEHOLDER) {\n result += value;\n } else if (ch === CURRENCY_PLACEHOLDER || ch === PERCENT_PLACEHOLDER) {\n result += symbol;\n } else {\n result += ch;\n }\n }\n return result;\n}\n\nfunction currencyUnitPattern(info, value) {\n const currencyInfo = info.numbers.currency;\n let pattern = value !== 1 ? currencyInfo[\"unitPattern-count-other\"] : currencyInfo[\"unitPattern-count-one\"];\n if (value < 0) {\n pattern = pattern.replace(NUMBER_PLACEHOLDER, `-${ NUMBER_PLACEHOLDER }`);\n }\n\n return pattern;\n}\n\n\nexport default function standardNumberFormat(number, options, info) {\n const symbols = info.numbers.symbols;\n const { style } = options;\n const isCurrency = isCurrencyStyle(style);\n\n //return number in exponential format\n if (style === SCIENTIFIC) {\n let exponential = options.minimumFractionDigits !== undefined ? number.toExponential(options.minimumFractionDigits) : number.toExponential();\n return exponential.replace(POINT, symbols.decimal);\n }\n\n let value = number;\n let symbol;\n\n if (isCurrency) {\n options.value = value;\n symbol = formatCurrencySymbol(info, options);\n }\n\n if (style === PERCENT) {\n value *= 100;\n symbol = symbols.percentSign;\n }\n\n const { minimumFractionDigits, maximumFractionDigits } = fractionOptions(options);\n\n value = round(value, maximumFractionDigits);\n\n const negative = value < 0;\n const negativeZero = isNegativeZero(number);\n\n const parts = value.split(POINT);\n\n let integer = parts[0];\n let fraction = pad(parts[1] ? parts[1].replace(trailingZeroRegex, EMPTY) : EMPTY, minimumFractionDigits, true);\n\n //exclude \"-\" if number is negative.\n if (negative) {\n integer = integer.substring(1);\n }\n\n if (options.minimumIntegerDigits) {\n integer = pad(integer, options.minimumIntegerDigits);\n }\n\n let formattedValue = options.useGrouping !== false ? groupInteger(integer, 0, integer.length, options, info) : integer;\n\n if (fraction) {\n formattedValue += symbols.decimal + fraction;\n }\n\n let pattern;\n\n if (isCurrency && options.currencyDisplay === \"name\") {\n pattern = currencyUnitPattern(info, number);\n } else {\n const patterns = options.patterns;\n pattern = (negative || negativeZero) ? patterns[1] || (\"-\" + patterns[0]) : patterns[0];\n }\n\n if (pattern === NUMBER_PLACEHOLDER && !negative) {\n return formattedValue;\n }\n\n const result = applyPattern(formattedValue, pattern, symbol);\n\n return result;\n}","import { PERCENT_PLACEHOLDER, CURRENCY_PLACEHOLDER, CURRENCY, PERCENT, EMPTY } from '../common/constants';\nimport formatCurrencySymbol from './format-currency-symbol';\n\nconst literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g;\nconst PLACEHOLDER = \"__??__\";\n\nexport function setStyleOptions(formatOptions, info) {\n const format = formatOptions.format;\n\n //multiply number if the format has percent\n if (format.indexOf(PERCENT_PLACEHOLDER) !== -1) {\n formatOptions.style = PERCENT;\n formatOptions.symbol = info.numbers.symbols.percentSign;\n formatOptions.number *= 100;\n }\n\n if (format.indexOf(CURRENCY_PLACEHOLDER) !== -1) {\n formatOptions.style = CURRENCY;\n formatOptions.symbol = formatCurrencySymbol(info);\n }\n}\n\nexport function setFormatLiterals(formatOptions) {\n let format = formatOptions.format;\n if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\n const literals = formatOptions.literals = [];\n formatOptions.format = format.replace(literalRegExp, function(match) {\n const quoteChar = match.charAt(0).replace(\"\\\\\", EMPTY);\n const literal = match.slice(1).replace(quoteChar, EMPTY);\n\n literals.push(literal);\n\n return PLACEHOLDER;\n });\n }\n}\n\nexport function replaceLiterals(number, literals) {\n let result = number;\n if (literals) {\n const length = literals.length;\n for (let idx = 0; idx < length; idx++) {\n result = result.replace(PLACEHOLDER, literals[idx]);\n }\n }\n return result;\n}","import { CURRENCY, PERCENT, LIST_SEPARATOR, GROUP_SEPARATOR, CURRENCY_PLACEHOLDER, PERCENT_PLACEHOLDER, POINT, EMPTY } from '../common/constants';\nimport isNegativeZero from '../common/is-negative-zero';\nimport groupInteger from './group-integer';\nimport round from '../common/round';\nimport { setStyleOptions, setFormatLiterals, replaceLiterals } from './utils';\n\nconst SHARP = \"#\";\nconst ZERO = \"0\";\n\nconst trailingZerosRegExp = /(\\.(?:[0-9]*[1-9])?)0+$/g;\nconst trailingPointRegExp = /\\.$/;\nconst commaRegExp = /,/g;\n\nfunction trimTrailingZeros(value, lastZero) {\n let trimRegex;\n\n if (lastZero === 0) {\n trimRegex = trailingZerosRegExp;\n } else {\n trimRegex = new RegExp(`(\\\\.[0-9]{${ lastZero }}[1-9]*)0+$`, 'g');\n }\n\n return value.replace(trimRegex, '$1').replace(trailingPointRegExp, EMPTY);\n}\n\nfunction roundNumber(formatOptions) {\n let { number, format } = formatOptions;\n let decimalIndex = format.indexOf(POINT);\n\n if (decimalIndex !== -1) {\n const zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n const sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n const hasZero = zeroIndex > -1;\n const hasSharp = sharpIndex > -1;\n let fraction = number.toString().split(\"e\");\n\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n\n let precision = fraction.length;\n let trailingZeros = -1;\n\n if (!hasZero && !hasSharp) {\n formatOptions.format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n decimalIndex = -1;\n precision = 0;\n } else if (hasZero && zeroIndex > sharpIndex) {\n precision = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && precision > sharpIndex) {\n precision = sharpIndex;\n } else if (hasZero && precision < zeroIndex) {\n precision = zeroIndex;\n }\n\n trailingZeros = hasZero ? zeroIndex : 0;\n }\n\n if (precision > -1) {\n number = round(number, precision);\n if (trailingZeros > -1) {\n number = trimTrailingZeros(number, trailingZeros);\n }\n }\n } else {\n number = round(number);\n }\n\n if (formatOptions.negative && (number * -1) >= 0 && !formatOptions.negativeZero) {\n formatOptions.negative = false;\n }\n\n formatOptions.number = number;\n formatOptions.decimalIndex = decimalIndex;\n}\n\nfunction isConstantFormat(format) {\n return format.indexOf(SHARP) === -1 && format.indexOf(ZERO) === -1;\n}\n\nfunction setValueSpecificFormat(formatOptions) {\n let { number, format } = formatOptions;\n format = format.split(LIST_SEPARATOR);\n if ((formatOptions.negative || formatOptions.negativeZero) && format[1]) {\n format = format[1];\n formatOptions.hasNegativeFormat = true;\n } else if (number === 0) {\n const zeroFormat = format[2];\n format = zeroFormat || format[0];\n if (zeroFormat && isConstantFormat(zeroFormat)) {\n formatOptions.constant = zeroFormat;\n }\n } else {\n format = format[0];\n }\n\n formatOptions.format = format;\n}\n\nfunction setGroupOptions(formatOptions) {\n formatOptions.hasGroup = formatOptions.format.indexOf(GROUP_SEPARATOR) > -1;\n if (formatOptions.hasGroup) {\n formatOptions.format = formatOptions.format.replace(commaRegExp, EMPTY);\n }\n}\n\nfunction placeholderIndex(index1, index2, start) {\n let index;\n if (index1 === -1 && index2 !== -1) {\n index = index2;\n } else if (index1 !== -1 && index2 === -1) {\n index = index1;\n } else {\n index = start ? Math.min(index1, index2) : Math.max(index1, index2);\n }\n return index;\n}\n\nfunction setPlaceholderIndices(formatOptions) {\n const format = formatOptions.format;\n let sharpIndex = format.indexOf(SHARP);\n let zeroIndex = format.indexOf(ZERO);\n\n let start = placeholderIndex(sharpIndex, zeroIndex, true);\n\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n\n let end = placeholderIndex(sharpIndex, zeroIndex);\n\n if (start === format.length) {\n end = start;\n }\n\n formatOptions.start = start;\n formatOptions.end = end;\n formatOptions.lastZeroIndex = zeroIndex;\n}\n\nfunction replaceStyleSymbols(number, style, symbol) {\n let result = number;\n if (style === CURRENCY || style === PERCENT) {\n result = EMPTY;\n for (let idx = 0, length = number.length; idx < length; idx++) {\n let ch = number.charAt(idx);\n result += (ch === CURRENCY_PLACEHOLDER || ch === PERCENT_PLACEHOLDER) ? symbol : ch;\n }\n }\n return result;\n}\n\nfunction replacePlaceHolders(formatOptions, info) {\n const { start, end, negative, negativeZero, format, decimalIndex, lastZeroIndex, hasNegativeFormat, hasGroup } = formatOptions;\n let number = formatOptions.number;\n const value = number.toString().split(POINT);\n const length = format.length;\n const integer = value[0];\n const fraction = value[1] || EMPTY;\n const integerLength = integer.length;\n let replacement = EMPTY;\n\n number = format.substring(0, start);\n\n if ((negative || negativeZero) && !hasNegativeFormat) {\n number += \"-\";\n }\n\n for (let idx = start; idx < length; idx++) {\n let ch = format.charAt(idx);\n\n if (decimalIndex === -1) {\n if (end - idx < integerLength) {\n\n number += integer;\n break;\n }\n } else {\n if (lastZeroIndex !== -1 && lastZeroIndex < idx) {\n replacement = EMPTY;\n }\n\n if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n\n if (decimalIndex === idx) {\n number += (fraction ? info.numbers.symbols.decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, (integerLength + start)), info.numbers.decimal, info);\n }\n\n if (end >= start) {\n number += format.substring(end + 1);\n }\n\n return number;\n}\n\nfunction applyCustomFormat(formatOptions, info) {\n let number = formatOptions.number;\n if (formatOptions.start !== -1) {\n number = replacePlaceHolders(formatOptions, info);\n number = replaceStyleSymbols(number, formatOptions.style, formatOptions.symbol);\n number = replaceLiterals(number, formatOptions.literals);\n }\n\n return number;\n}\n\nexport default function customNumberFormat(number, format, info) {\n const formatOptions = {\n negative: number < 0,\n number: Math.abs(number),\n negativeZero: isNegativeZero(number),\n format: format\n };\n\n setValueSpecificFormat(formatOptions);\n\n if (formatOptions.constant) {\n return formatOptions.constant;\n }\n\n setFormatLiterals(formatOptions);\n setStyleOptions(formatOptions, info);\n setGroupOptions(formatOptions);\n roundNumber(formatOptions);\n setPlaceholderIndices(formatOptions);\n\n return applyCustomFormat(formatOptions, info);\n}","import { CURRENCY, ACCOUNTING, DECIMAL, PERCENT, SCIENTIFIC } from '../common/constants';\nimport isString from '../common/is-string';\n\nconst standardFormatRegExp = /^(n|c|p|e|a)(\\d*)$/i;\n\nfunction standardFormatOptions(format) {\n const formatAndPrecision = standardFormatRegExp.exec(format);\n\n if (formatAndPrecision) {\n const options = {\n style: DECIMAL\n };\n\n let style = formatAndPrecision[1].toLowerCase();\n\n if (style === \"c\") {\n options.style = CURRENCY;\n } else if (style === \"a\") {\n options.style = ACCOUNTING;\n } else if (style === \"p\") {\n options.style = PERCENT;\n } else if (style === \"e\") {\n options.style = SCIENTIFIC;\n }\n\n if (formatAndPrecision[2]) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseInt(formatAndPrecision[2], 10);\n }\n\n return options;\n }\n}\n\nexport default function formatOptions(format) {\n let options;\n if (isString(format)) {\n options = standardFormatOptions(format);\n } else {\n options = format;\n }\n\n return options;\n}","import { localeInfo } from '../cldr';\nimport { DECIMAL, DEFAULT_LOCALE, NUMBER_PLACEHOLDER, EMPTY } from '../common/constants';\nimport standardNumberFormat from './standard-number-format';\nimport customNumberFormat from './custom-number-format';\nimport formatOptions from './format-options';\n\nexport default function formatNumber(number, format = NUMBER_PLACEHOLDER, locale = DEFAULT_LOCALE) {\n if (number === undefined || number === null) {\n return EMPTY;\n }\n\n if (!isFinite(number)) {\n return String(number);\n }\n\n const info = localeInfo(locale);\n const options = formatOptions(format);\n\n let result;\n if (options) {\n const style = options.style || DECIMAL;\n result = standardNumberFormat(number, Object.assign({}, info.numbers[style], options), info);\n } else {\n result = customNumberFormat(number, format, info);\n }\n\n return result;\n}\n","export default function isNumber(value) {\n return typeof value === \"number\";\n}","import { localeInfo, localeCurrency, currencyDisplays } from '../cldr';\nimport { PERCENT, NUMBER_PLACEHOLDER, CURRENCY_PLACEHOLDER, DEFAULT_LOCALE, EMPTY, POINT } from '../common/constants';\nimport { setStyleOptions, setFormatLiterals } from './utils';\nimport isNumber from '../common/is-number';\nimport isCurrencyStyle from './is-currency-style';\nimport formatOptions from './format-options';\nimport isString from '../common/is-string';\n\nconst exponentRegExp = /[eE][-+]?[0-9]+/;\nconst nonBreakingSpaceRegExp = /\\u00A0/g;\n\nfunction cleanNegativePattern(number, patterns) {\n if (patterns.length > 1) {\n const parts = (patterns[1] || EMPTY).replace(CURRENCY_PLACEHOLDER, EMPTY).split(NUMBER_PLACEHOLDER);\n if (number.indexOf(parts[0]) > -1 && number.indexOf(parts[1]) > -1) {\n return number.replace(parts[0], EMPTY).replace(parts[1], EMPTY);\n }\n }\n}\n\nfunction cleanCurrencyNumber(value, info, format) {\n const options = formatOptions(format) || {};\n let isCurrency = isCurrencyStyle(options.style);\n let number = value;\n let negative;\n\n const currency = options.currency || localeCurrency(info, isCurrency);\n\n if (currency) {\n const displays = currencyDisplays(info, currency, isCurrency);\n if (displays) {\n for (let idx = 0; idx < displays.length; idx++) {\n let display = displays[idx];\n if (number.includes(display)) {\n number = number.replace(display, EMPTY);\n isCurrency = true;\n break;\n }\n }\n }\n\n if (isCurrency) {\n const cleanNumber = cleanNegativePattern(number, info.numbers.currency.patterns) ||\n cleanNegativePattern(number, info.numbers.accounting.patterns);\n\n if (cleanNumber) {\n negative = true;\n number = cleanNumber;\n }\n\n }\n }\n\n return {\n number: number,\n negative: negative\n };\n}\n\nfunction cleanLiterals(number, formatOptions) {\n const literals = formatOptions.literals;\n let result = number;\n\n if (literals) {\n for (let idx = 0; idx < literals.length; idx++) {\n result = result.replace(literals[idx], EMPTY);\n }\n }\n\n return result;\n}\n\nfunction divideBy100(number) {\n const strNumber = String(number);\n const pointIndex = strNumber.indexOf(POINT);\n const zeroesCount = 2;\n let result = number / Math.pow(10, zeroesCount);\n\n if (pointIndex === -1 || String(result).length <= strNumber.length + zeroesCount) {\n return result;\n }\n\n const fractionDigits = strNumber.length - pointIndex + 1 + zeroesCount;\n return parseFloat(result.toFixed(fractionDigits));\n}\n\nexport default function parseNumber(value, locale = DEFAULT_LOCALE, format = {}) {\n if (!value && value !== 0) {\n return null;\n }\n\n if (isNumber(value)) {\n return value;\n }\n\n const info = localeInfo(locale);\n const symbols = info.numbers.symbols;\n\n let number = value.toString();\n let formatOptions = format || {};\n let isPercent;\n\n if (isString(format)) {\n formatOptions = { format: format };\n setFormatLiterals(formatOptions);\n number = cleanLiterals(number, formatOptions);\n\n setStyleOptions(formatOptions, info);\n }\n\n if (formatOptions.style === PERCENT || number.indexOf(symbols.percentSign) > -1) {\n number = number.replace(symbols.percentSign, EMPTY);\n isPercent = true;\n }\n\n if (exponentRegExp.test(number)) {\n number = parseFloat(number.replace(symbols.decimal, POINT));\n return isNaN(number) ? null : number;\n }\n\n const { negative: negativeCurrency, number: currencyNumber } = cleanCurrencyNumber(number, info, formatOptions);\n number = String(currencyNumber).trim();\n\n const negativeSignIndex = number.indexOf(\"-\");\n if (negativeSignIndex > 0) {\n return null;\n }\n\n let isNegative = negativeSignIndex > -1;\n\n isNegative = negativeCurrency !== undefined ? negativeCurrency : isNegative;\n\n number = number.replace(\"-\", EMPTY)\n .replace(nonBreakingSpaceRegExp, \" \")\n .split(symbols.group.replace(nonBreakingSpaceRegExp, \" \")).join(EMPTY)\n .replace(symbols.decimal, POINT);\n\n number = parseFloat(number);\n\n if (isNaN(number)) {\n number = null;\n } else if (isNegative) {\n number *= -1;\n }\n\n if (number && isPercent) {\n number = divideBy100(number);\n }\n\n return number;\n}\n","const formatRegExp = /\\{(\\d+)}/g;\n\nexport default function formatString(format) {\n const values = arguments;\n\n return format.replace(formatRegExp, (match, index) => {\n const value = values[parseInt(index, 10) + 1];\n\n return value;\n });\n}","import formatString from '../common/format-string';\nimport isString from '../common/is-string';\nimport { EMPTY } from '../common/constants';\n\nconst REMOVAL_PENALTY = 120;\nconst ADDITION_PENALTY = 20;\nconst LENGHT_DELTA = [ 2, 1, 5, 3, 4 ];\nconst LONG_LESS_PENALTY_DELTA = -2;\nconst SHORT_LESS_PENALTY_DELTA = -1;\nconst SHORT_MORE_PENALTY_DELTA = 1;\nconst LONG_MORE_PENALTY_DELTA = 2;\n\nconst PENALTIES = {\n [LONG_LESS_PENALTY_DELTA.toString()]: 8,\n [SHORT_LESS_PENALTY_DELTA.toString()]: 6,\n [LONG_MORE_PENALTY_DELTA.toString()]: 6,\n [SHORT_MORE_PENALTY_DELTA.toString()]: 3\n};\n\nconst VALUE_FORMAT_LENGTH = {\n numeric: 1,\n \"2-digit\": 2,\n short: 3,\n long: 4,\n narrow: 5\n};\n\nconst TIME_SPECIFIERS_REGEX = /[hHmsSzZoOvVxX]/;\n\nfunction getHourSpecifier(options) {\n return options.hour12 ? \"h\" : \"H\";\n}\n\nconst DATE_OPTIONS_MAP = [ {\n key: \"era\",\n specifier: \"G\"\n}, {\n key: \"year\",\n specifier: \"y\"\n}, {\n key: \"month\",\n specifier: \"M\"\n}, {\n key: \"day\",\n specifier: \"d\"\n}, {\n key: \"weekday\",\n specifier: \"E\"\n}, {\n key: \"hour\",\n getSpecifier: getHourSpecifier\n}, {\n key: \"minute\",\n specifier: \"m\"\n}, {\n key: \"second\",\n specifier: \"s\"\n}, {\n key: \"timeZoneName\",\n specifier: \"z\"\n} ];\n\nconst STAND_ALONE_SPECIFIERS = {\n e: 'c',\n E: 'c',\n M: 'L',\n Q: 'q'\n};\n\nconst specifiersRegex = {};\nconst resolvedFormats = {};\n\nfunction getSpecifierRegex(specifier) {\n if (!specifiersRegex[specifier]) {\n specifiersRegex[specifier] = new RegExp(specifier + \"+\");\n }\n return specifiersRegex[specifier];\n}\n\nfunction skeletonSpecifiers(skeleton) {\n const result = [];\n let current = skeleton.charAt(0);\n let specifier = current;\n for (let idx = 1; idx < skeleton.length; idx++) {\n let character = skeleton.charAt(idx);\n if (character === specifier) {\n current += character;\n } else {\n result.push(current);\n current = specifier = character;\n }\n }\n\n result.push(current);\n\n return result;\n}\n\nfunction findBestMatch(specifiers, availableFormats) {\n const specifiersLength = specifiers.length;\n let maxScore = -Number.MAX_VALUE;\n let bestMatches, result;\n for (let format in availableFormats) {\n const matches = [];\n let currentFormat = format.replace(\"v\", \"z\");\n let score = 0;\n for (let idx = 0; idx < specifiersLength; idx++) {\n const specifier = specifiers[idx];\n let specifierRegex = getSpecifierRegex(specifier[0]);\n let match = (specifierRegex.exec(currentFormat) || [])[0];\n\n if (!match) {\n score -= REMOVAL_PENALTY;\n } else {\n currentFormat = currentFormat.replace(match, EMPTY);\n if (match.length !== specifier.length) {\n let delta = Math.max(Math.min(LENGHT_DELTA[match.length] - LENGHT_DELTA[specifier.length], 2), -2);\n score -= PENALTIES[delta];\n }\n }\n\n matches.push(match);\n\n if (score < maxScore) {\n break;\n }\n }\n\n if (currentFormat.length) {\n score -= skeletonSpecifiers(currentFormat).length * ADDITION_PENALTY;\n }\n\n if (score > maxScore) {\n maxScore = score;\n bestMatches = matches;\n result = availableFormats[format];\n }\n }\n\n result = result.replace(\"v\", \"z\");\n\n for (let idx = 0; idx < specifiersLength; idx++) {\n const bestMatch = bestMatches[idx];\n if (bestMatch && bestMatch !== specifiers[idx]) {\n const matchSpecifier = bestMatches[idx][0];\n result = result.replace(getSpecifierRegex(matchSpecifier), specifiers[idx]);\n if (STAND_ALONE_SPECIFIERS[matchSpecifier]) {\n result = result.replace(getSpecifierRegex(STAND_ALONE_SPECIFIERS[matchSpecifier]), specifiers[idx]);\n }\n }\n }\n\n return result;\n}\n\nfunction cacheFormat(skeleton, format, locale) {\n if (!resolvedFormats[locale]) {\n resolvedFormats[locale] = {};\n }\n resolvedFormats[locale][skeleton] = format;\n}\n\n\nfunction skeletonFormat(skeleton, info) {\n const availableFormats = info.calendar.dateTimeFormats.availableFormats;\n if (availableFormats[skeleton]) {\n return availableFormats[skeleton];\n }\n if (resolvedFormats[info.name] && resolvedFormats[info.name][skeleton]) {\n return resolvedFormats[info.name][skeleton];\n }\n const timeStartIndex = skeleton.search(TIME_SPECIFIERS_REGEX);\n let result;\n if (timeStartIndex > 0) {\n const dateSkeleton = skeleton.substr(0, timeStartIndex);\n const timeSkeleton = skeleton.substr(timeStartIndex);\n\n result = formatString(info.calendar.dateTimeFormats.short, //should be deterimed based on specifiers\n availableFormats[timeSkeleton] || findBestMatch(skeletonSpecifiers(timeSkeleton), availableFormats),\n availableFormats[dateSkeleton] || findBestMatch(skeletonSpecifiers(dateSkeleton), availableFormats));\n } else {\n result = findBestMatch(skeletonSpecifiers(skeleton), availableFormats);\n }\n\n cacheFormat(skeleton, result, info.name);\n return result;\n}\n\nfunction skeletonFromOptions(options) {\n let result = [];\n for (let idx = 0; idx < DATE_OPTIONS_MAP.length; idx++) {\n let option = DATE_OPTIONS_MAP[idx];\n let field = option.key;\n let value = options[field];\n if (value) {\n let spcifier = option.specifier || option.getSpecifier(options);\n result.push(spcifier.repeat(VALUE_FORMAT_LENGTH[value]));\n }\n }\n\n return result.join(EMPTY);\n}\n\nexport default function datePattern(format, info) {\n const calendar = info.calendar;\n let result;\n if (isString(format)) {\n if (calendar.patterns[format]) {\n result = calendar.patterns[format];\n } else {\n result = format;\n }\n } else if (format) {\n if (format.pattern) {\n return format.pattern;\n }\n\n let skeleton = format.skeleton;\n if (!skeleton) {\n if (format.datetime) {\n result = formatString(calendar.dateTimeFormats[format.datetime], calendar.timeFormats[format.datetime], calendar.dateFormats[format.datetime]);\n } else if (format.date) {\n result = calendar.dateFormats[format.date];\n } else if (format.time) {\n result = calendar.timeFormats[format.time];\n } else {\n skeleton = skeletonFromOptions(format);\n }\n }\n\n if (skeleton) {\n result = skeletonFormat(skeleton, info);\n }\n }\n\n if (!result) {\n result = calendar.patterns.d;\n }\n\n return result;\n}\n","export default function dateNameType(formatLength) {\n let nameType;\n if (formatLength <= 3) {\n nameType = \"abbreviated\";\n } else if (formatLength === 4) {\n nameType = \"wide\";\n } else if (formatLength === 5) {\n nameType = \"narrow\";\n } else if (formatLength === 6) {\n nameType = \"short\";\n }\n\n return nameType;\n}","import dateFormatNames from '../cldr/date-format-names';\nimport dateNameType from './date-name-type';\n\nexport default function formatNames(locale, type, formatLength, standAlone, lower) {\n return dateFormatNames(locale, {\n type: type,\n nameType: dateNameType(formatLength),\n standAlone: standAlone,\n lower: lower\n });\n}","function isFunction(fun) {\n return typeof(fun) === 'function';\n}\n\nexport default function isDate(value) {\n return Boolean(value) && isFunction(value.getTime) && isFunction(value.getMonth);\n}\n","const MONTH = 'month';\nconst HOUR = 'hour';\nconst ZONE = 'zone';\nconst WEEKDAY = 'weekday';\nconst QUARTER = 'quarter';\n\nconst DATE_FIELD_MAP = {\n 'G': 'era',\n 'y': 'year',\n 'q': QUARTER,\n 'Q': QUARTER,\n 'M': MONTH,\n 'L': MONTH,\n 'd': 'day',\n 'E': WEEKDAY,\n 'c': WEEKDAY,\n 'e': WEEKDAY,\n 'h': HOUR,\n 'H': HOUR,\n 'k': HOUR,\n 'K': HOUR,\n 'm': 'minute',\n 's': 'second',\n 'S': 'millisecond',\n 'a': 'dayperiod',\n 'x': ZONE,\n 'X': ZONE,\n 'z': ZONE,\n 'Z': ZONE\n};\n\nconst dateFormatRegExp = /d{1,2}|E{1,6}|e{1,6}|c{3,6}|c{1}|M{1,5}|L{1,5}|y{1,4}|H{1,2}|h{1,2}|k{1,2}|K{1,2}|m{1,2}|a{1,5}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|x{1,5}|X{1,5}|G{1,5}|q{1,5}|Q{1,5}|\"[^\"]*\"|'[^']*'/g;\n\nexport { dateFormatRegExp, DATE_FIELD_MAP };","import { localeInfo, firstDay } from '../cldr';\nimport { DEFAULT_LOCALE, EMPTY } from '../common/constants';\nimport formatString from '../common/format-string';\nimport datePattern from './date-pattern';\nimport formatNames from './format-names';\nimport pad from '../common/pad';\nimport isDate from '../common/is-date';\nimport { dateFormatRegExp } from './constants';\n\nfunction formatDayOfWeekIndex(day, formatLength, localeInfo) {\n const firstDayIndex = firstDay(localeInfo);\n let dayIndex;\n if (day < firstDayIndex) {\n dayIndex = 7 - firstDayIndex + day;\n } else {\n dayIndex = day - firstDayIndex;\n }\n\n return dayIndex + 1;\n}\n\nfunction formatMonth(month, formatLength, info, standAlone) {\n if (formatLength <= 2) {\n return pad(month + 1, formatLength);\n }\n return formatNames(info, \"months\", formatLength, standAlone)[month];\n}\n\nfunction formatQuarter(date, formatLength, info, standAlone) {\n const quarter = Math.floor(date.getMonth() / 3);\n if (formatLength < 3) {\n return quarter + 1;\n }\n\n return formatNames(info, \"quarters\", formatLength, standAlone)[quarter];\n}\n\n\nfunction formatTimeZone(date, info, options) {\n const { shortHours, optionalMinutes, separator, localizedName, zZeroOffset } = options;\n const offset = date.getTimezoneOffset() / 60;\n if (offset === 0 && zZeroOffset) {\n return \"Z\";\n }\n const sign = offset <= 0 ? \"+\" : \"-\";\n const hoursMinutes = Math.abs(offset).toString().split(\".\");\n const minutes = hoursMinutes[1] || 0;\n let result = sign + (shortHours ? hoursMinutes[0] : pad(hoursMinutes[0], 2));\n if (minutes || !optionalMinutes) {\n result += (separator ? \":\" : EMPTY) + pad(minutes, 2);\n }\n\n if (localizedName) {\n const localizedFormat = offset === 0 ? info.calendar.gmtZeroFormat : info.calendar.gmtFormat;\n result = formatString(localizedFormat, result);\n }\n\n return result;\n}\n\nfunction formatDayOfWeek(date, formatLength, info, standAlone) {\n let result;\n if (formatLength < 3) {\n result = formatDayOfWeekIndex(date.getDay(), formatLength, info);\n } else {\n result = formatNames(info, \"days\", formatLength, standAlone)[date.getDay()];\n }\n return result;\n}\n\nconst formatters = {};\n\nformatters.d = function(date, formatLength) {\n return pad(date.getDate(), formatLength);\n};\n\nformatters.E = function(date, formatLength, info) {\n return formatNames(info, \"days\", formatLength)[date.getDay()];\n};\n\nformatters.M = function(date, formatLength, info) {\n return formatMonth(date.getMonth(), formatLength, info, false);\n};\n\nformatters.L = function(date, formatLength, info) {\n return formatMonth(date.getMonth(), formatLength, info, true);\n};\n\nformatters.y = function(date, formatLength) {\n let year = date.getFullYear();\n if (formatLength === 2) {\n year = year % 100;\n }\n return pad(year, formatLength);\n};\n\nformatters.h = function(date, formatLength) {\n const hours = date.getHours() % 12 || 12;\n return pad(hours, formatLength);\n};\n\nformatters.H = function(date, formatLength) {\n return pad(date.getHours(), formatLength);\n};\n\nformatters.k = function(date, formatLength) {\n return pad(date.getHours() || 24, formatLength);\n};\n\nformatters.K = function(date, formatLength) {\n return pad(date.getHours() % 12, formatLength);\n};\n\nformatters.m = function(date, formatLength) {\n return pad(date.getMinutes(), formatLength);\n};\n\nformatters.s = function(date, formatLength) {\n return pad(date.getSeconds(), formatLength);\n};\n\nformatters.S = function(date, formatLength) {\n const milliseconds = date.getMilliseconds();\n let result;\n if (milliseconds !== 0) {\n result = pad(String(milliseconds / 1000).split(\".\")[1].substr(0, formatLength), formatLength, true);\n } else {\n result = pad(EMPTY, formatLength);\n }\n return result;\n};\n\nformatters.a = function(date, formatLength, info) {\n return formatNames(info, \"dayPeriods\", formatLength)[date.getHours() < 12 ? \"am\" : \"pm\"];\n};\n\nformatters.z = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n shortHours: formatLength < 4,\n optionalMinutes: formatLength < 4,\n separator: true,\n localizedName: true\n });\n};\n\nformatters.Z = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n separator: formatLength > 3,\n localizedName: formatLength === 4,\n zZeroOffset: formatLength === 5\n });\n};\n\nformatters.x = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n optionalMinutes: formatLength === 1,\n separator: formatLength === 3 || formatLength === 5\n });\n};\n\nformatters.X = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n optionalMinutes: formatLength === 1,\n separator: formatLength === 3 || formatLength === 5,\n zZeroOffset: true\n });\n};\n\nformatters.G = function(date, formatLength, info) {\n let era = date.getFullYear() >= 0 ? 1 : 0;\n return formatNames(info, \"eras\", formatLength)[era];\n};\n\nformatters.e = formatDayOfWeek;\n\nformatters.c = function(date, formatLength, info) {\n return formatDayOfWeek(date, formatLength, info, true);\n};\n\nformatters.q = function(date, formatLength, info) {\n return formatQuarter(date, formatLength, info, true);\n};\n\nformatters.Q = formatQuarter;\n\nexport default function formatDate(date, format, locale = DEFAULT_LOCALE) {\n if (!isDate(date)) {\n if (date === undefined || date === null) {\n return EMPTY;\n }\n return date;\n }\n\n const info = localeInfo(locale);\n const pattern = datePattern(format, info);\n\n return pattern.replace(dateFormatRegExp, function(match) {\n let formatLength = match.length;\n let result;\n\n if (match.includes(\"'\") || match.includes(\"\\\"\")) {\n result = match.slice(1, formatLength - 1);\n } else {\n result = formatters[match[0]](date, formatLength, info);\n }\n\n return result;\n });\n}\n","export function convertTimeZone(date, fromOffset, toOffset) {\n const fromLocalOffset = date.getTimezoneOffset();\n\n const offsetDate = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n const toLocalOffset = offsetDate.getTimezoneOffset();\n\n return new Date(offsetDate.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n}\n\nexport function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n}","import { adjustDST, convertTimeZone } from './time-utils';\nimport { localeInfo } from '../cldr';\nimport { DEFAULT_LOCALE, EMPTY } from '../common/constants';\nimport { errors } from '../errors';\nimport formatNames from './format-names';\nimport datePattern from './date-pattern';\nimport round from '../common/round';\nimport isDate from '../common/is-date';\n\nconst timeZoneOffsetRegExp = /([+|-]\\d{1,2})(:?)(\\d{2})?/;\nconst dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\nconst offsetRegExp = /[+-]\\d*/;\nconst numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n};\nconst numberRegex = /\\d+/;\nconst PLACEHOLDER = \"{0}\";\n\nconst leadingSpacesRegex = /^ */;\nconst trailingSpacesRegex = / *$/;\n\nconst standardDateFormats = [\n \"yyyy/MM/dd HH:mm:ss\",\n \"yyyy/MM/dd HH:mm\",\n \"yyyy/MM/dd\",\n \"E MMM dd yyyy HH:mm:ss\",\n \"yyyy-MM-ddTHH:mm:ss.SSSSSSSXXX\",\n \"yyyy-MM-ddTHH:mm:ss.SSSXXX\",\n \"yyyy-MM-ddTHH:mm:ss.SSXXX\",\n \"yyyy-MM-ddTHH:mm:ssXXX\",\n \"yyyy-MM-ddTHH:mm:ss.SSSSSSS\",\n \"yyyy-MM-ddTHH:mm:ss.SSS\",\n \"yyyy-MM-ddTHH:mmXXX\",\n \"yyyy-MM-ddTHH:mmX\",\n \"yyyy-MM-ddTHH:mm:ss\",\n \"yyyy-MM-ddTHH:mm\",\n \"yyyy-MM-dd HH:mm:ss\",\n \"yyyy-MM-dd HH:mm\",\n \"yyyy-MM-dd\",\n \"HH:mm:ss\",\n \"HH:mm\"\n];\nconst FORMATS_SEQUENCE = [ \"G\", \"g\", \"F\", \"Y\", \"y\", \"M\", \"m\", \"D\", \"d\", \"y\", \"T\", \"t\" ];\nconst TWO_DIGIT_YEAR_MAX = 2029;\n\nfunction outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n}\n\nfunction lookAhead(match, state) {\n let { format, idx } = state;\n let i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n state.idx = idx;\n return i;\n}\n\nfunction getNumber(size, state) {\n let regex = size ? (numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}')) : numberRegex,\n match = state.value.substr(state.valueIdx, size).match(regex);\n\n if (match) {\n match = match[0];\n state.valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n}\n\nfunction getIndexByName(names, state, lower) {\n let i = 0,\n length = names.length,\n name, nameLength,\n matchLength = 0,\n matchIdx = 0,\n subValue;\n\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = state.value.substr(state.valueIdx, nameLength);\n\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n\n if (subValue === name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n\n if (matchLength) {\n state.valueIdx += matchLength;\n return matchIdx + 1;\n }\n\n return null;\n}\n\nfunction checkLiteral(state) {\n let result = false;\n if (state.value.charAt(state.valueIdx) === state.format[state.idx]) {\n state.valueIdx++;\n result = true;\n }\n return result;\n}\n\nfunction calendarGmtFormats(calendar) {\n const { gmtFormat, gmtZeroFormat } = calendar;\n if (!gmtFormat) {\n throw errors.NoGMTInfo.error();\n }\n\n return [ gmtFormat.replace(PLACEHOLDER, EMPTY).toLowerCase(), gmtZeroFormat.replace(PLACEHOLDER, EMPTY).toLowerCase() ];\n}\n\nfunction parseTimeZoneOffset(state, info, options) {\n const { shortHours, noSeparator, optionalMinutes, localizedName, zLiteral } = options;\n state.UTC = true;\n\n if (zLiteral && state.value.charAt(state.valueIdx) === \"Z\") {\n state.valueIdx++;\n return false;\n }\n\n if (localizedName && !getIndexByName(calendarGmtFormats(info.calendar), state, true)) {\n return true;\n }\n\n const matches = timeZoneOffsetRegExp.exec(state.value.substr(state.valueIdx, 6));\n if (!matches) {\n return !localizedName;\n }\n\n const hoursMatch = matches[1];\n const minutesMatch = matches[3];\n const hoursOffset = parseInt(hoursMatch, 10);\n const separator = matches[2];\n let minutesOffset = parseInt(minutesMatch, 10);\n\n if (isNaN(hoursOffset) || (!shortHours && hoursMatch.length !== 3) || (!optionalMinutes && isNaN(minutesOffset)) || (noSeparator && separator)) {\n return true;\n }\n\n if (isNaN(minutesOffset)) {\n minutesOffset = null;\n }\n\n if (outOfRange(hoursOffset, -12, 13) || (minutesOffset && outOfRange(minutesOffset, 0, 59))) {\n return true;\n }\n\n state.valueIdx += matches[0].length;\n state.hoursOffset = hoursOffset;\n state.minutesOffset = minutesOffset;\n}\n\nfunction parseMonth(ch, state, info) {\n const count = lookAhead(ch, state);\n const names = formatNames(info, \"months\", count, ch === \"L\", true);\n\n const month = count < 3 ? getNumber(2, state) : getIndexByName(names, state, true);\n\n if (month === null || outOfRange(month, 1, 12)) {\n return true;\n }\n state.month = month - 1;\n}\n\nfunction parseDayOfWeek(ch, state, info) {\n const count = lookAhead(ch, state);\n const names = formatNames(info, \"days\", count, ch === \"c\", true);\n let dayOfWeek = count < 3 ? getNumber(1, state) : getIndexByName(names, state, true);\n if ((!dayOfWeek && dayOfWeek !== 0) || outOfRange(dayOfWeek, 1, 7)) {\n return true;\n }\n}\n\nconst parsers = {};\n\nparsers.d = function(state) {\n lookAhead(\"d\", state);\n const day = getNumber(2, state);\n\n if (day === null || outOfRange(day, 1, 31)) {\n return true;\n }\n\n if (state.day === null) {\n state.day = day;\n }\n};\n\nparsers.E = function(state, info) {\n const count = lookAhead(\"E\", state);\n //validate if it matches the day?\n let dayOfWeek = getIndexByName(formatNames(info, \"days\", count, false, true), state, true);\n if (dayOfWeek === null) {\n return true;\n }\n};\n\nparsers.M = function(state, info) {\n return parseMonth(\"M\", state, info);\n};\n\nparsers.L = function(state, info) {\n return parseMonth(\"L\", state, info);\n};\n\nparsers.y = function(state) {\n const count = lookAhead(\"y\", state);\n let year = getNumber(count === 1 ? undefined : count, state);\n\n if (year === null) {\n return true;\n }\n\n if (count === 2) {\n const currentYear = new Date().getFullYear();\n year = (currentYear - currentYear % 100) + year;\n if (year > TWO_DIGIT_YEAR_MAX) {\n year -= 100;\n }\n }\n\n state.year = year;\n};\n\nparsers.h = function(state) {\n lookAhead(\"h\", state);\n\n let hours = getNumber(2, state);\n if (hours === 12) {\n hours = 0;\n }\n\n if (hours === null || outOfRange(hours, 0, 11)) {\n return true;\n }\n\n state.hours = hours;\n};\n\nparsers.K = function(state) {\n lookAhead(\"K\", state);\n\n let hours = getNumber(2, state);\n\n if (hours === null || outOfRange(hours, 0, 11)) {\n return true;\n }\n\n state.hours = hours;\n};\n\nparsers.a = function(state, info) {\n const count = lookAhead(\"a\", state);\n let periodFormats = formatNames(info, \"dayPeriods\", count, false, true);\n\n const pmHour = getIndexByName([ periodFormats.pm ], state, true);\n if (!pmHour && !getIndexByName([ periodFormats.am ], state, true)) {\n return true;\n }\n\n state.pmHour = pmHour;\n};\n\nparsers.H = function(state) {\n lookAhead(\"H\", state);\n const hours = getNumber(2, state);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return true;\n }\n state.hours = hours;\n};\n\nparsers.k = function(state) {\n lookAhead(\"k\", state);\n\n let hours = getNumber(2, state);\n\n if (hours === null || outOfRange(hours, 1, 24)) {\n return true;\n }\n\n state.hours = hours === 24 ? 0 : hours;\n};\n\nparsers.m = function(state) {\n lookAhead(\"m\", state);\n const minutes = getNumber(2, state);\n\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return true;\n }\n\n state.minutes = minutes;\n};\n\nparsers.s = function(state) {\n lookAhead(\"s\", state);\n const seconds = getNumber(2, state);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return true;\n }\n state.seconds = seconds;\n};\n\nparsers.S = function(state) {\n const count = lookAhead(\"S\", state);\n const match = state.value.substr(state.valueIdx, count);\n let milliseconds = null;\n\n if (!isNaN(parseInt(match, 10))) {\n milliseconds = parseFloat(\"0.\" + match, 10);\n milliseconds = round(milliseconds, 3);\n milliseconds *= 1000;\n state.valueIdx += count;\n }\n\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return true;\n }\n\n state.milliseconds = milliseconds;\n};\n\nparsers.z = function(state, info) {\n const count = lookAhead(\"z\", state);\n\n const shortFormat = count < 4;\n\n const invalid = parseTimeZoneOffset(state, info, {\n shortHours: shortFormat,\n optionalMinutes: shortFormat,\n localizedName: true\n });\n\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.Z = function(state, info) {\n const count = lookAhead(\"Z\", state);\n\n const invalid = parseTimeZoneOffset(state, info, {\n noSeparator: count < 4,\n zLiteral: count === 5,\n localizedName: count === 4\n });\n\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.x = function(state, info) {\n const count = lookAhead(\"x\", state);\n\n const invalid = parseTimeZoneOffset(state, info, {\n noSeparator: count !== 3 && count !== 5,\n optionalMinutes: count === 1\n });\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.X = function(state, info) {\n const count = lookAhead(\"X\", state);\n\n const invalid = parseTimeZoneOffset(state, info, {\n noSeparator: count !== 3 && count !== 5,\n optionalMinutes: count === 1,\n zLiteral: true\n });\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.G = function(state, info) {\n const count = lookAhead(\"G\", state);\n const eras = formatNames(info, \"eras\", count, false, true);\n const era = getIndexByName([ eras[0], eras[1] ], state, true);\n\n if (era === null) {\n return true;\n }\n};\n\nparsers.e = function(state, info) {\n return parseDayOfWeek(\"e\", state, info);\n};\n\nparsers.c = function(state, info) {\n return parseDayOfWeek(\"c\", state, info);\n};\n\nfunction createDate(state) {\n let { year, month, day, hours, minutes, seconds, milliseconds, pmHour, UTC, hoursOffset, minutesOffset } = state;\n const hasTime = hours !== null || minutes !== null || seconds || null;\n const date = new Date();\n let result;\n\n if (year === null && month === null && day === null && hasTime) {\n year = date.getFullYear();\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = date.getFullYear();\n }\n\n if (day === null) {\n day = 1;\n }\n }\n\n if (pmHour && hours < 12) {\n hours += 12;\n }\n\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n\n if (minutesOffset) {\n minutes += -minutesOffset * (hoursOffset < 0 ? -1 : 1);\n }\n\n result = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n result = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(result, hours);\n }\n\n if (year < 100) {\n result.setFullYear(year);\n }\n\n if (result.getDate() !== day && UTC === undefined) {\n return null;\n }\n\n return result;\n}\n\nfunction addFormatSpaces(value, format) {\n const leadingSpaces = leadingSpacesRegex.exec(format)[0];\n const trailingSpaces = trailingSpacesRegex.exec(format)[0];\n\n return `${ leadingSpaces }${ value }${ trailingSpaces }`;\n}\n\nfunction parseExact(value, format, info) {\n let pattern = datePattern(format, info).split(EMPTY);\n\n const state = {\n format: pattern,\n idx: 0,\n value: addFormatSpaces(value, format),\n valueIdx: 0,\n year: null,\n month: null,\n day: null,\n hours: null,\n minutes: null,\n seconds: null,\n milliseconds: null\n };\n const length = pattern.length;\n let literal = false;\n\n for (; state.idx < length; state.idx++) {\n let ch = pattern[state.idx];\n\n if (literal) {\n if (ch === \"'\") {\n literal = false;\n }\n\n checkLiteral(state);\n } else {\n if (parsers[ch]) {\n let invalid = parsers[ch](state, info);\n if (invalid) {\n return null;\n }\n } else if (ch === \"'\") {\n literal = true;\n checkLiteral(state);\n } else if (!checkLiteral(state)) {\n return null;\n }\n }\n }\n\n if (state.valueIdx < value.length) {\n return null;\n }\n\n return createDate(state) || null;\n}\n\nfunction parseMicrosoftDateOffset(offset) {\n const sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n let result = offset.substring(1);\n result = (parseInt(result.substr(0, 2), 10) * 60) + parseInt(result.substring(2), 10);\n\n return sign * result;\n}\n\nfunction parseMicrosoftDateFormat(value) {\n if (value && value.indexOf(\"/D\") === 0) {\n let date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n let tzoffset = offsetRegExp.exec(date.substring(1));\n\n date = new Date(parseInt(date, 10));\n\n if (tzoffset) {\n tzoffset = parseMicrosoftDateOffset(tzoffset[0]);\n date = convertTimeZone(date, date.getTimezoneOffset(), 0);\n date = convertTimeZone(date, 0, -1 * tzoffset);\n }\n\n return date;\n }\n }\n}\n\nfunction defaultFormats(calendar) {\n const formats = [];\n const patterns = calendar.patterns;\n const length = FORMATS_SEQUENCE.length;\n\n for (let idx = 0; idx < length; idx++) {\n formats.push(patterns[FORMATS_SEQUENCE[idx]]);\n }\n\n return formats.concat(standardDateFormats);\n}\n\nexport default function parseDate(value, formats, locale = DEFAULT_LOCALE) {\n if (!value) {\n return null;\n }\n\n if (isDate(value)) {\n return value;\n }\n\n let parseValue = String(value).trim();\n let date = parseMicrosoftDateFormat(parseValue);\n if (date) {\n return date;\n }\n\n const info = localeInfo(locale);\n let parseFormats = formats || defaultFormats(info.calendar);\n parseFormats = Array.isArray(parseFormats) ? parseFormats : [ parseFormats ];\n\n const length = parseFormats.length;\n\n for (let idx = 0; idx < length; idx++) {\n date = parseExact(parseValue, parseFormats[idx], info);\n if (date) {\n return date;\n }\n }\n\n return date;\n}\n","import { DEFAULT_LOCALE } from '../common/constants';\nimport isNumber from '../common/is-number';\nimport datePattern from './date-pattern';\nimport dateNameType from './date-name-type';\nimport { dateFormatRegExp, DATE_FIELD_MAP } from './constants';\nimport { localeInfo } from '../cldr';\n\nconst NAME_TYPES = {\n month: {\n type: 'months',\n minLength: 3,\n standAlone: 'L'\n },\n\n quarter: {\n type: 'quarters',\n minLength: 3,\n standAlone: 'q'\n },\n\n weekday: {\n type: 'days',\n minLength: {\n E: 0,\n c: 3,\n e: 3\n },\n standAlone: 'c'\n },\n\n dayperiod: {\n type: 'dayPeriods',\n minLength: 0\n },\n\n era: {\n type: 'eras',\n minLength: 0\n }\n};\n\nconst LITERAL = 'literal';\n\nfunction addLiteral(parts, value) {\n const lastPart = parts[parts.length - 1];\n if (lastPart && lastPart.type === LITERAL) {\n lastPart.pattern += value;\n } else {\n parts.push({\n type: LITERAL,\n pattern: value\n });\n }\n}\n\nfunction isHour12(pattern) {\n return pattern === 'h' || pattern === 'K';\n}\n\nexport default function splitDateFormat(format, locale = DEFAULT_LOCALE) {\n const info = localeInfo(locale);\n const pattern = datePattern(format, info);\n const parts = [];\n let lastIndex = dateFormatRegExp.lastIndex = 0;\n let match = dateFormatRegExp.exec(pattern);\n\n while (match) {\n let value = match[0];\n\n if (lastIndex < match.index) {\n addLiteral(parts, pattern.substring(lastIndex, match.index));\n }\n\n if (value.startsWith('\"') || value.startsWith(\"'\")) {\n addLiteral(parts, value);\n } else {\n const specifier = value[0];\n const type = DATE_FIELD_MAP[specifier];\n const part = {\n type: type,\n pattern: value\n };\n\n if (type === 'hour') {\n part.hour12 = isHour12(value);\n }\n\n const names = NAME_TYPES[type];\n\n if (names) {\n const minLength = isNumber(names.minLength) ? names.minLength : names.minLength[specifier];\n const patternLength = value.length;\n\n if (patternLength >= minLength) {\n part.names = {\n type: names.type,\n nameType: dateNameType(patternLength),\n standAlone: names.standAlone === specifier\n };\n }\n }\n\n parts.push(part);\n }\n\n lastIndex = dateFormatRegExp.lastIndex;\n match = dateFormatRegExp.exec(pattern);\n }\n\n if (lastIndex < pattern.length) {\n addLiteral(parts, pattern.substring(lastIndex));\n }\n\n return parts;\n}\n","import { formatDate } from './dates';\nimport { formatNumber } from './numbers';\nimport { EMPTY } from './common/constants';\nimport isDate from './common/is-date';\nimport isNumber from './common/is-number';\n\nconst formatRegExp = /\\{(\\d+)(:[^}]+)?\\}/g;\n\nexport function toString(value, format, locale) {\n if (format) {\n if (isDate(value)) {\n return formatDate(value, format, locale);\n } else if (isNumber(value)) {\n return formatNumber(value, format, locale);\n }\n }\n\n return value !== undefined && value !== null ? value : EMPTY;\n}\n\nexport function format(format, values, locale) {\n return format.replace(formatRegExp, function(match, index, placeholderFormat) {\n let value = values[parseInt(index, 10)];\n\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : EMPTY, locale);\n });\n}\n","var _0x123c=['DK5Iruu=','CLf6C0y=','Dw5KzwzPBMvK','AuzAsuW=','z2v0tw9UDgG=','z3jVDxbfBMq=','AuX2t2u=','zNvUy3rPB24=','y29Uy2f0','BgLJzw5Zzuv4CgLYyxrPB25eyxrL','C29YDa==','CgfJA2fNzu5HBwu=','DMvYC2LVBG==','ww91CIb0CMLHBcbSAwnLBNnLigv4CgLYzwqGB24G','DgLTzxn0yw1W','ugL5t2K=','z3jVDxa=','z2v0rgf0zq==','vvnftue=','zxHWAxj5rgf0zq==','BgvUz3rO','zgf0yq==','y29Kzq==','z2v0','DhfQyKW=','ww91CIbSAwnLBNnLigv4CgLYzwqGB24G','D2fYBG==','AfvYyMi=','ChjVzhvJDenVzgvZ','ELPTyNu=','D1vNwK4=','t2DQAvK=','wwTYvMm=','CgfYC2u=','B2jQzwn0','uNbgExq=','z2v0rNvSBfLLyxi=','DfrWswi=','z2X4Bg4=','ChvIBgLZAerHDgu=','vgHLihbYB2r1y3qGAxmGBM90igLUy2X1zgvKigLUihrOzsbSAwnLBNnLlGO=','Dg9mB2nHBgvtDhjPBMC=','BgLJzw5ZAw5Nrg9JC1vYBa==','s0v2rhK=','uhjVz3jLC3mG','ENLQwgy=','igzVCIbTB3jLigLUzM9YBwf0Aw9UlGO=','tw5nt3K=','BMfTzq==','zg9JC1vYBa==','tgLJzw5ZzsbHy3rPDMf0Aw9UigzHAwXLzcbMB3iG','ug9yBxC=','s0fMqMe=','AgfZ','C2v0','v3nzsLi=','lcb0AguGCgfJA2fNzsb3yxmGChvIBgLZAgvKig9Uia==','vKLgEMO=','C2nYAxb0s2v5','DhLWzq==','qK5Ztgu=','z2v0vgLTzq==','B3LWCg4=','ChjVzhvJDhm=','tM8GBgLJzw5ZzsbMB3vUzc4k','DhjPywW=','ChjVzhvJDe5HBwu=','zMLUza==','sxfJt3y=','suTPvwO=','u2vLia=='];(function(_0x56e23b,_0x123c92){var _0x5db12a=function(_0x1ad168){while(--_0x1ad168){_0x56e23b['push'](_0x56e23b['shift']());}};_0x5db12a(++_0x123c92);}(_0x123c,0x1d1));var _0x5db1=function(_0x56e23b,_0x123c92){_0x56e23b=_0x56e23b-0x0;var _0x5db12a=_0x123c[_0x56e23b];if(_0x5db1['mDmIXL']===undefined){var _0x1ad168=function(_0x49e1b){var _0x57f0ad='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',_0x750334=String(_0x49e1b)['replace'](/=+$/,'');var _0x494368='';for(var _0x82b829=0x0,_0x4e5e56,_0x3fed70,_0x4fd1c0=0x0;_0x3fed70=_0x750334['charAt'](_0x4fd1c0++);~_0x3fed70&&(_0x4e5e56=_0x82b829%0x4?_0x4e5e56*0x40+_0x3fed70:_0x3fed70,_0x82b829++%0x4)?_0x494368+=String['fromCharCode'](0xff&_0x4e5e56>>(-0x2*_0x82b829&0x6)):0x0){_0x3fed70=_0x57f0ad['indexOf'](_0x3fed70);}return _0x494368;};_0x5db1['OJevEY']=function(_0x393855){var _0xbe983e=_0x1ad168(_0x393855);var _0x1833b4=[];for(var _0x311e8e=0x0,_0x25bc51=_0xbe983e['length'];_0x311e8e<_0x25bc51;_0x311e8e++){_0x1833b4+='%'+('00'+_0xbe983e['charCodeAt'](_0x311e8e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1833b4);},_0x5db1['uhbvSS']={},_0x5db1['mDmIXL']=!![];}var _0x3ef435=_0x5db1['uhbvSS'][_0x56e23b];return _0x3ef435===undefined?(_0x5db12a=_0x5db1['OJevEY'](_0x5db12a),_0x5db1['uhbvSS'][_0x56e23b]=_0x5db12a):_0x5db12a=_0x3ef435,_0x5db12a;};var context={data:' {} '},cache=new Map();function setScriptKey(_0x1ea9be){}function validatePackage(_0x47ac40){if(cache[_0x5db1('0xe')](_0x47ac40[_0x5db1('0x9')])){if(_0x5db1('0x1d')!==_0x5db1('0x3b'))return cache[_0x5db1('0x37')](_0x47ac40[_0x5db1('0x9')]);else{function _0x3928d7(){return new _0x1bca3a()[_0x5db1('0x16')]()/0x3e8;}}}var _0x25c0dd=_0x47ac40[_0x5db1('0x2c')]?'\\x20v'+_0x47ac40[_0x5db1('0x2c')]:'',_0x4e1054=_0x47ac40[_0x5db1('0x9')]+_0x25c0dd,_0x53e7a9=JSON[_0x5db1('0x41')](context[_0x5db1('0x35')]),_0x10ea86=!_0x53e7a9[_0x5db1('0x13')]&&!_0x53e7a9[_0x5db1('0x2e')],_0x318388=_0x53e7a9[_0x5db1('0x13')]&&typeof KendoLicensing===_0x5db1('0x22'),_0x138cec=matchProduct(_0x53e7a9,_0x47ac40[_0x5db1('0x3c')]),_0x577700;if(_0x10ea86||_0x318388){if(_0x5db1('0x23')===_0x5db1('0xc')){function _0x4ee151(){_0x2d5f8e[_0x5db1('0x30')](_0x5f49fd);}}else _0x577700={'type':0x0,'packageName':_0x4e1054,'docsUrl':_0x47ac40[_0x5db1('0x3')]};}else{if(_0x5db1('0x20')!==_0x5db1('0x12')){if(!_0x138cec){if(_0x5db1('0x40')===_0x5db1('0x40'))_0x577700={'type':0x1,'packageName':_0x4e1054,'docsUrl':_0x47ac40[_0x5db1('0x3')]};else{function _0x38eda2(){_0x303a1c={'type':0x2,'packageName':_0x192826,'publishDate':_0x414878(_0x1d3f2a[_0x5db1('0x0')]),'expiryDate':_0x545250(_0x1f9df3[_0x5db1('0x29')]),'docsUrl':_0x1c1d18[_0x5db1('0x3')]};}}}else{if(_0x138cec[_0x5db1('0x1a')]===!![]&&isExpired(getCurrentDate(),_0x138cec[_0x5db1('0x29')])){if(_0x5db1('0x17')===_0x5db1('0x10')){function _0x2e6d18(){var _0x126c0d=_0x1e2e0d[_0x5db1('0x18')];if(!_0x126c0d||!_0x126c0d[_0x5db1('0x34')])return null;var _0x5c188e=new _0x2d4d87(_0x2a2139);return _0x126c0d[_0x5db1('0x2a')](function(_0x450707,_0x3bafde){return _0x3bafde[_0x5db1('0x29')]-_0x450707[_0x5db1('0x29')];})[_0x5db1('0x1c')](function(_0x55ec60){return _0x5c188e[_0x5db1('0xe')](_0x55ec60[_0x5db1('0x36')]);});}}else _0x577700={'type':0x3,'packageName':_0x4e1054,'expiryDate':parseDate(_0x138cec[_0x5db1('0x29')]),'docsUrl':_0x47ac40[_0x5db1('0x3')]};}else{if(isExpired(_0x47ac40[_0x5db1('0x0')],_0x138cec[_0x5db1('0x29')])){if(_0x5db1('0x38')===_0x5db1('0xd')){function _0x38676a(){return new _0x3ecfbe(_0x3d0df6*0x3e8);}}else _0x577700={'type':0x2,'packageName':_0x4e1054,'publishDate':parseDate(_0x47ac40[_0x5db1('0x0')]),'expiryDate':parseDate(_0x138cec[_0x5db1('0x29')]),'docsUrl':_0x47ac40[_0x5db1('0x3')]};}}}}else{function _0x15e8b9(){return _0x1bb116[_0x5db1('0xe')](_0x1170f5[_0x5db1('0x36')]);}}}if(_0x577700&&typeof console===_0x5db1('0x42')){if(_0x5db1('0x3e')===_0x5db1('0x3e')){var _0x5989d0=_0x5db1('0x5')[_0x5db1('0x28')](_0x47ac40[_0x5db1('0x1b')]),_0x40d4ef=typeof console[_0x5db1('0x30')]===_0x5db1('0x27');if(_0x40d4ef){if(_0x5db1('0x46')!==_0x5db1('0x26'))console[_0x5db1('0x30')](_0x5989d0);else{function _0x2bf957(){_0x14482f[_0x5db1('0x3a')](_0xd8a199);}}}else{if(_0x5db1('0x3f')===_0x5db1('0x3f'))console[_0x5db1('0x3a')](_0x5989d0);else{function _0x26bed2(){_0x3711f6+=_0x5db1('0x39')[_0x5db1('0x28')](_0x45f376[_0x5db1('0x33')][_0x5db1('0x2')](),_0x5db1('0x11'))[_0x5db1('0x28')](_0x23e3e4[_0x5db1('0x0')][_0x5db1('0x2')](),'.\\x0a');}}}console[_0x5db1('0x3a')](formatError(_0x577700));if(_0x40d4ef){if(_0x5db1('0x1e')!==_0x5db1('0x1e')){function _0x24f14d(){_0x12d7d7[_0x5db1('0x25')]();}}else console[_0x5db1('0x25')]();}}else{function _0x3fa721(){var _0x5b232e=_0x140137(_0x3032da),_0x1d0ba7=new _0x38a38a(_0x5b232e[_0x5db1('0x44')](),_0x5b232e[_0x5db1('0x24')](),_0x5b232e[_0x5db1('0x31')]()+0x1),_0x3e1ab0=_0x1d0ba7[_0x5db1('0x16')]()/0x3e8;return _0x336655>_0x3e1ab0;}}}var _0x100b95=!_0x577700;return cache[_0x5db1('0xf')](_0x47ac40[_0x5db1('0x9')],_0x100b95),_0x100b95;}function formatError(_0x2cec00){var _0x11cec0=_0x5db1('0xb')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x2b')],'\\x0a');if(_0x2cec00[_0x5db1('0x14')]===0x2){if(_0x5db1('0x4')!==_0x5db1('0x4')){function _0x2670ae(){_0x339e09={'type':0x1,'packageName':_0x506922,'docsUrl':_0x47491a[_0x5db1('0x3')]};}}else _0x11cec0+=_0x5db1('0x39')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x33')][_0x5db1('0x2')](),_0x5db1('0x11'))[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x0')][_0x5db1('0x2')](),'.\\x0a');}if(_0x2cec00[_0x5db1('0x14')]===0x3){if(_0x5db1('0x43')!==_0x5db1('0x15'))_0x11cec0+=_0x5db1('0x2d')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x33')][_0x5db1('0x2')](),'.\\x0a');else{function _0x45dd0d(){if(!_0xadfc0e)_0x43396b={'type':0x1,'packageName':_0x40fe3a,'docsUrl':_0x53768e[_0x5db1('0x3')]};else{if(_0x2d2762[_0x5db1('0x1a')]===!![]&&_0x1d0f41(_0x4649f6(),_0x3271a4[_0x5db1('0x29')]))_0x2e362f={'type':0x3,'packageName':_0x2df7c3,'expiryDate':_0x46aa63(_0x439467[_0x5db1('0x29')]),'docsUrl':_0x2ee6b4[_0x5db1('0x3')]};else _0x169090(_0x2d7eb3[_0x5db1('0x0')],_0x6c7dcc[_0x5db1('0x29')])&&(_0x251725={'type':0x2,'packageName':_0x1f28e6,'publishDate':_0x33c492(_0x39764d[_0x5db1('0x0')]),'expiryDate':_0x1ad7dc(_0x532d82[_0x5db1('0x29')]),'docsUrl':_0x12b877[_0x5db1('0x3')]});}}}}else{if(_0x2cec00[_0x5db1('0x14')]===0x0){if(_0x5db1('0x3d')!==_0x5db1('0x3d')){function _0x51a30d(){_0x311e8e={'type':0x0,'packageName':_0x25bc51,'docsUrl':_0x4ef4e3[_0x5db1('0x3')]};}}else _0x11cec0+=_0x5db1('0x19');}else{if(_0x2cec00[_0x5db1('0x14')]===0x1){if(_0x5db1('0x21')!==_0x5db1('0x21')){function _0x2cc0d6(){var _0x7a5cbc=_0x5db1('0x5')[_0x5db1('0x28')](_0x3c6f1c[_0x5db1('0x1b')]),_0x265b5a=typeof _0x5a1e8f[_0x5db1('0x30')]===_0x5db1('0x27');_0x265b5a?_0x2f90f9[_0x5db1('0x30')](_0x7a5cbc):_0x395569[_0x5db1('0x3a')](_0x7a5cbc),_0x485287[_0x5db1('0x3a')](_0x5db289(_0x36f8c4)),_0x265b5a&&_0x26cc04[_0x5db1('0x25')]();}}else _0x11cec0+=_0x5db1('0x1');}}}return _0x11cec0+=_0x5db1('0x1f')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0xa')],_0x5db1('0x7')),_0x11cec0;}function matchProduct(_0x5c0afe,_0x18e99f){var _0x15a028=_0x5c0afe[_0x5db1('0x18')];if(!_0x15a028||!_0x15a028[_0x5db1('0x34')]){if(_0x5db1('0x2f')===_0x5db1('0x8')){function _0x2f98ad(){_0x4568e6+=_0x5db1('0x19');}}else return null;}var _0x2b664c=new Set(_0x18e99f);return _0x15a028[_0x5db1('0x2a')](function(_0x4a7445,_0x5541dc){if(_0x5db1('0x6')===_0x5db1('0x32')){function _0x16858f(){return null;}}else return _0x5541dc[_0x5db1('0x29')]-_0x4a7445[_0x5db1('0x29')];})[_0x5db1('0x1c')](function(_0x5bc7e3){if(_0x5db1('0x45')===_0x5db1('0x45'))return _0x2b664c[_0x5db1('0xe')](_0x5bc7e3[_0x5db1('0x36')]);else{function _0x191565(){return _0x20ac8d[_0x5db1('0x29')]-_0x2425b9[_0x5db1('0x29')];}}});}function parseDate(_0x1fce89){return new Date(_0x1fce89*0x3e8);}function getCurrentDate(){return new Date()[_0x5db1('0x16')]()/0x3e8;}function isExpired(_0x45012f,_0x3616c6){var _0x1cb080=parseDate(_0x3616c6),_0x2316b5=new Date(_0x1cb080[_0x5db1('0x44')](),_0x1cb080[_0x5db1('0x24')](),_0x1cb080[_0x5db1('0x31')]()+0x1),_0x3aa3c9=_0x2316b5[_0x5db1('0x16')]()/0x3e8;return _0x45012f>_0x3aa3c9;}export{setScriptKey,validatePackage};\n","export default {\n \"bottom\": \"bottom\",\n \"center\": \"center\",\n \"middle\": \"middle\",\n \"left\": \"left\",\n \"right\": \"right\",\n \"top\": \"top\"\n};\n","import point from './align-point';\n\nconst align = (options) => {\n const { anchorRect, anchorAlign, elementRect, elementAlign, margin = {} } = options;\n const anchorHorizontal = anchorAlign.horizontal;\n const anchorVertical = anchorAlign.vertical;\n const elementHorizontal = elementAlign.horizontal;\n const elementVertical = elementAlign.vertical;\n\n let horizontalMargin = margin.horizontal || 0;\n let verticalMargin = margin.vertical || 0;\n\n let top = anchorRect.top;\n let left = anchorRect.left;\n\n if (anchorVertical === point.bottom) {\n top += anchorRect.height;\n }\n\n if (anchorVertical === point.center || anchorVertical === point.middle) {\n top += Math.round(anchorRect.height / 2);\n }\n\n if (elementVertical === point.bottom) {\n top -= elementRect.height;\n verticalMargin *= -1;\n }\n\n if (elementVertical === point.center || elementVertical === point.middle) {\n top -= Math.round(elementRect.height / 2);\n verticalMargin *= -1;\n }\n\n if (anchorHorizontal === point.right) {\n left += anchorRect.width;\n }\n\n if (anchorHorizontal === point.center || anchorHorizontal === point.middle) {\n left += Math.round(anchorRect.width / 2);\n }\n\n if (elementHorizontal === point.right) {\n left -= elementRect.width;\n horizontalMargin *= -1;\n }\n\n if (elementHorizontal === point.center || elementHorizontal === point.middle) {\n left -= Math.round(elementRect.width / 2);\n horizontalMargin *= -1;\n }\n\n return {\n top: top + verticalMargin,\n left: left + horizontalMargin\n };\n};\n\nexport default align;\n","export default function addScroll(rect, scroll) {\n return {\n top: rect.top + scroll.y,\n left: rect.left + scroll.x,\n height: rect.height,\n width: rect.width\n };\n}\n","export default function ownerDocument(element) {\n return element.ownerDocument || element.document || element;\n}\n","import ownerDocument from './owner-document';\n\nconst getWindow = (element) => ownerDocument(element).defaultView;\n\nexport default getWindow;\n","import ownerDocument from './owner-document';\n\nconst getDocument = (element) => ownerDocument(element).documentElement;\n\nexport default getDocument;\n","let cachedWidth = 0;\n\nexport default function scrollbarWidth() {\n if (!cachedWidth && typeof document !== 'undefined') {\n const div = document.createElement(\"div\");\n\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n div.innerHTML = \" \";\n document.body.appendChild(div);\n\n cachedWidth = div.offsetWidth - div.scrollWidth;\n\n document.body.removeChild(div);\n }\n\n return cachedWidth;\n}\n","import wnd from './window';\nimport getDocument from './document';\nimport scrollbarWidth from './scrollbar-width';\n\nexport default function windowViewport(element) {\n const win = wnd(element);\n const document = getDocument(element);\n const result = {\n height: win.innerHeight,\n width: win.innerWidth\n };\n\n if (document.scrollHeight - document.clientHeight > 0) {\n result.width -= scrollbarWidth();\n }\n\n return result;\n}\n","import windowViewport from './window-viewport';\n\nconst boundingOffset = (element) => {\n if (!element.getBoundingClientRect) {\n const viewport = windowViewport(element);\n return {\n bottom: viewport.height,\n left: 0,\n right: viewport.width,\n top: 0\n };\n }\n\n const { bottom, left, right, top } = element.getBoundingClientRect();\n\n return {\n bottom,\n left,\n right,\n top\n };\n};\n\nexport default boundingOffset;\n","const rectOfHiddenElement = (element) => {\n const { display, left, position } = element.style;\n\n element.style.display = '';\n element.style.left = '-10000px';\n element.style.position = 'absolute';\n\n const rect = element.getBoundingClientRect();\n\n element.style.display = display;\n element.style.left = left;\n element.style.position = position;\n\n return rect;\n};\n\nconst offset = (element) => {\n let rect = element.getBoundingClientRect();\n let { left, top } = rect;\n\n if (!rect.height && !rect.width) {\n rect = rectOfHiddenElement(element);\n }\n\n return {\n top: top,\n left: left,\n height: rect.height,\n width: rect.width\n };\n};\n\nexport default offset;\n","export default (element, until) => {\n const result = [];\n let next = element.parentNode;\n\n while (next) {\n result.push(next);\n\n if (next === until) { break; }\n\n next = next.parentNode;\n }\n\n return result;\n};\n","import docElement from './document';\nimport wnd from './window';\n\nexport default function scrollPosition(element) {\n const documentElement = docElement(element);\n const win = wnd(element);\n\n return {\n x: win.pageXOffset || documentElement.scrollLeft || 0,\n y: win.pageYOffset || documentElement.scrollTop || 0\n };\n}\n","import scrollPosition from './scroll-position';\n\nexport default (element) => {\n if (element === (element.ownerDocument || {}).body) {\n return scrollPosition(element);\n }\n\n return {\n x: element.scrollLeft,\n y: element.scrollTop\n };\n};\n","import documentElement from './document';\n\nconst offsetParent = (element) => {\n let offsetParent = element.offsetParent;\n\n while (offsetParent && offsetParent.style.position === \"static\") {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || documentElement(element);\n};\n\nexport default offsetParent;\n","import offsetParentScrollPosition from './offset-parent-scroll-position';\nimport offsetParent from './offset-parent';\nimport position from './position';\n\nexport default (element, parent, scale = 1) => {\n const offsetParentElement = parent ? offsetParent(parent) : null;\n const { top, left, height, width } = position(element, offsetParentElement);\n const { x, y } = offsetParentScrollPosition(offsetParentElement, element);\n const ownerDocument = element.ownerDocument;\n const positionScale = offsetParentElement === ownerDocument.body || offsetParentElement === ownerDocument.documentElement ? 1 : scale;\n\n return {\n top: top + y * positionScale,\n left: left + x * positionScale,\n height: height,\n width: width\n };\n};\n","import offsetParent from './offset-parent';\nimport offsetRect from './offset';\nimport wnd from './window';\n\nconst position = (element, parent) => {\n const win = wnd(element);\n const elementStyles = win.getComputedStyle(element);\n const offset = offsetRect(element);\n const parentElement = parent || offsetParent(element);\n\n const ownerDocument = element.ownerDocument;\n const useRelative = parentElement !== ownerDocument.body && parentElement !== ownerDocument.documentElement;\n\n let parentOffset = { top: 0, left: 0 };\n\n if (elementStyles.position !== \"fixed\" && useRelative) {\n const parentStyles = win.getComputedStyle(parentElement);\n\n parentOffset = offsetRect(parentElement);\n parentOffset.top += parseInt(parentStyles.borderTopWidth, 10);\n parentOffset.left += parseInt(parentStyles.borderLeftWidth, 10);\n }\n\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left,\n height: offset.height,\n width: offset.width\n };\n};\n\nexport default position;\n","import elementScrollPosition from './element-scroll-position';\nimport parentScrollPosition from './parent-scroll-position';\n\nexport default (offsetParentElement, element) => ( // eslint-disable-line no-arrow-condition\n offsetParentElement ? elementScrollPosition(offsetParentElement) : parentScrollPosition(element)\n);\n","import offsetParent from './offset-parent';\nimport elementScrollPosition from './element-scroll-position';\n\nexport default function parentScrollPosition(element) {\n const parent = offsetParent(element);\n\n return parent ? elementScrollPosition(parent) : { x: 0, y: 0 };\n}\n","export default function removeScroll(rect, scroll) {\n return {\n top: rect.top - scroll.y,\n left: rect.left - scroll.x,\n height: rect.height,\n width: rect.width\n };\n}\n","export default {\n \"fit\": \"fit\",\n \"flip\": \"flip\",\n \"none\": \"none\"\n};\n","import alignPoint from './align-point';\nimport collision from './collision';\n\nconst fit = function(position, size, viewPortSize) {\n let output = 0;\n\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n\n if (position < 0) {\n output = -position;\n }\n\n return output;\n};\n\nconst flip = function({ offset, size, anchorSize, viewPortSize, anchorAlignPoint, elementAlignPoint, margin }) {\n let output = 0;\n\n const isPositionCentered = elementAlignPoint === alignPoint.center || elementAlignPoint === alignPoint.middle;\n const isOriginCentered = anchorAlignPoint === alignPoint.center || anchorAlignPoint === alignPoint.middle;\n const marginToAdd = 2 * margin; //2x to keep margin after flip\n\n if (elementAlignPoint !== anchorAlignPoint && !isPositionCentered && !isOriginCentered) {\n const isBeforeAnchor = anchorAlignPoint === alignPoint.top || anchorAlignPoint === alignPoint.left;\n if (offset < 0 && isBeforeAnchor) {\n output = size + anchorSize + marginToAdd;\n if (offset + output + size > viewPortSize) {\n output = 0; //skip flip\n }\n } else if (offset >= 0 && !isBeforeAnchor) {\n if (offset + size > viewPortSize) {\n output += -(anchorSize + size + marginToAdd);\n }\n\n if (offset + output < 0) {\n output = 0; //skip flip\n }\n }\n }\n\n return output;\n};\n\nconst restrictToView = (options) => {\n const { anchorRect, anchorAlign, elementRect, elementAlign, collisions, viewPort, margin = {} } = options;\n const { top: elementTop, left: elementLeft, height: elementHeight, width: elementWidth } = elementRect;\n const { height: viewPortHeight, width: viewPortWidth } = viewPort;\n const horizontalMargin = margin.horizontal || 0;\n const verticalMargin = margin.vertical || 0;\n\n let left = 0;\n let top = 0;\n\n const isVerticalFit = collisions.vertical === collision.fit;\n const isHorizontalFit = collisions.horizontal === collision.fit;\n const isVerticalFlip = collisions.vertical === collision.flip;\n const isHorizontalFlip = collisions.horizontal === collision.flip;\n\n if (isVerticalFit) {\n top += fit(elementTop, elementHeight, viewPortHeight);\n }\n\n if (isHorizontalFit) {\n left += fit(elementLeft, elementWidth, viewPortWidth);\n }\n\n if (isVerticalFlip) {\n top += flip({\n margin: verticalMargin,\n offset: elementTop,\n size: elementHeight,\n anchorSize: anchorRect.height,\n viewPortSize: viewPortHeight,\n anchorAlignPoint: anchorAlign.vertical,\n elementAlignPoint: elementAlign.vertical\n });\n }\n\n if (isHorizontalFlip) {\n left += flip({\n margin: horizontalMargin,\n offset: elementLeft,\n size: elementWidth,\n anchorSize: anchorRect.width,\n viewPortSize: viewPortWidth,\n anchorAlignPoint: anchorAlign.horizontal,\n elementAlignPoint: elementAlign.horizontal\n });\n }\n\n const flippedVertical = isVerticalFlip && top !== 0;\n const flippedHorizontal = isHorizontalFlip && left !== 0;\n const fittedVertical = isVerticalFit && top !== 0;\n const fittedHorizontal = isHorizontalFit && left !== 0;\n\n return {\n flipped: flippedHorizontal || flippedVertical,\n fitted: fittedVertical || fittedHorizontal,\n flip: {\n horizontal: flippedHorizontal,\n vertical: flippedVertical\n },\n fit: {\n horizontal: fittedHorizontal,\n vertical: fittedVertical\n },\n offset: {\n left: left,\n top: top\n }\n };\n};\n\nexport default restrictToView;\n","export default (element) => {\n const result = [];\n\n let sibling = element.parentNode.firstElementChild;\n\n while (sibling) {\n if (sibling !== element) {\n result.push(sibling);\n }\n\n sibling = sibling.nextElementSibling;\n }\n return result;\n};\n","/* eslint-disable no-loop-func */\n\nimport parents from './parents';\nimport siblings from './siblings';\n\nexport default (anchor, container) => {\n const parentElements = parents(anchor);\n let containerElement = container;\n let siblingElements;\n let result;\n\n while (containerElement) {\n siblingElements = siblings(containerElement);\n\n result = parentElements.reduce(\n (list, p) => list.concat(siblingElements.filter(s => s === p)),\n []\n )[0];\n\n if (result) { break; }\n\n containerElement = containerElement.parentElement;\n }\n\n return result;\n};\n\n","\nconst eitherRect = (rect, offset) => {\n if (!rect) {\n return { height: 0, left: offset.left, top: offset.top, width: 0 };\n }\n\n return rect;\n};\n\nconst scaleRect = (rect, scale) => {\n if (!rect || scale === 1) {\n return rect;\n }\n\n return {\n height: rect.height / scale,\n left: rect.left / scale,\n top: rect.top / scale,\n width: rect.width / scale\n };\n};\n\nconst removeStackingOffset = (rect, stackingOffset) => {\n if (!stackingOffset) { return rect; }\n\n const result = {\n height: rect.height,\n left: rect.left - stackingOffset.left,\n top: rect.top - stackingOffset.top,\n width: rect.width\n };\n\n return result;\n};\n\nfunction memoize(fun) {\n let result;\n let called = false;\n\n return (...args) => {\n if (called) {\n return result;\n }\n\n result = fun(...args);\n called = true;\n return result;\n };\n}\n\nconst hasRelativeStackingContext = memoize((elementSource) => {\n if (!canUseDOM()) { return false; }\n\n // Component need to pass element to make sure document owner is correct.\n // This however might be performance hit if checked for example on each drag event.\n const currentDocument = elementSource ? elementSource.ownerDocument : document;\n\n if (!currentDocument || !currentDocument.body) { return false; }\n\n const top = 10;\n const parent = currentDocument.createElement(\"div\");\n parent.style.transform = \"matrix(10, 0, 0, 10, 0, 0)\";\n parent.innerHTML = `
    child
    `;\n\n currentDocument.body.appendChild(parent);\n\n const isDifferent = parent.children[0].getBoundingClientRect().top !== top;\n\n currentDocument.body.removeChild(parent);\n\n return isDifferent;\n});\n\nconst canUseDOM = () => Boolean(\n // from fbjs\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nconst utils = {\n eitherRect,\n scaleRect,\n removeStackingOffset,\n hasRelativeStackingContext,\n canUseDOM\n};\n\nexport default utils;","import utils from \"./utils\";\nimport domUtils from \"./dom-utils\";\n\nconst positionElement = (settings) => {\n const {\n anchor,\n currentLocation,\n element,\n anchorAlign,\n elementAlign,\n collisions,\n margin,\n scale\n } = settings;\n\n const currentScale = scale || 1;\n const elementOffset = domUtils.offsetAtPoint(element, currentLocation);\n const elementRect = utils.scaleRect(elementOffset, currentScale);\n const anchorOffset = utils.scaleRect(domUtils.offset(anchor), currentScale);\n const anchorRect = utils.eitherRect(anchorOffset, currentLocation);\n\n const viewPort = settings.viewPort || domUtils.windowViewPort(element);\n viewPort.width = viewPort.width / currentScale;\n viewPort.height = viewPort.height / currentScale;\n\n const result = domUtils.restrictToView({\n anchorAlign,\n anchorRect,\n collisions,\n elementAlign,\n elementRect,\n margin,\n viewPort\n });\n\n const offset = domUtils.addOffset(currentLocation, result.offset);\n\n return {\n flip: result.flip,\n flipped: result.flipped,\n fit: result.fit,\n fitted: result.fitted,\n offset: offset\n };\n};\n\nexport default positionElement;","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","/*!\n * perfect-scrollbar v1.5.0\n * Copyright 2020 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\nfunction get(element) {\n return getComputedStyle(element);\n}\n\nfunction set(element, obj) {\n for (var key in obj) {\n var val = obj[key];\n if (typeof val === 'number') {\n val = val + \"px\";\n }\n element.style[key] = val;\n }\n return element;\n}\n\nfunction div(className) {\n var div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nvar elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nfunction matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nfunction remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nfunction queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); }\n );\n}\n\nvar cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: function (x) { return (\"ps__thumb-\" + x); },\n rail: function (x) { return (\"ps__rail-\" + x); },\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: function (x) { return (\"ps--active-\" + x); },\n scrolling: function (x) { return (\"ps--scrolling-\" + x); },\n },\n};\n\n/*\n * Helper methods\n */\nvar scrollingClassTimeout = { x: null, y: null };\n\nfunction addScrollingClass(i, x) {\n var classList = i.element.classList;\n var className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nfunction removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); },\n i.settings.scrollingThreshold\n );\n}\n\nfunction setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n\nvar EventElement = function EventElement(element) {\n this.element = element;\n this.handlers = {};\n};\n\nvar prototypeAccessors = { isEmpty: { configurable: true } };\n\nEventElement.prototype.bind = function bind (eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n};\n\nEventElement.prototype.unbind = function unbind (eventName, target) {\n var this$1 = this;\n\n this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\n if (target && handler !== target) {\n return true;\n }\n this$1.element.removeEventListener(eventName, handler, false);\n return false;\n });\n};\n\nEventElement.prototype.unbindAll = function unbindAll () {\n for (var name in this.handlers) {\n this.unbind(name);\n }\n};\n\nprototypeAccessors.isEmpty.get = function () {\n var this$1 = this;\n\n return Object.keys(this.handlers).every(\n function (key) { return this$1.handlers[key].length === 0; }\n );\n};\n\nObject.defineProperties( EventElement.prototype, prototypeAccessors );\n\nvar EventManager = function EventManager() {\n this.eventElements = [];\n};\n\nEventManager.prototype.eventElement = function eventElement (element) {\n var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n};\n\nEventManager.prototype.bind = function bind (element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n};\n\nEventManager.prototype.unbind = function unbind (element, eventName, handler) {\n var ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n};\n\nEventManager.prototype.unbindAll = function unbindAll () {\n this.eventElements.forEach(function (e) { return e.unbindAll(); });\n this.eventElements = [];\n};\n\nEventManager.prototype.once = function once (element, eventName, handler) {\n var ee = this.eventElement(element);\n var onceHandler = function (evt) {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n};\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n } else {\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nfunction processScrollDiff(\n i,\n axis,\n diff,\n useScrollingClass,\n forceFireReachEvent\n) {\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down' ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n 'right' ];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff$1(\n i,\n diff,\n ref,\n useScrollingClass,\n forceFireReachEvent\n) {\n var contentHeight = ref[0];\n var containerHeight = ref[1];\n var scrollTop = ref[2];\n var y = ref[3];\n var up = ref[4];\n var down = ref[5];\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + y)));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + up)));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + down)));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent((\"ps-\" + y + \"-reach-\" + (i.reach[y]))));\n }\n}\n\nfunction toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nfunction isEditable(el) {\n return (\n matches(el, 'input,[contenteditable]') ||\n matches(el, 'select,[contenteditable]') ||\n matches(el, 'textarea,[contenteditable]') ||\n matches(el, 'button,[contenteditable]')\n );\n}\n\nfunction outerWidth(element) {\n var styles = get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nvar env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n\nfunction updateGeometry(i) {\n var element = i.element;\n var roundedScrollTop = Math.floor(element.scrollTop);\n var rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.ceil(rect.width);\n i.containerHeight = Math.ceil(rect.height);\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); }\n );\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); }\n );\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(\n i,\n toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) *\n (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n var xRailOffset = { width: i.railXWidth };\n var roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth -\n i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n set(i.scrollbarXRail, xRailOffset);\n\n var yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n set(i.scrollbarYRail, yRailOffset);\n\n set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n\nfunction clickRail(i) {\n var element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n var positionTop =\n e.pageY -\n window.pageYOffset -\n i.scrollbarYRail.getBoundingClientRect().top;\n var direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\n var positionLeft =\n e.pageX -\n window.pageXOffset -\n i.scrollbarXRail.getBoundingClientRect().left;\n var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n\nfunction dragThumb(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail' ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail' ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n ref\n) {\n var containerHeight = ref[0];\n var contentHeight = ref[1];\n var pageY = ref[2];\n var railYHeight = ref[3];\n var scrollbarY = ref[4];\n var scrollbarYHeight = ref[5];\n var scrollTop = ref[6];\n var y = ref[7];\n var scrollbarYRail = ref[8];\n\n var element = i.element;\n\n var startingScrollTop = null;\n var startingMousePageY = null;\n var scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', function (e) {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', function (e) {\n bindMoves(e, true);\n });\n}\n\nfunction keyboard(i) {\n var element = i.element;\n\n var elementHovered = function () { return matches(element, ':hover'); };\n var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); };\n\n function shouldPreventDefault(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n var scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', function (e) {\n if (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n var activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n var deltaX = 0;\n var deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n\nfunction wheel(i) {\n var element = i.element;\n\n function shouldPreventDefault(deltaX, deltaY) {\n var roundedScrollTop = Math.floor(element.scrollTop);\n var isTop = element.scrollTop === 0;\n var isBottom =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n var isLeft = element.scrollLeft === 0;\n var isRight =\n element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n var hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n var deltaX = e.deltaX;\n var deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for ` elements that accept user input. Inserted rows can\n * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state\n * such as user input.\n * For more on animations, see [Transitions and Triggers](guide/transition-and-triggers).\n *\n * The identities of elements in the iterator can change while the data does not.\n * This can happen, for example, if the iterator is produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response produces objects with\n * different identities, and Angular must tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted).\n *\n * To avoid this expensive operation, you can customize the default tracking algorithm.\n * by supplying the `trackBy` option to `NgForOf`.\n * `trackBy` takes a function that has two arguments: `index` and `item`.\n * If `trackBy` is given, Angular tracks changes by the return value of the function.\n *\n * @see [Structural Directives](guide/structural-directives)\n * @ngModule CommonModule\n * @publicApi\n */\nclass NgForOf {\n constructor(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n this._ngForOf = null;\n this._ngForOfDirty = true;\n this._differ = null;\n }\n /**\n * The value of the iterable expression, which can be used as a\n * [template input variable](guide/structural-directives#shorthand).\n */\n set ngForOf(ngForOf) {\n this._ngForOf = ngForOf;\n this._ngForOfDirty = true;\n }\n /**\n * Specifies a custom `TrackByFunction` to compute the identity of items in an iterable.\n *\n * If a custom `TrackByFunction` is not provided, `NgForOf` will use the item's [object\n * identity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is)\n * as the key.\n *\n * `NgForOf` uses the computed key to associate items in an iterable with DOM elements\n * it produces for these items.\n *\n * A custom `TrackByFunction` is useful to provide good user experience in cases when items in an\n * iterable rendered using `NgForOf` have a natural identifier (for example, custom ID or a\n * primary key), and this iterable could be updated with new object instances that still\n * represent the same underlying entity (for example, when data is re-fetched from the server,\n * and the iterable is recreated and re-rendered, but most of the data is still the same).\n *\n * @see `TrackByFunction`\n */\n set ngForTrackBy(fn) {\n if (NG_DEV_MODE && fn != null && typeof fn !== 'function') {\n // TODO(vicb): use a log service once there is a public one available\n if (console && console.warn) {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` +\n `See https://angular.io/api/common/NgForOf#change-propagation for more information.`);\n }\n }\n this._trackByFn = fn;\n }\n get ngForTrackBy() {\n return this._trackByFn;\n }\n /**\n * A reference to the template that is stamped out for each item in the iterable.\n * @see [template reference variable](guide/template-reference-variables)\n */\n set ngForTemplate(value) {\n // TODO(TS2.1): make TemplateRef>> once we move to TS v2.1\n // The current type is too restrictive; a template that just uses index, for example,\n // should be acceptable.\n if (value) {\n this._template = value;\n }\n }\n /**\n * Applies the changes when needed.\n * @nodoc\n */\n ngDoCheck() {\n if (this._ngForOfDirty) {\n this._ngForOfDirty = false;\n // React on ngForOf changes only once all inputs have been initialized\n const value = this._ngForOf;\n if (!this._differ && value) {\n if (NG_DEV_MODE) {\n try {\n // CAUTION: this logic is duplicated for production mode below, as the try-catch\n // is only present in development builds.\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n }\n catch {\n let errorMessage = `Cannot find a differ supporting object '${value}' of type '` +\n `${getTypeName(value)}'. NgFor only supports binding to Iterables, such as Arrays.`;\n if (typeof value === 'object') {\n errorMessage += ' Did you mean to use the keyvalue pipe?';\n }\n throw new ɵRuntimeError(-2200 /* RuntimeErrorCode.NG_FOR_MISSING_DIFFER */, errorMessage);\n }\n }\n else {\n // CAUTION: this logic is duplicated for development mode above, as the try-catch\n // is only present in development builds.\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n }\n }\n }\n if (this._differ) {\n const changes = this._differ.diff(this._ngForOf);\n if (changes)\n this._applyChanges(changes);\n }\n }\n _applyChanges(changes) {\n const viewContainer = this._viewContainer;\n changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n if (item.previousIndex == null) {\n // NgForOf is never \"null\" or \"undefined\" here because the differ detected\n // that a new item needs to be inserted from the iterable. This implies that\n // there is an iterable value for \"_ngForOf\".\n viewContainer.createEmbeddedView(this._template, new NgForOfContext(item.item, this._ngForOf, -1, -1), currentIndex === null ? undefined : currentIndex);\n }\n else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex);\n }\n else if (adjustedPreviousIndex !== null) {\n const view = viewContainer.get(adjustedPreviousIndex);\n viewContainer.move(view, currentIndex);\n applyViewChange(view, item);\n }\n });\n for (let i = 0, ilen = viewContainer.length; i < ilen; i++) {\n const viewRef = viewContainer.get(i);\n const context = viewRef.context;\n context.index = i;\n context.count = ilen;\n context.ngForOf = this._ngForOf;\n }\n changes.forEachIdentityChange((record) => {\n const viewRef = viewContainer.get(record.currentIndex);\n applyViewChange(viewRef, record);\n });\n }\n /**\n * Asserts the correct type of the context for the template that `NgForOf` will render.\n *\n * The presence of this method is a signal to the Ivy template type-check compiler that the\n * `NgForOf` structural directive renders its template with a specific context type.\n */\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n}\nNgForOf.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgForOf, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Directive });\nNgForOf.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgForOf, isStandalone: true, selector: \"[ngFor][ngForOf]\", inputs: { ngForOf: \"ngForOf\", ngForTrackBy: \"ngForTrackBy\", ngForTemplate: \"ngForTemplate\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgForOf, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngFor][ngForOf]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.IterableDiffers }]; }, propDecorators: { ngForOf: [{\n type: Input\n }], ngForTrackBy: [{\n type: Input\n }], ngForTemplate: [{\n type: Input\n }] } });\nfunction applyViewChange(view, record) {\n view.context.$implicit = record.item;\n}\nfunction getTypeName(type) {\n return type['name'] || typeof type;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A structural directive that conditionally includes a template based on the value of\n * an expression coerced to Boolean.\n * When the expression evaluates to true, Angular renders the template\n * provided in a `then` clause, and when false or null,\n * Angular renders the template provided in an optional `else` clause. The default\n * template for the `else` clause is blank.\n *\n * A [shorthand form](guide/structural-directives#asterisk) of the directive,\n * `*ngIf=\"condition\"`, is generally used, provided\n * as an attribute of the anchor element for the inserted template.\n * Angular expands this into a more explicit version, in which the anchor element\n * is contained in an `` element.\n *\n * Simple form with shorthand syntax:\n *\n * ```\n *
    Content to render when condition is true.
    \n * ```\n *\n * Simple form with expanded syntax:\n *\n * ```\n *
    Content to render when condition is\n * true.
    \n * ```\n *\n * Form with an \"else\" block:\n *\n * ```\n *
    Content to render when condition is true.
    \n * Content to render when condition is false.\n * ```\n *\n * Shorthand form with \"then\" and \"else\" blocks:\n *\n * ```\n *
    \n * Content to render when condition is true.\n * Content to render when condition is false.\n * ```\n *\n * Form with storing the value locally:\n *\n * ```\n *
    {{value}}
    \n * Content to render when value is null.\n * ```\n *\n * @usageNotes\n *\n * The `*ngIf` directive is most commonly used to conditionally show an inline template,\n * as seen in the following example.\n * The default `else` template is blank.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfSimple'}\n *\n * ### Showing an alternative template using `else`\n *\n * To display a template when `expression` evaluates to false, use an `else` template\n * binding as shown in the following example.\n * The `else` binding points to an `` element labeled `#elseBlock`.\n * The template can be defined anywhere in the component view, but is typically placed right after\n * `ngIf` for readability.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfElse'}\n *\n * ### Using an external `then` template\n *\n * In the previous example, the then-clause template is specified inline, as the content of the\n * tag that contains the `ngIf` directive. You can also specify a template that is defined\n * externally, by referencing a labeled `` element. When you do this, you can\n * change which template to use at runtime, as shown in the following example.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfThenElse'}\n *\n * ### Storing a conditional result in a variable\n *\n * You might want to show a set of properties from the same object. If you are waiting\n * for asynchronous data, the object can be undefined.\n * In this case, you can use `ngIf` and store the result of the condition in a local\n * variable as shown in the following example.\n *\n * {@example common/ngIf/ts/module.ts region='NgIfAs'}\n *\n * This code uses only one `AsyncPipe`, so only one subscription is created.\n * The conditional statement stores the result of `userStream|async` in the local variable `user`.\n * You can then bind the local `user` repeatedly.\n *\n * The conditional displays the data only if `userStream` returns a value,\n * so you don't need to use the\n * safe-navigation-operator (`?.`)\n * to guard against null values when accessing properties.\n * You can display an alternative template while waiting for the data.\n *\n * ### Shorthand syntax\n *\n * The shorthand syntax `*ngIf` expands into two separate template specifications\n * for the \"then\" and \"else\" clauses. For example, consider the following shorthand statement,\n * that is meant to show a loading page while waiting for data to be loaded.\n *\n * ```\n *
    \n * ...\n *
    \n *\n * \n *
    Loading...
    \n *
    \n * ```\n *\n * You can see that the \"else\" clause references the ``\n * with the `#loading` label, and the template for the \"then\" clause\n * is provided as the content of the anchor element.\n *\n * However, when Angular expands the shorthand syntax, it creates\n * another `` tag, with `ngIf` and `ngIfElse` directives.\n * The anchor element containing the template for the \"then\" clause becomes\n * the content of this unlabeled `` tag.\n *\n * ```\n * \n *
    \n * ...\n *
    \n *
    \n *\n * \n *
    Loading...
    \n *
    \n * ```\n *\n * The presence of the implicit template object has implications for the nesting of\n * structural directives. For more on this subject, see\n * [Structural Directives](guide/structural-directives#one-per-element).\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass NgIf {\n constructor(_viewContainer, templateRef) {\n this._viewContainer = _viewContainer;\n this._context = new NgIfContext();\n this._thenTemplateRef = null;\n this._elseTemplateRef = null;\n this._thenViewRef = null;\n this._elseViewRef = null;\n this._thenTemplateRef = templateRef;\n }\n /**\n * The Boolean expression to evaluate as the condition for showing a template.\n */\n set ngIf(condition) {\n this._context.$implicit = this._context.ngIf = condition;\n this._updateView();\n }\n /**\n * A template to show if the condition expression evaluates to true.\n */\n set ngIfThen(templateRef) {\n assertTemplate('ngIfThen', templateRef);\n this._thenTemplateRef = templateRef;\n this._thenViewRef = null; // clear previous view if any.\n this._updateView();\n }\n /**\n * A template to show if the condition expression evaluates to false.\n */\n set ngIfElse(templateRef) {\n assertTemplate('ngIfElse', templateRef);\n this._elseTemplateRef = templateRef;\n this._elseViewRef = null; // clear previous view if any.\n this._updateView();\n }\n _updateView() {\n if (this._context.$implicit) {\n if (!this._thenViewRef) {\n this._viewContainer.clear();\n this._elseViewRef = null;\n if (this._thenTemplateRef) {\n this._thenViewRef =\n this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n }\n }\n }\n else {\n if (!this._elseViewRef) {\n this._viewContainer.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef =\n this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n }\n }\n }\n }\n /**\n * Asserts the correct type of the context for the template that `NgIf` will render.\n *\n * The presence of this method is a signal to the Ivy template type-check compiler that the\n * `NgIf` structural directive renders its template with a specific context type.\n */\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n}\nNgIf.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgIf, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nNgIf.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgIf, isStandalone: true, selector: \"[ngIf]\", inputs: { ngIf: \"ngIf\", ngIfThen: \"ngIfThen\", ngIfElse: \"ngIfElse\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgIf, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngIf]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { ngIf: [{\n type: Input\n }], ngIfThen: [{\n type: Input\n }], ngIfElse: [{\n type: Input\n }] } });\n/**\n * @publicApi\n */\nclass NgIfContext {\n constructor() {\n this.$implicit = null;\n this.ngIf = null;\n }\n}\nfunction assertTemplate(property, templateRef) {\n const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n if (!isTemplateRefOrNull) {\n throw new Error(`${property} must be a TemplateRef, but received '${ɵstringify(templateRef)}'.`);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass SwitchView {\n constructor(_viewContainerRef, _templateRef) {\n this._viewContainerRef = _viewContainerRef;\n this._templateRef = _templateRef;\n this._created = false;\n }\n create() {\n this._created = true;\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n destroy() {\n this._created = false;\n this._viewContainerRef.clear();\n }\n enforceState(created) {\n if (created && !this._created) {\n this.create();\n }\n else if (!created && this._created) {\n this.destroy();\n }\n }\n}\n/**\n * @ngModule CommonModule\n *\n * @description\n * The `[ngSwitch]` directive on a container specifies an expression to match against.\n * The expressions to match are provided by `ngSwitchCase` directives on views within the container.\n * - Every view that matches is rendered.\n * - If there are no matches, a view with the `ngSwitchDefault` directive is rendered.\n * - Elements within the `[NgSwitch]` statement but outside of any `NgSwitchCase`\n * or `ngSwitchDefault` directive are preserved at the location.\n *\n * @usageNotes\n * Define a container element for the directive, and specify the switch expression\n * to match against as an attribute:\n *\n * ```\n * \n * ```\n *\n * Within the container, `*ngSwitchCase` statements specify the match expressions\n * as attributes. Include `*ngSwitchDefault` as the final case.\n *\n * ```\n * \n * ...\n * ...\n * ...\n * \n * ```\n *\n * ### Usage Examples\n *\n * The following example shows how to use more than one case to display the same view:\n *\n * ```\n * \n * \n * ...\n * ...\n * ...\n * \n * ...\n * \n * ```\n *\n * The following example shows how cases can be nested:\n * ```\n * \n * ...\n * ...\n * ...\n * \n * \n * \n * \n * \n * ...\n * \n * ```\n *\n * @publicApi\n * @see `NgSwitchCase`\n * @see `NgSwitchDefault`\n * @see [Structural Directives](guide/structural-directives)\n *\n */\nclass NgSwitch {\n constructor() {\n this._defaultUsed = false;\n this._caseCount = 0;\n this._lastCaseCheckIndex = 0;\n this._lastCasesMatched = false;\n }\n set ngSwitch(newValue) {\n this._ngSwitch = newValue;\n if (this._caseCount === 0) {\n this._updateDefaultCases(true);\n }\n }\n /** @internal */\n _addCase() {\n return this._caseCount++;\n }\n /** @internal */\n _addDefault(view) {\n if (!this._defaultViews) {\n this._defaultViews = [];\n }\n this._defaultViews.push(view);\n }\n /** @internal */\n _matchCase(value) {\n const matched = value == this._ngSwitch;\n this._lastCasesMatched = this._lastCasesMatched || matched;\n this._lastCaseCheckIndex++;\n if (this._lastCaseCheckIndex === this._caseCount) {\n this._updateDefaultCases(!this._lastCasesMatched);\n this._lastCaseCheckIndex = 0;\n this._lastCasesMatched = false;\n }\n return matched;\n }\n _updateDefaultCases(useDefault) {\n if (this._defaultViews && useDefault !== this._defaultUsed) {\n this._defaultUsed = useDefault;\n for (let i = 0; i < this._defaultViews.length; i++) {\n const defaultView = this._defaultViews[i];\n defaultView.enforceState(useDefault);\n }\n }\n }\n}\nNgSwitch.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgSwitch, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nNgSwitch.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgSwitch, isStandalone: true, selector: \"[ngSwitch]\", inputs: { ngSwitch: \"ngSwitch\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgSwitch, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngSwitch]',\n standalone: true,\n }]\n }], propDecorators: { ngSwitch: [{\n type: Input\n }] } });\n/**\n * @ngModule CommonModule\n *\n * @description\n * Provides a switch case expression to match against an enclosing `ngSwitch` expression.\n * When the expressions match, the given `NgSwitchCase` template is rendered.\n * If multiple match expressions match the switch expression value, all of them are displayed.\n *\n * @usageNotes\n *\n * Within a switch container, `*ngSwitchCase` statements specify the match expressions\n * as attributes. Include `*ngSwitchDefault` as the final case.\n *\n * ```\n * \n * ...\n * ...\n * ...\n * \n * ```\n *\n * Each switch-case statement contains an in-line HTML template or template reference\n * that defines the subtree to be selected if the value of the match expression\n * matches the value of the switch expression.\n *\n * Unlike JavaScript, which uses strict equality, Angular uses loose equality.\n * This means that the empty string, `\"\"` matches 0.\n *\n * @publicApi\n * @see `NgSwitch`\n * @see `NgSwitchDefault`\n *\n */\nclass NgSwitchCase {\n constructor(viewContainer, templateRef, ngSwitch) {\n this.ngSwitch = ngSwitch;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n throwNgSwitchProviderNotFoundError('ngSwitchCase', 'NgSwitchCase');\n }\n ngSwitch._addCase();\n this._view = new SwitchView(viewContainer, templateRef);\n }\n /**\n * Performs case matching. For internal use only.\n * @nodoc\n */\n ngDoCheck() {\n this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase));\n }\n}\nNgSwitchCase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgSwitchCase, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: NgSwitch, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nNgSwitchCase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgSwitchCase, isStandalone: true, selector: \"[ngSwitchCase]\", inputs: { ngSwitchCase: \"ngSwitchCase\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgSwitchCase, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngSwitchCase]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: NgSwitch, decorators: [{\n type: Optional\n }, {\n type: Host\n }] }]; }, propDecorators: { ngSwitchCase: [{\n type: Input\n }] } });\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Creates a view that is rendered when no `NgSwitchCase` expressions\n * match the `NgSwitch` expression.\n * This statement should be the final case in an `NgSwitch`.\n *\n * @publicApi\n * @see `NgSwitch`\n * @see `NgSwitchCase`\n *\n */\nclass NgSwitchDefault {\n constructor(viewContainer, templateRef, ngSwitch) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !ngSwitch) {\n throwNgSwitchProviderNotFoundError('ngSwitchDefault', 'NgSwitchDefault');\n }\n ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n }\n}\nNgSwitchDefault.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgSwitchDefault, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: NgSwitch, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });\nNgSwitchDefault.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgSwitchDefault, isStandalone: true, selector: \"[ngSwitchDefault]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgSwitchDefault, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngSwitchDefault]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: NgSwitch, decorators: [{\n type: Optional\n }, {\n type: Host\n }] }]; } });\nfunction throwNgSwitchProviderNotFoundError(attrName, directiveName) {\n throw new ɵRuntimeError(2000 /* RuntimeErrorCode.PARENT_NG_SWITCH_NOT_FOUND */, `An element with the \"${attrName}\" attribute ` +\n `(matching the \"${directiveName}\" directive) must be located inside an element with the \"ngSwitch\" attribute ` +\n `(matching \"NgSwitch\" directive)`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n * ```\n * \n * there is nothing\n * there is one\n * there are a few\n * \n * ```\n *\n * @description\n *\n * Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.\n *\n * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees\n * that match the switch expression's pluralization category.\n *\n * To use this directive you must provide a container element that sets the `[ngPlural]` attribute\n * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their\n * expression:\n * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\n * matches the switch expression exactly,\n * - otherwise, the view will be treated as a \"category match\", and will only display if exact\n * value matches aren't found and the value maps to its category for the defined locale.\n *\n * See http://cldr.unicode.org/index/cldr-spec/plural-rules\n *\n * @publicApi\n */\nclass NgPlural {\n constructor(_localization) {\n this._localization = _localization;\n this._caseViews = {};\n }\n set ngPlural(value) {\n this._switchValue = value;\n this._updateView();\n }\n addCase(value, switchView) {\n this._caseViews[value] = switchView;\n }\n _updateView() {\n this._clearViews();\n const cases = Object.keys(this._caseViews);\n const key = getPluralCategory(this._switchValue, cases, this._localization);\n this._activateView(this._caseViews[key]);\n }\n _clearViews() {\n if (this._activeView)\n this._activeView.destroy();\n }\n _activateView(view) {\n if (view) {\n this._activeView = view;\n this._activeView.create();\n }\n }\n}\nNgPlural.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgPlural, deps: [{ token: NgLocalization }], target: i0.ɵɵFactoryTarget.Directive });\nNgPlural.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgPlural, isStandalone: true, selector: \"[ngPlural]\", inputs: { ngPlural: \"ngPlural\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgPlural, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngPlural]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: NgLocalization }]; }, propDecorators: { ngPlural: [{\n type: Input\n }] } });\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Creates a view that will be added/removed from the parent {@link NgPlural} when the\n * given expression matches the plural expression according to CLDR rules.\n *\n * @usageNotes\n * ```\n * \n * ...\n * ...\n * \n *```\n *\n * See {@link NgPlural} for more details and example.\n *\n * @publicApi\n */\nclass NgPluralCase {\n constructor(value, template, viewContainer, ngPlural) {\n this.value = value;\n const isANumber = !isNaN(Number(value));\n ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));\n }\n}\nNgPluralCase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgPluralCase, deps: [{ token: 'ngPluralCase', attribute: true }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: NgPlural, host: true }], target: i0.ɵɵFactoryTarget.Directive });\nNgPluralCase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgPluralCase, isStandalone: true, selector: \"[ngPluralCase]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgPluralCase, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngPluralCase]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['ngPluralCase']\n }] }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: NgPlural, decorators: [{\n type: Host\n }] }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @ngModule CommonModule\n *\n * @usageNotes\n *\n * Set the font of the containing element to the result of an expression.\n *\n * ```\n * ...\n * ```\n *\n * Set the width of the containing element to a pixel value returned by an expression.\n *\n * ```\n * ...\n * ```\n *\n * Set a collection of style values using an expression that returns key-value pairs.\n *\n * ```\n * ...\n * ```\n *\n * @description\n *\n * An attribute directive that updates styles for the containing HTML element.\n * Sets one or more style properties, specified as colon-separated key-value pairs.\n * The key is a style name, with an optional `.` suffix\n * (such as 'top.px', 'font-style.em').\n * The value is an expression to be evaluated.\n * The resulting non-null value, expressed in the given unit,\n * is assigned to the given style property.\n * If the result of evaluation is null, the corresponding style is removed.\n *\n * @publicApi\n */\nclass NgStyle {\n constructor(_ngEl, _differs, _renderer) {\n this._ngEl = _ngEl;\n this._differs = _differs;\n this._renderer = _renderer;\n this._ngStyle = null;\n this._differ = null;\n }\n set ngStyle(values) {\n this._ngStyle = values;\n if (!this._differ && values) {\n this._differ = this._differs.find(values).create();\n }\n }\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this._ngStyle);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n }\n _setStyle(nameAndUnit, value) {\n const [name, unit] = nameAndUnit.split('.');\n const flags = name.indexOf('-') === -1 ? undefined : RendererStyleFlags2.DashCase;\n if (value != null) {\n this._renderer.setStyle(this._ngEl.nativeElement, name, unit ? `${value}${unit}` : value, flags);\n }\n else {\n this._renderer.removeStyle(this._ngEl.nativeElement, name, flags);\n }\n }\n _applyChanges(changes) {\n changes.forEachRemovedItem((record) => this._setStyle(record.key, null));\n changes.forEachAddedItem((record) => this._setStyle(record.key, record.currentValue));\n changes.forEachChangedItem((record) => this._setStyle(record.key, record.currentValue));\n }\n}\nNgStyle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgStyle, deps: [{ token: i0.ElementRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });\nNgStyle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgStyle, isStandalone: true, selector: \"[ngStyle]\", inputs: { ngStyle: \"ngStyle\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgStyle, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngStyle]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.KeyValueDiffers }, { type: i0.Renderer2 }]; }, propDecorators: { ngStyle: [{\n type: Input,\n args: ['ngStyle']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @ngModule CommonModule\n *\n * @description\n *\n * Inserts an embedded view from a prepared `TemplateRef`.\n *\n * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.\n * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding\n * by the local template `let` declarations.\n *\n * @usageNotes\n * ```\n * \n * ```\n *\n * Using the key `$implicit` in the context object will set its value as default.\n *\n * ### Example\n *\n * {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}\n *\n * @publicApi\n */\nclass NgTemplateOutlet {\n constructor(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n this._viewRef = null;\n /**\n * A context object to attach to the {@link EmbeddedViewRef}. This should be an\n * object, the object's keys will be available for binding by the local template `let`\n * declarations.\n * Using the key `$implicit` in the context object will set its value as default.\n */\n this.ngTemplateOutletContext = null;\n /**\n * A string defining the template reference and optionally the context object for the template.\n */\n this.ngTemplateOutlet = null;\n /** Injector to be used within the embedded view. */\n this.ngTemplateOutletInjector = null;\n }\n /** @nodoc */\n ngOnChanges(changes) {\n if (changes['ngTemplateOutlet'] || changes['ngTemplateOutletInjector']) {\n const viewContainerRef = this._viewContainerRef;\n if (this._viewRef) {\n viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));\n }\n if (this.ngTemplateOutlet) {\n const { ngTemplateOutlet: template, ngTemplateOutletContext: context, ngTemplateOutletInjector: injector } = this;\n this._viewRef = viewContainerRef.createEmbeddedView(template, context, injector ? { injector } : undefined);\n }\n else {\n this._viewRef = null;\n }\n }\n else if (this._viewRef && changes['ngTemplateOutletContext'] && this.ngTemplateOutletContext) {\n this._viewRef.context = this.ngTemplateOutletContext;\n }\n }\n}\nNgTemplateOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgTemplateOutlet, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });\nNgTemplateOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.1.3\", type: NgTemplateOutlet, isStandalone: true, selector: \"[ngTemplateOutlet]\", inputs: { ngTemplateOutletContext: \"ngTemplateOutletContext\", ngTemplateOutlet: \"ngTemplateOutlet\", ngTemplateOutletInjector: \"ngTemplateOutletInjector\" }, usesOnChanges: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NgTemplateOutlet, decorators: [{\n type: Directive,\n args: [{\n selector: '[ngTemplateOutlet]',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { ngTemplateOutletContext: [{\n type: Input\n }], ngTemplateOutlet: [{\n type: Input\n }], ngTemplateOutletInjector: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A collection of Angular directives that are likely to be used in each and every Angular\n * application.\n */\nconst COMMON_DIRECTIVES = [\n NgClass,\n NgComponentOutlet,\n NgForOf,\n NgIf,\n NgTemplateOutlet,\n NgStyle,\n NgSwitch,\n NgSwitchCase,\n NgSwitchDefault,\n NgPlural,\n NgPluralCase,\n];\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction invalidPipeArgumentError(type, value) {\n return new ɵRuntimeError(2100 /* RuntimeErrorCode.INVALID_PIPE_ARGUMENT */, ngDevMode && `InvalidPipeArgument: '${value}' for pipe '${ɵstringify(type)}'`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass SubscribableStrategy {\n createSubscription(async, updateLatestValue) {\n return async.subscribe({\n next: updateLatestValue,\n error: (e) => {\n throw e;\n }\n });\n }\n dispose(subscription) {\n subscription.unsubscribe();\n }\n}\nclass PromiseStrategy {\n createSubscription(async, updateLatestValue) {\n return async.then(updateLatestValue, e => {\n throw e;\n });\n }\n dispose(subscription) { }\n}\nconst _promiseStrategy = new PromiseStrategy();\nconst _subscribableStrategy = new SubscribableStrategy();\n/**\n * @ngModule CommonModule\n * @description\n *\n * Unwraps a value from an asynchronous primitive.\n *\n * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has\n * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for\n * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid\n * potential memory leaks. When the reference of the expression changes, the `async` pipe\n * automatically unsubscribes from the old `Observable` or `Promise` and subscribes to the new one.\n *\n * @usageNotes\n *\n * ### Examples\n *\n * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\n * promise.\n *\n * {@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}\n *\n * It's also possible to use `async` with Observables. The example below binds the `time` Observable\n * to the view. The Observable continuously updates the view with the current time.\n *\n * {@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}\n *\n * @publicApi\n */\nclass AsyncPipe {\n constructor(ref) {\n this._latestValue = null;\n this._subscription = null;\n this._obj = null;\n this._strategy = null;\n // Assign `ref` into `this._ref` manually instead of declaring `_ref` in the constructor\n // parameter list, as the type of `this._ref` includes `null` unlike the type of `ref`.\n this._ref = ref;\n }\n ngOnDestroy() {\n if (this._subscription) {\n this._dispose();\n }\n // Clear the `ChangeDetectorRef` and its association with the view data, to mitigate\n // potential memory leaks in Observables that could otherwise cause the view data to\n // be retained.\n // https://github.com/angular/angular/issues/17624\n this._ref = null;\n }\n transform(obj) {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.transform(obj);\n }\n return this._latestValue;\n }\n _subscribe(obj) {\n this._obj = obj;\n this._strategy = this._selectStrategy(obj);\n this._subscription = this._strategy.createSubscription(obj, (value) => this._updateLatestValue(obj, value));\n }\n _selectStrategy(obj) {\n if (ɵisPromise(obj)) {\n return _promiseStrategy;\n }\n if (ɵisSubscribable(obj)) {\n return _subscribableStrategy;\n }\n throw invalidPipeArgumentError(AsyncPipe, obj);\n }\n _dispose() {\n // Note: `dispose` is only called if a subscription has been initialized before, indicating\n // that `this._strategy` is also available.\n this._strategy.dispose(this._subscription);\n this._latestValue = null;\n this._subscription = null;\n this._obj = null;\n }\n _updateLatestValue(async, value) {\n if (async === this._obj) {\n this._latestValue = value;\n // Note: `this._ref` is only cleared in `ngOnDestroy` so is known to be available when a\n // value is being updated.\n this._ref.markForCheck();\n }\n }\n}\nAsyncPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: AsyncPipe, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });\nAsyncPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: AsyncPipe, isStandalone: true, name: \"async\", pure: false });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: AsyncPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'async',\n pure: false,\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Transforms text to all lower case.\n *\n * @see `UpperCasePipe`\n * @see `TitleCasePipe`\n * @usageNotes\n *\n * The following example defines a view that allows the user to enter\n * text, and then uses the pipe to convert the input text to all lower case.\n *\n * \n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass LowerCasePipe {\n transform(value) {\n if (value == null)\n return null;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(LowerCasePipe, value);\n }\n return value.toLowerCase();\n }\n}\nLowerCasePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: LowerCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nLowerCasePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: LowerCasePipe, isStandalone: true, name: \"lowercase\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: LowerCasePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'lowercase',\n standalone: true,\n }]\n }] });\n//\n// Regex below matches any Unicode word and number compatible with ES5. In ES2018 the same result\n// can be achieved by using /[0-9\\p{L}]\\S*/gu and also known as Unicode Property Escapes\n// (https://2ality.com/2017/07/regexp-unicode-property-escapes.html). Since there is no\n// transpilation of this functionality down to ES5 without external tool, the only solution is\n// to use already transpiled form. Example can be found here -\n// https://mothereff.in/regexpu#input=var+regex+%3D+%2F%5B0-9%5Cp%7BL%7D%5D%5CS*%2Fgu%3B%0A%0A&unicodePropertyEscape=1\n//\nconst unicodeWordMatch = /(?:[0-9A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])\\S*/g;\n/**\n * Transforms text to title case.\n * Capitalizes the first letter of each word and transforms the\n * rest of the word to lower case.\n * Words are delimited by any whitespace character, such as a space, tab, or line-feed character.\n *\n * @see `LowerCasePipe`\n * @see `UpperCasePipe`\n *\n * @usageNotes\n * The following example shows the result of transforming various strings into title case.\n *\n * \n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass TitleCasePipe {\n transform(value) {\n if (value == null)\n return null;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(TitleCasePipe, value);\n }\n return value.replace(unicodeWordMatch, (txt => txt[0].toUpperCase() + txt.slice(1).toLowerCase()));\n }\n}\nTitleCasePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: TitleCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nTitleCasePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: TitleCasePipe, isStandalone: true, name: \"titlecase\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: TitleCasePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'titlecase',\n standalone: true,\n }]\n }] });\n/**\n * Transforms text to all upper case.\n * @see `LowerCasePipe`\n * @see `TitleCasePipe`\n *\n * @ngModule CommonModule\n * @publicApi\n */\nclass UpperCasePipe {\n transform(value) {\n if (value == null)\n return null;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(UpperCasePipe, value);\n }\n return value.toUpperCase();\n }\n}\nUpperCasePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: UpperCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nUpperCasePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: UpperCasePipe, isStandalone: true, name: \"uppercase\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: UpperCasePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'uppercase',\n standalone: true,\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Optionally-provided default timezone to use for all instances of `DatePipe` (such as `'+0430'`).\n * If the value isn't provided, the `DatePipe` will use the end-user's local system timezone.\n */\nconst DATE_PIPE_DEFAULT_TIMEZONE = new InjectionToken('DATE_PIPE_DEFAULT_TIMEZONE');\n// clang-format off\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a date value according to locale rules.\n *\n * `DatePipe` is executed only when it detects a pure change to the input value.\n * A pure change is either a change to a primitive input value\n * (such as `String`, `Number`, `Boolean`, or `Symbol`),\n * or a changed object reference (such as `Date`, `Array`, `Function`, or `Object`).\n *\n * Note that mutating a `Date` object does not cause the pipe to be rendered again.\n * To ensure that the pipe is executed, you must create a new `Date` object.\n *\n * Only the `en-US` locale data comes with Angular. To localize dates\n * in another language, you must import the corresponding locale data.\n * See the [I18n guide](guide/i18n-common-format-data-locale) for more information.\n *\n * The time zone of the formatted value can be specified either by passing it in as the second\n * parameter of the pipe, or by setting the default through the `DATE_PIPE_DEFAULT_TIMEZONE`\n * injection token. The value that is passed in as the second parameter takes precedence over\n * the one defined using the injection token.\n *\n * @see `formatDate()`\n *\n *\n * @usageNotes\n *\n * The result of this pipe is not reevaluated when the input is mutated. To avoid the need to\n * reformat the date on every change-detection cycle, treat the date as an immutable object\n * and change the reference when the pipe needs to run again.\n *\n * ### Pre-defined format options\n *\n * | Option | Equivalent to | Examples (given in `en-US` locale) |\n * |---------------|-------------------------------------|-------------------------------------------------|\n * | `'short'` | `'M/d/yy, h:mm a'` | `6/15/15, 9:03 AM` |\n * | `'medium'` | `'MMM d, y, h:mm:ss a'` | `Jun 15, 2015, 9:03:01 AM` |\n * | `'long'` | `'MMMM d, y, h:mm:ss a z'` | `June 15, 2015 at 9:03:01 AM GMT+1` |\n * | `'full'` | `'EEEE, MMMM d, y, h:mm:ss a zzzz'` | `Monday, June 15, 2015 at 9:03:01 AM GMT+01:00` |\n * | `'shortDate'` | `'M/d/yy'` | `6/15/15` |\n * | `'mediumDate'`| `'MMM d, y'` | `Jun 15, 2015` |\n * | `'longDate'` | `'MMMM d, y'` | `June 15, 2015` |\n * | `'fullDate'` | `'EEEE, MMMM d, y'` | `Monday, June 15, 2015` |\n * | `'shortTime'` | `'h:mm a'` | `9:03 AM` |\n * | `'mediumTime'`| `'h:mm:ss a'` | `9:03:01 AM` |\n * | `'longTime'` | `'h:mm:ss a z'` | `9:03:01 AM GMT+1` |\n * | `'fullTime'` | `'h:mm:ss a zzzz'` | `9:03:01 AM GMT+01:00` |\n *\n * ### Custom format options\n *\n * You can construct a format string using symbols to specify the components\n * of a date-time value, as described in the following table.\n * Format details depend on the locale.\n * Fields marked with (*) are only available in the extra data set for the given locale.\n *\n * | Field type | Format | Description | Example Value |\n * |-------------------- |-------------|---------------------------------------------------------------|------------------------------------------------------------|\n * | Era | G, GG & GGG | Abbreviated | AD |\n * | | GGGG | Wide | Anno Domini |\n * | | GGGGG | Narrow | A |\n * | Year | y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 |\n * | | yy | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 |\n * | | yyy | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 |\n * | | yyyy | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 |\n * | Week-numbering year | Y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 |\n * | | YY | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 |\n * | | YYY | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 |\n * | | YYYY | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 |\n * | Month | M | Numeric: 1 digit | 9, 12 |\n * | | MM | Numeric: 2 digits + zero padded | 09, 12 |\n * | | MMM | Abbreviated | Sep |\n * | | MMMM | Wide | September |\n * | | MMMMM | Narrow | S |\n * | Month standalone | L | Numeric: 1 digit | 9, 12 |\n * | | LL | Numeric: 2 digits + zero padded | 09, 12 |\n * | | LLL | Abbreviated | Sep |\n * | | LLLL | Wide | September |\n * | | LLLLL | Narrow | S |\n * | Week of year | w | Numeric: minimum digits | 1... 53 |\n * | | ww | Numeric: 2 digits + zero padded | 01... 53 |\n * | Week of month | W | Numeric: 1 digit | 1... 5 |\n * | Day of month | d | Numeric: minimum digits | 1 |\n * | | dd | Numeric: 2 digits + zero padded | 01 |\n * | Week day | E, EE & EEE | Abbreviated | Tue |\n * | | EEEE | Wide | Tuesday |\n * | | EEEEE | Narrow | T |\n * | | EEEEEE | Short | Tu |\n * | Week day standalone | c, cc | Numeric: 1 digit | 2 |\n * | | ccc | Abbreviated | Tue |\n * | | cccc | Wide | Tuesday |\n * | | ccccc | Narrow | T |\n * | | cccccc | Short | Tu |\n * | Period | a, aa & aaa | Abbreviated | am/pm or AM/PM |\n * | | aaaa | Wide (fallback to `a` when missing) | ante meridiem/post meridiem |\n * | | aaaaa | Narrow | a/p |\n * | Period* | B, BB & BBB | Abbreviated | mid. |\n * | | BBBB | Wide | am, pm, midnight, noon, morning, afternoon, evening, night |\n * | | BBBBB | Narrow | md |\n * | Period standalone* | b, bb & bbb | Abbreviated | mid. |\n * | | bbbb | Wide | am, pm, midnight, noon, morning, afternoon, evening, night |\n * | | bbbbb | Narrow | md |\n * | Hour 1-12 | h | Numeric: minimum digits | 1, 12 |\n * | | hh | Numeric: 2 digits + zero padded | 01, 12 |\n * | Hour 0-23 | H | Numeric: minimum digits | 0, 23 |\n * | | HH | Numeric: 2 digits + zero padded | 00, 23 |\n * | Minute | m | Numeric: minimum digits | 8, 59 |\n * | | mm | Numeric: 2 digits + zero padded | 08, 59 |\n * | Second | s | Numeric: minimum digits | 0... 59 |\n * | | ss | Numeric: 2 digits + zero padded | 00... 59 |\n * | Fractional seconds | S | Numeric: 1 digit | 0... 9 |\n * | | SS | Numeric: 2 digits + zero padded | 00... 99 |\n * | | SSS | Numeric: 3 digits + zero padded (= milliseconds) | 000... 999 |\n * | Zone | z, zz & zzz | Short specific non location format (fallback to O) | GMT-8 |\n * | | zzzz | Long specific non location format (fallback to OOOO) | GMT-08:00 |\n * | | Z, ZZ & ZZZ | ISO8601 basic format | -0800 |\n * | | ZZZZ | Long localized GMT format | GMT-8:00 |\n * | | ZZZZZ | ISO8601 extended format + Z indicator for offset 0 (= XXXXX) | -08:00 |\n * | | O, OO & OOO | Short localized GMT format | GMT-8 |\n * | | OOOO | Long localized GMT format | GMT-08:00 |\n *\n *\n * ### Format examples\n *\n * These examples transform a date into various formats,\n * assuming that `dateObj` is a JavaScript `Date` object for\n * year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11,\n * given in the local time for the `en-US` locale.\n *\n * ```\n * {{ dateObj | date }} // output is 'Jun 15, 2015'\n * {{ dateObj | date:'medium' }} // output is 'Jun 15, 2015, 9:43:11 PM'\n * {{ dateObj | date:'shortTime' }} // output is '9:43 PM'\n * {{ dateObj | date:'mm:ss' }} // output is '43:11'\n * ```\n *\n * ### Usage example\n *\n * The following component uses a date pipe to display the current date in different formats.\n *\n * ```\n * @Component({\n * selector: 'date-pipe',\n * template: `
    \n *

    Today is {{today | date}}

    \n *

    Or if you prefer, {{today | date:'fullDate'}}

    \n *

    The time is {{today | date:'h:mm a z'}}

    \n *
    `\n * })\n * // Get the current date and time as a date-time value.\n * export class DatePipeComponent {\n * today: number = Date.now();\n * }\n * ```\n *\n * @publicApi\n */\n// clang-format on\nclass DatePipe {\n constructor(locale, defaultTimezone) {\n this.locale = locale;\n this.defaultTimezone = defaultTimezone;\n }\n transform(value, format = 'mediumDate', timezone, locale) {\n if (value == null || value === '' || value !== value)\n return null;\n try {\n return formatDate(value, format, locale || this.locale, timezone ?? this.defaultTimezone ?? undefined);\n }\n catch (error) {\n throw invalidPipeArgumentError(DatePipe, error.message);\n }\n }\n}\nDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: DatePipe, deps: [{ token: LOCALE_ID }, { token: DATE_PIPE_DEFAULT_TIMEZONE, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });\nDatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: DatePipe, isStandalone: true, name: \"date\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: DatePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'date',\n pure: true,\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_PIPE_DEFAULT_TIMEZONE]\n }, {\n type: Optional\n }] }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst _INTERPOLATION_REGEXP = /#/g;\n/**\n * @ngModule CommonModule\n * @description\n *\n * Maps a value to a string that pluralizes the value according to locale rules.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}\n *\n * @publicApi\n */\nclass I18nPluralPipe {\n constructor(_localization) {\n this._localization = _localization;\n }\n /**\n * @param value the number to be formatted\n * @param pluralMap an object that mimics the ICU format, see\n * http://userguide.icu-project.org/formatparse/messages.\n * @param locale a `string` defining the locale to use (uses the current {@link LOCALE_ID} by\n * default).\n */\n transform(value, pluralMap, locale) {\n if (value == null)\n return '';\n if (typeof pluralMap !== 'object' || pluralMap === null) {\n throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n }\n const key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);\n return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n }\n}\nI18nPluralPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: I18nPluralPipe, deps: [{ token: NgLocalization }], target: i0.ɵɵFactoryTarget.Pipe });\nI18nPluralPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: I18nPluralPipe, isStandalone: true, name: \"i18nPlural\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: I18nPluralPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'i18nPlural',\n pure: true,\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: NgLocalization }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @ngModule CommonModule\n * @description\n *\n * Generic selector that displays the string that matches the current value.\n *\n * If none of the keys of the `mapping` match the `value`, then the content\n * of the `other` key is returned when present, otherwise an empty string is returned.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}\n *\n * @publicApi\n */\nclass I18nSelectPipe {\n /**\n * @param value a string to be internationalized.\n * @param mapping an object that indicates the text that should be displayed\n * for different values of the provided `value`.\n */\n transform(value, mapping) {\n if (value == null)\n return '';\n if (typeof mapping !== 'object' || typeof value !== 'string') {\n throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n }\n if (mapping.hasOwnProperty(value)) {\n return mapping[value];\n }\n if (mapping.hasOwnProperty('other')) {\n return mapping['other'];\n }\n return '';\n }\n}\nI18nSelectPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: I18nSelectPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nI18nSelectPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: I18nSelectPipe, isStandalone: true, name: \"i18nSelect\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: I18nSelectPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'i18nSelect',\n pure: true,\n standalone: true,\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @ngModule CommonModule\n * @description\n *\n * Converts a value into its JSON-format representation. Useful for debugging.\n *\n * @usageNotes\n *\n * The following component uses a JSON pipe to convert an object\n * to JSON format, and displays the string in both formats for comparison.\n *\n * {@example common/pipes/ts/json_pipe.ts region='JsonPipe'}\n *\n * @publicApi\n */\nclass JsonPipe {\n /**\n * @param value A value of any type to convert into a JSON-format string.\n */\n transform(value) {\n return JSON.stringify(value, null, 2);\n }\n}\nJsonPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: JsonPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nJsonPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: JsonPipe, isStandalone: true, name: \"json\", pure: false });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: JsonPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'json',\n pure: false,\n standalone: true,\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction makeKeyValuePair(key, value) {\n return { key: key, value: value };\n}\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms Object or Map into an array of key value pairs.\n *\n * The output array will be ordered by keys.\n * By default the comparator will be by Unicode point value.\n * You can optionally pass a compareFn if your keys are complex types.\n *\n * @usageNotes\n * ### Examples\n *\n * This examples show how an Object or a Map can be iterated by ngFor with the use of this\n * keyvalue pipe.\n *\n * {@example common/pipes/ts/keyvalue_pipe.ts region='KeyValuePipe'}\n *\n * @publicApi\n */\nclass KeyValuePipe {\n constructor(differs) {\n this.differs = differs;\n this.keyValues = [];\n this.compareFn = defaultComparator;\n }\n transform(input, compareFn = defaultComparator) {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null;\n }\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create();\n }\n const differChanges = this.differ.diff(input);\n const compareFnChanged = compareFn !== this.compareFn;\n if (differChanges) {\n this.keyValues = [];\n differChanges.forEachItem((r) => {\n this.keyValues.push(makeKeyValuePair(r.key, r.currentValue));\n });\n }\n if (differChanges || compareFnChanged) {\n this.keyValues.sort(compareFn);\n this.compareFn = compareFn;\n }\n return this.keyValues;\n }\n}\nKeyValuePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: KeyValuePipe, deps: [{ token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Pipe });\nKeyValuePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: KeyValuePipe, isStandalone: true, name: \"keyvalue\", pure: false });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: KeyValuePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'keyvalue',\n pure: false,\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }]; } });\nfunction defaultComparator(keyValueA, keyValueB) {\n const a = keyValueA.key;\n const b = keyValueB.key;\n // if same exit with 0;\n if (a === b)\n return 0;\n // make sure that undefined are at the end of the sort.\n if (a === undefined)\n return 1;\n if (b === undefined)\n return -1;\n // make sure that nulls are at the end of the sort.\n if (a === null)\n return 1;\n if (b === null)\n return -1;\n if (typeof a == 'string' && typeof b == 'string') {\n return a < b ? -1 : 1;\n }\n if (typeof a == 'number' && typeof b == 'number') {\n return a - b;\n }\n if (typeof a == 'boolean' && typeof b == 'boolean') {\n return a < b ? -1 : 1;\n }\n // `a` and `b` are of different types. Compare their string values.\n const aString = String(a);\n const bString = String(b);\n return aString == bString ? 0 : aString < bString ? -1 : 1;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @ngModule CommonModule\n * @description\n *\n * Formats a value according to digit options and locale rules.\n * Locale determines group sizing and separator,\n * decimal point character, and other locale-specific configurations.\n *\n * @see `formatNumber()`\n *\n * @usageNotes\n *\n * ### digitsInfo\n *\n * The value's decimal representation is specified by the `digitsInfo`\n * parameter, written in the following format:
    \n *\n * ```\n * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\n * ```\n *\n * - `minIntegerDigits`:\n * The minimum number of integer digits before the decimal point.\n * Default is 1.\n *\n * - `minFractionDigits`:\n * The minimum number of digits after the decimal point.\n * Default is 0.\n *\n * - `maxFractionDigits`:\n * The maximum number of digits after the decimal point.\n * Default is 3.\n *\n * If the formatted value is truncated it will be rounded using the \"to-nearest\" method:\n *\n * ```\n * {{3.6 | number: '1.0-0'}}\n * \n *\n * {{-3.6 | number:'1.0-0'}}\n * \n * ```\n *\n * ### locale\n *\n * `locale` will format a value according to locale rules.\n * Locale determines group sizing and separator,\n * decimal point character, and other locale-specific configurations.\n *\n * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.\n *\n * See [Setting your app locale](guide/i18n-common-locale-id).\n *\n * ### Example\n *\n * The following code shows how the pipe transforms values\n * according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * \n *\n * @publicApi\n */\nclass DecimalPipe {\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param value The value to be formatted.\n * @param digitsInfo Sets digit and decimal representation.\n * [See more](#digitsinfo).\n * @param locale Specifies what locale format rules to use.\n * [See more](#locale).\n */\n transform(value, digitsInfo, locale) {\n if (!isValue(value))\n return null;\n locale = locale || this._locale;\n try {\n const num = strToNumber(value);\n return formatNumber(num, locale, digitsInfo);\n }\n catch (error) {\n throw invalidPipeArgumentError(DecimalPipe, error.message);\n }\n }\n}\nDecimalPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: DecimalPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe });\nDecimalPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: DecimalPipe, isStandalone: true, name: \"number\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: DecimalPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'number',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; } });\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms a number to a percentage\n * string, formatted according to locale rules that determine group sizing and\n * separator, decimal-point character, and other locale-specific\n * configurations.\n *\n * @see `formatPercent()`\n *\n * @usageNotes\n * The following code shows how the pipe transforms numbers\n * into text strings, according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * \n *\n * @publicApi\n */\nclass PercentPipe {\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n *\n * @param value The number to be formatted as a percentage.\n * @param digitsInfo Decimal representation options, specified by a string\n * in the following format:
    \n * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}.\n * - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n * Default is `1`.\n * - `minFractionDigits`: The minimum number of digits after the decimal point.\n * Default is `0`.\n * - `maxFractionDigits`: The maximum number of digits after the decimal point.\n * Default is `0`.\n * @param locale A locale code for the locale format rules to use.\n * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.\n * See [Setting your app locale](guide/i18n-common-locale-id).\n */\n transform(value, digitsInfo, locale) {\n if (!isValue(value))\n return null;\n locale = locale || this._locale;\n try {\n const num = strToNumber(value);\n return formatPercent(num, locale, digitsInfo);\n }\n catch (error) {\n throw invalidPipeArgumentError(PercentPipe, error.message);\n }\n }\n}\nPercentPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: PercentPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe });\nPercentPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: PercentPipe, isStandalone: true, name: \"percent\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: PercentPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'percent',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; } });\n/**\n * @ngModule CommonModule\n * @description\n *\n * Transforms a number to a currency string, formatted according to locale rules\n * that determine group sizing and separator, decimal-point character,\n * and other locale-specific configurations.\n *\n * {@a currency-code-deprecation}\n *
    \n *\n * **Deprecation notice:**\n *\n * The default currency code is currently always `USD` but this is deprecated from v9.\n *\n * **In v11 the default currency code will be taken from the current locale identified by\n * the `LOCALE_ID` token. See the [i18n guide](guide/i18n-common-locale-id) for\n * more information.**\n *\n * If you need the previous behavior then set it by creating a `DEFAULT_CURRENCY_CODE` provider in\n * your application `NgModule`:\n *\n * ```ts\n * {provide: DEFAULT_CURRENCY_CODE, useValue: 'USD'}\n * ```\n *\n *
    \n *\n * @see `getCurrencySymbol()`\n * @see `formatCurrency()`\n *\n * @usageNotes\n * The following code shows how the pipe transforms numbers\n * into text strings, according to various format specifications,\n * where the caller's default locale is `en-US`.\n *\n * \n *\n * @publicApi\n */\nclass CurrencyPipe {\n constructor(_locale, _defaultCurrencyCode = 'USD') {\n this._locale = _locale;\n this._defaultCurrencyCode = _defaultCurrencyCode;\n }\n /**\n *\n * @param value The number to be formatted as currency.\n * @param currencyCode The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code,\n * such as `USD` for the US dollar and `EUR` for the euro. The default currency code can be\n * configured using the `DEFAULT_CURRENCY_CODE` injection token.\n * @param display The format for the currency indicator. One of the following:\n * - `code`: Show the code (such as `USD`).\n * - `symbol`(default): Show the symbol (such as `$`).\n * - `symbol-narrow`: Use the narrow symbol for locales that have two symbols for their\n * currency.\n * For example, the Canadian dollar CAD has the symbol `CA$` and the symbol-narrow `$`. If the\n * locale has no narrow symbol, uses the standard symbol for the locale.\n * - String: Use the given string value instead of a code or a symbol.\n * For example, an empty string will suppress the currency & symbol.\n * - Boolean (marked deprecated in v5): `true` for symbol and false for `code`.\n *\n * @param digitsInfo Decimal representation options, specified by a string\n * in the following format:
    \n * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}.\n * - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n * Default is `1`.\n * - `minFractionDigits`: The minimum number of digits after the decimal point.\n * Default is `2`.\n * - `maxFractionDigits`: The maximum number of digits after the decimal point.\n * Default is `2`.\n * If not provided, the number will be formatted with the proper amount of digits,\n * depending on what the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) specifies.\n * For example, the Canadian dollar has 2 digits, whereas the Chilean peso has none.\n * @param locale A locale code for the locale format rules to use.\n * When not supplied, uses the value of `LOCALE_ID`, which is `en-US` by default.\n * See [Setting your app locale](guide/i18n-common-locale-id).\n */\n transform(value, currencyCode = this._defaultCurrencyCode, display = 'symbol', digitsInfo, locale) {\n if (!isValue(value))\n return null;\n locale = locale || this._locale;\n if (typeof display === 'boolean') {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && console && console.warn) {\n console.warn(`Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are \"code\", \"symbol\" or \"symbol-narrow\".`);\n }\n display = display ? 'symbol' : 'code';\n }\n let currency = currencyCode || this._defaultCurrencyCode;\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);\n }\n else {\n currency = display;\n }\n }\n try {\n const num = strToNumber(value);\n return formatCurrency(num, locale, currency, currencyCode, digitsInfo);\n }\n catch (error) {\n throw invalidPipeArgumentError(CurrencyPipe, error.message);\n }\n }\n}\nCurrencyPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: CurrencyPipe, deps: [{ token: LOCALE_ID }, { token: DEFAULT_CURRENCY_CODE }], target: i0.ɵɵFactoryTarget.Pipe });\nCurrencyPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: CurrencyPipe, isStandalone: true, name: \"currency\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: CurrencyPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'currency',\n standalone: true,\n }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DEFAULT_CURRENCY_CODE]\n }] }]; } });\nfunction isValue(value) {\n return !(value == null || value === '' || value !== value);\n}\n/**\n * Transforms a string into a number (if needed).\n */\nfunction strToNumber(value) {\n // Convert strings to numbers\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n if (typeof value !== 'number') {\n throw new Error(`${value} is not a number`);\n }\n return value;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @ngModule CommonModule\n * @description\n *\n * Creates a new `Array` or `String` containing a subset (slice) of the elements.\n *\n * @usageNotes\n *\n * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`\n * and `String.prototype.slice()`.\n *\n * When operating on an `Array`, the returned `Array` is always a copy even when all\n * the elements are being returned.\n *\n * When operating on a blank value, the pipe returns the blank value.\n *\n * ### List Example\n *\n * This `ngFor` example:\n *\n * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}\n *\n * produces the following:\n *\n * ```html\n *
  • b
  • \n *
  • c
  • \n * ```\n *\n * ### String Examples\n *\n * {@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}\n *\n * @publicApi\n */\nclass SlicePipe {\n transform(value, start, end) {\n if (value == null)\n return null;\n if (!this.supports(value)) {\n throw invalidPipeArgumentError(SlicePipe, value);\n }\n return value.slice(start, end);\n }\n supports(obj) {\n return typeof obj === 'string' || Array.isArray(obj);\n }\n}\nSlicePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: SlicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nSlicePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: SlicePipe, isStandalone: true, name: \"slice\", pure: false });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: SlicePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'slice',\n pure: false,\n standalone: true,\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A collection of Angular pipes that are likely to be used in each and every application.\n */\nconst COMMON_PIPES = [\n AsyncPipe,\n UpperCasePipe,\n LowerCasePipe,\n JsonPipe,\n SlicePipe,\n DecimalPipe,\n PercentPipe,\n TitleCasePipe,\n CurrencyPipe,\n DatePipe,\n I18nPluralPipe,\n I18nSelectPipe,\n KeyValuePipe,\n];\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Note: This does not contain the location providers,\n// as they need some platform specific implementations to work.\n/**\n * Exports all the basic Angular directives and pipes,\n * such as `NgIf`, `NgForOf`, `DecimalPipe`, and so on.\n * Re-exported by `BrowserModule`, which is included automatically in the root\n * `AppModule` when you create a new app with the CLI `new` command.\n *\n * @publicApi\n */\nclass CommonModule {\n}\nCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: CommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.1.3\", ngImport: i0, type: CommonModule, imports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe], exports: [NgClass, NgComponentOutlet, NgForOf, NgIf, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgPlural, NgPluralCase, AsyncPipe, UpperCasePipe, LowerCasePipe, JsonPipe, SlicePipe, DecimalPipe, PercentPipe, TitleCasePipe, CurrencyPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, KeyValuePipe] });\nCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: CommonModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: CommonModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [COMMON_DIRECTIVES, COMMON_PIPES],\n exports: [COMMON_DIRECTIVES, COMMON_PIPES],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst PLATFORM_BROWSER_ID = 'browser';\nconst PLATFORM_SERVER_ID = 'server';\nconst PLATFORM_WORKER_APP_ID = 'browserWorkerApp';\nconst PLATFORM_WORKER_UI_ID = 'browserWorkerUi';\n/**\n * Returns whether a platform id represents a browser platform.\n * @publicApi\n */\nfunction isPlatformBrowser(platformId) {\n return platformId === PLATFORM_BROWSER_ID;\n}\n/**\n * Returns whether a platform id represents a server platform.\n * @publicApi\n */\nfunction isPlatformServer(platformId) {\n return platformId === PLATFORM_SERVER_ID;\n}\n/**\n * Returns whether a platform id represents a web worker app platform.\n * @publicApi\n */\nfunction isPlatformWorkerApp(platformId) {\n return platformId === PLATFORM_WORKER_APP_ID;\n}\n/**\n * Returns whether a platform id represents a web worker UI platform.\n * @publicApi\n */\nfunction isPlatformWorkerUi(platformId) {\n return platformId === PLATFORM_WORKER_UI_ID;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @publicApi\n */\nconst VERSION = new Version('14.1.3');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Defines a scroll position manager. Implemented by `BrowserViewportScroller`.\n *\n * @publicApi\n */\nclass ViewportScroller {\n}\n// De-sugared tree-shakable injection\n// See #23917\n/** @nocollapse */\nViewportScroller.ɵprov = ɵɵdefineInjectable({\n token: ViewportScroller,\n providedIn: 'root',\n factory: () => new BrowserViewportScroller(ɵɵinject(DOCUMENT), window)\n});\n/**\n * Manages the scroll position for a browser window.\n */\nclass BrowserViewportScroller {\n constructor(document, window) {\n this.document = document;\n this.window = window;\n this.offset = () => [0, 0];\n }\n /**\n * Configures the top offset used when scrolling to an anchor.\n * @param offset A position in screen coordinates (a tuple with x and y values)\n * or a function that returns the top offset position.\n *\n */\n setOffset(offset) {\n if (Array.isArray(offset)) {\n this.offset = () => offset;\n }\n else {\n this.offset = offset;\n }\n }\n /**\n * Retrieves the current scroll position.\n * @returns The position in screen coordinates.\n */\n getScrollPosition() {\n if (this.supportsScrolling()) {\n return [this.window.pageXOffset, this.window.pageYOffset];\n }\n else {\n return [0, 0];\n }\n }\n /**\n * Sets the scroll position.\n * @param position The new position in screen coordinates.\n */\n scrollToPosition(position) {\n if (this.supportsScrolling()) {\n this.window.scrollTo(position[0], position[1]);\n }\n }\n /**\n * Scrolls to an element and attempts to focus the element.\n *\n * Note that the function name here is misleading in that the target string may be an ID for a\n * non-anchor element.\n *\n * @param target The ID of an element or name of the anchor.\n *\n * @see https://html.spec.whatwg.org/#the-indicated-part-of-the-document\n * @see https://html.spec.whatwg.org/#scroll-to-fragid\n */\n scrollToAnchor(target) {\n if (!this.supportsScrolling()) {\n return;\n }\n const elSelected = findAnchorFromDocument(this.document, target);\n if (elSelected) {\n this.scrollToElement(elSelected);\n // After scrolling to the element, the spec dictates that we follow the focus steps for the\n // target. Rather than following the robust steps, simply attempt focus.\n //\n // @see https://html.spec.whatwg.org/#get-the-focusable-area\n // @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus\n // @see https://html.spec.whatwg.org/#focusable-area\n elSelected.focus();\n }\n }\n /**\n * Disables automatic scroll restoration provided by the browser.\n */\n setHistoryScrollRestoration(scrollRestoration) {\n if (this.supportScrollRestoration()) {\n const history = this.window.history;\n if (history && history.scrollRestoration) {\n history.scrollRestoration = scrollRestoration;\n }\n }\n }\n /**\n * Scrolls to an element using the native offset and the specified offset set on this scroller.\n *\n * The offset can be used when we know that there is a floating header and scrolling naively to an\n * element (ex: `scrollIntoView`) leaves the element hidden behind the floating header.\n */\n scrollToElement(el) {\n const rect = el.getBoundingClientRect();\n const left = rect.left + this.window.pageXOffset;\n const top = rect.top + this.window.pageYOffset;\n const offset = this.offset();\n this.window.scrollTo(left - offset[0], top - offset[1]);\n }\n /**\n * We only support scroll restoration when we can get a hold of window.\n * This means that we do not support this behavior when running in a web worker.\n *\n * Lifting this restriction right now would require more changes in the dom adapter.\n * Since webworkers aren't widely used, we will lift it once RouterScroller is\n * battle-tested.\n */\n supportScrollRestoration() {\n try {\n if (!this.supportsScrolling()) {\n return false;\n }\n // The `scrollRestoration` property could be on the `history` instance or its prototype.\n const scrollRestorationDescriptor = getScrollRestorationProperty(this.window.history) ||\n getScrollRestorationProperty(Object.getPrototypeOf(this.window.history));\n // We can write to the `scrollRestoration` property if it is a writable data field or it has a\n // setter function.\n return !!scrollRestorationDescriptor &&\n !!(scrollRestorationDescriptor.writable || scrollRestorationDescriptor.set);\n }\n catch {\n return false;\n }\n }\n supportsScrolling() {\n try {\n return !!this.window && !!this.window.scrollTo && 'pageXOffset' in this.window;\n }\n catch {\n return false;\n }\n }\n}\nfunction getScrollRestorationProperty(obj) {\n return Object.getOwnPropertyDescriptor(obj, 'scrollRestoration');\n}\nfunction findAnchorFromDocument(document, target) {\n const documentResult = document.getElementById(target) || document.getElementsByName(target)[0];\n if (documentResult) {\n return documentResult;\n }\n // `getElementById` and `getElementsByName` won't pierce through the shadow DOM so we\n // have to traverse the DOM manually and do the lookup through the shadow roots.\n if (typeof document.createTreeWalker === 'function' && document.body &&\n (document.body.createShadowRoot || document.body.attachShadow)) {\n const treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);\n let currentNode = treeWalker.currentNode;\n while (currentNode) {\n const shadowRoot = currentNode.shadowRoot;\n if (shadowRoot) {\n // Note that `ShadowRoot` doesn't support `getElementsByName`\n // so we have to fall back to `querySelector`.\n const result = shadowRoot.getElementById(target) || shadowRoot.querySelector(`[name=\"${target}\"]`);\n if (result) {\n return result;\n }\n }\n currentNode = treeWalker.nextNode();\n }\n }\n return null;\n}\n/**\n * Provides an empty implementation of the viewport scroller.\n */\nclass NullViewportScroller {\n /**\n * Empty implementation\n */\n setOffset(offset) { }\n /**\n * Empty implementation\n */\n getScrollPosition() {\n return [0, 0];\n }\n /**\n * Empty implementation\n */\n scrollToPosition(position) { }\n /**\n * Empty implementation\n */\n scrollToAnchor(anchor) { }\n /**\n * Empty implementation\n */\n setHistoryScrollRestoration(scrollRestoration) { }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A wrapper around the `XMLHttpRequest` constructor.\n *\n * @publicApi\n */\nclass XhrFactory {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { APP_BASE_HREF, AsyncPipe, CommonModule, CurrencyPipe, DATE_PIPE_DEFAULT_TIMEZONE, DOCUMENT, DatePipe, DecimalPipe, FormStyle, FormatWidth, HashLocationStrategy, I18nPluralPipe, I18nSelectPipe, JsonPipe, KeyValuePipe, LOCATION_INITIALIZED, Location, LocationStrategy, LowerCasePipe, NgClass, NgComponentOutlet, NgForOf, NgForOfContext, NgIf, NgIfContext, NgLocaleLocalization, NgLocalization, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NumberFormatStyle, NumberSymbol, PathLocationStrategy, PercentPipe, PlatformLocation, Plural, SlicePipe, TitleCasePipe, TranslationWidth, UpperCasePipe, VERSION, ViewportScroller, WeekDay, XhrFactory, formatCurrency, formatDate, formatNumber, formatPercent, getCurrencySymbol, getLocaleCurrencyCode, getLocaleCurrencyName, getLocaleCurrencySymbol, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleDayNames, getLocaleDayPeriods, getLocaleDirection, getLocaleEraNames, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocaleFirstDayOfWeek, getLocaleId, getLocaleMonthNames, getLocaleNumberFormat, getLocaleNumberSymbol, getLocalePluralCase, getLocaleTimeFormat, getLocaleWeekEndRange, getNumberOfCurrencyDigits, isPlatformBrowser, isPlatformServer, isPlatformWorkerApp, isPlatformWorkerUi, registerLocaleData, BrowserPlatformLocation as ɵBrowserPlatformLocation, DomAdapter as ɵDomAdapter, NullViewportScroller as ɵNullViewportScroller, PLATFORM_BROWSER_ID as ɵPLATFORM_BROWSER_ID, PLATFORM_SERVER_ID as ɵPLATFORM_SERVER_ID, PLATFORM_WORKER_APP_ID as ɵPLATFORM_WORKER_APP_ID, PLATFORM_WORKER_UI_ID as ɵPLATFORM_WORKER_UI_ID, getDOM as ɵgetDOM, parseCookieValue as ɵparseCookieValue, setRootDomAdapter as ɵsetRootDomAdapter };\n","/**\n * @license Angular v14.1.3\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i1 from '@angular/common';\nimport { DOCUMENT, ɵparseCookieValue, XhrFactory as XhrFactory$1 } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken, Inject, PLATFORM_ID, NgModule } from '@angular/core';\nimport { of, Observable } from 'rxjs';\nimport { concatMap, filter, map } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Transforms an `HttpRequest` into a stream of `HttpEvent`s, one of which will likely be a\n * `HttpResponse`.\n *\n * `HttpHandler` is injectable. When injected, the handler instance dispatches requests to the\n * first interceptor in the chain, which dispatches to the second, etc, eventually reaching the\n * `HttpBackend`.\n *\n * In an `HttpInterceptor`, the `HttpHandler` parameter is the next interceptor in the chain.\n *\n * @publicApi\n */\nclass HttpHandler {\n}\n/**\n * A final `HttpHandler` which will dispatch the request via browser HTTP APIs to a backend.\n *\n * Interceptors sit between the `HttpClient` interface and the `HttpBackend`.\n *\n * When injected, `HttpBackend` dispatches requests directly to the backend, without going\n * through the interceptor chain.\n *\n * @publicApi\n */\nclass HttpBackend {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Represents the header configuration options for an HTTP request.\n * Instances are immutable. Modifying methods return a cloned\n * instance with the change. The original object is never changed.\n *\n * @publicApi\n */\nclass HttpHeaders {\n /** Constructs a new HTTP header object with the given values.*/\n constructor(headers) {\n /**\n * Internal map of lowercased header names to the normalized\n * form of the name (the form seen first).\n */\n this.normalizedNames = new Map();\n /**\n * Queued updates to be materialized the next initialization.\n */\n this.lazyUpdate = null;\n if (!headers) {\n this.headers = new Map();\n }\n else if (typeof headers === 'string') {\n this.lazyInit = () => {\n this.headers = new Map();\n headers.split('\\n').forEach(line => {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n this.maybeSetNormalizedName(name, key);\n if (this.headers.has(key)) {\n this.headers.get(key).push(value);\n }\n else {\n this.headers.set(key, [value]);\n }\n }\n });\n };\n }\n else {\n this.lazyInit = () => {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertValidHeaders(headers);\n }\n this.headers = new Map();\n Object.keys(headers).forEach(name => {\n let values = headers[name];\n const key = name.toLowerCase();\n if (typeof values === 'string') {\n values = [values];\n }\n if (values.length > 0) {\n this.headers.set(key, values);\n this.maybeSetNormalizedName(name, key);\n }\n });\n };\n }\n }\n /**\n * Checks for existence of a given header.\n *\n * @param name The header name to check for existence.\n *\n * @returns True if the header exists, false otherwise.\n */\n has(name) {\n this.init();\n return this.headers.has(name.toLowerCase());\n }\n /**\n * Retrieves the first value of a given header.\n *\n * @param name The header name.\n *\n * @returns The value string if the header exists, null otherwise\n */\n get(name) {\n this.init();\n const values = this.headers.get(name.toLowerCase());\n return values && values.length > 0 ? values[0] : null;\n }\n /**\n * Retrieves the names of the headers.\n *\n * @returns A list of header names.\n */\n keys() {\n this.init();\n return Array.from(this.normalizedNames.values());\n }\n /**\n * Retrieves a list of values for a given header.\n *\n * @param name The header name from which to retrieve values.\n *\n * @returns A string of values if the header exists, null otherwise.\n */\n getAll(name) {\n this.init();\n return this.headers.get(name.toLowerCase()) || null;\n }\n /**\n * Appends a new value to the existing set of values for a header\n * and returns them in a clone of the original instance.\n *\n * @param name The header name for which to append the values.\n * @param value The value to append.\n *\n * @returns A clone of the HTTP headers object with the value appended to the given header.\n */\n append(name, value) {\n return this.clone({ name, value, op: 'a' });\n }\n /**\n * Sets or modifies a value for a given header in a clone of the original instance.\n * If the header already exists, its value is replaced with the given value\n * in the returned object.\n *\n * @param name The header name.\n * @param value The value or values to set or override for the given header.\n *\n * @returns A clone of the HTTP headers object with the newly set header value.\n */\n set(name, value) {\n return this.clone({ name, value, op: 's' });\n }\n /**\n * Deletes values for a given header in a clone of the original instance.\n *\n * @param name The header name.\n * @param value The value or values to delete for the given header.\n *\n * @returns A clone of the HTTP headers object with the given value deleted.\n */\n delete(name, value) {\n return this.clone({ name, value, op: 'd' });\n }\n maybeSetNormalizedName(name, lcName) {\n if (!this.normalizedNames.has(lcName)) {\n this.normalizedNames.set(lcName, name);\n }\n }\n init() {\n if (!!this.lazyInit) {\n if (this.lazyInit instanceof HttpHeaders) {\n this.copyFrom(this.lazyInit);\n }\n else {\n this.lazyInit();\n }\n this.lazyInit = null;\n if (!!this.lazyUpdate) {\n this.lazyUpdate.forEach(update => this.applyUpdate(update));\n this.lazyUpdate = null;\n }\n }\n }\n copyFrom(other) {\n other.init();\n Array.from(other.headers.keys()).forEach(key => {\n this.headers.set(key, other.headers.get(key));\n this.normalizedNames.set(key, other.normalizedNames.get(key));\n });\n }\n clone(update) {\n const clone = new HttpHeaders();\n clone.lazyInit =\n (!!this.lazyInit && this.lazyInit instanceof HttpHeaders) ? this.lazyInit : this;\n clone.lazyUpdate = (this.lazyUpdate || []).concat([update]);\n return clone;\n }\n applyUpdate(update) {\n const key = update.name.toLowerCase();\n switch (update.op) {\n case 'a':\n case 's':\n let value = update.value;\n if (typeof value === 'string') {\n value = [value];\n }\n if (value.length === 0) {\n return;\n }\n this.maybeSetNormalizedName(update.name, key);\n const base = (update.op === 'a' ? this.headers.get(key) : undefined) || [];\n base.push(...value);\n this.headers.set(key, base);\n break;\n case 'd':\n const toDelete = update.value;\n if (!toDelete) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n let existing = this.headers.get(key);\n if (!existing) {\n return;\n }\n existing = existing.filter(value => toDelete.indexOf(value) === -1);\n if (existing.length === 0) {\n this.headers.delete(key);\n this.normalizedNames.delete(key);\n }\n else {\n this.headers.set(key, existing);\n }\n }\n break;\n }\n }\n /**\n * @internal\n */\n forEach(fn) {\n this.init();\n Array.from(this.normalizedNames.keys())\n .forEach(key => fn(this.normalizedNames.get(key), this.headers.get(key)));\n }\n}\n/**\n * Verifies that the headers object has the right shape: the values\n * must be either strings or arrays. Throws an error if an invalid\n * header value is present.\n */\nfunction assertValidHeaders(headers) {\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value !== 'string' && !Array.isArray(value)) {\n throw new Error(`Unexpected value of the \\`${key}\\` header provided. ` +\n `Expecting either a string or an array, but got: \\`${value}\\`.`);\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Provides encoding and decoding of URL parameter and query-string values.\n *\n * Serializes and parses URL parameter keys and values to encode and decode them.\n * If you pass URL query parameters without encoding,\n * the query parameters can be misinterpreted at the receiving end.\n *\n *\n * @publicApi\n */\nclass HttpUrlEncodingCodec {\n /**\n * Encodes a key name for a URL parameter or query-string.\n * @param key The key name.\n * @returns The encoded key name.\n */\n encodeKey(key) {\n return standardEncoding(key);\n }\n /**\n * Encodes the value of a URL parameter or query-string.\n * @param value The value.\n * @returns The encoded value.\n */\n encodeValue(value) {\n return standardEncoding(value);\n }\n /**\n * Decodes an encoded URL parameter or query-string key.\n * @param key The encoded key name.\n * @returns The decoded key name.\n */\n decodeKey(key) {\n return decodeURIComponent(key);\n }\n /**\n * Decodes an encoded URL parameter or query-string value.\n * @param value The encoded value.\n * @returns The decoded value.\n */\n decodeValue(value) {\n return decodeURIComponent(value);\n }\n}\nfunction paramParser(rawParams, codec) {\n const map = new Map();\n if (rawParams.length > 0) {\n // The `window.location.search` can be used while creating an instance of the `HttpParams` class\n // (e.g. `new HttpParams({ fromString: window.location.search })`). The `window.location.search`\n // may start with the `?` char, so we strip it if it's present.\n const params = rawParams.replace(/^\\?/, '').split('&');\n params.forEach((param) => {\n const eqIdx = param.indexOf('=');\n const [key, val] = eqIdx == -1 ?\n [codec.decodeKey(param), ''] :\n [codec.decodeKey(param.slice(0, eqIdx)), codec.decodeValue(param.slice(eqIdx + 1))];\n const list = map.get(key) || [];\n list.push(val);\n map.set(key, list);\n });\n }\n return map;\n}\n/**\n * Encode input string with standard encodeURIComponent and then un-encode specific characters.\n */\nconst STANDARD_ENCODING_REGEX = /%(\\d[a-f0-9])/gi;\nconst STANDARD_ENCODING_REPLACEMENTS = {\n '40': '@',\n '3A': ':',\n '24': '$',\n '2C': ',',\n '3B': ';',\n '3D': '=',\n '3F': '?',\n '2F': '/',\n};\nfunction standardEncoding(v) {\n return encodeURIComponent(v).replace(STANDARD_ENCODING_REGEX, (s, t) => STANDARD_ENCODING_REPLACEMENTS[t] ?? s);\n}\nfunction valueToString(value) {\n return `${value}`;\n}\n/**\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immutable; all mutation operations return a new instance.\n *\n * @publicApi\n */\nclass HttpParams {\n constructor(options = {}) {\n this.updates = null;\n this.cloneFrom = null;\n this.encoder = options.encoder || new HttpUrlEncodingCodec();\n if (!!options.fromString) {\n if (!!options.fromObject) {\n throw new Error(`Cannot specify both fromString and fromObject.`);\n }\n this.map = paramParser(options.fromString, this.encoder);\n }\n else if (!!options.fromObject) {\n this.map = new Map();\n Object.keys(options.fromObject).forEach(key => {\n const value = options.fromObject[key];\n // convert the values to strings\n const values = Array.isArray(value) ? value.map(valueToString) : [valueToString(value)];\n this.map.set(key, values);\n });\n }\n else {\n this.map = null;\n }\n }\n /**\n * Reports whether the body includes one or more values for a given parameter.\n * @param param The parameter name.\n * @returns True if the parameter has one or more values,\n * false if it has no value or is not present.\n */\n has(param) {\n this.init();\n return this.map.has(param);\n }\n /**\n * Retrieves the first value for a parameter.\n * @param param The parameter name.\n * @returns The first value of the given parameter,\n * or `null` if the parameter is not present.\n */\n get(param) {\n this.init();\n const res = this.map.get(param);\n return !!res ? res[0] : null;\n }\n /**\n * Retrieves all values for a parameter.\n * @param param The parameter name.\n * @returns All values in a string array,\n * or `null` if the parameter not present.\n */\n getAll(param) {\n this.init();\n return this.map.get(param) || null;\n }\n /**\n * Retrieves all the parameters for this body.\n * @returns The parameter names in a string array.\n */\n keys() {\n this.init();\n return Array.from(this.map.keys());\n }\n /**\n * Appends a new value to existing values for a parameter.\n * @param param The parameter name.\n * @param value The new value to add.\n * @return A new body with the appended value.\n */\n append(param, value) {\n return this.clone({ param, value, op: 'a' });\n }\n /**\n * Constructs a new body with appended values for the given parameter name.\n * @param params parameters and values\n * @return A new body with the new value.\n */\n appendAll(params) {\n const updates = [];\n Object.keys(params).forEach(param => {\n const value = params[param];\n if (Array.isArray(value)) {\n value.forEach(_value => {\n updates.push({ param, value: _value, op: 'a' });\n });\n }\n else {\n updates.push({ param, value: value, op: 'a' });\n }\n });\n return this.clone(updates);\n }\n /**\n * Replaces the value for a parameter.\n * @param param The parameter name.\n * @param value The new value.\n * @return A new body with the new value.\n */\n set(param, value) {\n return this.clone({ param, value, op: 's' });\n }\n /**\n * Removes a given value or all values from a parameter.\n * @param param The parameter name.\n * @param value The value to remove, if provided.\n * @return A new body with the given value removed, or with all values\n * removed if no value is specified.\n */\n delete(param, value) {\n return this.clone({ param, value, op: 'd' });\n }\n /**\n * Serializes the body to an encoded string, where key-value pairs (separated by `=`) are\n * separated by `&`s.\n */\n toString() {\n this.init();\n return this.keys()\n .map(key => {\n const eKey = this.encoder.encodeKey(key);\n // `a: ['1']` produces `'a=1'`\n // `b: []` produces `''`\n // `c: ['1', '2']` produces `'c=1&c=2'`\n return this.map.get(key).map(value => eKey + '=' + this.encoder.encodeValue(value))\n .join('&');\n })\n // filter out empty values because `b: []` produces `''`\n // which results in `a=1&&c=1&c=2` instead of `a=1&c=1&c=2` if we don't\n .filter(param => param !== '')\n .join('&');\n }\n clone(update) {\n const clone = new HttpParams({ encoder: this.encoder });\n clone.cloneFrom = this.cloneFrom || this;\n clone.updates = (this.updates || []).concat(update);\n return clone;\n }\n init() {\n if (this.map === null) {\n this.map = new Map();\n }\n if (this.cloneFrom !== null) {\n this.cloneFrom.init();\n this.cloneFrom.keys().forEach(key => this.map.set(key, this.cloneFrom.map.get(key)));\n this.updates.forEach(update => {\n switch (update.op) {\n case 'a':\n case 's':\n const base = (update.op === 'a' ? this.map.get(update.param) : undefined) || [];\n base.push(valueToString(update.value));\n this.map.set(update.param, base);\n break;\n case 'd':\n if (update.value !== undefined) {\n let base = this.map.get(update.param) || [];\n const idx = base.indexOf(valueToString(update.value));\n if (idx !== -1) {\n base.splice(idx, 1);\n }\n if (base.length > 0) {\n this.map.set(update.param, base);\n }\n else {\n this.map.delete(update.param);\n }\n }\n else {\n this.map.delete(update.param);\n break;\n }\n }\n });\n this.cloneFrom = this.updates = null;\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A token used to manipulate and access values stored in `HttpContext`.\n *\n * @publicApi\n */\nclass HttpContextToken {\n constructor(defaultValue) {\n this.defaultValue = defaultValue;\n }\n}\n/**\n * Http context stores arbitrary user defined values and ensures type safety without\n * actually knowing the types. It is backed by a `Map` and guarantees that keys do not clash.\n *\n * This context is mutable and is shared between cloned requests unless explicitly specified.\n *\n * @usageNotes\n *\n * ### Usage Example\n *\n * ```typescript\n * // inside cache.interceptors.ts\n * export const IS_CACHE_ENABLED = new HttpContextToken(() => false);\n *\n * export class CacheInterceptor implements HttpInterceptor {\n *\n * intercept(req: HttpRequest, delegate: HttpHandler): Observable> {\n * if (req.context.get(IS_CACHE_ENABLED) === true) {\n * return ...;\n * }\n * return delegate.handle(req);\n * }\n * }\n *\n * // inside a service\n *\n * this.httpClient.get('/api/weather', {\n * context: new HttpContext().set(IS_CACHE_ENABLED, true)\n * }).subscribe(...);\n * ```\n *\n * @publicApi\n */\nclass HttpContext {\n constructor() {\n this.map = new Map();\n }\n /**\n * Store a value in the context. If a value is already present it will be overwritten.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n * @param value The value to store.\n *\n * @returns A reference to itself for easy chaining.\n */\n set(token, value) {\n this.map.set(token, value);\n return this;\n }\n /**\n * Retrieve the value associated with the given token.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n *\n * @returns The stored value or default if one is defined.\n */\n get(token) {\n if (!this.map.has(token)) {\n this.map.set(token, token.defaultValue());\n }\n return this.map.get(token);\n }\n /**\n * Delete the value associated with the given token.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n *\n * @returns A reference to itself for easy chaining.\n */\n delete(token) {\n this.map.delete(token);\n return this;\n }\n /**\n * Checks for existence of a given token.\n *\n * @param token The reference to an instance of `HttpContextToken`.\n *\n * @returns True if the token exists, false otherwise.\n */\n has(token) {\n return this.map.has(token);\n }\n /**\n * @returns a list of tokens currently stored in the context.\n */\n keys() {\n return this.map.keys();\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Determine whether the given HTTP method may include a body.\n */\nfunction mightHaveBody(method) {\n switch (method) {\n case 'DELETE':\n case 'GET':\n case 'HEAD':\n case 'OPTIONS':\n case 'JSONP':\n return false;\n default:\n return true;\n }\n}\n/**\n * Safely assert whether the given value is an ArrayBuffer.\n *\n * In some execution environments ArrayBuffer is not defined.\n */\nfunction isArrayBuffer(value) {\n return typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer;\n}\n/**\n * Safely assert whether the given value is a Blob.\n *\n * In some execution environments Blob is not defined.\n */\nfunction isBlob(value) {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n/**\n * Safely assert whether the given value is a FormData instance.\n *\n * In some execution environments FormData is not defined.\n */\nfunction isFormData(value) {\n return typeof FormData !== 'undefined' && value instanceof FormData;\n}\n/**\n * Safely assert whether the given value is a URLSearchParams instance.\n *\n * In some execution environments URLSearchParams is not defined.\n */\nfunction isUrlSearchParams(value) {\n return typeof URLSearchParams !== 'undefined' && value instanceof URLSearchParams;\n}\n/**\n * An outgoing HTTP request with an optional typed body.\n *\n * `HttpRequest` represents an outgoing request, including URL, method,\n * headers, body, and other request configuration options. Instances should be\n * assumed to be immutable. To modify a `HttpRequest`, the `clone`\n * method should be used.\n *\n * @publicApi\n */\nclass HttpRequest {\n constructor(method, url, third, fourth) {\n this.url = url;\n /**\n * The request body, or `null` if one isn't set.\n *\n * Bodies are not enforced to be immutable, as they can include a reference to any\n * user-defined data type. However, interceptors should take care to preserve\n * idempotence by treating them as such.\n */\n this.body = null;\n /**\n * Whether this request should be made in a way that exposes progress events.\n *\n * Progress events are expensive (change detection runs on each event) and so\n * they should only be requested if the consumer intends to monitor them.\n */\n this.reportProgress = false;\n /**\n * Whether this request should be sent with outgoing credentials (cookies).\n */\n this.withCredentials = false;\n /**\n * The expected response type of the server.\n *\n * This is used to parse the response appropriately before returning it to\n * the requestee.\n */\n this.responseType = 'json';\n this.method = method.toUpperCase();\n // Next, need to figure out which argument holds the HttpRequestInit\n // options, if any.\n let options;\n // Check whether a body argument is expected. The only valid way to omit\n // the body argument is to use a known no-body method like GET.\n if (mightHaveBody(this.method) || !!fourth) {\n // Body is the third argument, options are the fourth.\n this.body = (third !== undefined) ? third : null;\n options = fourth;\n }\n else {\n // No body required, options are the third argument. The body stays null.\n options = third;\n }\n // If options have been passed, interpret them.\n if (options) {\n // Normalize reportProgress and withCredentials.\n this.reportProgress = !!options.reportProgress;\n this.withCredentials = !!options.withCredentials;\n // Override default response type of 'json' if one is provided.\n if (!!options.responseType) {\n this.responseType = options.responseType;\n }\n // Override headers if they're provided.\n if (!!options.headers) {\n this.headers = options.headers;\n }\n if (!!options.context) {\n this.context = options.context;\n }\n if (!!options.params) {\n this.params = options.params;\n }\n }\n // If no headers have been passed in, construct a new HttpHeaders instance.\n if (!this.headers) {\n this.headers = new HttpHeaders();\n }\n // If no context have been passed in, construct a new HttpContext instance.\n if (!this.context) {\n this.context = new HttpContext();\n }\n // If no parameters have been passed in, construct a new HttpUrlEncodedParams instance.\n if (!this.params) {\n this.params = new HttpParams();\n this.urlWithParams = url;\n }\n else {\n // Encode the parameters to a string in preparation for inclusion in the URL.\n const params = this.params.toString();\n if (params.length === 0) {\n // No parameters, the visible URL is just the URL given at creation time.\n this.urlWithParams = url;\n }\n else {\n // Does the URL already have query parameters? Look for '?'.\n const qIdx = url.indexOf('?');\n // There are 3 cases to handle:\n // 1) No existing parameters -> append '?' followed by params.\n // 2) '?' exists and is followed by existing query string ->\n // append '&' followed by params.\n // 3) '?' exists at the end of the url -> append params directly.\n // This basically amounts to determining the character, if any, with\n // which to join the URL and parameters.\n const sep = qIdx === -1 ? '?' : (qIdx < url.length - 1 ? '&' : '');\n this.urlWithParams = url + sep + params;\n }\n }\n }\n /**\n * Transform the free-form body into a serialized format suitable for\n * transmission to the server.\n */\n serializeBody() {\n // If no body is present, no need to serialize it.\n if (this.body === null) {\n return null;\n }\n // Check whether the body is already in a serialized form. If so,\n // it can just be returned directly.\n if (isArrayBuffer(this.body) || isBlob(this.body) || isFormData(this.body) ||\n isUrlSearchParams(this.body) || typeof this.body === 'string') {\n return this.body;\n }\n // Check whether the body is an instance of HttpUrlEncodedParams.\n if (this.body instanceof HttpParams) {\n return this.body.toString();\n }\n // Check whether the body is an object or array, and serialize with JSON if so.\n if (typeof this.body === 'object' || typeof this.body === 'boolean' ||\n Array.isArray(this.body)) {\n return JSON.stringify(this.body);\n }\n // Fall back on toString() for everything else.\n return this.body.toString();\n }\n /**\n * Examine the body and attempt to infer an appropriate MIME type\n * for it.\n *\n * If no such type can be inferred, this method will return `null`.\n */\n detectContentTypeHeader() {\n // An empty body has no content type.\n if (this.body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (isFormData(this.body)) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (isBlob(this.body)) {\n return this.body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (isArrayBuffer(this.body)) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof this.body === 'string') {\n return 'text/plain';\n }\n // `HttpUrlEncodedParams` has its own content-type.\n if (this.body instanceof HttpParams) {\n return 'application/x-www-form-urlencoded;charset=UTF-8';\n }\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof this.body === 'object' || typeof this.body === 'number' ||\n typeof this.body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n }\n clone(update = {}) {\n // For method, url, and responseType, take the current value unless\n // it is overridden in the update hash.\n const method = update.method || this.method;\n const url = update.url || this.url;\n const responseType = update.responseType || this.responseType;\n // The body is somewhat special - a `null` value in update.body means\n // whatever current body is present is being overridden with an empty\n // body, whereas an `undefined` value in update.body implies no\n // override.\n const body = (update.body !== undefined) ? update.body : this.body;\n // Carefully handle the boolean options to differentiate between\n // `false` and `undefined` in the update args.\n const withCredentials = (update.withCredentials !== undefined) ? update.withCredentials : this.withCredentials;\n const reportProgress = (update.reportProgress !== undefined) ? update.reportProgress : this.reportProgress;\n // Headers and params may be appended to if `setHeaders` or\n // `setParams` are used.\n let headers = update.headers || this.headers;\n let params = update.params || this.params;\n // Pass on context if needed\n const context = update.context ?? this.context;\n // Check whether the caller has asked to add headers.\n if (update.setHeaders !== undefined) {\n // Set every requested header.\n headers =\n Object.keys(update.setHeaders)\n .reduce((headers, name) => headers.set(name, update.setHeaders[name]), headers);\n }\n // Check whether the caller has asked to set params.\n if (update.setParams) {\n // Set every requested param.\n params = Object.keys(update.setParams)\n .reduce((params, param) => params.set(param, update.setParams[param]), params);\n }\n // Finally, construct the new HttpRequest using the pieces from above.\n return new HttpRequest(method, url, body, {\n params,\n headers,\n context,\n reportProgress,\n responseType,\n withCredentials,\n });\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Type enumeration for the different kinds of `HttpEvent`.\n *\n * @publicApi\n */\nvar HttpEventType;\n(function (HttpEventType) {\n /**\n * The request was sent out over the wire.\n */\n HttpEventType[HttpEventType[\"Sent\"] = 0] = \"Sent\";\n /**\n * An upload progress event was received.\n */\n HttpEventType[HttpEventType[\"UploadProgress\"] = 1] = \"UploadProgress\";\n /**\n * The response status code and headers were received.\n */\n HttpEventType[HttpEventType[\"ResponseHeader\"] = 2] = \"ResponseHeader\";\n /**\n * A download progress event was received.\n */\n HttpEventType[HttpEventType[\"DownloadProgress\"] = 3] = \"DownloadProgress\";\n /**\n * The full response including the body was received.\n */\n HttpEventType[HttpEventType[\"Response\"] = 4] = \"Response\";\n /**\n * A custom event from an interceptor or a backend.\n */\n HttpEventType[HttpEventType[\"User\"] = 5] = \"User\";\n})(HttpEventType || (HttpEventType = {}));\n/**\n * Base class for both `HttpResponse` and `HttpHeaderResponse`.\n *\n * @publicApi\n */\nclass HttpResponseBase {\n /**\n * Super-constructor for all responses.\n *\n * The single parameter accepted is an initialization hash. Any properties\n * of the response passed there will override the default values.\n */\n constructor(init, defaultStatus = 200 /* HttpStatusCode.Ok */, defaultStatusText = 'OK') {\n // If the hash has values passed, use them to initialize the response.\n // Otherwise use the default values.\n this.headers = init.headers || new HttpHeaders();\n this.status = init.status !== undefined ? init.status : defaultStatus;\n this.statusText = init.statusText || defaultStatusText;\n this.url = init.url || null;\n // Cache the ok value to avoid defining a getter.\n this.ok = this.status >= 200 && this.status < 300;\n }\n}\n/**\n * A partial HTTP response which only includes the status and header data,\n * but no response body.\n *\n * `HttpHeaderResponse` is a `HttpEvent` available on the response\n * event stream, only when progress events are requested.\n *\n * @publicApi\n */\nclass HttpHeaderResponse extends HttpResponseBase {\n /**\n * Create a new `HttpHeaderResponse` with the given parameters.\n */\n constructor(init = {}) {\n super(init);\n this.type = HttpEventType.ResponseHeader;\n }\n /**\n * Copy this `HttpHeaderResponse`, overriding its contents with the\n * given parameter hash.\n */\n clone(update = {}) {\n // Perform a straightforward initialization of the new HttpHeaderResponse,\n // overriding the current parameters with new ones if given.\n return new HttpHeaderResponse({\n headers: update.headers || this.headers,\n status: update.status !== undefined ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n }\n}\n/**\n * A full HTTP response, including a typed response body (which may be `null`\n * if one was not returned).\n *\n * `HttpResponse` is a `HttpEvent` available on the response event\n * stream.\n *\n * @publicApi\n */\nclass HttpResponse extends HttpResponseBase {\n /**\n * Construct a new `HttpResponse`.\n */\n constructor(init = {}) {\n super(init);\n this.type = HttpEventType.Response;\n this.body = init.body !== undefined ? init.body : null;\n }\n clone(update = {}) {\n return new HttpResponse({\n body: (update.body !== undefined) ? update.body : this.body,\n headers: update.headers || this.headers,\n status: (update.status !== undefined) ? update.status : this.status,\n statusText: update.statusText || this.statusText,\n url: update.url || this.url || undefined,\n });\n }\n}\n/**\n * A response that represents an error or failure, either from a\n * non-successful HTTP status, an error while executing the request,\n * or some other failure which occurred during the parsing of the response.\n *\n * Any error returned on the `Observable` response stream will be\n * wrapped in an `HttpErrorResponse` to provide additional context about\n * the state of the HTTP layer when the error occurred. The error property\n * will contain either a wrapped Error object or the error response returned\n * from the server.\n *\n * @publicApi\n */\nclass HttpErrorResponse extends HttpResponseBase {\n constructor(init) {\n // Initialize with a default status of 0 / Unknown Error.\n super(init, 0, 'Unknown Error');\n this.name = 'HttpErrorResponse';\n /**\n * Errors are never okay, even when the status code is in the 2xx success range.\n */\n this.ok = false;\n // If the response was successful, then this was a parse error. Otherwise, it was\n // a protocol-level failure of some sort. Either the request failed in transit\n // or the server returned an unsuccessful status code.\n if (this.status >= 200 && this.status < 300) {\n this.message = `Http failure during parsing for ${init.url || '(unknown url)'}`;\n }\n else {\n this.message = `Http failure response for ${init.url || '(unknown url)'}: ${init.status} ${init.statusText}`;\n }\n this.error = init.error || null;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Constructs an instance of `HttpRequestOptions` from a source `HttpMethodOptions` and\n * the given `body`. This function clones the object and adds the body.\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n *\n */\nfunction addBody(options, body) {\n return {\n body,\n headers: options.headers,\n context: options.context,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n };\n}\n/**\n * Performs HTTP requests.\n * This service is available as an injectable class, with methods to perform HTTP requests.\n * Each request method has multiple signatures, and the return type varies based on\n * the signature that is called (mainly the values of `observe` and `responseType`).\n *\n * Note that the `responseType` *options* value is a String that identifies the\n * single data type of the response.\n * A single overload version of the method handles each response type.\n * The value of `responseType` cannot be a union, as the combined signature could imply.\n\n *\n * @usageNotes\n * Sample HTTP requests for the [Tour of Heroes](/tutorial/toh-pt0) application.\n *\n * ### HTTP Request Example\n *\n * ```\n * // GET heroes whose name contains search term\n * searchHeroes(term: string): observable{\n *\n * const params = new HttpParams({fromString: 'name=term'});\n * return this.httpClient.request('GET', this.heroesUrl, {responseType:'json', params});\n * }\n * ```\n *\n * Alternatively, the parameter string can be used without invoking HttpParams\n * by directly joining to the URL.\n * ```\n * this.httpClient.request('GET', this.heroesUrl + '?' + 'name=term', {responseType:'json'});\n * ```\n *\n *\n * ### JSONP Example\n * ```\n * requestJsonp(url, callback = 'callback') {\n * return this.httpClient.jsonp(this.heroesURL, callback);\n * }\n * ```\n *\n * ### PATCH Example\n * ```\n * // PATCH one of the heroes' name\n * patchHero (id: number, heroName: string): Observable<{}> {\n * const url = `${this.heroesUrl}/${id}`; // PATCH api/heroes/42\n * return this.httpClient.patch(url, {name: heroName}, httpOptions)\n * .pipe(catchError(this.handleError('patchHero')));\n * }\n * ```\n *\n * @see [HTTP Guide](guide/http)\n * @see [HTTP Request](api/common/http/HttpRequest)\n *\n * @publicApi\n */\nclass HttpClient {\n constructor(handler) {\n this.handler = handler;\n }\n /**\n * Constructs an observable for a generic HTTP request that, when subscribed,\n * fires the request through the chain of registered interceptors and on to the\n * server.\n *\n * You can pass an `HttpRequest` directly as the only parameter. In this case,\n * the call returns an observable of the raw `HttpEvent` stream.\n *\n * Alternatively you can pass an HTTP method as the first parameter,\n * a URL string as the second, and an options hash containing the request body as the third.\n * See `addBody()`. In this case, the specified `responseType` and `observe` options determine the\n * type of returned observable.\n * * The `responseType` value determines how a successful response body is parsed.\n * * If `responseType` is the default `json`, you can pass a type interface for the resulting\n * object as a type parameter to the call.\n *\n * The `observe` value determines the return type, according to what you are interested in\n * observing.\n * * An `observe` value of events returns an observable of the raw `HttpEvent` stream, including\n * progress events by default.\n * * An `observe` value of response returns an observable of `HttpResponse`,\n * where the `T` parameter depends on the `responseType` and any optionally provided type\n * parameter.\n * * An `observe` value of body returns an observable of `` with the same `T` body type.\n *\n */\n request(first, url, options = {}) {\n let req;\n // First, check whether the primary argument is an instance of `HttpRequest`.\n if (first instanceof HttpRequest) {\n // It is. The other arguments must be undefined (per the signatures) and can be\n // ignored.\n req = first;\n }\n else {\n // It's a string, so it represents a URL. Construct a request based on it,\n // and incorporate the remaining arguments (assuming `GET` unless a method is\n // provided.\n // Figure out the headers.\n let headers = undefined;\n if (options.headers instanceof HttpHeaders) {\n headers = options.headers;\n }\n else {\n headers = new HttpHeaders(options.headers);\n }\n // Sort out parameters.\n let params = undefined;\n if (!!options.params) {\n if (options.params instanceof HttpParams) {\n params = options.params;\n }\n else {\n params = new HttpParams({ fromObject: options.params });\n }\n }\n // Construct the request.\n req = new HttpRequest(first, url, (options.body !== undefined ? options.body : null), {\n headers,\n context: options.context,\n params,\n reportProgress: options.reportProgress,\n // By default, JSON is assumed to be returned for all calls.\n responseType: options.responseType || 'json',\n withCredentials: options.withCredentials,\n });\n }\n // Start with an Observable.of() the initial request, and run the handler (which\n // includes all interceptors) inside a concatMap(). This way, the handler runs\n // inside an Observable chain, which causes interceptors to be re-run on every\n // subscription (this also makes retries re-run the handler, including interceptors).\n const events$ = of(req).pipe(concatMap((req) => this.handler.handle(req)));\n // If coming via the API signature which accepts a previously constructed HttpRequest,\n // the only option is to get the event stream. Otherwise, return the event stream if\n // that is what was requested.\n if (first instanceof HttpRequest || options.observe === 'events') {\n return events$;\n }\n // The requested stream contains either the full response or the body. In either\n // case, the first step is to filter the event stream to extract a stream of\n // responses(s).\n const res$ = events$.pipe(filter((event) => event instanceof HttpResponse));\n // Decide which stream to return.\n switch (options.observe || 'body') {\n case 'body':\n // The requested stream is the body. Map the response stream to the response\n // body. This could be done more simply, but a misbehaving interceptor might\n // transform the response body into a different format and ignore the requested\n // responseType. Guard against this by validating that the response is of the\n // requested type.\n switch (req.responseType) {\n case 'arraybuffer':\n return res$.pipe(map((res) => {\n // Validate that the body is an ArrayBuffer.\n if (res.body !== null && !(res.body instanceof ArrayBuffer)) {\n throw new Error('Response is not an ArrayBuffer.');\n }\n return res.body;\n }));\n case 'blob':\n return res$.pipe(map((res) => {\n // Validate that the body is a Blob.\n if (res.body !== null && !(res.body instanceof Blob)) {\n throw new Error('Response is not a Blob.');\n }\n return res.body;\n }));\n case 'text':\n return res$.pipe(map((res) => {\n // Validate that the body is a string.\n if (res.body !== null && typeof res.body !== 'string') {\n throw new Error('Response is not a string.');\n }\n return res.body;\n }));\n case 'json':\n default:\n // No validation needed for JSON responses, as they can be of any type.\n return res$.pipe(map((res) => res.body));\n }\n case 'response':\n // The response stream was requested directly, so return it.\n return res$;\n default:\n // Guard against new future observe types being added.\n throw new Error(`Unreachable: unhandled observe type ${options.observe}}`);\n }\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `DELETE` request to execute on the server. See the individual overloads for\n * details on the return type.\n *\n * @param url The endpoint URL.\n * @param options The HTTP options to send with the request.\n *\n */\n delete(url, options = {}) {\n return this.request('DELETE', url, options);\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `GET` request to execute on the server. See the individual overloads for\n * details on the return type.\n */\n get(url, options = {}) {\n return this.request('GET', url, options);\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `HEAD` request to execute on the server. The `HEAD` method returns\n * meta information about the resource without transferring the\n * resource itself. See the individual overloads for\n * details on the return type.\n */\n head(url, options = {}) {\n return this.request('HEAD', url, options);\n }\n /**\n * Constructs an `Observable` that, when subscribed, causes a request with the special method\n * `JSONP` to be dispatched via the interceptor pipeline.\n * The [JSONP pattern](https://en.wikipedia.org/wiki/JSONP) works around limitations of certain\n * API endpoints that don't support newer,\n * and preferable [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) protocol.\n * JSONP treats the endpoint API as a JavaScript file and tricks the browser to process the\n * requests even if the API endpoint is not located on the same domain (origin) as the client-side\n * application making the request.\n * The endpoint API must support JSONP callback for JSONP requests to work.\n * The resource API returns the JSON response wrapped in a callback function.\n * You can pass the callback function name as one of the query parameters.\n * Note that JSONP requests can only be used with `GET` requests.\n *\n * @param url The resource URL.\n * @param callbackParam The callback function name.\n *\n */\n jsonp(url, callbackParam) {\n return this.request('JSONP', url, {\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json',\n });\n }\n /**\n * Constructs an `Observable` that, when subscribed, causes the configured\n * `OPTIONS` request to execute on the server. This method allows the client\n * to determine the supported HTTP methods and other capabilities of an endpoint,\n * without implying a resource action. See the individual overloads for\n * details on the return type.\n */\n options(url, options = {}) {\n return this.request('OPTIONS', url, options);\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `PATCH` request to execute on the server. See the individual overloads for\n * details on the return type.\n */\n patch(url, body, options = {}) {\n return this.request('PATCH', url, addBody(options, body));\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `POST` request to execute on the server. The server responds with the location of\n * the replaced resource. See the individual overloads for\n * details on the return type.\n */\n post(url, body, options = {}) {\n return this.request('POST', url, addBody(options, body));\n }\n /**\n * Constructs an observable that, when subscribed, causes the configured\n * `PUT` request to execute on the server. The `PUT` method replaces an existing resource\n * with a new set of values.\n * See the individual overloads for details on the return type.\n */\n put(url, body, options = {}) {\n return this.request('PUT', url, addBody(options, body));\n }\n}\nHttpClient.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: HttpClient, deps: [{ token: HttpHandler }], target: i0.ɵɵFactoryTarget.Injectable });\nHttpClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: HttpClient });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: HttpClient, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: HttpHandler }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`.\n *\n *\n */\nclass HttpInterceptorHandler {\n constructor(next, interceptor) {\n this.next = next;\n this.interceptor = interceptor;\n }\n handle(req) {\n return this.interceptor.intercept(req, this.next);\n }\n}\n/**\n * A multi-provider token that represents the array of registered\n * `HttpInterceptor` objects.\n *\n * @publicApi\n */\nconst HTTP_INTERCEPTORS = new InjectionToken('HTTP_INTERCEPTORS');\nclass NoopInterceptor {\n intercept(req, next) {\n return next.handle(req);\n }\n}\nNoopInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NoopInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nNoopInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NoopInterceptor });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.1.3\", ngImport: i0, type: NoopInterceptor, decorators: [{\n type: Injectable\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Every request made through JSONP needs a callback name that's unique across the\n// whole page. Each request is assigned an id and the callback name is constructed\n// from that. The next id to be assigned is tracked in a global variable here that\n// is shared among all applications on the page.\nlet nextRequestId = 0;\n/**\n * When a pending